介绍
本示例展示了使用hiai引擎框架提供的通用文字识别能力。
本示例模拟了在应用里,选择一张图片,识别其文字信息并展示出来(可复制)。
需要使用hiai引擎框架通用文字识别接口@kit.CoreVisionKit.d.ts。
效果预览
使用说明:
- 在手机的主屏幕,点击”ocrDemo“,启动应用。
- 点击“选择图片”按钮,在图库中选择图片,或者通过相机拍照。
- 点击“开始识别”按钮,识别图本信息,文本展示并可复制。
具体实现
本示例展示的控件在@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)}
}
以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下:
内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!
鸿蒙【北向应用开发+南向系统层开发】文档
鸿蒙【基础+实战项目】视频
鸿蒙面经
为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!