鸿蒙(HarmonyOS)原生AI能力之文本识别

简介: 如何实现文本识别

原生智能介绍

  • 在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等。

  • 原生即指将一些能力直接集成在本地鸿蒙系统中,通过不同层次的AI能力开放,满足开发者的不同场景下的诉求,降低应用开发门槛,帮助开发者快速实现应用智能化

有哪些原生智能能力

  • 基础视觉服务
  • 基础语音服务
  • 端侧模型部署
  • 端侧推理
  • 意图框架
  • .........

基础视觉服务 - Core Vision Kit

  • Core Vision Kit(基础视觉服务)是机器视觉相关的基础能力,接下来要导入的类,都在@kit.VisionKit中例如本篇要讲的文字识别即是如此。

文本识别介绍与使用

  • 概念:将图片中的文字给识别出来

  • 使用 textRecognition 实现文本识别

  • 限制:

    • 仅能识别5种语言类型
      • 简体中文、繁体中文、英文、日文、韩文
  • 使用步骤

    1. 导入textRecognition

      import {
              textRecognition } from '@kit.CoreVisionKit'
      
    2. 实例化visionInfo对象,用来准备待识别的图片(需PixelMap类型)

      let visionInfo: textRecognition.VisionInfo = {
             
          pixelMap: '待识别图片'
      };
      
    3. 实例化TextRecognitionConfiguration对象,设置识别配置(目前仅有是否开启朝向检测一项配置)

      let textConfiguration: textRecognition.TextRecognitionConfiguration = {
             
            // 是否开启朝向检测
          isDirectionDetectionSupported: false
      };
      
    4. 调用textRecognition的recognizeText接口传入以上两个对象,开启识别并对识别结果进行处理,得到的是TextRecognitionResult类型结果,这个对象的value属性即为识别结果

      textRecognition.recognizeText(visionInfo, textConfiguration)
      
  • 这里解释一下这几步

    • 你需要用textRecognition,所以需要先找到它,也即导入,这没什么好说的

    • 你需要用它来帮你识别图片,那你是不是应该把需要识别的图片给它?所以第一个参数就是给他传递一个图片,只不过这个图片只能传PixelMap类型的(这就是为什么上篇我要写PixMap的原因),但是这个图片不能直接传,要包装成VisionInfo类型的对象(虽然目前为止,这个对象只有这一个属性,但保不齐未来会加)

      然后就是设置一下它识别的相关参数,它目前也只有一个参数,叫isDirectionDetectionSupported,设置是否开启朝向检测,因为有的图片可能是正的,有的图片可能是反的斜的。所以对于反的斜的图片如果这项开启为true,则会检测的更为准确。但是经过猫林老师肉测,其实开不开启扫描反的斜的图片,得到的结果都差不多了。所以可以看自己选择。顺便一提,这个参数可以不传,不传默认是true。然后猫林老师觉得:未来随着API发展,可能会多一些参数也说不准

    • 最后即为调用其进行识别的方法,也即recognizeText开始识别

    • 根据上面所说的,其实上面说的四步,也可以极简改为两步,代码如下

      import {
              textRecognition } from '@kit.CoreVisionKit'
      
      textRecognition.recognizeText({
              pixelMap: '待识别图片' })
      
      • 解释:这里就相当于没传第二个参数,它默认值即为true,也即开启朝向检测。
  • 至于如何读取相册图片,以及把图片解码变成PixelMap,不是今天分享的主题,且之前猫林老师有两篇文章分别讲过不会的可以看之前文章,所以这里直接给代码(可看注释)

    // 1. 使用PhotoViewPicker选择相册图片
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    // 2. 使用select方法开始选择图片
     photoPicker.select({
         
                   // 设置只选择图片
            MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
                   // 设置最大只能选择1张
            maxSelectNumber: 1
    })
    .then((res: photoAccessHelper.PhotoSelectResult) => {
         
       // res参数里的photoUris属性即为选择的图片结果数组(因为可以选择多张),每个元素得到的是临时路径
       // 用fs打开这个路径
       let fileSource = fileIo.openSync(res.photoUris[0], fileIo.OpenMode.READ_ONLY);
       // 使用createImageSource方法将图片文件流常见成图片源码
       let imageSource = image.createImageSource(fileSource.fd);
       // 再使用createPixelMap方法,将图片源码制作成PixelMap类型
       const pixelMap = imageSource.createPixelMapSync()
       // 后续使用textRecognition的recognizeText那一套代码进行识别即可
    })
    

