HarmonyOS NEXT AI基础视觉服务-文字识别

案例描述

这是一个基于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. 完整业务逻辑

整合各功能模块的完整调用流程

总结梳理:

核心点

  1. 相机调用需设备权限与硬件支持
  2. 图像转换确保兼容不同格式图片
  3. 文字识别接口返回结构化识别结果

完整代码

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%')
  }
}
相关推荐
讯方洋哥1 天前
HarmonyOS应用开发——应用状态
华为·harmonyos
ujainu1 天前
鸿蒙与Flutter:全场景开发的技术协同与价值
flutter·华为·harmonyos
FrameNotWork1 天前
HarmonyOS 教学实战:从 0 写一个完整应用(真正能跑、能扩展)
pytorch·华为·harmonyos
Random_index1 天前
#HarmonyOS篇:鸿蒙开发模板&&三方库axios使用&&跨模块开发交互
harmonyos
游戏技术分享1 天前
【鸿蒙游戏技术分享 第71期】资质证明文件是否通过
游戏·华为·harmonyos
赵浩生1 天前
鸿蒙技术干货11:属性动画与转场效果实战
harmonyos
Monkey_241 天前
鸿蒙开发工具大全
华为·harmonyos
灰灰勇闯IT1 天前
鸿蒙 5.0 开发入门第二篇:掌握 ArkTS 的 if 分支语句,实现条件逻辑判断
华为·harmonyos
2501_925317131 天前
[鸿蒙2025领航者闯关] 把小智AI装进「第二大脑」:从开箱到MCP智能体的全链路实战
人工智能·microsoft·harmonyos·鸿蒙2025领航者闯关·小智ai智能音箱·mcp开发
柒儿吖1 天前
让终端输出更美观:term_grid网格布局工具在OpenHarmony PC上的完整适配实战
harmonyos