HarmonyOS NEXT AI 基础视觉服务 - 文字识别
作者:zhousg
- 2025-03-30 北京
本文字数:1532 字
阅读完需:约 5 分钟
案例描述
这是一个基于 AI 基础视觉服务实现的文字识别案例,通过调用设备相机拍摄照片后识别图片中的文字内容。
实现步骤:
1. 模块导入
// 导入功能模块
import { camera, cameraPicker } from '@kit.CameraKit';
import { fileIo } from '@kit.CoreFileKit';
import image from '@ohos.multimedia.image';
import { textRecognition } from '@kit.CoreVisionKit';
复制代码
2. 相机调用与图片获取
// 创建相机选择器实例
const res = await cameraPicker.pick(getContext(), [
cameraPicker.PickerMediaType.PHOTO
], {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK
});
// 获取拍摄的图片URI
const imageUri = res.resultUri;
复制代码
3. 图像处理流程
// 将图片转换为可识别的像素图
const fileSource = await fileIo.open(imageUri, fileIo.OpenMode.READ_ONLY);
const imageSource = image.createImageSource(fileSource.fd);
const pixelMap = await imageSource.createPixelMap();
复制代码
4. 文字识别核心实现
// 配置视觉识别参数
let visionInfo: textRecognition.VisionInfo = {
pixelMap: pixelMap
};
// 执行文字识别并获取结果
const recognitionResult = await textRecognition.recognizeText(visionInfo);
this.text = recognitionResult.value;
复制代码
5. 界面构建与交互
@Entry
@Component
struct TextRecognition {
@State text: string = '';
// 按钮点击事件处理
async openCamera() {
// 整合上述步骤的完整调用逻辑
}
build() {
Column() {
Button('拍照 文字识别')
.onClick(() => this.openCamera())
Text(this.text)
.fontSize(20)
.margin(10)
}
.padding(20)
}
}
复制代码
2. 完整业务逻辑
整合各功能模块的完整调用流程
总结梳理:
核心点
相机调用需设备权限与硬件支持
图像转换确保兼容不同格式图片
文字识别接口返回结构化识别结果
完整代码
// 原始代码保持完整,仅添加说明注释
import { camera, cameraPicker } from '@kit.CameraKit';
import { fileIo } from '@kit.CoreFileKit';
import image from '@ohos.multimedia.image';
import { textRecognition } from '@kit.CoreVisionKit';
@Entry
@Component
struct TextRecognition {
@State text: string = '';
// 主功能方法:整合相机调用与文字识别
async openCamera() {
// 步骤1:调用相机拍摄
const res = await cameraPicker.pick(getContext(), [cameraPicker.PickerMediaType.PHOTO], {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK
})
// 步骤2:检查OCR能力可用性
// 使用canIUse接口检测设备是否支持文字识别能力
if (canIUse('SystemCapability.AI.OCR.TextRecognition')) {
// 步骤3:处理图像文件
const fileSource = await fileIo.open(res.resultUri, fileIo.OpenMode.READ_ONLY);
const imageSource = image.createImageSource(fileSource.fd);
const chooseImage = await imageSource.createPixelMap();
// 步骤4:执行文字识别
let visionInfo: textRecognition.VisionInfo = {
pixelMap: chooseImage
};
const data = await textRecognition.recognizeText(visionInfo);
// 更新识别结果到界面
this.text = data.value
}
}
// UI布局
build() {
Column() {
Button('拍照 文字识别')
.onClick(() => {
this.openCamera()
})
Text(this.text)
.fontSize(20)
.margin(10)
}
.height('100%')
.width('100%')
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【zhousg】的原创文章。
原文链接:【http://xie.infoq.cn/article/6ae70bb63bace14b833872862】。文章转载请联系作者。

zhousg
关注
还未添加个人签名 2025-03-14 加入
还未添加个人简介
评论