一、通用文字识别技术

  • 通用文字识别的核心技术是 OCR(Optical Character Recognition,光学字符识别)。
  • OCR 是一种通过拍照、扫描等光学输入方式,把各种票据、卡证、表格、报刊、书籍等印刷品文字转化为图像信息,再利用文字识别技术将图像信息转化为计算机等设备可以使用的字符信息的技术。

二、约束与限制

  • 支持处理的图片格式包括 JPEG、JPG、PNG。
  • 通用文字识别目前支持的语言有:中文、英文、日语、韩语、俄语、意大利语、西班牙语、葡萄牙语、德语,以及法语(将来会增加更多语种)。
  • 目前支持文档印刷体识别,不支持手写字体识别。
  • 为保证较理想的识别结果,调用通用文字识别功能时,应尽可能保证输入图像具有合适的成像质量(建议720p以上)和高宽比例(建议2:1以下,接近手机屏幕高宽比例为宜)。当输入图像为非建议图片尺寸时,文字识别的准确度可能会受到影响。
  • 为保证较理想的识别结果,建议文本与拍摄角度夹角在正负30度范围内。

三、应用场景

  • 可以进行文档翻拍、街景翻拍等图片来源的文字检测和识别,也可以集成于其他应用中,提供文字检测、识别的功能,并根据识别结果提供翻译、搜索等相关服务;
  • 可以处理来自相机、图库等多种来源的图像数据,提供了一个自动检测文本、识别图像中文本位置以及文本内容功能的开放接口;
  • 能在一定程度上支持文本倾斜、拍摄角度倾斜、复杂光照条件以及复杂文本背景等场景的文字识别。

四、API

  • 用文字识别提供了 setVisionConfiguration() 和 detect() 两个函数接口。
  • 调用 ITextDetector的setVisionConfiguration() 方法,通过传入的 TextConfiguration,选择需要调用的 OCR 类型。
 void setVisionConfiguration(TextConfiguration textConfiguration);
  • TextConfiguration 的常用设置如下:
接口名称 参数名 类型 参数说明
setDetectType() detectType int OCR引擎类型定义:TextDetectType.TYPE_TEXT_DETECT_FOCUS_SHOOT(自然场景OCR)
setLanguage() language int 识别语种定义:
TextConfiguration.AUTO(不指定语种,会进行语种检测操作)
TextConfiguration.CHINESE(中文)
TextConfiguration.ENGLISH(英语)
TextConfiguration.SPANISH(西班牙语)
TextConfiguration.PORTUGUESE(葡萄牙语)
TextConfiguration.ITALIAN(意大利语)
TextConfiguration.GERMAN(德语)
TextConfiguration.FRENCH(法语)
TextConfiguration.RUSSIAN(俄语)
TextConfiguration.JAPANESE(日语)
TextConfiguration.KOREAN(韩语)
默认值为TextConfiguration.AUTO
setProcessMode() mode int 进程模式定义:
VisionConfiguration.MODE_IN(同进程调用)
VisionConfiguration.MODE_OUT(跨进程调用)
默认值为VisionConfiguration.MODE_OUT
  • 调用 ITextDetector 的 detect() 方法,获取识别结果:
 int detect(VisionImage image, Text result, VisionCallback<Text> visionCallBack);
  • 其中:
    • image 为待 OCR 检测识别的输入图片。
    • 如果 visionCallback 为 null,执行同步调用,结果码由方法返回,检测及识别结果由 result 中返回。
    • 如果 visionCallback 为有效的回调函数,则该函数为异步调用,函数返回时 result 中的值无效,实际识别结果由回调函数返回。
    • 同步模式调用成功时,该函数返回结果码0。异步模式调用请求发送成功时,该函数返回结果码700。

