HarmonyOS学习路之开发篇—AI功能开发(二维码生成及文字识别)

这篇具有很好参考价值的文章主要介绍了HarmonyOS学习路之开发篇—AI功能开发(二维码生成及文字识别)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AI能力概述

为应用提供丰富的AI(Artificial Intelligence)能力,支持开箱即用。开发者可以灵活、便捷地选择AI能力,让应用变得更加智能。

已开放的AI能力如下表所示:

能力

简介

二维码生成

根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过二维码字节流生成二维码图片。

通用文字识别

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

图像超分辨率

提供适用于移动终端的1x和3x超分能力;1x超分可以去除图片的压缩噪声,3x超分在有效抑制压缩噪声的同时,提供3倍的边长放大能力。

文档检测校正

提供了文档翻拍过程的辅助增强功能,包含两个子功能:文档检测和文档校正。

文字图像超分

文字图像超分辨率可以对包含文字内容的图像进行9倍放大(高宽各放大3倍),同时增强图像内文字的清晰度,称为“文字图像超分辨率”,简称“文字图像超分”。

分词

对于一段输入文本,可以自动进行分词,同时提供不同的分词粒度。开发者可以根据需要自定义分词粒度。

词性标注

对于输入的一段文本,自动通过词性标注接口对其进行分词,并为分词结果中的每个单词标注一个正确的词性。词性标注提供不同的分词粒度,开发者可以根据需要自定义分词粒度。

助手类意图识别

对用户发送给设备的文本消息进行语义分析和意图识别,进而衍生出各种智能的应用场景,使设备更智慧、更智能。

IM类意图识别

利用机器学习技术,针对用户短信或聊天类APP等IM应用的文本消息进行内容分析,并识别出消息内容代表的用户意图。

关键字提取

可以在大量信息中提取出文本想要表达的核心内容,可以是具有特定意义的实体,如:人名,地点,电影等。也可以是一些基础但是在文本中很关键的词汇。

实体识别

从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。

语音识别

将语音文件、实时语音数据流转换为汉字序列,准确率达到90%以上(本地识别95%)。

语音播报

将文本转换为语音并进行播报。

说明

目前,二维码生成能力支持智能穿戴设备和手机;其他AI能力仅支持手机设备。

码生成概述

码生成能够根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过二维码字节流生成二维码图片。

约束与限制

  • 当前仅支持在中国区发售的华为终端设备。
  • 当前仅支持生成QR二维码(Quick Response Code)。由于QR二维码算法的限制,Java语言开发时字符串信息的长度不能超过2953个字符;JS语言开发时字符串信息的长度不能超过256个字符。
  • Java语言开发时,生成的二维码图片的宽度不能超过1920像素,高度不能超过1680像素。由于QR二维码是通过正方形阵列承载信息的,建议二维码图片采用正方形,当二维码图片采用长方形时,会在QR二维码信息的周边区域留白。
  • JS语言开发时,生成的二维码图片的宽高最小值为200px;当宽高不一致时,以二者最小值作为二维码的边长,且最终生成的二维码居中显示。支持矩形、圆形两种二维码类型(默认是矩形)。

码生成开发

场景介绍

码生成能够根据给定的字符串信息,生成相应的二维码图片。常见应用场景举例:

  • 社交或通讯类应用:根据输入的联系人信息,生成联系人二维码。
  • 购物或支付类应用:根据输入的支付链接,生成收款或付款二维码。

接口说明

码生成提供了IBarcodeDetector()接口,常用方法的功能描述如下:

接口名

方法

功能描述

IBarcodeDetector

int detect(String barcodeInput, byte[] bitmapOutput, int width, int height);

根据给定的信息和二维码图片尺寸,生成二维码图片字节流。

IBarcodeDetector

int release();

停止QR码生成服务,释放资源。

开发步骤

1. 在使用码生成SDK时,需要先将相关的类添加至工程

import ohos.ai.cv.common.ConnectionCallback;
import ohos.ai.cv.common.VisionManager;
import ohos.ai.cv.qrcode.IBarcodeDetector;

2. 定义ConnectionCallback回调,实现连接能力引擎成功与否后的操作。

ConnectionCallback connectionCallback = new ConnectionCallback() {
    @Override
    public void onServiceConnect() {
        // Do something when service connects successfully
    }

    @Override
    public void onServiceDisconnect() {
        // Do something when service connects unsuccessfully
    }
};

