鸿蒙中 文字识别组件TextRecognition
鸿蒙系统TextRecognition组件提供全面的文字识别功能,支持印刷体、手写体和结构化文本(如身份证)识别,涵盖17种语言并支持离线使用。核心功能包括基本文字识别、多语言混合识别和位置信息获取。开发流程包含初始化识别器、配置参数和执行识别操作,识别结果包含文本内容及位置信息。组件还提供高级功能如手写体优化、多引擎切换和结构化识别,使用时需注意权限申请、性能优化和资源释放。典型应用场景包括文档
·
本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
鸿蒙系统的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' // 第三方引擎
});
六、注意
- 权限申请:在config.json中添加READ_MEDIA、INTERNET
-
性能优化:
- 大图先缩放到合理尺寸再识别
- 批量识别使用队列控制并发数
- 资源释放:
- 页面销毁时调用
release()方法 - 避免重复创建识别器实例
- 页面销毁时调用
更多推荐


所有评论(0)