本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

鸿蒙系统的TextRecognition组件提供了强大的文字识别能力,支持从图像中提取印刷体文字、手写文字以及特定格式文本(如电话号码、网址等)。

一、核心功能

功能 说明 适用场景
印刷体文字识别 识别标准印刷体文字 文档扫描、名片识别
手写文字识别 识别手写体文字 笔记数字化、表单处理
结构化识别 识别特定格式文本 身份证、票据识别
多语言支持 支持中英日韩等17种语言 国际化应用
离线识别 不依赖网络服务的本地识别 隐私敏感场景
位置信息获取 返回文字在图像中的位置 文档重构、AR标注

二、基本使用步骤

1. 导入模块

import textRecognition from '@ohos.textRecognition';

2. 创建识别器实例

// 创建文字识别器
let recognizer = textRecognition.createTextRecognizer();

3. 初始化参数设置

// 设置识别参数
recognizer.init({
  language: 'zh', // 识别语言
  mode: textRecognition.RecognizeMode.TEXT, // 识别模式
  isRemote: false // 是否使用云端识别
}, (err) => {
  if (err) {
    console.error('初始化失败: ' + JSON.stringify(err));
    return;
  }
  console.log('文字识别器初始化成功');
});

三、核心API

1. 图像识别控制

执行识别
// 从PixelMap识别
recognizer.recognize(pixelMap, (err, result) => {
  if (err) {
    console.error('识别失败: ' + JSON.stringify(err));
    return;
  }
  console.log('识别结果: ' + JSON.stringify(result));
});

// 从文件路径识别
recognizer.recognize('/data/storage/image.jpg', (err, result) => {
  // 结果处理
});
识别结果结构
interface TextRecognitionResult {
  text: string; // 识别文本
  blocks: TextBlock[]; // 文本块信息
  confidence: number; // 置信度(0-1)
}

interface TextBlock {
  text: string;
  bounds: Rect; // 文字区域 {left, top, right, bottom}
  lines: TextLine[];
}

interface TextLine {
  text: string;
  bounds: Rect;
  elements: TextElement[];
}

2. 参数调节

实时调整参数
recognizer.setParameter(
  textRecognition.RecognizerParam.LANGUAGE, 
  'en', // 切换为英语
  (err) => {
    // 回调处理
  }
);
支持调整的参数
参数 类型 可选值 说明
LANGUAGE string 'zh', 'en', 'ja'等 识别语言
MODE number TEXT/IDCARD等 识别模式
IS_REMOTE boolean true/false 是否使用云端

四、高级功能实现

1. 结构化识别(身份证示例)

// 切换为身份证识别模式
recognizer.setParameter(
  textRecognition.RecognizerParam.MODE,
  textRecognition.RecognizeMode.IDCARD,
  (err) => {}
);

// 执行识别
recognizer.recognize(pixelMap, (err, result) => {
  if (result?.idCardInfo) {
    console.log('姓名: ' + result.idCardInfo.name);
    console.log('号码: ' + result.idCardInfo.number);
  }
});

2. 手写体识别增强

// 设置手写体优化参数
recognizer.setParameter(
  textRecognition.RecognizerParam.HANDWRITING_ENHANCE,
  true,
  (err) => {}
);

3. 多语言混合识别

// 设置多语言支持
recognizer.setParameter(
  textRecognition.RecognizerParam.MULTI_LANGUAGE,
  ['zh', 'en'], // 中英文混合
  (err) => {}
);

五、完整示例代码

@Entry
@Component
struct TextRecognitionExample {
  private recognizer: textRecognition.TextRecognizer = textRecognition.createTextRecognizer();
  @State resultText: string = '识别结果将显示在这里';
  @State imageSrc: string = '/data/storage/test.jpg';

  aboutToAppear() {
    // 初始化识别器
    this.recognizer.init({
      language: 'zh',
      mode: textRecognition.RecognizeMode.TEXT
    }, (err) => {
      if (err) return;
      console.log('识别器初始化完成');
    });
  }

  build() {
    Column() {
      // 显示待识别图片
      Image(this.imageSrc)
        .width('90%')
        .height(200)
      
      // 显示识别结果
      Scroll() {
        Text(this.resultText)
          .fontSize(16)
      }
      .height(200)
      .margin(10)
      
      // 操作按钮
      Button('开始识别')
        .onClick(() => {
          this.recognizer.recognize(this.imageSrc, (err, result) => {
            if (err || !result) {
              this.resultText = '识别失败';
              return;
            }
            this.resultText = result.text;
            
            // 可视化文字位置
            result.blocks.forEach(block => {
              console.log(`文本块位置: ${JSON.stringify(block.bounds)}`);
            });
          });
        })
    }
  }

  onDestroy() {
    // 释放资源
    this.recognizer.release();
  }
}

2. 用户体验优化:

   // 显示识别进度
   @State progress: number = 0
   
   recognizer.recognize(pixelMap, {
     onProgress: (percent) => {
       this.progress = percent
     }
   }, (err, result) => {})

3. 多引擎切换:

   // 创建时指定引擎
   let customRecognizer = textRecognition.createTextRecognizer({
     engine: 'com.huawei.ocr' // 第三方引擎
   });

    六、注意

    1. 权限申请:在config.json中添加READ_MEDIA、INTERNET
    2. 性能优化

      • 大图先缩放到合理尺寸再识别
      • 批量识别使用队列控制并发数
    3. 资源释放
      • 页面销毁时调用release()方法
      • 避免重复创建识别器实例
    Logo

    讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

    更多推荐