3. 调用VisionManager.init()方法,将此工程的context和connectionCallback 作为入参,建立与能力引擎的连接,context应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。

int result = VisionManager.init(context, connectionCallback);

4. 在收到onServiceConnect回调连接服务成功后,实例化IBarcodeDetector接口,将此工程的context作为入参

IBarcodeDetector barcodeDetector = VisionManager.getBarcodeDetector(context);

5. 定义码生成图像的尺寸,并根据图像大小分配字节流数组空间。

final int SAMPLE_LENGTH = 152;
byte[] byteArray = new byte[SAMPLE_LENGTH * SAMPLE_LENGTH * 4];

6. 调用IBarcodeDetector的detect()方法,根据输入的字符串信息生成相应的二维码图片字节流。

int result = barcodeDetector.detect("This is a TestCase of IBarcodeDetector", byteArray, SAMPLE_LENGTH, SAMPLE_LENGTH);

7. 如果返回值为0,表明调用成功。后续可以利用API将解码流转换为图片源,简要示例如下:

InputStream inputStream = new ByteArrayInputStream(byteArray);
ImageSource imageSource = ImageSource.create(inputStream, null);

8. 当码生成能力使用完毕后,调用IBarcodeDetector的release()方法,释放资源

result = barcodeDetector.release();

9. 调用VisionManager.destroy()方法,断开与能力引擎的连接。

VisionManager.destroy();

文字识别概述

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

约束与限制

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

文字识别开发

场景介绍

通用文字识别适用于如下场景:

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

接口说明

通用文字识别提供了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。

开发步骤

1. 在使用通用文字识别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;

2. 定义ConnectionCallback回调,实现连接能力引擎成功与否后的操作。

ConnectionCallback connectionCallback = new ConnectionCallback() {
    @Override
    public void onServiceConnect() {
        // 定义连接能力引擎成功后的操作。
    }

    @Override
    public void onServiceDisconnect() {
        // 定义连接能力引擎失败后的操作。
    }
};

3. 调用VisionManager.init()方法,将此工程的context和已经定义的connectionCallback回调作为入参,建立与能力引擎的连接。context应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。

int result = VisionManager.init(context, connectionCallback);

4. 在收到onServiceConnect回调连接服务成功后,实例化ITextDetector接口,将此工程的context作为入参。

ITextDetector textDetector = VisionManager.getTextDetector(context);

5. 实例化VisionImage对象image,并传入待检测图片pixelMap。

VisionImage image = VisionImage.fromPixelMap(pixelMap);

6. 实例化Text对象text,该对象在同步模式下用于存放调用textDetector.detect()方法的结果返回码及文字识别结果。

Text text = new Text();

7. (可选) 定义VisionCallback<Text>回调。

VisionCallback<Text> callback= new VisionCallback<Text>() {
    @Override
    public void onResult(Text text) {
        // 对正确获得文字识别结果进行处理。
    }

    @Override
    public void onError(int i) {
        // 处理错误返回码。
    }

    @Override
    public void onProcessing(float v) {
        // 返回处理进度。
    }
};

说明

  • 在异步模式下,该类的onResult()方法用于获得文字识别结果Text;onError()方法用于处理错误返回码;onProcessing()方法用于返回处理进度,目前没有实现此接口的功能。
  • 同步与异步模式区别在于detect()的最后一个参数VisionCallback<Text>是否为空。若非空则为异步模式。此时会忽略自定义的Text输入(效果与传入null相同),接口调用结果一律从VisionCallback<Text>获得,自定义的Text输入不做更新。

8. 通过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);

9. (可选)调用ITextDetector的prepare()方法。

result = textDetector.prepare();

说明

如果返回的result不为0,说明当前OCR能力准备失败,需要处理错误,不再执行之后的动作。在detect()方法中会首先调用prepare()启动引擎,如果引擎已经启动则不会再次启动。

10. 调用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

神经网络处理单元错误

11. 调用ITextDetector的release()方法,释放资源。调用pixelMap的release()方法,释放图片内存。

textDetector.release();
if (pixelMap != null) {
    pixelMap.release();
    pixelMap = null;
}

说明

不再使用通用文字识别能力时,调用release()方法释放资源。

12. 调用VisionManager.destroy()方法,断开与能力引擎的连接。文章来源地址https://www.toymoban.com/news/detail-502550.html

VisionManager.destroy();

