1. 程式人生 > >百度OCR文字識別的小例子

百度OCR文字識別的小例子

首先說下,執行結果很令人不滿意。。。

下面是官網的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編碼過的位元組陣列字串  
	} 
	

}