赞
踩
为应用提供丰富的AI(Artificial Intelligence)能力,支持开箱即用。开发者可以灵活、便捷地选择AI能力,让应用变得更加智能。
已开放的AI能力如下表所示:
能力 | 简介 |
---|---|
二维码生成 | 根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过二维码字节流生成二维码图片。 |
通用文字识别 | 通过拍照、扫描等光学输入方式,把各种票据、卡证、表格、报刊、书籍等印刷品文字转化为图像信息,再利用文字识别技术将图像信息转化为计算机等设备可以使用的字符信息的技术。 |
图像超分辨率 | 提供适用于移动终端的1x和3x超分能力;1x超分可以去除图片的压缩噪声,3x超分在有效抑制压缩噪声的同时,提供3倍的边长放大能力。 |
文档检测校正 | 提供了文档翻拍过程的辅助增强功能,包含两个子功能:文档检测和文档校正。 |
文字图像超分 | 文字图像超分辨率可以对包含文字内容的图像进行9倍放大(高宽各放大3倍),同时增强图像内文字的清晰度,称为“文字图像超分辨率”,简称“文字图像超分”。 |
分词 | 对于一段输入文本,可以自动进行分词,同时提供不同的分词粒度。开发者可以根据需要自定义分词粒度。 |
词性标注 | 对于输入的一段文本,自动通过词性标注接口对其进行分词,并为分词结果中的每个单词标注一个正确的词性。词性标注提供不同的分词粒度,开发者可以根据需要自定义分词粒度。 |
助手类意图识别 | 对用户发送给设备的文本消息进行语义分析和意图识别,进而衍生出各种智能的应用场景,使设备更智慧、更智能。 |
IM类意图识别 | 利用机器学习技术,针对用户短信或聊天类APP等IM应用的文本消息进行内容分析,并识别出消息内容代表的用户意图。 |
关键字提取 | 可以在大量信息中提取出文本想要表达的核心内容,可以是具有特定意义的实体,如:人名,地点,电影等。也可以是一些基础但是在文本中很关键的词汇。 |
实体识别 | 从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。 |
语音识别 | 将语音文件、实时语音数据流转换为汉字序列,准确率达到90%以上(本地识别95%)。 |
语音播报 | 将文本转换为语音并进行播报。 |
说明 目前,二维码生成能力支持智能穿戴设备和手机;其他AI能力仅支持手机设备。
码生成能够根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过二维码字节流生成二维码图片。
码生成能够根据给定的字符串信息,生成相应的二维码图片。常见应用场景举例:
码生成提供了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是一种通过拍照、扫描等光学输入方式,把各种票据、卡证、表格、报刊、书籍等印刷品文字转化为图像信息,再利用文字识别技术将图像信息转化为计算机等设备可以使用的字符信息的技术。
通用文字识别适用于如下场景:
通用文字识别提供了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。 |
默认值为TextConfiguration.AUTO。 setProcessMode() mode int 进程模式定义:
默认值为VisionConfiguration.MODE_OUT。
调用ITextDetector的detect()方法,获取识别结果。
int detect(VisionImage image, Text result, VisionCallback<Text> visionCallBack);
其中:
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) {
- // 返回处理进度。
- }
- };
复制
说明
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); // 异步
说明
结果码定义如下表:
结果码 | 说明 |
---|---|
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()方法,断开与能力引擎的连接。
VisionManager.destroy();
最后,为了能让大家更好的去学习提升鸿蒙 (Harmony OS) 开发技术,小编连夜整理了一份30个G纯血版学习资料(含视频、电子书、学习文档等)以及一份在Github上持续爆火霸榜的《纯血版华为鸿蒙 (Harmony OS)开发手册》(共计890页),希望对大家有所帮助。
需要以上视频学习资料小伙伴
这份手册涵盖了当前鸿蒙 (Harmony OS) 开发技术必掌握的核心知识点
HarmonyOS 概念:
如何快速入门?
开发基础知识:
基于ArkTS 开发:
获取以上文中提到的这份纯血版鸿蒙 (Harmony OS) 开发资料的小伙伴
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。