鸿蒙AI功能开发【hiai引擎框架-通用文字识别】 基础视觉服务

server/2024/9/23 14:26:39/

介绍

本示例展示了使用hiai引擎框架提供的通用文字识别能力。

本示例模拟了在应用里,选择一张图片,识别其文字信息并展示出来(可复制)。

需要使用hiai引擎框架通用文字识别接口@kit.CoreVisionKit.d.ts。

效果预览

1

使用说明:

  1. 在手机的主屏幕,点击”ocrDemo“,启动应用。
  2. 点击“选择图片”按钮,在图库中选择图片,或者通过相机拍照。
  3. 点击“开始识别”按钮,识别图本信息,文本展示并可复制。

具体实现

本示例展示的控件在@kit.CoreVisionKit.d.ts定义了文字识别API:

recognizeText(visionInfo: VisionInfo, callback: AsyncCallback): void

业务使用时,需要先进行import导入textRecognition。 调用通用文字识别接口,并传入想要识别的图片,接收处理返回的结果(文字信息)。参考:

import { textRecognition } from '@kit.CoreVisionKit'
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { picker, fileIo } from '@kit.CoreFileKit';@Entry
@Component
struct Index {private imageSource: image.ImageSource | undefined = undefined;@State chooseImage: PixelMap | undefined = undefined;@State dataValues: string = '';build() {Column() {Image(this.chooseImage).objectFit(ImageFit.Fill).height('60%')Text(this.dataValues).copyOption(CopyOptions.LocalDevice).height('15%').margin(10).width('60%')Button('选择图片').type(ButtonType.Capsule).fontColor(Color.White).alignSelf(ItemAlign.Center).width('80%').margin(10).onClick(() => {// 拉起图库,获取图片资源this.selectImage();})Button('开始识别').type(ButtonType.Capsule).fontColor(Color.White).alignSelf(ItemAlign.Center).width('80%').margin(10).onClick(async () => {this.textRecognitionTest();})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}private async textRecognitionTest() {if (!this.chooseImage) {return;}// 调用文本识别接口let visionInfo: textRecognition.VisionInfo = {pixelMap: this.chooseImage};let textConfiguration: textRecognition.TextRecognitionConfiguration = {isDirectionDetectionSupported: false};textRecognition.recognizeText(visionInfo, textConfiguration, (error: BusinessError, data: textRecognition.TextRecognitionResult) => {// 识别成功,获取对应的结果if (error.code == 0) {let recognitionString = data.toString();hilog.info(0x0000, 'OCRDemo', `Succeeded in recognizing text:${recognitionString}`);// 将结果更新到Text中显示this.dataValues = data.value;}if(this.chooseImage && this.imageSource) {this.chooseImage.release();this.imageSource.release();}});}private async selectImage() {let uri = await this.openPhoto();if (uri === undefined) {hilog.error(0x0000, 'OCRDemo', "Failed to get uri.");return;}this.loadImage(uri);}private openPhoto(): Promise<string> {return new Promise<string>((resolve, reject) => {let photoPicker = new picker.PhotoViewPicker();photoPicker.select({MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,maxSelectNumber: 1}).then((res: picker.PhotoSelectResult) => {resolve(res.photoUris[0]);}).catch((err: BusinessError) => {hilog.error(0x0000, 'OCRDemo', `Failed to get photo image uri. code:${err.code},message:${err.message}`);resolve('');})})}private loadImage(name: string) {setTimeout(async () => {let fileSource = await fileIo.open(name, fileIo.OpenMode.READ_ONLY);this.imageSource = image.createImageSource(fileSource.fd);this.chooseImage = await this.imageSource.createPixelMap();}, 100)}
}

以上就是本篇文章所带来的鸿蒙开发>鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!


http://www.ppmy.cn/server/99349.html

相关文章

golang for range time.Ticker 和 time.Timer时间通道使用示例 - 每隔指定时间执行一次,执行指定时长后退出执行

golang中的 ticker和timer时间通道除了可以使用for select case语句来执行外&#xff0c; 还可以使用 for range语句来执行ticker或者timer时间通道。 for range time.Ticker 和 time.Timer时间通道使用示例 下面的示例演示了time.Ticker 和 time.Timer的区别和使用演示。 Ti…

Qt实现中英文切换中QMessageBox中的中文信息怎么处理

有粉丝看了《Qt实现中英文切换》文章后&#xff0c;留言说“中英文切换中QMessageBox中的中文信息怎么处理”&#xff0c;这篇文章就告诉你处理方法。 1&#xff0c;QMessageBox OK或Cancel提示语句 QMessageBox::information(this, QString::fromLocal8Bit("测试")…

4个从阿里毕业的P7打工人,当起了包子铺的老板

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&chksmc0e47813f793f105017fb8551c9b996dc7782987e19efb166ab665f44ca6d900210e6c4c0281&scene21#wechat_redirect 《网安面试指南》h…

vue3父组件向子组件传参的具体写法

在Vue 3中&#xff0c;父组件向子组件传参&#xff08;也称作传递props&#xff09;是一种非常基本的通信方式。下面我将详细解释如何在Vue 3中实现这一功能。 1. 定义子组件并接收props 首先&#xff0c;你需要在子组件中定义你想要接收的props。这通过在组件的props选项中完…

python循环语句之while循环和for循环

文章目录 1. while 循环1.1 介绍1.1.1 生活中的循环1.1.2 程序中的循环 1.2 总结 2. while循环应用&#xff1a;1~100求和2.1 需求2.2 分析 3. while嵌套循环以及运用3.1 while嵌套循环语句的语法格式3.2 while嵌套循环使用3.2.1 要求3.2.2 参考代码 4. for循环4.1 for循环基本…

redis的数据结构与对象

简单动态字符串 文章目录 简单动态字符串SDS的定义SDS的结构图示结构SDS字段解析SDS的特点 SDS和字符串的区别常数复杂度获取字符串的长度杜绝缓冲区的溢出减少修改字符串时的内存分配次数二进制安全兼容部分c字符串函数总结 链表链表和链表节点的实现链表节点&#xff08;list…

MySQL——使用Python操作MySQL

文章目录 安装PyMySQL使用PyMySQL操作MySQL 在Python中操作MySQL数据库时&#xff0c;我们使用较多的库是 PyMySQL,如果你选择使用 PyMySQL库&#xff0c;那么首先需要通过pip安装它。pip install pymysql命令就是用来安装PyMySQL的。 安装PyMySQL 1.打开你的命令行工具&…

swift 中,对象() 和 对象.init() 的共同点和异同点

在阅读同事的代码时&#xff0c;不同人对对象的初始化方式是不一样的&#xff0c;例如存在一个对象AController, 有些人创建的方式如下&#xff1a; let controller AController()也有人创建的方式如下&#xff1a; let controller AController.init()下面来说明一下&#…