原理介绍
鸿蒙系统的文字和提取主要是使用基础视觉服务下图是相关介绍
本文主要是使用基础视觉服务的的textRecognition方法,识别图片中的文字。
功能实现
-
配置页面的布局,并添加点击事件
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(); })
复制 -
通过图库获取图片资源
private openPhoto(): Promise<string> { return new Promise<string>((resolve) => { let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker(); photoPicker.select({ MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE, maxSelectNumber: 1 }).then((res: photoAccessHelper.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(''); }) }) }
复制 -
将图片资源转换为需要的格式(PixelMap)
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) }
复制 -
初始化相关资源
//初始化textRecognition async aboutToAppear(): Promise<void> { const initResult = await textRecognition.init(); hilog.info(0x0000, 'OCRDemo', `OCR service initialization result:${initResult}`); } //释放方法textRecognition async aboutToDisappear(): Promise<void> { await textRecognition.release(); hilog.info(0x0000, 'OCRDemo', 'OCR service released successfully'); } private async selectImage() { let uri = await this.openPhoto(); if (uri === undefined) { hilog.error(0x0000, 'OCRDemo', "Failed to get uri."); return; } this.loadImage(uri); }
复制 -
调用textRecognition的recognizeText方法识别文字,并处理识别结果
private textRecognitionTest() { if (!this.chooseImage) { return; } // 实例化VisionInfo对象,并传入待检测图片的PixelMap let visionInfo: textRecognition.VisionInfo = { pixelMap: this.chooseImage }; //配置通用文本识别的配置项TextRecognitionConfiguration,用于配置是否支持朝向检测。 let textConfiguration: textRecognition.TextRecognitionConfiguration = { isDirectionDetectionSupported: false }; textRecognition.recognizeText(visionInfo, textConfiguration) .then((data: textRecognition.TextRecognitionResult) => { // 识别成功,获取对应的结果 let recognitionString = JSON.stringify(data); hilog.info(0x0000, 'OCRDemo', `Succeeded in recognizing text:${recognitionString}`); // 将结果更新到Text中显示 this.dataValues = data.value; }) .catch((error: BusinessError) => { hilog.error(0x0000, 'OCRDemo', `Failed to recognize text. Code: ${error.code}, message: ${error.message}`); this.dataValues = `Error: ${error.message}`; }); }