文本识别展示案例

  • 我们来实现如下图的效果

    image-20241223092305711

    • 界面上从上往下放:
      • Image:显示选择的待识别图片
      • Button:选择相册里的图片
      • Button:开始识别按钮
      • TextArea:显示识别后的结果,使用TextArea的原因是它对比Text会多一个滚动效果(防止内容过多显示不全)
  • 结合上面说的使用方法,最终文本识别代码如下

    import {
          photoAccessHelper } from '@kit.MediaLibraryKit'
    import {
          fileIo } from '@kit.CoreFileKit'
    import {
          image } from '@kit.ImageKit'
    import {
          textRecognition } from '@kit.CoreVisionKit'
    
    
    
    struct Index {
         
       text: string = '识别结果'
       imgPixelMap: PixelMap | null = null
    
      build() {
         
        Column({
          space: 20 }) {
         
          Button('打开图片')
            .width('85%')
            .onClick(async () => {
         
              const uri = await this.selectPhoto()
              if (uri) {
         
                const pixelMap = await this.getPixMap(uri)
                this.imgPixelMap = pixelMap
              }
            })
    
          Button('开始识别')
            .width('85%')
            .onClick(() => {
         
              this.recognize()
            })
    
          Image(this.imgPixelMap)
            .objectFit(ImageFit.Contain)
            .height('45%')
    
          Text(this.text)
            .width('85%')
            .layoutWeight(1)
            .border({
          style: BorderStyle.Dotted, width: 5, color: Color.Red })
        }
        .width('100%')
        .height('100%')
      }
    
      async selectPhoto() {
         
        try {
         
          // 实例化照片选择器
          const picker = new photoAccessHelper.PhotoViewPicker()
          // 选择图片
          const uris = await picker.select({
         
            MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
            maxSelectNumber: 1
          })
          return uris.photoUris[0]
    
        } catch {
         
          console.log('err')
          return null
        }
      }
    
      // 根据图片路径转PixelMap
      async getPixMap(uri: string) {
         
        try {
         
          const imgSrc = await fileIo.open(uri, fileIo.OpenMode.READ_ONLY)
          let source = image.createImageSource(imgSrc.fd)
          return source.createPixelMapSync()
        } catch {
         
          console.log('error' + uri)
          return null
        }
      }
    
      // 文字识别
      async recognize() {
         
        const info: textRecognition.VisionInfo = {
         
          pixelMap: this.imgPixelMap!
        }
        const res = await textRecognition.recognizeText(info, {
         
          isDirectionDetectionSupported: false
        })
        this.text = res.value
      }
    }
    

总结

  • 今天猫林老师给大家分享了鸿蒙提供的原生AI能力。其实听起来名字很高大上,用起来非常简单。这是因为鸿蒙帮我们做了高度封装,我们无须再关注OCR的相关知识,只需要使用鸿蒙提供的接口即可。所以,华为为了推广鸿蒙,发展鸿蒙生态,真的为开发者想了好多。这样的华为,你爱了吗?
  • 友情提醒:本篇内容只适合用真机测试,模拟器无法出效果。
  • P.S:根据猫林老师肉测,在API12版本中的Mac模拟器成功出效果。其他版本都不行。所以建议有条件还是上真机。
