自学记录鸿蒙API 13:实现智能文本识别Core Vision Text Recognition

embedded/2025/1/1 19:55:20/

在完成语音助手项目后,我想试试其他的AI的API 13,于是我瞄上了——智能文本识别。通过研究HarmonyOS Next最新版本API 13中的Core Vision Text Recognition API,我深刻感受到了鸿蒙生态在计算机视觉领域的强大支持。该API能够快速将图像中的文本内容提取为结构化信息,官方给了足够的支持,也为开发者提供了丰富的应用场景。

开始我的学习旅程

每次接触新的API,我都会抱着探索和学习的态度,了解其使用场景和核心功能。文本识别技术广泛应用于文档扫描、票据管理以及实时翻译等场景,因此我决定基于这一API开发一个支持文本识别与显示的应用,并记录下整个学习与开发过程。

第一步:理解Core Vision Text Recognition API的核心功能

核心功能简介

Core Vision Text Recognition API 提供了从图像中提取文本的能力,支持多语言高精度识别,其核心功能包括:

  • 文本区域检测:精准定位图像中的文本内容。
  • 多语言支持:包括简体中文、英文、日文、韩文和繁体中文。
  • 结构化结果输出:识别的结果以段落(TextBlock)、行(TextLine)和单词(TextWord)的形式返回。

应用场景

  • 文档数字化:自动提取纸质文档内容并保存为可编辑文本。
  • 票据管理:高效提取发票或收据信息以便整理。
  • 实时翻译:通过识别图像中的文字实现动态翻译。

第二步:项目初始化与配置

在开发HarmonyOS应用时,权限配置是必不可少的步骤。

权限配置

在config.json文件中添加以下配置,确保应用拥有必要的权限:

{"module": {"abilities": [{"name": "TextRecognitionAbility","permissions": ["ohos.permission.INTERNET","ohos.permission.READ_MEDIA","ohos.permission.WRITE_MEDIA"]}]}
}

第三步:实现文本识别功能

初始化Text Recognition服务

通过以下代码初始化文字识别服务:

import textRecognition from '@kit.CoreVisionKit';let recognizerInstance = null;async function initializeTextRecognition() {try {recognizerInstance = await textRecognition.init();console.info('文本识别服务初始化成功');} catch (error) {console.error('文本识别服务初始化失败:', error);}
}initializeTextRecognition();

图像加载与识别

在图像识别过程中,我们首先加载待处理的图像,然后调用recognizeText接口提取文本信息。

async function recognizeTextFromImage(imageUri: string) {try {const visionInfo = { pixelMap: await loadPixelMap(imageUri) };const result = await textRecognition.recognizeText(visionInfo);// 加长部分:
// 假设用户希望进一步定制识别行为,可以传递一个带有附加配置的对象来优化性能。例如:
const advancedConfig = { isDirectionDetectionSupported: false };
const advancedResult = await textRecognition.recognizeText(visionInfo, advancedConfig);
console.info('高级识别结果:', advancedResult);// 此外,用户可以将结果导出到文件或进行进一步的处理
saveRecognitionResult(advancedResult);
function saveRecognitionResult(result) {console.info('结果已保存:', result.value);// 在这里可以实现将结果写入文件或数据库的逻辑
}console.info('识别结果:', result.value);result.blocks.forEach((block) => {console.info(`段落内容: ${block.value}`);block.lines.forEach((line) => {console.info(`  行内容: ${line.value}`);line.words.forEach((word) => {console.info(`    单词: ${word.value}`);});});});} catch (error) {console.error('文本识别失败:', error);}
}async function loadPixelMap(imageUri) {// 实现加载图像为PixelMap的逻辑return await someImageLibrary.loadPixelMap(imageUri);
}const imagePath = '/data/media/sample_image.jpg';
recognizeTextFromImage(imagePath);

第四步:构建用户界面

为了让用户可以直观地体验文本识别功能,我设计了一个简单的界面,支持图像选择和识别结果的展示。

ArkUI界面实现

以下是界面的实现代码:

