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

简介: 本案例展示了一款基于AI基础视觉服务的文字识别应用,通过调用设备相机拍摄照片并识别图片中的文字内容。主要实现步骤包括:1) 导入所需功能模块;2) 调用相机获取图片URI;3) 将图片转换为可识别的像素图;4) 配置视觉识别参数并执行文字识别;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. 完整业务逻辑

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

总结梳理:

核心点

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

完整代码

// 原始代码保持完整,仅添加说明注释
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%')
  }
}
相关文章
|
4月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
582 62
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:IndexTTS2–B站、HuMo、Stand-In视觉生成框架、Youtu-GraphRAG、MobileLLM-R1–Meta、PP-OCRv5
AI Compass前沿速览:IndexTTS2–B站、HuMo、Stand-In视觉生成框架、Youtu-GraphRAG、MobileLLM-R1–Meta、PP-OCRv5
420 10
AI Compass前沿速览:IndexTTS2–B站、HuMo、Stand-In视觉生成框架、Youtu-GraphRAG、MobileLLM-R1–Meta、PP-OCRv5
|
5月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
245 1
|
5月前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
551 1
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
5月前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
272 1
|
5月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
462 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
5月前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段三
本文介绍了UI开发中的样式复用与组件构建技术,涵盖@Extend、@Styles和@Builder的使用方法,并通过Swiper轮播、Scroll滚动、Tabs导航等常用组件实现典型界面效果,结合生肖抽卡、小米轮播、回顶按钮等案例,展示实际应用技巧。
168 1
|
5月前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
本文介绍鸿蒙应用界面开发中的弹性布局(Flex)、绝对定位、层叠布局及ArkTS语法进阶,涵盖字符串拼接、类型转换、数组操作、条件与循环语句,并结合B站视频卡、支付宝首页等案例,深入讲解点击事件、状态管理与界面交互功能。
369 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
|
5月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
773 0
|
6月前
|
移动开发 网络协议 小程序
鸿蒙NEXT即时通讯/IM系统RinbowTalk v2.4版发布,基于MobileIMSDK框架、ArkTS编写
RainbowTalk是一套基于开源即时通讯讯IM框架 MobileIMSDK 的产品级鸿蒙NEXT端IM系统。纯ArkTS编写、全新开发,没有套壳、也没走捷径,每一行代码都够“纯血”。与姊妹产品RainbowChat和RainbowChat-Web 技术同源,历经考验。
296 1