文章目录
- 1.效果图
- 2.在百度智能云控制台创建应用
- 3.下载SDK及License文件
- 4.解压SDK并运行OCRDemo
- 5.集成文字识别及二维码识别
- 6.修改百度相机UI将裁剪框默认改为全屏
- 7.增加设备按键拍照事件
背景:由于部分政府及企业拿不到或者申请不到健康码的相关接口数据,因此要求我们的疫情防控系统能识别健康码上的数据,基于上述需求,我在PDA设备中集成了百度OCR识别健康码的功能。
1.效果图
2.在百度智能云控制台创建应用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sw4wmrCf-1653469416405)(https://files.mdnice.com/user/18521/be6aa234-23ee-443c-8999-138d189c024c.png)]
建议建两个应用,一个测试一个真实项目,测试应用的包名用com.baidu.ocr.demo,因为之后我们下载sdk默认的包名就是这个。
签名MD5值获取:
我们用AndroidStudio创建一个签名文件,如果之前创建过就可以用之前的,记录下key store path的位置,后面生成签名MD5值需要用到
通过cmd命令进入本地jdk的bin目录
输入命令查看keystore.jks的MD5值,将E:askeykeystore.jks改为自己签名文件实际位置即可
keytool -list -v -keystore E:askeykeystore.jks
然后在输入签名文件的密码即可查看MD5值
3.下载SDK及License文件
Lincense下载后备用一会可以替换到Android工程中的assets文件夹下,注意文件名不能改变
注意,包名改变或者签名MD5值改变,都需要重新下载Lincense文件重新替换到assets文件下,否则会提示token还未成功获取
4.解压SDK并运行OCRDemo
解压上一步下载的SDK包,拿到OCRDemo文件夹,并将下载的aip-ocr.license文件替换到assets文件下,成功运行demo后,我们测试功能需要对demo进行签名打包,选择我们获取到签名MD5值的签名文件,并进行打包,打包成功后即可发现能正常使用ocr识别功能。
5.集成文字识别及二维码识别
我的项目实际需要的是文字识别及二维码识别,在app文件下的build.gradle中添加如下依赖
1
2
3implementation(name: 'ocrsdk', ext: 'aar') implementation project(path: ':ocr_ui')
我们直接用百度的相机UI进行识别,开发工作量减轻不少
在项目中调用百度相机
1
2
3
4
5
6
7
8
9
10
11
12private void imgToTextByOCR() { if (!checkTokenStatus()) { return; } Intent intent = new Intent(XXActivity.this, CameraActivity.class); intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath()); intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL); startActivityForResult(intent, REQUEST_CODE_ACCURATE_BASIC); }
在onActivityResult方法中接受相机的返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_ACCURATE_BASIC && resultCode == Activity.RESULT_OK) { RecognizeService.recAccurateBasic(getApplicationContext(), FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath(), new RecognizeService.ServiceListener() { @Override public void onResult(String result) { infoPopText(result); } }); RecognizeService.recQrcode(getApplicationContext(), FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath(), new RecognizeService.ServiceListener() { @Override public void onResult(String result) { infoPopTextQR(result); } }); } }
注意:这里我是对返回的数据进行了两次调用解析,recAccurateBasic是文字解析,recQrcode是二维码解析,文字和二维码解析是分开的并单独收费
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30private void infoPopText(final String result) { //根据自己的业务处理文字 Toast.makeText(this, result, Toast.LENGTH_LONG).show(); } private void infoPopTextQR(final String result) { SystemClock.sleep(1000); String codeStr = ""; String qrCodeStr = ""; try { JSONObject jsonObject = new JSONObject(result); String codeRes = jsonObject.getString("codes_result"); JSONArray jsonArray = new JSONArray(codeRes); JSONObject jObj = jsonArray.getJSONObject(0); if (jObj != null) { codeStr = jObj.getString("text"); } JSONArray jArr = new JSONArray(codeStr); qrCodeStr = jArr.getString(0); } catch (JSONException e) { e.printStackTrace(); } Toast.makeText(this, qrCodeStr, Toast.LENGTH_LONG).show(); // 解析并拿到二维码数据后,根据业务处理 if(qrCodeStr!=""){ queryQRCodeByOCR(qrCodeStr); } }
6.修改百度相机UI将裁剪框默认改为全屏
在识别二维码的过程中,会发现百度的相机UI裁剪框默认是设置了上下左右距离的,我们想要全屏的效果,当然如果不用百度相机UI自己调用系统相机也不是不可以。
找到FrameOverlayView文件,修改resetFrameRect方法如下
1
2
3
4
5
6
7
8
9
10
11
12
13private void resetFrameRect(int w, int h) { if (shapeType == 1) { frameRect.left = 0; frameRect.top = 0; } else { frameRect.left = 0; frameRect.top = 0; } frameRect.right = w - frameRect.left; frameRect.bottom = h - frameRect.top; }
7.增加设备按键拍照事件
找到CameraActivity,增加onKeyDown事件,可以根据设备的按键键值来执行拍照方法,拍照完可以在根据设备按键键值执行确定按钮
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode > xx1&&keyCode<xx2) { cameraView.takePicture(outputFile, takePictureCallback); } if (keyCode > xx3&&keyCode<xx4) { int maskType = cropMaskView.getMaskType(); Rect rect; switch (maskType) { case MaskView.MASK_TYPE_BANK_CARD: case MaskView.MASK_TYPE_ID_CARD_BACK: case MaskView.MASK_TYPE_ID_CARD_FRONT: rect = cropMaskView.getFrameRect(); break; case MaskView.MASK_TYPE_NONE: default: rect = overlayView.getFrameRect(); break; } Bitmap cropped = cropView.crop(rect); displayImageView.setImageBitmap(cropped); cropAndConfirm(); } return super.onKeyDown(keyCode, event); }
最后
以上就是懦弱白羊最近收集整理的关于Android中集成百度OCR识别健康码1.效果图2.在百度智能云控制台创建应用3.下载SDK及License文件4.解压SDK并运行OCRDemo5.集成文字识别及二维码识别6.修改百度相机UI将裁剪框默认改为全屏7.增加设备按键拍照事件的全部内容,更多相关Android中集成百度OCR识别健康码1内容请搜索靠谱客的其他文章。
发表评论 取消回复