- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等.
原生即指将一些能力直接集成在本地鸿蒙系统中,通过不同层次的AI能力开放,满足开发者的不同场景下的诉求,降低应用开发门槛,帮助开发者快速实现应用智能化 。
@kit.VisionKit
中例如本篇要讲的文字识别即是如此。概念:将图片中的文字给识别出来 。
使用 textRecognition 实现文本识别 。
限制:
使用步骤 。
导入textRecognition 。
import { textRecognition } from '@kit.CoreVisionKit'
实例化visionInfo对象,用来准备待识别的图片(需PixelMap类型) 。
let visionInfo: textRecognition.VisionInfo = {
pixelMap: '待识别图片'
};
实例化TextRecognitionConfiguration对象,设置识别配置(目前仅有是否开启朝向检测一项配置) 。
let textConfiguration: textRecognition.TextRecognitionConfiguration = {
// 是否开启朝向检测
isDirectionDetectionSupported: false
};
调用textRecognition的recognizeText接口传入以上两个对象,开启识别并对识别结果进行处理,得到的是TextRecognitionResult类型结果,这个对象的value属性即为识别结果 。
textRecognition.recognizeText(visionInfo, textConfiguration)
这里解释一下这几步 。
你需要用textRecognition,所以需要先找到它,也即导入,这没什么好说的 。
你需要用它来帮你识别图片,那你是不是应该把需要识别的图片给它?所以第一个参数就是给他传递一个图片,只不过这个图片只能传PixelMap类型的(这就是为什么上篇我要写PixMap的原因),但是这个图片不能直接传,要包装成VisionInfo类型的对象(虽然目前为止,这个对象只有这一个属性,但保不齐未来会加) 。
然后就是设置一下它识别的相关参数,它目前也只有一个参数,叫isDirectionDetectionSupported,设置是否开启朝向检测,因为有的图片可能是正的,有的图片可能是反的斜的。所以对于反的斜的图片如果这项开启为true,则会检测的更为准确。但是经过猫林老师肉测,其实开不开启扫描反的斜的图片,得到的结果都差不多了。所以可以看自己选择。顺便一提,这个参数可以不传,不传默认是true。然后猫林老师觉得:未来随着API发展,可能会多一些参数也说不准 。
最后即为调用其进行识别的方法,也即recognizeText开始识别 。
根据上面所说的,其实上面说的四步,也可以极简改为两步,代码如下 。
import { textRecognition } from '@kit.CoreVisionKit'
textRecognition.recognizeText({ pixelMap: '待识别图片' })
至于如何读取相册图片,以及把图片解码变成PixelMap,不是今天分享的主题,且之前猫林老师有两篇文章分别讲过不会的可以看之前文章,所以这里直接给代码(可看注释) 。
// 1. 使用PhotoViewPicker选择相册图片
let photoPicker = new photoAccessHelper.PhotoViewPicker();
// 2. 使用select方法开始选择图片
photoPicker.select({
// 设置只选择图片
MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
// 设置最大只能选择1张
maxSelectNumber: 1
})
.then((res: photoAccessHelper.PhotoSelectResult) => {
// res参数里的photoUris属性即为选择的图片结果数组(因为可以选择多张),每个元素得到的是临时路径
// 用fs打开这个路径
let fileSource = fileIo.openSync(res.photoUris[0], fileIo.OpenMode.READ_ONLY);
// 使用createImageSource方法将图片文件流常见成图片源码
let imageSource = image.createImageSource(fileSource.fd);
// 再使用createPixelMap方法,将图片源码制作成PixelMap类型
const pixelMap = imageSource.createPixelMapSync()
// 后续使用textRecognition的recognizeText那一套代码进行识别即可
})
我们来实现如下图的效果 。
结合上面说的使用方法,最终文本识别代码如下 。
import { photoAccessHelper } from '@kit.MediaLibraryKit'
import { fileIo } from '@kit.CoreFileKit'
import { image } from '@kit.ImageKit'
import { textRecognition } from '@kit.CoreVisionKit'
@Entry
@Component
struct Index {
@State text: string = '识别结果'
@State imgPixelMap: PixelMap | null = null
build() {
Column({ space: 20 }) {
Button('打开图片')
.width('85%')
.onClick(async () => {
const uri = await this.selectPhoto()
if (uri) {
const pixelMap = await this.getPixMap(uri)
this.imgPixelMap = pixelMap
}
})
Button('开始识别')
.width('85%')
.onClick(() => {
this.recognize()
})
Image(this.imgPixelMap)
.objectFit(ImageFit.Contain)
.height('45%')
Text(this.text)
.width('85%')
.layoutWeight(1)
.border({ style: BorderStyle.Dotted, width: 5, color: Color.Red })
}
.width('100%')
.height('100%')
}
async selectPhoto() {
try {
// 实例化照片选择器
const picker = new photoAccessHelper.PhotoViewPicker()
// 选择图片
const uris = await picker.select({
MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
maxSelectNumber: 1
})
return uris.photoUris[0]
} catch {
console.log('err')
return null
}
}
// 根据图片路径转PixelMap
async getPixMap(uri: string) {
try {
const imgSrc = await fileIo.open(uri, fileIo.OpenMode.READ_ONLY)
let source = image.createImageSource(imgSrc.fd)
return source.createPixelMapSync()
} catch {
console.log('error' + uri)
return null
}
}
// 文字识别
async recognize() {
const info: textRecognition.VisionInfo = {
pixelMap: this.imgPixelMap!
}
const res = await textRecognition.recognizeText(info, {
isDirectionDetectionSupported: false
})
this.text = res.value
}
}
最后此篇关于鸿蒙(HarmonyOS)原生AI能力之文本识别的文章就讲到这里了,如果你想了解更多关于鸿蒙(HarmonyOS)原生AI能力之文本识别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
鸿蒙(HarmonyOS)原生AI能力之文本识别 原生智能介绍 在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等。 原生即指将一些能力直接集成在
前言: 各位同学大家好,有段时间没有给大家更新文章 ,最近还在学习鸿蒙开发的支持,就想着把android里面部分用到知识搬到鸿蒙里面 因为基础语言都是java 语言,所以就写了现在这教程 那么
我是一名优秀的程序员,十分优秀!