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

场景介绍

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

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

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

接口名方法功能描述
IBarcodeDetectorint detect(String barcodeInput, byte[] bitmapOutput, int width, int height);根据给定的信息和二维码图片尺寸,生成二维码图片字节流。
IBarcodeDetectorint release();停止QR码生成服务,释放资源。
开发步骤
  1. 在使用码生成SDK时,需要先将相关的类添加至工程

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

  1. 定义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
}
};

  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) {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

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

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

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

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

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

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

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
[外链图片转存中…(img-xbQzSQVK-1712812804519)]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值