端侧OCR文字识别实现 -- Core Vision Kit ##HarmonyOS SDK AI##

上海张律师
• 阅读 1

​ 之前做小程序或者web的时候,对于OCR相关的功能,都是调用三方接口实现的,例如百度的ocr接口,整体的流程较为复杂,需要先通过后端代码获取百度的token,然后本地选择图片,图片发送到服务器获取图片url,把这个url和token再发给百度的ocr接口获取识别数据……或者图片转base64以后把这个base64发给接口,然而鸿蒙这里,目前我也不知道啥原因(可能是发送请求的数据长度有限制),我发送出去的base64是不全的。

总之,传统方法做ocr流程上比较复杂,而原生鸿蒙开发提供了端侧AI的能力,其中就包括了“Core Vision Kit(基础视觉服务)”,即与图片识别相关的AI能力,使用场景中就包括了“通用文字识别”,即我们前文中所说的ocr功能。

其整体流程概括为:

首先通过各种方法得到一张图片,例如拍照、从相册中选择、甚至你也可以通过canvas画布生成的图片或者通过组件截图获取的图片等等……只要是一张图片。接着把图片转成图片转换为PixelMap格式,实例化VisionInfo对象,并传入待检测图片的PixelMap。最后调用textRecognition的recognizeText接口,对识别到的结果进行处理。其中还有一步, 即配置通用文本识别的配置项TextRecognitionConfiguration,用于配置是否支持朝向检测,这一点其实可以不用管,因为你在开发的时候,是完全没有办法确定到时候实际操作中,到底是不是正向的。

另外还有一点要注意的,就是在完成以后,要释放OCR服务,这一点在textRecognition的文档里有提及,对于释放这一步,并不是说每一次OCR结束以后都要释放,而是可以在这个页面aboutToDisAppear的时候去释放

每一步的代码如下:

选择图片:


private async selectImage() {
    let uri = await this.openPhoto();
    if (uri === undefined) {
      hilog.error(0x0000, 'OCRDemo', "Failed to get uri.");
      return;
    }
    this.loadImage(uri);
  }

  private openPhoto(): Promise<string> {
    return new Promise<string>((resolve) => {
      let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
      photoPicker.select({
        MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
        maxSelectNumber: 1
      }).then((res: photoAccessHelper.PhotoSelectResult) => {
        resolve(res.photoUris[0]);
      }).catch((err: BusinessError) => {
        hilog.error(0x0000, 'OCRDemo', `Failed to get photo image uri. code: ${err.code}, message: ${err.message}`);
        resolve('');
      })
    })
  }

转PixelMap格式


private loadImage(name: string) {
    setTimeout(async () => {
      let fileSource = await fileIo.open(name, fileIo.OpenMode.READ_ONLY);
      this.imageSource = image.createImageSource(fileSource.fd);
      this.chooseImage = await this.imageSource.createPixelMap();
    }, 100)
  }

OCR识别


private textRecognitionTest() {
    if (!this.chooseImage) {
      return;
    }
    // 调用文本识别接口
    let visionInfo: textRecognition.VisionInfo = {
      pixelMap: this.chooseImage
    };
    let textConfiguration: textRecognition.TextRecognitionConfiguration = {
      isDirectionDetectionSupported: false
    };
    textRecognition.recognizeText(visionInfo, textConfiguration)
      .then((data: textRecognition.TextRecognitionResult) => {
        // 识别成功,获取对应的结果
        let recognitionString = JSON.stringify(data);
        hilog.info(0x0000, 'OCRDemo', `Succeeded in recognizing text:${recognitionString}`);
        // 将结果更新到Text中显示
        this.dataValues = data.value;
      })
      .catch((error: BusinessError) => {
        hilog.error(0x0000, 'OCRDemo', `Failed to recognize text. Code: ${error.code}, message: ${error.message}`);
        this.dataValues = `Error: ${error.message}`;
      });
  }

