百度OCR文字識別的小例子
阿新 • • 發佈:2019-02-07
首先說下,執行結果很令人不滿意。。。
下面是官網的API說明
介面地址 :http://apis.baidu.com/apistore/idlocr/ocr
請求方法 :POST
請求引數(header) :
引數名 |
型別 |
必填 |
引數位置 |
描述 |
預設值 |
apikey |
string |
是 |
header |
API金鑰 |
您自己的apikey |
請求引數(bodyParam) :
引數名 |
型別 |
必填 |
引數位置 |
描述 |
預設值 |
fromdevice |
string |
是 |
bodyParam |
來源,例如:android、iPhone、pc等 |
pc |
clientip |
string |
是 |
bodyParam |
客戶端出口IP |
10.10.10.0 |
detecttype |
string |
是 |
bodyParam |
OCR介面型別,“LocateRecognize”;“Recognize”;“Locate”;“SingleCharRecognize”。LocateRecognize:整圖文字檢測、識別,以行為單位;Locate:整圖文字行定位;Recognize:整圖文字識別;SingleCharRecognize:單字影象識別 |
LocateRecognize |
languagetype |
string |
否 |
bodyParam |
要檢測的文字型別:目前支援 1. CHN_ENG(中英) 2. ENG 3.JAP(日文) 4.KOR(韓文) ,不填寫這個欄位預設為CHN_ENG |
CHN_ENG |
imagetype |
string |
是 |
bodyParam |
圖片資源型別, 1.表示經過BASE64編碼後的字串,然後需要經過urlencode處理(特別重要);2.圖片原檔案 |
1 |
image |
string |
否 |
bodyParam |
圖片資源,目前僅支援jpg格式,原始 |
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import sun.misc.BASE64Encoder; public class Request { public static void main(String[] args){ String httpUrl = "http://apis.baidu.com/apistore/idlocr/ocr"; String imagePath="圖片的路徑"; String str=encodeImgageToBase64(imagePath); str = str.replace("\r\n", "");
<span style="white-space:pre"> </span>str= URLEncoder.encode(str, "utf-8");//很重要的,剛開始就是因為沒有加,所以怎麼看結果怎麼不合理
String httpArg = "fromdevice=pc&clientip=172.0.0.1&detecttype=LocateRecognize&"+
"languagetype=CHN_ENG&imagetype=1"+
"&image="+str;
String jsonResult = request(httpUrl, httpArg);
System.out.println(jsonResult);
}
/**
* @param urlAll
* :請求介面
* @param httpArg
* :引數
* @return 返回結果
*/
public static String request(String httpUrl, String httpArg) {
BufferedReader reader = null;
String result = null;
StringBuffer sbf = new StringBuffer();
try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
// 填入apikey到HTTP header
connection.setRequestProperty("apikey", "你的apikey");
connection.setDoOutput(true);
connection.getOutputStream().write(httpArg.getBytes("UTF-8"));
connection.connect();
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
reader.close();
result = sbf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 將本地圖片進行Base64位編碼
*
* @param imgUrl
* 圖片的url路徑,如d:\\中文.jpg
* @return
*/
public static String encodeImgageToBase64(String imagePath) {// 將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理
// 其進行Base64編碼處理
byte[] data = null;
// 讀取圖片位元組陣列
try {
File imageFile = new File(imagePath);
InputStream in = new FileInputStream(imageFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 對位元組陣列Base64編碼
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64編碼過的位元組陣列字串
}
}