一、问题
从图片中提取文字
二、方法
借助百度的OCR接口实现,百度OCR接口文档
原理就是提供图片所在文件给百度的OCR接口,OCR接口返回数据
三、代码
1、具体增加依赖和包,请看百度OCR接口文档或者参考资料
2、获得Token
3、提交文件给OCR接口
4、接受数据
5、显示在TextView
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView textView = null;
String token = null;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 100:
textView.setText(String.valueOf(msg.obj));
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.text);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(TextUtils.isEmpty(token)){
OCR.getInstance(MainActivity.this).initAccessToken(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
// 调用成功,返回AccessToken对象
token = result.getAccessToken();
Log.e("MainActivity", "MainActivity onResult()" + token);
}
@Override
public void onError(OCRError error) {
// 调用失败,返回OCRError子类SDKError对象
Log.d("path","获得token失败");
error.printStackTrace();
}
}, getApplicationContext());
}
// 获取内置SD卡路径
String sdCardPath = Environment.getExternalStorageDirectory().getPath();
// 图片文件路径
String filePath = sdCardPath + File.separator + "shot.png";
File file = new File(filePath);
// 通用文字识别参数设置,获得图片所在地址
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
param.setImageFile(file);
final StringBuffer sb = new StringBuffer();
// 调用通用文字识别服务
OCR.getInstance(MainActivity.this).recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {
@Override
public void onResult(GeneralResult result) {
// 调用成功,返回GeneralResult对象
for (WordSimple wordSimple : result.getWordList()) {
// wordSimple不包含位置信息
WordSimple word = wordSimple;
sb.append(word.getWords());
sb.append("\n");
}
Log.d("path","获得图片数据成功");
Message msg = Message.obtain();
msg.what = 100;
msg.obj = sb.toString();
mHandler.sendMessage(msg);
}
@Override
public void onError(OCRError error) {
error.printStackTrace();
Log.d("path","获得图片数据失败");
// 调用失败,返回OCRError对象
} });
}
}
Layout代码就不发了,就一个按钮和文本
参考资料:
百度OCR 文字识别 Android安全校验