百度ocr文字识别编码时遇到的错误

来源:互联网 发布:通江集团 知乎 编辑:程序博客网 时间:2024/06/05 10:13

最近在做项目是遇到百度ocr文字识别编码时的错误,搜索好久,不见有效解决方案,故在解决后记了下来。。。。

首先一定是去看文档了http://apistore.baidu.com/apiworks/servicedetail/969.html。

可是当你去设置imageType这个参数时,你发现文档是这么写的  图片资源类型, 1.表示经过BASE64编码后的字串,然后需要经过urlencode处理(特别重要);2.图片原文件 3. 图片URl类型,此时image中填写图片所在位置。而我需要用type为1时,那么image这个参数需要传什么。经过反复多次试验,根部不需要urlencode处理,只需要对bitmap做base64编码就可以了。而且只支持jpg格式的图片。这是一个很大的坑。。。

最后附上部分代码:


//对bitmap做base64处理

public static String convertIconToString(Bitmap bitmap){
       ByteArrayOutputStream baos = new ByteArrayOutputStream();  
       bitmap.compress(CompressFormat.PNG, 100, baos);  
       byte[] appicon = baos.toByteArray();// 转为byte数组  
       return Base64.encodeToString(appicon, Base64.NO_WRAP);//注意这Base64.NO_WRAP参数很重要,一定是它。去除空格
}  

 

//请求百度ocr接口
@SuppressWarnings("unchecked")
private void request() {

Bitmap bm = ((BitmapDrawable)mImageView.getDrawable()).getBitmap();
String image = convertIconToString(bm);

Parameters para = new Parameters();
para.put("fromdevice", "pc");
para.put("clientip", "10.10.10.0");
para.put("detecttype", "LocateRecognize");
para.put("languagetype", "CHN_ENG");
para.put("imagetype", "1");
para.put("image", image);
para.put("version", "v1");
para.put("sizetype", "small");

ApiStoreSDK.execute(httpUrl,ApiStoreSDK.POST,para, 
new ApiCallBack(){
@Override
public void onSuccess(int status, String responseString) {
tv.setText(responseString);
Log.d("sdkdemo", responseString);
Intent intent = new Intent(getApplicationContext(),ResearchActivity.class);
intent.putExtra("result", responseString);
startActivity(intent);
}

@Override
public void onComplete() {

}

@Override
public void onError(int arg0, String arg1, Exception e) {
Log.i("sdkdemo", "errMsg: " + (e == null ? "" : e.getMessage()));
//@pokerWU 
// TODO: 17-1-8  for test <code></code>
Intent intent = new Intent(getApplicationContext(),ResearchActivity.class);
intent.putExtra("result", "");
startActivity(intent);
}
});
}

0 0
原创粉丝点击