案例描述
这是一个基于AI基础视觉服务实现的文字识别案例,通过调用设备相机拍摄照片后识别图片中的文字内容。
实现步骤:
1. 模块导入
typescript
// 导入功能模块
import { camera, cameraPicker } from '@kit.CameraKit';
import { fileIo } from '@kit.CoreFileKit';
import image from '@ohos.multimedia.image';
import { textRecognition } from '@kit.CoreVisionKit';
2. 相机调用与图片获取
typescript
// 创建相机选择器实例
const res = await cameraPicker.pick(getContext(), [
cameraPicker.PickerMediaType.PHOTO
], {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK
});
// 获取拍摄的图片URI
const imageUri = res.resultUri;
3. 图像处理流程
typescript
// 将图片转换为可识别的像素图
const fileSource = await fileIo.open(imageUri, fileIo.OpenMode.READ_ONLY);
const imageSource = image.createImageSource(fileSource.fd);
const pixelMap = await imageSource.createPixelMap();
4. 文字识别核心实现
typescript
// 配置视觉识别参数
let visionInfo: textRecognition.VisionInfo = {
pixelMap: pixelMap
};
// 执行文字识别并获取结果
const recognitionResult = await textRecognition.recognizeText(visionInfo);
this.text = recognitionResult.value;
5. 界面构建与交互
typescript
@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. 完整业务逻辑
整合各功能模块的完整调用流程
总结梳理:
核心点
- 相机调用需设备权限与硬件支持
- 图像转换确保兼容不同格式图片
- 文字识别接口返回结构化识别结果
完整代码
typescript
// 原始代码保持完整,仅添加说明注释
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%')
}
}