import { View, Text, Button, Image } from '@ohos.arkui';export default View.create({build() {return ({type: "flex",flexDirection: "column",children: [{type: Text,content: "文本识别应用",style: { height: "50vp", fontSize: "20vp", textAlign: "center" },},{type: Image,src: this.imageUri || '',style: { height: "200vp", width: "200vp", margin: "20vp" }},{type: Button,content: "选择图片",style: { height: "50vp", marginTop: "20vp" },onClick: this.onSelectImage},{type: Button,content: "识别文本",style: { height: "50vp", marginTop: "10vp" },onClick: this.onRecognizeText}]});},onSelectImage() {// 模拟选择图片this.imageUri = '/data/media/sample_image.jpg';console.info('图片选择完成:', this.imageUri);},async onRecognizeText() {await recognizeTextFromImage(this.imageUri);}
});

第五步:性能优化与功能扩展

在项目开发过程中,我还探索了如何通过配置选项优化性能。例如,在不需要文字方向检测的情况下,可以通过以下方式禁用此功能以提升处理速度:

const configuration = { isDirectionDetectionSupported: false };
const result = await textRecognition.recognizeText(visionInfo, configuration);

此外,还可以扩展支持更多语言的功能,通过getSupportedLanguages接口获取当前支持的语言列表:

const languages = await textRecognition.getSupportedLanguages();
console.info('支持的语言列表:', languages);

最后的小总结

研究完HarmonyOS Next Core Vision Text Recognition API 13,还是很震撼的,之前非常难的东西目前也可以一个API就搞定了,特别舒服,同时也认识到了鸿蒙生态为开发者提供的便捷与强大。从服务的初始化到界面构建,再到性能优化,每一个步骤都让我感受到技术的魅力。

未来,我计划将这一技术应用于实际项目,例如开发票据管理工具或实时翻译应用。如果你也对文本识别感兴趣,不妨动手尝试,从简单的功能开始,逐步实现更复杂的需求!

当然如果你也在这一领域研究,不妨关注我,我们一起进步~!


http://www.ppmy.cn/embedded/149857.html

相关文章

现代网络负载均衡与代理导论

大家觉得有有参考意义和帮助记得及时关注和点赞!!! Service mesh 是近两年网络、容器编排和微服务领域最火热的话题之一。Envoy 是目前 service mesh 数据平面的首选组件。Matt Klein 是 Envoy 的设计者和核心开发。 文章循序渐进&#xff0…

【机器学习】机器学习的基本分类-半监督学习(Semi-supervised Learning)

半监督学习是一种介于监督学习和无监督学习之间的机器学习方法。它利用少量的标注数据(有监督数据)和大量的未标注数据(无监督数据)来进行模型训练,从而在标注数据不足的情况下,提升模型的性能。 半监督学习…

Docker下TestHubo安装配置指南

TestHubo是一款开源免费的测试管理工具, 下面介绍Docker 私有部署的安装与配置。TestHubo 私有部署版本更适合有严格数据安全要求的企业,支持在本地或专属服务器上运行,以实现对数据和系统的完全控制。 1、Docker 服务端安装 Docker安装包下…

Word表格另起一页解决办法

Word表格另起一页解决办法 表格设置根据内容自动调整,取消指定高度第1步 第2步

深入探索Django:常用实用方法指南

Django是一个高级的Python Web框架,旨在快速开发和简洁、实用的设计。它内置了许多功能,使得开发者能够高效地构建Web应用。在这篇博文中,我们将深入探讨一些Django中常用的实用方法,这些方法可以帮助你更好地控制Django应用的行为,使其更加灵活和安全。 © ivwdcwso …

Mirror网络框架-从入门到精通之Mirror简介

前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文将深入介绍Mirror的基本概念、如何与其他网络框架进…

HTMLCSS:惊!3D 折叠按钮

这段代码创建了一个具有 3D 效果和动画的按钮,按钮上有 SVG 图标和文本。按钮在鼠标悬停时会显示一个漂浮点动画,图标会消失并显示一个线条动画。这种效果适用于吸引用户注意并提供视觉反馈。按钮的折叠效果和背景渐变增加了页面的美观性。 演示效果 HT…

使用FFmpeg进行拉流和推流操作

FFmpeg是一款强大的多媒体处理工具,可以用于视频的录制、转换、推流和拉流等操作。下面将详细介绍如何使用FFmpeg进行拉流和推流操作。 1. FFmpeg推流操作 推流是将本地的音视频流推送到流媒体服务器上,例如主播将本地电脑上的画面推流到直播平台的流媒…