近期由于工作内容的需要,我要给项目集成一个图片文字识别功能,据说百度的不错,所以今天写一个关于百度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图片文字识别——总结相关推荐

  1. 一篇文章搞定百度OCR图片文字识别API

    一篇文章搞定百度OCR图片文字识别API https://www.jianshu.com/p/7905d3b12104 转载于:https://www.cnblogs.com/chongdongxia ...

  2. Spring Boot + 百度 OCR 图片文字识别功能

    一.知识点简介 OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程. - ...

  3. 阿里云 OCR 图片文字识别接口使用案例(java)

    阿里云 OCR 图片文字识别接口使用案例(java) 阿里云官方接口文档 前期需要完成 购买阿里云服务 购买服务 可以购买测试服务.每个阿里云用户可以购买1次免费的500次接口请求进行测试 购买完成之 ...

  4. TOOLFK工具-在线OCR图片文字识别工具

    本文要推荐的[TOOLFK]在线OCR图片文字识别工具 ,提供图像文字识别,提取图片文字,OCR图片文字识别,图片转文字,把图片拖拽到上传框中自动上传识别,图片文件最大3M 網站名稱:ToolFk 網 ...

  5. OCR图片文字识别,人工手动图片标注软件安装过程

    OCR图片文字识别,人工手动图片标注软件安装过程,本章关注标注软件的安装,启动过程 1. 下载 anaconda anaconda  下载慢的问题: 使用国内镜像地址下载: https://mirro ...

  6. android集成百度OCR实现身份证、银行卡、营业执照等识别

    声明:申请步骤账号这一块比较懒,直接借用了[大千世界小书童] 大神的原图,有想看大神的可以直接去看,地址:www.jianshu.com/p/a9b5d8b22- 第一步:先登录百度智能云 image ...

  7. 百度大脑和腾讯云的OCR图片文字识别接口

    百度大脑 通用文字识别: https://ai.baidu.com/tech/ocr/general 通用物体和场景识别:https://ai.baidu.com/tech/imagerecognit ...

  8. java调用ocr识别api_Java文字识别软件-调用百度ocr实现文字识别

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 项目源代码在文末,放到了GitHub上 - https://github.com/Ymy214/java_bai ...

  9. java ocr文字识别软件_Java文字识别软件-调用百度ocr实现文字识别

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

最新文章

  1. 《概率机器人》里程计运动模型gmapping中代码解析
  2. sql基础语句大杂烩
  3. sklearn 特征工程
  4. ADO学习(六)服务器和客户端游标
  5. microsoft visual c++全家桶_橡木桶——白兰地风味的“主宰”
  6. datatable 操作列根据权限动态展现_不会Excel透视表?教你一招轻松做出动态报表...
  7. FTP连接成功但是无法显示目录的解决方式
  8. 三维场景 WGS84 和街景(百度街景,腾讯街景,google街景,orbitgt街景)联动
  9. 鱼刺少的鱼都有哪些 这几种鱼刺少又美味
  10. SAP-FI-财务报表版本设定
  11. 【Games101】Lecture05 光栅化 笔记
  12. 纯CSS实现超美选项卡
  13. 【shaderforge学习笔记】 Rotator节点
  14. 填坑—c语言写单片机中断程序无法返回到中断点—解决办法
  15. 微信小程序ios端唤醒不了拨打电话或者部分电话拨打不了解决方案
  16. google浏览器 使用css: transform造成字体模糊问题
  17. 遇到网页无法复制文本怎么办,程序员来教你一键解锁,不需要任何软件和插件
  18. ssh隧道连接的3种方式
  19. QQ2005正式版将于27日发布!(转)
  20. JAVA8学习9-自定义收集器(Characteristics 使用说明)

热门文章

  1. 宝塔面板安装过程连接中断
  2. 深挖Openstack Cinder - CLI命令(3)
  3. MacOS使用痕迹及调查
  4. [Linux] 使用移动硬盘安装ubuntu17.10记录
  5. csgo开箱小程序(python,仅供娱乐)
  6. Mysql价格降低20%应该怎么写_mysql优化建议20条
  7. 先进封装,一个大周期的开始——“迎风国潮”半导体设备研讨会
  8. oracle之索引优化
  9. 摩凡陀女士手表赛蕾娜系列腕表 优雅之美展露无遗
  10. ps命令USER显示UID而不是USER