Android集成百度OCR图片文字识别——总结
近期由于工作内容的需要,我要给项目集成一个图片文字识别功能,据说百度的不错,所以今天写一个关于百度OCR的集成总结,以便以后再次使用不用去看官方文档。
首先肯定是要在百度管理平台注册账号并登录,然后照常去添加应用,如下图
创建成功后查看应用详情,下载下方画框的license文件,备用
然后现在就是去下载SDK,解压完是这样子
这时候打开你的项目,将SDK中的libs里的ocr-sdk.jar
放到app目录下的libs里面,之后在app下的src里面的main包里面创建一个assets包和一个jniLibs包,将你之前下载的license放到assets中,再将之前下载的SDK里的libs文件夹里面的四个文件统一复制放入jniLibs包中,如下图
之后右键项目导入SDK中的UI模块
选中ocr_ui,并点击确定,之后会弹出来几个警告
也很简单,把其中的compile改成implementation就行了
如果还报错的话,你就把ocr_ui的SDK版本调整到app的SDK版本就行,接着要在app的gardle的dependencies中添加implementation project(":ocr_ui")
项目依赖
下面是我app的gradle的配置
apply plugin: 'com.android.application'android {compileSdkVersion 28defaultConfig {applicationId "com.example.myapplication"minSdkVersion 15targetSdkVersion 28versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.android.support:appcompat-v7:28.0.0'implementation 'com.android.support.constraint:constraint-layout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'implementation project(":ocr_ui")
}
然后添加权限
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后剩下的就是设置点击事件,跳转拍照,发送照片,收到数据进行回调,这里放MainActivity类和自定义OCRManager类以及和Ui模块的获取图片路径类和最后的页面布局。
public class MainActivity extends AppCompatActivity {final static String TAG = "OCR";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);OCR.getInstance(this).initAccessToken(new OnResultListener<AccessToken>() {@Overridepublic void onResult(AccessToken result) {// 调用成功,返回AccessToken对象String token = result.getAccessToken();Log.e(TAG,result.toString());}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError子类SDKError对象Log.e(TAG,error.toString());}}, getApplicationContext());}public void ocrClick(View view) {// 生成intent对象Intent intent = new Intent(MainActivity.this, CameraActivity.class);// 设置临时存储intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile(getApplication()).getAbsolutePath());// 调用除银行卡,身份证等识别的activityintent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL);startActivityForResult(intent, 111);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 111 && resultCode == Activity.RESULT_OK) {// 获取调用参数String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);// 通过临时文件获取拍摄的图片String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();OCRManager.recognizeAccurateBasic(this, filePath, new OCRManager.OCRCallBack<GeneralResult>() {@Overridepublic void succeed(GeneralResult data) {// 调用成功,返回GeneralResult对象String content = OCRManager.getResult(data);Log.e(TAG,content + "");}@Overridepublic void failed(OCRError error) {// 调用失败,返回OCRError对象Log.e(TAG,"错误信息:" + error.getMessage());}});}}
}
public class OCRManager {/*** 通用文字识别接口* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeGeneralBasic(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){// 通用文字识别参数设置GeneralBasicParams param = new GeneralBasicParams();param.setDetectDirection(true);param.setImageFile(new File(filePath));// 调用通用文字识别服务OCR.getInstance(context).recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {@Overridepublic void onResult(GeneralResult result) {ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError ocrError) {ocrCallBack.failed(ocrError);}});}/*** 通用文字识别接口(高精度版)* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeAccurateBasic(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){// 通用文字识别参数设置GeneralBasicParams param = new GeneralBasicParams();param.setDetectDirection(true);param.setImageFile(new File(filePath));// 调用通用文字识别服务OCR.getInstance(context).recognizeAccurateBasic(param, new OnResultListener<GeneralResult>() {@Overridepublic void onResult(GeneralResult result) {ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError ocrError) {ocrCallBack.failed(ocrError);}});}/*** 通用文字识别接口(含位置信息版)* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeGeneral(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){// 通用文字识别参数设置GeneralParams param = new GeneralParams();param.setDetectDirection(true);param.setImageFile(new File(filePath));// 调用通用文字识别服务OCR.getInstance(context).recognizeGeneral(param, new OnResultListener<GeneralResult>() {@Overridepublic void onResult(GeneralResult result) {ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError ocrError) {ocrCallBack.failed(ocrError);}});}/*** 通用文字识别接口(高精度含位置信息版)* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeAccurate(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){// 通用文字识别参数设置GeneralParams param = new GeneralParams();param.setDetectDirection(true);param.setImageFile(new File(filePath));// 调用通用文字识别服务OCR.getInstance(context).recognizeAccurate(param, new OnResultListener<GeneralResult>() {@Overridepublic void onResult(GeneralResult result) {ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError ocrError) {ocrCallBack.failed(ocrError);}});}/*** 通用文字识别接口(含生僻字版)* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeGeneralEnhanced(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){// 通用文字识别参数设置GeneralBasicParams param = new GeneralBasicParams();param.setDetectDirection(true);param.setImageFile(new File(filePath));// 调用通用文字识别服务OCR.getInstance(context).recognizeGeneralEnhanced(param, new OnResultListener<GeneralResult>() {@Overridepublic void onResult(GeneralResult result) {ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError ocrError) {ocrCallBack.failed(ocrError);}});}/*** 网络图片文字识别* @param context 上下文* @param filePath 图片路径* @param ocrCallBack 请求回调*/public static void recognizeWebimage(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){// 网络图片识别参数设置GeneralBasicParams param = new GeneralBasicParams();param.setDetectDirection(true);param.setImageFile(new File(filePath));// 调用网络图片识别服务OCR.getInstance(context).recognizeWebimage(param, new OnResultListener<GeneralResult>() {@Overridepublic void onResult(GeneralResult result) {ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError ocrError) {ocrCallBack.failed(ocrError);}});}/***银行卡识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeBankCard(Context context,String filePath,final OCRCallBack<BankCardResult> ocrCallBack){// 银行卡识别参数设置BankCardParams param = new BankCardParams();param.setImageFile(new File(filePath));// 调用银行卡识别服务OCR.getInstance(context).recognizeBankCard(param, new OnResultListener<BankCardResult>() {@Overridepublic void onResult(BankCardResult result) {// 调用成功,返回BankCardResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 身份证识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeIDCard(Context context,String filePath,final OCRCallBack<IDCardResult> ocrCallBack){// 身份证识别参数设置IDCardParams param = new IDCardParams();param.setImageFile(new File(filePath));// 调用身份证识别服务OCR.getInstance(context).recognizeIDCard(param, new OnResultListener<IDCardResult>() {@Overridepublic void onResult(IDCardResult result) {// 调用成功,返回BankCardResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 行驶证识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeVehicleLicense(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){// 行驶证识别参数设置OcrRequestParams param = new OcrRequestParams();// 设置image参数param.setImageFile(new File(filePath));// 设置其他参数param.putParam("detect_direction", true);// 调用行驶证识别服务OCR.getInstance(context).recognizeVehicleLicense(param, new OnResultListener<OcrResponseResult>() {@Overridepublic void onResult(OcrResponseResult result) {// 调用成功,返回OcrResponseResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 驾驶证识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeDrivingLicense(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){// 驾驶证识别参数设置OcrRequestParams param = new OcrRequestParams();// 设置image参数param.setImageFile(new File(filePath));// 设置其他参数param.putParam("detect_direction", true);// 调用驾驶证识别服务OCR.getInstance(context).recognizeDrivingLicense(param, new OnResultListener<OcrResponseResult>() {@Overridepublic void onResult(OcrResponseResult result) {// 调用成功,返回OcrResponseResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 车牌识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeLicensePlate(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){// 车牌识别参数设置OcrRequestParams param = new OcrRequestParams();// 设置image参数param.setImageFile(new File(filePath));// 设置其他参数param.putParam("detect_direction", true);// 调用车牌识别服务OCR.getInstance(context).recognizeLicensePlate(param, new OnResultListener<OcrResponseResult>() {@Overridepublic void onResult(OcrResponseResult result) {// 调用成功,返回OcrResponseResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 营业执照识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeBusinessLicense(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){// 营业执照识别参数设置OcrRequestParams param = new OcrRequestParams();// 设置image参数param.setImageFile(new File(filePath));// 设置其他参数param.putParam("detect_direction", true);// 调用营业执照识别服务OCR.getInstance(context).recognizeBusinessLicense(param, new OnResultListener<OcrResponseResult>() {@Overridepublic void onResult(OcrResponseResult result) {// 调用成功,返回OcrResponseResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 通用票据识别* @param context 上下文* @param filePath 图片文件路径* @param ocrCallBack 请求回调*/public static void recognizeReceipt(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){// 通用票据识别参数设置OcrRequestParams param = new OcrRequestParams();// 设置image参数param.setImageFile(new File(filePath));// 设置其他参数param.putParam("detect_direction", true);// 调用通用票据识别服务OCR.getInstance(context).recognizeReceipt(param, new OnResultListener<OcrResponseResult>() {@Overridepublic void onResult(OcrResponseResult result) {// 调用成功,返回OcrResponseResult对象ocrCallBack.succeed(result);}@Overridepublic void onError(OCRError error) {// 调用失败,返回OCRError对象ocrCallBack.failed(error);}});}/*** 从返回内容中提取识别出的信息* @param result* @return*/public static String getResult(ResponseResult result){String sb = result.getJsonRes();return sb;}/*** 图片识别统一回调接口*/public interface OCRCallBack<T>{void succeed(T data);void failed(OCRError error);}
}
public class FileUtil {public static File getSaveFile(Context context) {File file = new File(context.getFilesDir(), "pic.jpg");return file;}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"android:onClick="ocrClick"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>
至此就完成了百度OCR的集成,其实也可以自己写页面,也可以根据需求修改了SDK中ui模块儿来完成。
Android集成百度OCR图片文字识别——总结相关推荐
- 一篇文章搞定百度OCR图片文字识别API
一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104 转载于:https://www.cnblogs.com/chongdongxia ...
- Spring Boot + 百度 OCR 图片文字识别功能
一.知识点简介 OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程. - ...
- 阿里云 OCR 图片文字识别接口使用案例(java)
阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...
- TOOLFK工具-在线OCR图片文字识别工具
本文要推荐的[TOOLFK]在线OCR图片文字识别工具 ,提供图像文字识别,提取图片文字,OCR图片文字识别,图片转文字,把图片拖拽到上传框中自动上传识别,图片文件最大3M 網站名稱:ToolFk 網 ...
- OCR图片文字识别,人工手动图片标注软件安装过程
OCR图片文字识别,人工手动图片标注软件安装过程,本章关注标注软件的安装,启动过程 1. 下载 anaconda anaconda 下载慢的问题: 使用国内镜像地址下载: https://mirro ...
- android集成百度OCR实现身份证、银行卡、营业执照等识别
声明:申请步骤账号这一块比较懒,直接借用了[大千世界小书童] 大神的原图,有想看大神的可以直接去看,地址:www.jianshu.com/p/a9b5d8b22- 第一步:先登录百度智能云 image ...
- 百度大脑和腾讯云的OCR图片文字识别接口
百度大脑 通用文字识别: https://ai.baidu.com/tech/ocr/general 通用物体和场景识别:https://ai.baidu.com/tech/imagerecognit ...
- java调用ocr识别api_Java文字识别软件-调用百度ocr实现文字识别
java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 项目源代码在文末,放到了GitHub上 - https://github.com/Ymy214/java_bai ...
- java ocr文字识别软件_Java文字识别软件-调用百度ocr实现文字识别
java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...
最新文章
- 《概率机器人》里程计运动模型gmapping中代码解析
- sql基础语句大杂烩
- sklearn 特征工程
- ADO学习(六)服务器和客户端游标
- microsoft visual c++全家桶_橡木桶——白兰地风味的“主宰”
- datatable 操作列根据权限动态展现_不会Excel透视表?教你一招轻松做出动态报表...
- FTP连接成功但是无法显示目录的解决方式
- 三维场景 WGS84 和街景(百度街景,腾讯街景,google街景,orbitgt街景)联动
- 鱼刺少的鱼都有哪些 这几种鱼刺少又美味
- SAP-FI-财务报表版本设定
- 【Games101】Lecture05 光栅化 笔记
- 纯CSS实现超美选项卡
- 【shaderforge学习笔记】 Rotator节点
- 填坑—c语言写单片机中断程序无法返回到中断点—解决办法
- 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
- google浏览器 使用css: transform造成字体模糊问题
- 遇到网页无法复制文本怎么办,程序员来教你一键解锁,不需要任何软件和插件
- ssh隧道连接的3种方式
- QQ2005正式版将于27日发布!(转)
- JAVA8学习9-自定义收集器(Characteristics 使用说明)