HarmonyOS NEXT AI基础视觉服务-文字识别
案例描述
这是一个基于AI基础视觉服务实现的文字识别案例,通过调用设备相机拍摄照片后识别图片中的文字内容。
实现步骤:
1. 模块导入
// 导入功能模块 import { camera, cameraPicker } from **********'; import { fileIo } from **********'; import image from **********'; import { textRecognition } from **********';
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 **********'; import { fileIo } from **********'; import image from **********'; import { textRecognition } from **********'; @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%') } }