矽速科技 · 2023年05月22日 · 广东

OCR:如何利用爱芯派实现图像文字识别

想在爱芯派上拥有一个图像文字识别机吗?让 OCR 来帮你实现愿望!

前言

我们是否经常在为无法提取图像中的文字信息而苦恼?看到有趣的图片想复制其中的文字,又或者是旅行中想获得陌生语言的含义却无法知道文字,这时候就由 OCR 闪亮登场来帮你实现愿望。

  • 以下为在爱芯派进行文字识别(OCR)后的效果图

1684723402469.jpg

文章补充说明

本文基于 prophet-mu 原文 进行整理以及补充发布。

什么是 OCR

OCR 是光学字符识别的缩写,是一种将扫描或拍摄的文档和图像中的文字转换为数字格式的技术。相对于传统的 OCR 方法来说,它更多的是限定于文档类的识别,但是发展至今 OCR 的概念也被拓宽了很多可以表述为文字图像识别,主要是自然场景的文字识别。

自然场景中的图像信息相对于文本类文档信息更加的丰富以及复杂,因此识别的难度要远大于文本类的文档识别;比如在每一种语言里可能还包含多种字母;每种字母又可以有不同的大小、颜色、字体、亮度、对比度等;同时文字的排列和对齐方式也不尽相同,横向、竖向、弯曲的情况都会出现;图像的非文字区域可能有与文字区域相似的纹理,比如窗户、树叶、栅栏、砖墙等。因为拍摄角度的问题,图像文字还存在形变问题(透视变换、仿射变换等)。此外,光照、低对比度、模糊断裂、残缺文字等也提升了文本检测和识别的难度。

能做什么

OCR 技术作为机器视觉领域的一个非常重要的垂直领域,涉及的应用领域非常丰富,不同领域也出现了非常多的产品及解决方案,具体列举如下:

  • 票据类识别:增值税发票识别、支票识别、承兑汇票识别、银行票据识别、营业执照识别、物流快递识别;
  • 文字信息结构化视频类识别:主要有字幕识别和文字跟踪;
  • 其他识别:二维码识别、一维码识别、车牌识别、数学公式识别、物理化学符号识别、音乐符号识别、工程图识别、流程图识别、古迹文献识别、手写输入识别;

除了我们列举到的还有自然场景下的文字识别、菜单识别、横幅检测识别、图章检测识别、广告类图文识别等围绕审核相关的业务应用。

关于 OCR 更多的资料以及知识请关注:深度学习板块

该怎么做

上文我们了解到了什么是 OCR 以及在实际落地领域上的应用,接下来我们将阐述如何在爱芯派上实现 OCR 的图像文字识别。

本文提供的方法是基于现成的 api 来在 爱芯派 上实现 OCR 的识别的,如果有小伙伴想要自行训练及制作属于自己的 OCR 训练集,可前往 深度学习板块 学习相关知识。

准备工作

照例阐述使用前的基本环境以及硬件准备工作。

  • 硬件:爱芯派

参考资料说明:浏览以下文章快速了解 爱芯派 硬件以及上手指南。

M3axpi 官方介绍:wiki.sipeed.com/m3axpi
MAIX-III AXera-Pi 系列文章:开箱之硬件初体验
MAIX-III AXera-Pi 系列文章:上手之丝滑玩转 AI 板卡【一】
MAIX-III AXera-Pi 系列文章:上手之丝滑玩转 AI 板卡【二】
  • 使用环境

本文以 Windows10 系统为例,首先参考以下文章学习连接爱芯派(推荐使用 SSH 登录).

如何使用爱芯派网口进行 SSH 通信(推荐)
爱芯派系统使用手册
如何在 Mobaxterm 使用 SSH

基于 Tesseract 实现文字识别

Tesseract:是一款开源的 OCR 识别引擎,最初 Tesseract 由惠普实验室开发后贡献开源由 Google 在进行维护以及优化开发,我们可以使用 Tesseract 来实现(OCR)文字识别。

相关资料说明

使用 Tesseract 做文字识别(OCR)
Github 相关仓库:tesseract

使用 apt 安装

基于上文的使用环境的准备工作,默认大家已登录进 爱芯派 的系统内。

第一步:登录上系统后使用 cd /home 进入 home 的目录
第二步:使用下文命令行进行安装即可

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev

1684736492189.jpg

1684736521459.jpg

体验 OCR 文字识别

第一步:先准备一张需要识别的图片

1684737053585.jpg

第二步:在终端输入以下命令后系统会对图片进行识别

tesseract axpi.jpg stdout -l chi_sim

第三步:系统会返回打印出识别后到的文字信息

1684737223324.jpg

基于百度 API 实现文字识别

百度的 OCR 调用是可自行选择高精度的 API 并且还是免费使用,每月有一定的免费次数(薅羊毛辣),只需要在注册后申请一个自己的应用即可获取相应的 API_KEYSECRET_KEY