相关文章
|
17天前
|
移动开发 JavaScript 前端开发
HarmonyOS鸿蒙应用开发——探索原生与H5通信框架DSBridge
HarmonyOS版DSBridge是一个桥梁库,允许鸿蒙原生环境与JavaScript交互。它兼容Android和iOS的第三方DSBridge核心功能,支持同步和异步调用、命名空间API管理、进度回调及页面关闭监听等功能。主要特性包括适配鸿蒙NEXT版本、支持串行异步并发任务、兼容DSBridge 2.0与3.0版本JS脚本,并提供类形式集中管理API及自定义页面组件注册。源码仓库:HarmonyOS版 - DSBridge-HarmonyOS。安装命令为`ohpm install @hzw/ohos-dsbridge`。通过该库,开发者可以方便地在鸿蒙系统中实现原生与JS的高效交互。
91 1
|
11天前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
128 81
|
6天前
|
人工智能 Python
ImBD:复旦联合华南理工推出 AI 内容检测模型,快速辨别文本内容是否为 AI 生成
ImBD是一款由复旦大学、华南理工大学等机构联合推出的AI内容检测器,能够快速识别机器修订文本,适用于多种场景,显著提升检测性能。
35 8
ImBD:复旦联合华南理工推出 AI 内容检测模型,快速辨别文本内容是否为 AI 生成
|
9天前
|
机器学习/深度学习 人工智能 编解码
VideoVAE+:AI 生成视频高保真重建和跨模态重建工具,基于文本信息指导视频重建,提升视频细节质量
VideoVAE+ 是香港科技大学推出的先进跨模态视频变分自编码器,通过时空分离压缩机制和文本指导,实现了高效视频压缩与精准重建。
48 7
VideoVAE+:AI 生成视频高保真重建和跨模态重建工具,基于文本信息指导视频重建,提升视频细节质量
|
5天前
|
人工智能 安全 JavaScript
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS纯血鸿蒙新特性
HarmonyOS 3.1引入了Stage模型,增强ArkTS语言、应用程序框架、Web、ArkUI等子系统能力。新增功能包括Ability框架的Stage开发模型、ArkUI组件能力提升、应用包管理接口、公共基础类库支持Buffer读写、Web服务文档预览及编辑、图形图像编解码支持等。从API 9开始,Stage模型成为主要开发模型,支持更灵活的应用生命周期管理和窗口调度,提供更好的组件与窗口弱耦合体验。此外,HarmonyOS NEXT开发者预览版实现了全面自研,被称为“纯血鸿蒙”,具备自主可控、高度弹性、更强的安全性和隐私保护特性。
54 21
|
15天前
|
编解码 人工智能 开发框架
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS技术理念
HarmonyOS在万物智联时代提出了三大技术理念:一次开发,多端部署;可分可合,自由流转;统一生态,原生智能。通过多端开发环境、多端开发能力和多端分发机制,HarmonyOS显著降低了开发成本,提升了开发效率。开发者只需一套工程即可实现多设备应用的高效开发与部署。元服务作为轻量化程序实体,支持跨设备无缝流转,提供便捷服务。同时,HarmonyOS内置强大的AI能力,助力开发者快速实现应用智能化。
76 16
|
13天前
|
人工智能 自然语言处理 文字识别
自学记录鸿蒙API 13:实现智能文本识别Core Vision Text Recognition
在完成语音助手项目后,我尝试了HarmonyOS Next API 13中的Core Vision Text Recognition API,体验其强大的文本识别功能。该API支持多语言高精度识别,能快速将图像中的文本提取为结构化信息,适用于文档扫描、票据管理和实时翻译等场景。通过权限配置、初始化服务、实现识别功能和构建用户界面,我完成了文本识别应用的开发,并探索了性能优化与功能扩展。鸿蒙生态的强大支持让开发者能更便捷地实现复杂功能。未来计划将此技术应用于实际项目,如票据管理或实时翻译工具。如果你也对文本识别感兴趣,不妨一起探索!
72 11
|
13天前
|
人工智能 自然语言处理 API
自学记录HarmonyOS Next的HMS AI API 13:语音合成与语音识别
在完成图像处理项目后,我计划研究HarmonyOS Next API 13中的AI语音技术,包括HMS AI Text-to-Speech和Speech Recognizer。这些API提供了强大的语音合成与识别功能,支持多语言、自定义语速和音调。通过这些API,我将开发一个支持语音输入与输出的“语音助手”原型应用,实现从语音指令解析到语音响应的完整流程。此项目不仅提高了应用的交互性,也为开发者提供了广阔的创新空间。未来,语音技术将在无障碍应用和智慧城市等领域展现巨大潜力。如果你也对语音技术感兴趣,不妨一起探索这个充满无限可能的领域。 (238字符)
79 11
|
11天前
|
机器学习/深度学习 API 语音技术
鸿蒙开发:文本合成语音
在鸿蒙当中,如何实现根据指定的文本进行合成语音合成播放呢,其实也是非常的简单,因为鸿蒙当中也有textToSpeech。
|
14天前
|
机器学习/深度学习 人工智能 自动驾驶
企业内训|AI大模型在汽车行业的前沿应用研修-某汽车集团
本课程是TsingtaoAI为某汽车集团高级项目经理设计研发,课程全面系统地解析AI的发展历程、技术基础及其在汽车行业的深度应用。通过深入浅出的理论讲解、丰富的行业案例分析以及实战项目训练,学员将全面掌握机器学习、深度学习、NLP与CV等核心技术,了解自动驾驶、智能制造、车联网与智能营销等关键应用场景,洞悉AI技术对企业战略布局的深远影响。
157 97

热门文章

最新文章