鸿蒙系统文字识别和提取

原理介绍

鸿蒙系统的文字和提取主要是使用基础视觉服务下图是相关介绍

本文主要是使用基础视觉服务的的textRecognition方法,识别图片中的文字。

功能实现

  1. 配置页面的布局,并添加点击事件

    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();
            })复制
  2. 通过图库获取图片资源

    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('');
          })
        })
      }复制
  3. 将图片资源转换为需要的格式(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)
      }复制
  4. 初始化相关资源

      //初始化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);
      }复制

  5. 调用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}`;
          });
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值