相关平台:百度 AI 开放平台-文字识别

体验 OCR 文字识别

第一步:先准备一张需要识别的图片

1684737053585.jpg

第二步:获取相关的 API_KEYSECRET_KEY 并在下文修改相关的路径以及参数

以下是相关的 ocr.py 代码
import base64
import urllib
import requests
from PIL import Image,ImageFont,ImageDraw

API_KEY = "你的AK"
SECRET_KEY = "你的SK"
img_path = "axpi.jpg"#修改图片的路径
im = Image.open(img_path)
draw = ImageDraw.Draw(im)

def main():

    url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=" + get_access_token()

    # image 可以通过 get_file_content_as_base64("C:\fakepath\f4451a86a76c9e6fc7ec2a8a64d9919.jpg",True) 方法获取
    payload='image=' + get_file_content_as_base64(img_path,True)
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    for i in response.json()['words_result']:
        print(i['words'])
        #draw.text(xy=(i['location']['left'],i['location']['top']),text=i['words'],fill=(255,0,0))
        draw.rectangle((i['location']['left'],i['location']['top'],i['location']['left']+i['location']['width'],i['location']['top']+i['location']['height']),outline=(255,0,0))
    im.show()
    # print(response.text)


def get_file_content_as_base64(path, urlencoded=False):
    """
    获取文件base64编码
    :param path: 文件路径
    :param urlencoded: 是否对结果进行urlencoded 
    :return: base64编码信息
    """
    with open(path, "rb") as f:
        content = base64.b64encode(f.read()).decode("utf8")
        if urlencoded:
            content = urllib.parse.quote_plus(content)
    return content

def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

if __name__ == '__main__':
    main()

第三步:把上述代码文件放进 /home 目录下并运行 python3 ocr.py 命令行
第四步:终端会打印出在图片里识别到的文字信息

1684741295551.jpg

拓展使用:还可以使用 Jupyter 来打开运行此应用,搭配 Pillow 一起使用绘制检测到文字的位置。

1684741478406.jpg

章节小结

如何在爱芯派上实现 OCR 识别图像文字的小章就到这里结束啦!后续还有相关的视觉基础章节(小编已在快马加鞭写中~)关于爱芯派相关的专栏教程即将也要步入尾声了,希望这些文章能让大家学习到一点点新的知识(满足辣)!

回顾往期文章

MAIX-III AXera-Pi 系列文章(1):新一代 3.6T 视觉 AI Linux 板卡面世

MAIX-III AXera-Pi 系列文章(2):丰富多采的 AI 应用

MAIX-III AXera-Pi 系列文章(3):Debian 系统 & 开箱案例

MAIX-III AXera-Pi 系列文章:开箱之硬件初体验

MAIX-III AXera-Pi 系列文章:上手之丝滑玩转 AI 板卡【一】

MAIX-III AXera-Pi 系列文章:上手之丝滑玩转 AI 板卡【二】

YOLOv8 目标检测:训练自定义数据集并部署到爱芯派(一)

YOLOv8 目标检测:训练自定义数据集并部署到爱芯派(二)

MMPose:在爱芯派上玩转你的关键点检测

MOT:如何在爱芯派上实现多目标跟踪的神奇效果!

MMPoes(衍生章):如何在爱芯派上实现跌倒检测并预警

还想了解更多内容?

内容链接
AXera-Pi 产品介绍https://mp.weixin.qq.com/s/JIvVprWlQPvE7bTxozAG_Q
AXera-Pi 产品资料wiki.sipeed.com/m3axpi
海外购买渠道https://fr.aliexpress.com/item/1005005016931077.html
国内购买渠道https://item.taobao.com/item.htm?id=682169792430
AI 开发工具链https://pulsar-docs.readthedocs.io/
AI 示例仓库https://github.com/AXERA-TECH/ax-samples
Python APIhttps://github.com/junhuanchen/ax-pipeline-api
系统 BSP SDKhttps://github.com/sipeed/axpi_bsp_sdk
基础 C++ SDKhttps://github.com/sipeed/libmaix
进阶 C++ SDKhttps://github.com/AXERA-TECH/ax-pipeline
AXERA 技术交流群专供 AI ISP 技术交流:139953715
荔枝 MaixPy3 AI 交流群产品开箱小白答疑:756313869
AI 训练平台http://maixhub.com
在线文档http://wiki.sipeed.com
交流社区http://bbs.sipeed.com
开源组织http://github.com/sipeed
官方推特https://twitter.com/SipeedIO
商业邮箱support@sipeed.com
推荐阅读
关注数
7434
内容数
92
人工智能边缘计算软硬件解决方案,提供高性能、低成本、低功耗、易使用的硬件选型方案.
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息