到了这里,关于HarmonyOS学习路之开发篇—AI功能开发(二维码生成及文字识别)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS学习路之开发篇—AI功能开发(关键字提取)

    在日常生活中充满了各种各样的信息,这些信息千变万化。文本语言作为信息传递的一种载体,同样面临有用信息和无用信息糅杂在一起的问题。提取帮助用户在众多文本信息中快速提取出关键信息和核心内容,节省时间提高效率。 提取API提供了一个提取

    2024年02月11日
    浏览(53)
  • HarmonyOS学习路之开发篇—AI功能开发(图像超分辨率)

    针对图片分辨率不足的问题,传统的解决方案是使用双线性或双三次插值的方法来放大图像;而针对图片压缩噪声的问题,传统的解决方案则是通过各种算法实现平滑、去噪。 本SDK使用智能的方法,基于深度神经网络,依托硬件的神经网络加速器,提供适用于移动终端的1x和

    2024年02月11日
    浏览(51)
  • 免费插件-illustrator-Ai插件-印刷功能-二维码生成

    本文介绍一款免费插件,加强illustrator使用人员工作效率,进行二维码生成。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501,经过测试,这款插件在CC 2018之后都可以使用。 点击安装按钮即可以完成安装,如下图所示: 打开illustrator之后,通过窗口扩

    2024年02月13日
    浏览(43)
  • AI 绘画Stable Diffusion 研究(十)sd图生图功能详解-精美二维码的制作

    免责声明: 本案例所用安装包免费提供,无任何盈利目的。 大家好,我是风雨无阻。 为了让大家更直观的了解图生图功能,明白图生图功能到底是干嘛的,能做什么事情?今天我们继续介绍图生图的实用案例-精美二维码的制作。 对于新朋友,想详细了解Stable Diffusion 的话,

    2024年02月09日
    浏览(48)
  • flutter开发实战-flutter二维码条形码扫一扫功能实现

    flutter开发实战-flutter二维码条形码扫一扫功能实现 flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan 效果图如下 1.1 iOS权限设置 1.2 android权限设置 1.3 使用ScanView的widget 扫一扫Widget使用ScanController来做响应的控制 暂停/恢复camera 识

    2024年02月16日
    浏览(46)
  • Android实现生成二维码以及扫描二维码的功能(超级简单!)

    文章目录 ​​​​​​ 前言 二、实现生成二维码的功能 三、实现扫面二维码的功能 总结 提示:这里可以添加本文要记录的大概内容: 我是通过一个第三方库来实现二维码的生成,以及扫描二维码的功能,开源库如下: 一、布局文件如下 布局比较简单,就只有简单的一些

    2024年02月12日
    浏览(57)
  • 【Android】实现生成二维码、条形码和扫描二维码的功能

    目录 一、添加依赖 二、布局文件 三、实现生成二维码的功能 四、效果图 要先添加一个第三方库来实现二维码的生成以及扫描二维码的功能,开源库如下: 在build.grade(Moudle)中添加依赖: 效果如下: activity_main.xml: MainActivity.java: 简单粗暴! 感谢ლ(°◕‵ƹ′◕ლ)!!!

    2024年02月11日
    浏览(66)
  • H5实现扫码读取二维码条形码功能(二维码+条形码)

    本文主要介绍二维码实现的原理 1、使用插件 npm install @zxing/library 2、主要用到 BrowserMultiFormatReader 这个构造函数,用于打开摄像头 视图 核心代码(以vue3写法举例) 二维码的样式 ``

    2024年02月11日
    浏览(54)
  • java实现二维码生成功能

    由于现在对二维码的使用比较多,正好我在项目里面也使用到了,所以写篇博客记录一下。 这里我是将我博客主页的url生成二维码,微信扫一扫可以看到我的博客主页(欢迎骚扰) 4.1、设置参数 上面这个只是简单的生成二维码,接下来说说自定义参数的方式生成,如长、宽

    2024年02月11日
    浏览(48)
  • 微信小程序 — 生成二维码功能

    微信小程序实现生成二维码功能。需要用到canvas组件,设置 type为2d.  需要使用js包 weapp-qrcode-canvas-2d https://github.com/DoctorWei/weapp-qrcode-canvas-2d weapp-qrcode-canvas-2d 是使用新版canvas-2d接口在微信小程序中生成二维码(外部二维码)的js包。canvas 2d 接口支持同层渲染且性能更佳,可大

    2024年02月09日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包