概述
文章目录
- 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中添加如下依赖
implementation(name: 'ocrsdk', ext: 'aar')
implementation project(path: ':ocr_ui')
我们直接用百度的相机UI进行识别,开发工作量减轻不少
在项目中调用百度相机
private 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方法中接受相机的返回值
protected 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是二维码解析,文字和二维码解析是分开的并单独收费
private 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方法如下
private 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事件,可以根据设备的按键键值来执行拍照方法,拍照完可以在根据设备按键键值执行确定按钮
public 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.效果图2.在百度智能云控制台创建应用3.下载SDK及License文件4.解压SDK并运行OCRDemo5.集成文字识别及二维码识别6.修改百度相机UI将裁剪框默认改为全屏7.增加设备按键拍照事件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复