最后资源释放

   async aboutToDisappear(): Promise<void> {
    await textRecognition.release();
    hilog.info(0x0000, 'OCRDemo', 'OCR service released successfully');
  }

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
4年前
Python小应用 百度接口实现图片文字识别,并打包成安装包软件
本文给大家分享的主题是用百度的接口实现图片的文字识别。1.环境和配置要求整体是用Python实现,所需要使用的第三方库包括aip、PIL、keyboard、pyinstaller,如未安装,可在CMD中使用pipinstallBaiduAIP/pillow/keyboard/pyinstaller指令安装。百度接口打开https://
不是海碗 不是海碗
2年前
银行卡识别OCR:解放金融业务处理效率的黑科技!
银行卡识别OCR是通过光学字符识别(OCR)技术实现的。它基于深度学习算法,通过卷积神经网络(CNN)对银行卡图片进行特征提取和分析,从而识别出银行卡上的各个字段。
Karen110 Karen110
3年前
轻松识别文字,这款Python OCR库支持超过80种语言
OCR是什么?有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字。所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息。OCR的全称叫作“OpticalCharacterRecognition”,即光学字符识别。这算是生活里最常见、最有用的AI应用技术之一。细心观察便可发现,身边到处都是O
Karen110 Karen110
3年前
一篇文章教会你使用Python图片格式转换器并识别图片中的文字
在日常生活中,我们经常需要用到图片,我们都知道,图片的种类挺多的,在这里不一一列举。我们今天要完成就是一个图片转换器外加图片识别程序,废话不多说,直接就是淦!1.文字识别技术2.图片转换器一、文字识别技术首先介绍文字识别技术,就是读取图片之后然后把图片中的文字提取出来。1.打开百度开放平台进去之后咱们选择文字识别,可以看出,语音合成和图片识别的参数不一
浩浩 浩浩
4年前
【Flutter实战】图片和Icon
3.5图片及ICON3.5.1图片Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。ImageProviderImageProvider是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvi
Stella981 Stella981
3年前
Github热榜:中英文识别OCR模型,百度开源媲美收费软件!
近日,百度飞桨(https://www.oschina.net/action/visit/ad?id1185)正式开源了业界最小的超轻量8.6M中英文识别OCR模型套件Paddle(https://www.oschina.net/action/visit/ad?id1185)OCR,在模型大小、精度和预测速度上,甚至超过了之前一度登上GitHub
不是海碗 不是海碗
2年前
通用文字识别OCR 之实现数字化教材
引言通用文字OCR识别API是一种功能强大的服务,可用于多场景、多语种的整图文字检测和识别,通过将OCR技术应用于学校环境,可以实现教育资源的数字化和学习过程的自动化。本文将探讨通用文字识别OCR在学校的实际应用,希望对大家有所帮助。OCR技术的基本原理和
E小媛同学 E小媛同学
1年前
车牌识别 OCR API 的实际应用:智能停车、安防与数据统计
车牌识别OCR技术作为一种智能化的识别系统,在现代城市的交通管理和安全领域发挥着越来越重要的作用。本文将探讨车牌识别OCR接口在智能停车、安防监控以及数据统计方面的实际应用。
燕青 燕青
1年前
OCR文字识别工具:ABBYY FineReader PDF 15 for Mac 支持M1
是一款由ABBYY开发的PDF文档处理软件,旨在帮助用户快速、准确地读取、转换和处理PDF文件。该软件具备了多种强大的功能,包括OCR文字识别、表单识别、PDF编辑、注释和填充、文档比较等。ABBYYFineReaderPDF15采用了先进的OCR技术,可
曼成 曼成
1年前
二维码识别OCR接口:智能化信息获取的新篇章
在信息爆炸的时代,快速、准确地获取数据变得尤为重要。二维码(QRCode)作为一种高效的信息传输工具,已经广泛应用于各个领域。二维码识别OCR(光学字符识别)接口的诞生,不仅极大地简化了数据输入的过程,还为智能化管理和信息交互开辟了新的道路。本文将探讨二维码识别OCR接口的工作原理、应用场景以及它在现代社会中的重要性。