五、开发步骤

  • 在使用通用文字识别 SDK 时,将实现文字识别的相关的类添加至工程:
 import ohos.ai.cv.common.ConnectionCallback;import ohos.ai.cv.common.VisionCallback;import ohos.ai.cv.common.VisionConfiguration;import ohos.ai.cv.common.VisionImage;import ohos.ai.cv.common.VisionManager;import ohos.ai.cv.text.ITextDetector;import ohos.ai.cv.text.Text;import ohos.ai.cv.text.TextConfiguration;import ohos.ai.cv.text.TextDetectType;import ohos.app.Context;import ohos.media.image.PixelMap;
  • 定义 ConnectionCallback 回调,实现连接能力引擎成功与否后的操作:
 ConnectionCallback connectionCallback = new ConnectionCallback() {@Overridepublic void onServiceConnect() {// 定义连接能力引擎成功后的操作。}@Overridepublic void onServiceDisconnect() {// 定义连接能力引擎失败后的操作。}};
  • 调用 VisionManager.init() 方法,将此工程的 context 和已经定义的 connectionCallback 回调作为入参,建立与能力引擎的连接。context 应为 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的实例或子类实例:
 int result = VisionManager.init(context, connectionCallback);
  • 实例化 ITextDetector 接口,将此工程的 context 作为入参:
 ITextDetector textDetector = VisionManager.getTextDetector(context);
  • 实例化 VisionImage 对象 image,并传入待检测图片 pixelMap:
 VisionImage image = VisionImage.fromPixelMap(pixelMap);
  • 实例化 Text 对象 text,该对象在同步模式下用于存放调用 textDetector.detect()方法的结果返回码及文字识别结果:
 Text text = new Text();
  • (可选) 定义 VisionCallback回调:
 VisionCallback<Text> callback= new VisionCallback<Text>() {@Overridepublic void onResult(Text text) {// 对正确获得文字识别结果进行处理。}@Overridepublic void onError(int i) {// 处理错误返回码。}@Overridepublic void onProcessing(float v) {// 返回处理进度。}};
  • 注意:
    • 在异步模式下,该类的 onResult() 方法用于获得文字识别结果 Text;onError() 方法用于处理错误返回码;onProcessing() 方法用于返回处理进度,目前没有实现此接口的功能。
    • 同步与异步模式区别在于 detect() 的最后一个参数 VisionCallback是否为空。若非空则为异步模式。此时会忽略自定义的 Text 输入(效果与传入 null 相同),接口调用结果一律从 VisionCallback获得,自定义的 Text 输入不做更新。
  • 通过 TextConfiguration 配置 textDetector() 方法的运行参数,可选择识别场景,语言类型,调用模式等。跨进程模式(MODE_OUT)下调用方与能力引擎处于不同进程;同进程模式(MODE_IN)下,能力引擎在调用方进程中实例化,调用方通过反射的方式调用引擎里的通用文字识别能力。以聚焦通用文字识别,同进程英文语种检测为例:
 TextConfiguration.Builder builder = new TextConfiguration.Builder();builder.setProcessMode(VisionConfiguration.MODE_IN);builder.setDetectType(TextDetectType.TYPE_TEXT_DETECT_FOCUS_SHOOT);builder.setLanguage(TextConfiguration.ENGLISH);TextConfiguration config = builder.build();textDetector.setVisionConfiguration(config);
  • (可选)调用 ITextDetector 的 prepare() 方法:
 result = textDetector.prepare();
  • 说明:如果返回的 result 不为0,说明当前 OCR 能力准备失败,需要处理错误,不再执行之后的动作。在 detect() 方法中会首先调用 prepare() 启动引擎,如果引擎已经启动则不会再次启动。
  • 调用 ITextDetector 的 detect() 方法:
 result = textDetector.detect(image, text, null); // 同步// 或者result = textDetector.detect(image, null, visionCallback); // 异步
  • 说明:
  • 同步模式调用完成时,该函数立即返回结果码;
  • 异步模式调用请求发送成功时,该函数返回结果码700。如果返回其他的结果码,说明异步调用请求不成功,需要先处理错误,此时回调函数不会被调用。
  • 如果异步模式调用请求发送成功,则 OCR 完成后,相应的回调函数会被自动调用。
    • 如果 onResult() 回调被调用,说明 OCR 检测识别成功,相当于同步模式结果码为0的情况。
    • 如果 onError() 方法被调用,则说明 OCR 发生了错误,具体的调用结果码将由 onError() 的参数接收。
  • 结果码定义如下表:
结果码 说明
0 成功
-1 未知错误
-2 不支持的功能或接口
-3 内存分配失败或创建对象失败
-4 所需库加载失败
-10 引擎开关已经关闭
101 失败
102 超时
200 输入参数不合法(图片尺寸错误)
201 输入参数不合法(为空)
210 输入参数合法
500 服务绑定异常
521 服务绑定异常断开
522 服务已连接
600 模型文件异常
601 模型文件不存在
602 模型加载失败
700 异步调用请求发送成功
1001 神经网络处理单元错误
  • 调用 ITextDetector 的 release() 方法,释放资源。调用 pixelMap 的 release() 方法,释放图片内存,不再使用通用文字识别能力时,调用 release() 方法释放资源:
 textDetector.release();if (pixelMap != null) {pixelMap.release();pixelMap = null;}
  • 调用 VisionManager.destroy() 方法,断开与能力引擎的连接:
 VisionManager.destroy();

HarmonyOS之AI能力·通用文字识别技术相关推荐

  1. APISpace 通用文字识别OCR API

    APISpace 的 通用文字识别OCR API,基于业界领先的深度学技术,对图片中的文字进行检测和识别,支持多种语言.并且包含文字在图片中的位置信息,方便进行版式的二次处理. 应用场景 拍照/截图识 ...

  2. 从图片提取文字的终极解决方法 ——【通用文字识别 API】

    写在前面 相信你用过类似对进行图片中的文字提取的功能,但是你了解过背后的原理吗? 本文将从图片中文字提取的原理以及应用案例等多方面进行讲述,希望一文能为你讲透通用文字识别. 通用文字识别是什么技术 随 ...

  3. 文字识别技术在内容安全中的应用

    导读:文字在日常生活中发挥着重要的作用,甚至在考古发现中文字也作为识别文明的重要标志.特别是在当前短视频和内容爆炸的时代,文字广泛应用于人们观点的表达和传播以及商品营销等各个领域.这些内容中肯定会存在 ...

  4. 合合信息——用智能文字识别技术赋能古彝文原籍数字化

    文章目录 1. 背景介绍:古彝文是什么?为什么要保护它?如何保护它? 2. 传统方法保护古彝文:原籍难获.翻译困难 2.1. 古彝文原籍的破损与古法保存 2.2 古彝文原籍的保护与翻译 2.2.1 获 ...

  5. 中文场景文字识别技术创新大赛,总奖池5.4万!

    点击我爱计算机视觉标星,更快获取CVML新技术 竞赛简介 为贯彻执行国家创新驱动发展战略,搭建人工智能领域综合性.集群化.市场化的产学研用综合协同创新平台,中国人工智能学会于2018年创办了首届中国& ...

  6. java实现自动识别验证码并自动填写提交(调用百度通用文字识别OCR接口+大图找小图之图像识别算法+模拟鼠标键盘动作)

    一.使用的技术: 1.调用百度AI通用文字识别OCR接口 2.图像识别算法 二.实现方案与步骤: 1.得到验证码的图片的坐标:先将验证码截图,然后再对整个电脑屏幕截图,通过大图找小图的方法,计算出小图 ...

  7. 通用文字识别 OCR 等免费 API 大全分享

    智能识别 OCR 类 API 通用文字识别OCR:多场景.多语种.高精度的整图文字检测和识别服务,多项指标行业领先,可识别中.英.日.韩.法.德多种语言. 二维码识别OCR:对图片中的二维码.条形码进 ...

  8. python——人工智能(AI)之网络图片文字识别案例详细讲解

    文章目录 一.需求分析 二.产品选择及准备 三.开始编写应用 1.获取token 2.处理图片 3.发送请求,解析数据 一.需求分析 我们要实现的功能很简单,通过使用百度的API进行图片当中文字的详细 ...

  9. 汉字进行计算机识别的原理,计算机OCR文字识别技术的原理和未来发展趋势

    杨俊叶++王训伟 摘要:文章首先对OCR技术的发展背景进行了介绍,指出了OCR文字识别系统在扫描仪.文字编辑等领域的应用及优势.通过对OCR技术工作原理的介绍,重点论述了OCR文字识别系统主要的图像处 ...

最新文章

  1. java 拖动图片放大_Android 图片拖拽、放大缩小的自定义控件
  2. HP proliant服务器从usb启动
  3. oracle查看登录时间黑屏,oracle 11g默认用户名、密码解锁 以及安装后重启黑屏问题.doc...
  4. [小技巧][JAVA][转换]整型int与字符串String相互转换
  5. NEON在Android中的使用举例【转】
  6. 回溯法——求解N皇后问题
  7. Oracle PL/SQL匿名块(二)
  8. Android入门(四)UI-创建自定义控件
  9. JSP项目155套-开发专题-大作业设计-毕业设计【建议在校生收藏】(保持更新)
  10. TAOCP-Reading-计算机程序设计艺术阅读-1-2
  11. 人民搜索副总经理宫玉国离职
  12. idou老师带你认识Istio13:Istio实现基础认证策略
  13. ⭐算法入门⭐《二分枚举》中等05 —— LeetCode 1201. 丑数 III
  14. 微信小程序下拉刷新/上拉加载组件
  15. Quartz——简介和使用
  16. 基于Python的Flask框架实现的寻宝通关游戏 课程论文+项目源码
  17. Postgresql 客户端 psql 的使用
  18. JavaScript 类的三部曲(二)
  19. 非对称密钥PKCS#1和PKCS#8格式互相转换(Java)
  20. 制作404页面的注意事项

热门文章

  1. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器出现no compatible source was found for this media问题的解决...
  2. hive 小文件数据合并
  3. Vue.js:监听属性
  4. 【BZOJ 1096】[ZJOI2007]仓库建设
  5. 浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)
  6. 上海有哪些计算机技术专科学校,上海计算机专业大学排名,第一名居然是这所大学!...
  7. python0x80070005拒绝访问_PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891
  8. js修改style中某个属性_JS 和 CSS 交互的 5 种方法
  9. css 超出隐藏滚动条_css 之内容溢出滚动,隐藏滚动条(解决火狐浏览隐藏不了滚动条问题)...
  10. idea装python插件_学习idea2020手动安装python插件的实现方法