智慧新手村 2026-10-23 15:37:22 发布平时开发工具类应用时,我经常遇到一个看似简单、实现起来却挺有价值的需求:用户拍一张纸质资料的照片,应用就能把上面的文字提取出来。
以前我会考虑让用户手动输入,或者通过其他方式处理图片。但在学习 HarmonyOS 7 的 AI 开放能力后,我发现可以利用 Core Vision Kit 提供的通用文字识别能力,把图片中的文字提取流程整合进自己的应用。
我想做一个简单的 OCR 小工具,先不追求复杂的文档理解,只解决“拍照之后,怎样快速拿到文字”这个问题。
先把识别结果变成应用可以使用的数据
OCR 返回的内容不一定就是一段可以直接保存的纯文本。对于不同场景,我们可能还需要考虑文字顺序、换行、空格,以及用户是否需要修改识别结果。
我会先设计一个统一的数据模型,让后续页面和业务逻辑不依赖某个具体识别服务的返回格式。
interface OcrResult {
text: string;
confidence: number;
}
function normalizeOcrText(
result: OcrResult
): string {
return result.text
.replace(/\r\n/g, '\n')
.trim();
}
function isValidOcrResult(
result: OcrResult
): boolean {
return result.text.trim().length > 0;
}这里的 OcrResult 是应用内部定义的结构,并不代表 Core Vision Kit 的原生返回类型。实际接入时,需要根据对应版本的官方 API,将识别结果转换成这个业务模型。
识别完成后,不要急着保存
我觉得 OCR 工具真正影响体验的地方,不只是识别率,还有识别完成后的处理方式。
例如,一张包含标题、段落和页码的资料照片,即使识别出了所有文字,也可能出现段落顺序错误。用户如果直接复制结果,最后得到的内容可能很难阅读。
因此,我会在结果页提供文本编辑框,让用户先检查,再决定复制、保存或者分享。
@Entry
@Component
struct OcrResultPage {
@State extractedText: string = '';
build() {
Column({ space: 12 }) {
Text('识别结果')
.fontSize(24)
.fontWeight(FontWeight.Bold)
TextArea({
text: this.extractedText,
placeholder: '识别完成后,文字会显示在这里'
})
.height(260)
.onChange((value: string) => {
this.extractedText = value;
})
Button('清空文本')
.onClick(() => {
this.extractedText = '';
})
}
.padding(20)
.width('100%')
}
}这段代码是 ArkUI 结果编辑页的示例,不包含实际 OCR 调用。正式开发时,需要将图片选择、识别任务和结果回填连接起来,并按目标 SDK 校验组件属性和能力接口。
我会重点测试这三种图片
第一种是光线充足、文字清晰的打印资料,用来验证基本流程。
第二种是倾斜拍摄的书页,检查识别结果是否存在明显漏字、错字和顺序问题。
第三种是带有复杂背景的照片,例如桌面上的纸张或者屏幕截图,看看实际结果是否仍然方便用户使用。
还要处理图片为空、识别失败、用户取消操作等异常情况。
如果应用涉及身份证件、合同或者内部资料,还需要考虑图片访问权限、识别结果缓存和数据清理,不能因为使用 OCR 就默认允许任意读取图片。
对我来说,OCR 最有价值的地方,是把图片里的文字变成后续业务可以使用的数据。只要再结合搜索、笔记和资料管理功能,一个简单的文字识别工具就能逐步成长为真正的效率应用。
相关推荐
智慧新手村
我还没有写个人简介......
帖子
提问
粉丝
“深”音|即将越过1亿用户“临界点” 鸿蒙生态的下一程路在何方?
2026-09-01 17:38:52 发布鸿蒙7.0开发者Beta1版正式发布
2026-06-16 15:41:00 发布


0
京公网安备:11010502051901号