鸿蒙HarmonyOS开发实战—AI功能开发(二维码生成及文字识别)_鸿蒙开发二维码生成器开发

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

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

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

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

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

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

IBarcodeDetector barcodeDetector = VisionManager.getBarcodeDetector(context);

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

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

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

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

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

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

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

result = barcodeDetector.release();

  1. 调用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()detectTypeintOCR引擎类型定义: TextDetectType.TYPE_TEXT_DETECT_FOCUS_SHOOT(自然场景OCR)
setLanguage()languageint识别语种定义: 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()modeint进程模式定义: VisionConfiguration.MODE_IN(同进程调用)VisionConfiguration.MODE_OUT(跨进程调用)默认值为VisionConfiguration.MODE_OUT。
  • 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 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;

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

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

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

复制

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

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

复制

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

ITextDetector textDetector = VisionManager.getTextDetector(context);

复制

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

VisionImage image = VisionImage.fromPixelMap(pixelMap);

复制

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

Text text = new Text();

复制

  1. (可选) 定义VisionCallback 回调。

VisionCallback callback= new VisionCallback () {
@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输入(效果与传入null相同),接口调用结果一律从VisionCallback 获得,自定义的Text输入不做更新。
  1. 通过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);

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

result = textDetector.prepare();

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

  1. 调用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服务已连接

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

关闭 |
| 101 | 失败 |
| 102 | 超时 |
| 200 | 输入参数不合法(图片尺寸错误) |
| 201 | 输入参数不合法(为空) |
| 210 | 输入参数合法 |
| 500 | 服务绑定异常 |
| 521 | 服务绑定异常断开 |
| 522 | 服务已连接 |

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
[外链图片转存中…(img-QHks6SWB-1713216636591)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值