原理介绍
鸿蒙系统的文字和提取主要是使用基础视觉服务下图是相关介绍
本文主要是使用基础视觉服务的的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}`;
- });
- }
评论记录:
回复评论: