最近在做项目是遇到百度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);
}
});
}