简述

最近开发一个项目需要用到Ocr文字识别技术来识别手写文字,在评估过程中体验了百度的文字识别和腾讯的文字识别。查找官方开发文档,发现它们都有印刷体和手写体两种符合项目需求的识别模式,但是腾讯的手写体模式并没找到sdk,只能直接根据文档手动post请求并返回结果,但网上却找不到具体的例子,导致进行过程中出现了一些小困难。这篇文章主要记录一下在Android Studio中百度Ocr的用法(主要参考官方文档)。下篇文章记录腾讯Ocr的用法。

通用识别模式(高精度版)

1.首先需要下载百度文字识别的sdk。SDK下载页面

2.解压缩下载的包,然后进入libs目录,找到ocr-sdk.jar,复制到工程的libs目录下,然后点击Android Studio的Build->Edit Libralies and Dependencies...,点击+号,再点击jar dependency,找到ocr-sdk.jar并添加即可。

3.查看下载的包的libs目录下,发现有armeabi,arm64-v8a,armeabi-v7a,x86这几个文件夹,选择自己设备对应的文件夹,复制到android studio工程src/main/jniLibs目录中,如果不知道设备的arm架构,可以用Android Studio连接设备,然后在Android Studio的控制台中输入:

adb shell getprop ro.product.cpu.abi

即可查看当前设备的arm架构。

4.添加必要的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

注意:android6.0以上需要申请动态权限。

5.如果在自己的工程中集成SDK,为了防止release发布时打包报错,需要在Proguard配置文件中增加:

-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**

6.在代码中初始化sdk:

    /**
* 用明文ak,sk初始化
*/
private void initAccessTokenWithAkSk() {
OCR.getInstance(mContext).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
String token = result.getAccessToken();
hasGotToken = true; //用来判断是否成功获取授权
ocrNormal(); //开始文字识别(为了简单起见,直接在这里进行文字识别,实际上使用看项目需要进行判断token)
} @Override
public void onError(OCRError error) {
error.printStackTrace();
}
}, mContext.getApplicationContext(), "替换成你的Api Key", "替换成你的Secret Key");
}

Api Key和Secret Key需要去百度开放平台注册获取(百度ai开放平台)。还有一种安全模式授权这里不详说了。

7.开始文字识别:

   private void ocrNormal() {
// 通用文字识别参数设置
GeneralBasicParams param = new GeneralBasicParams();
param.setDetectDirection(true);
//这里调用的是本地文件,使用时替换成你的本地文件
File file=getBitmapFile(mBitmap);
param.setImageFile(file);
// 调用通用文字识别服务
OCR.getInstance(mContext).recognizeAccurateBasic(param, new OnResultListener<GeneralResult>() {
@Override
public void onResult(GeneralResult result) {
StringBuilder sb = new StringBuilder();
// 调用成功,返回GeneralResult对象
for (WordSimple wordSimple : result.getWordList()) {
// wordSimple不包含位置信息
WordSimple word = wordSimple;
sb.append(word.getWords());
//sb.append("\n");
}
//file.delete();
//String返回
ocrResult = sb.toString();
// json格式返回字符串result.getJsonRes())
} @Override
public void onError(OCRError error) {
// 调用失败,返回OCRError对象
}
});
}

手写体文字识别

手写体文字识别只需要把上述调用的方法ocrNormal()修改为ocrHandwrite(),然后第7步修改为以下即可:

 private void orcHandwrite() {
// 通用文字识别参数设置
OcrRequestParams param = new OcrRequestParams();
File file=getBitmapFile(mBitmap);
param.setImageFile(file);
// 调用通用文字识别服务
OCR.getInstance(mContext).recognizeHandwriting(param, new OnResultListener<OcrResponseResult>() {
@Override
public void onResult(OcrResponseResult ocrResponseResult) {
//file.delete();
// json格式返回字符串
ocrResult = ocrResponseResult.getJsonRes();
}
@Override
public void onError(OCRError ocrError) { }
});
}

其中ocrResult返回的是json格式的字符串,需要自己去转换成jsonObject然后读取需要的数据。

两种模式比较

为了比较他们的准确度,我测试了印刷体和手写体两种文字的多个样例,发现一般情况下,都是高精度的普通印刷体模式识别准确率比较高,但是在比较潦草的情况下,手写体识别率比较高(这只是相对而言,实际上潦草字在很多情况下两种模式都未识别成功),所以得出结论,大部分情况下用高精度印刷体文字识别模式即可。

