最近新项目有个需求:要对机器上的机器码进行识别功能,而且准确率要高达95%以上,第一反应是利用百度或其它文字识别API,但是客户想要离线使用,最后敲定了RapidOcr来实现:
使用的开发工具:
AndroidStudio 2021
cmake 3.18.1
ndk 25
opencv 3.4.15
gradle:7.0.2
首先要删除 lib库下的缓存等文件
.idea build app/build OcrLibrary/.cxx OcrLibrary/build
在Studio的Terminal中完成lib的编译
./gradlew assembleRelease
如果编译失败建议检查cmake,ndk等相关工具是否已经安装,而且jdk最好是11版本
贴一下使用代码:从图库中选择图片来解析
Bitmap selectedImg = decodeUri(uri);
private void detectResult(Bitmap img) {
OcrEngine ocrEngine = MyApplication.getOcrEngine();
Bitmap boxImg = Bitmap.createBitmap(
img.getWidth(), img.getHeight(), Bitmap.Config.ARGB_8888
);
OcrResult detect = ocrEngine.detect(img, boxImg, 0);
if (!TextUtils.isEmpty(detect.getStrRes())){
code_str= detect.getStrRes();
showCodetipDialog();
}else {
ToastUtils.showShort("无识别结果");
}
KLog.e("************识别结果******************"+detect.getStrRes());
通过拍照来获取:
OcrEngine ocrEngine = MyApplication.getOcrEngine();
Bitmap img = cameraLensView.cropCameraLensRectBitmap(viewFinder.getBitmap(), false);
Bitmap boxImg = Bitmap.createBitmap(
img.getWidth(), img.getHeight(), Bitmap.Config.ARGB_8888
);
OcrResult detect = ocrEngine.detect(img, boxImg, 0);
建议下载代码后,先删除缓存,再如上进行编译。
ext.compile_sdk_version = 31 ext.min_sdk_version = 26 ext.target_sdk_version = 31 classpath 'com.android.tools.build:gradle:7.2.0'
感谢