百度Ocr文字识别的更多相关文章

  1. 百度OCR 文字识别 Android安全校验

    百度OCR接口使用总结: 之前总结一下关于百度OCR文字识别接口的使用步骤(Android版本 不带包名配置 安全性弱).这边博客主要介绍,百度OCR文字识别接口,官方推荐使用方式,授权文件(安全模式 ...

  2. 百度OCR文字识别-Android安全校验

    本文转载自好基友upuptop:https://blog.csdn.net/pyfysf/article/details/86438769 效果图: 如下为文章正文: 百度OCR接口使用总结:之前总结 ...

  3. 百度OCR文字识别-身份证识别

    简介 一.介绍 身份证识别 API 接口文档地址:http://ai.baidu.com/docs#/OCR-API/top 接口描述 用户向服务请求识别身份证,身份证识别包括正面和背面. 请求说明 ...

  4. 百度OCR文字识别API使用心得===com.baidu.ocr.sdk.exception.SDKError[283604]

    异常com.baidu.ocr.sdk.exception.SDKError[283604]App identifier unmatch.错误的packname或bundleId.logId::303 ...

  5. PHP:基于百度大脑api实现OCR文字识别

    有个项目要用到文字识别,网上找了很多资料,效果不是很好,偶然的机会,接触到百度大脑.百度大脑提供了很多解决方案,其中一个就是文字识别,百度提供了三种文字识别,分别是银行卡识别.身份证识别和通用文字识别 ...

  6. 小白学Python——用 百度AI 实现 OCR 文字识别

    百度AI功能还是很强大的,百度AI开放平台真的是测试接口的天堂,免费接口很多,当然有量的限制,但个人使用是完全够用的,什么人脸识别.MQTT服务器.语音识别等等,应有尽有. 看看OCR识别免费的量 快 ...

  7. Android OCR文字识别 实时扫描手机号(极速扫描单行文本方案)

    身份证识别:https://github.com/wenchaosong/OCR_identify 遇到一个需求,要用手机扫描纸质面单,获取面单上的手机号,最后决定用tesseract这个开源OCR库 ...

  8. OCR文字识别笔记总结

    OCR的全称是Optical Character Recognition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别,交通路牌的识别,车牌的自动识别等等.本 ...

  9. 怎么给OCR文字识别软件重编文档页面号码

    ABBYY FineReader Pro for Mac OCR文字识别软件处理文档时,在FineReader文档中,页面的加载顺序即是页面的导入顺序,完成导入之后,文档的所有页面均会被编号,各编号会 ...

随机推荐

  1. npm安装第三方库找不到“cl.exe”问题

    1.安装第三方库时找不到"cl.exe"的解决方法 安装 本地 remix时 出现错误(npm install remix-ide -g) 原因:remix 依赖的 python库 ...

  2. Centos 7 安装 Redis 3.2

    环境: Centos 7 GCC            #未安装,使用yum install gcc安装 1.下载redis 官方下载网站:https://redis.io/download.请在页面 ...

  3. 全网最详细的Windows系统里Oracle 11g R2 Client客户端(64bit)安装后的初步使用(图文详解)

    不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1)   打开服务(cmd— ...

  4. salesforce 零基础学习(七十)使用jquery tree实现树形结构模式

    项目中UI需要用到树形结构显示内容,后来尽管不需要做了,不过还是自己做着玩玩,mark一下,免得以后项目中用到. 实现树形结构在此使用的是jquery的dynatree.js.关于dynatree的使 ...

  5. 配置Zookeper

    在整个的codis架构之中,codis-proxy将作为所有的codis-server的对外的代理,而在整个的处理之中,codis-proxy所保存的数据一定是所有的codis-server的信息,那 ...

  6. 作用域中LHS查询和RHS查询

    LHS查询:赋值操作左侧的查询,LHS查询试图找到变量的容器本身,,从而对其赋值. RHS查询:赋值操作右侧的查询,可以理解为"取到某某的值" 举例: function foo(a ...

  7. Vue.js基础拾遗

    本篇目录: 模版语法 插值 指令 v-bind指令 v-on指令 计算属性与侦听器 计算属性VS方法 计算属性VS侦听属性 Class与Style绑定 绑定HTML Class 绑定内联样式 条件渲染 ...

  8. docker-使用ali云加速

    ali专用网络加速地址; https://yq.aliyun.com/articles/29941 使用ali加速 vim /etc/sysconfig/docker 添加: ADD_REGISTRY ...

  9. AngularJS学习笔记(四)内置指令

    说说指令 不得不赞叹,指令是ng最为强大的功能之一,好吧,也可以去掉之一,是最强大的功能.ng内置了许多自定义的指令,这避免了我们自己去造轮子.同时,ng也提供了自定义指令的功能,可以让我们的页面元素 ...

  10. golang中的接口实现(二)

    指针类型 vs 值类型实现接口 package main import ( "fmt" ) // 定义接口 type Describer interface { Describe( ...