超简单的OCR模块:cnocr

时间:2024-01-25 07:57:24

前言

        毫无疑问的是,关于人工智能方向,python真的十分方便和有效。

        这里呢,我将介绍python众多OCR模块中一个比较出色的模块:cnocr

模块介绍

        cnocr是一个基于PyTorch的开源OCR库,它提供了一系列功能强大的中文OCR模型和工具,可以用于图像中的文字检测、文字识别和文本方向检测等任务。它可以识别各种不同风格和字体的中文文字,包括简体字和繁体字,可根据具体需求在官方文档中查找对应的模型作为参数输入实例化cnocr方法。官方也提供有英文的识别模型,但其他语言就暂时没有更多的模型,但可以根据自己的需要和自己准备的数据集对模型进行训练。

         项目地址:https://github.com/breezedeus/CnOCR

demo实例

        cnocr的开发目标就是“使用简单”,因此,你仅仅需要一些简单的操作便能够完成ocr工作。

        安装基本上无坑,pip直接就装上了

pip install cnocr

        这里是一个简单的例子:

        这是项目目录,sample.py是demo脚本,images里装着需要识别的图片,outs是处理后的图片:

        这是sample.py的代码 

from cnocr import CnOcr
import cv2
from PIL import Image, ImageDraw, ImageFont

FONT_STYLE = ImageFont.truetype("msyhl.ttc", 30, encoding="utf-8")

# 图片名称
file_name = 'images/img.png'
target_name = 'outs/img.png'

ocr = CnOcr()
result = ocr.ocr(file_name)

# 将ocr识别的内容、以及具体位置打包成字典
txts = []
for re in result:
    # print(re['position'][0])
    # print(type(re['position'][0]))
    txts.append([re['text'], [re['position'][2], re['position'][0]]])

# 创建一个可以在给定图像上绘图的frame对象
frame = cv2.imread(file_name)
for tt in txts:
    # text是识别出来的文字
    text = tt[0]

    # site是他的矩形识别图形的起点、终点列表
    # 样式为[[起始点x轴坐标, 起始点y轴坐标], [终点x轴坐标, 终点y轴坐标]]
    site = tt[1]
    print(text, site)

    cv2.rectangle(frame, (site[0][0], site[0][1]), (site[1][0], site[1][1]), color=(0, 255, 0), thickness=3)

    # 请根据实际情况在原图上标字,这里是默认将字体标在了识别框下方100的位置,因此仅作参考
    # img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
    # draw = ImageDraw.Draw(img)
    # draw.text((site[1][0], site[1][1] + 100), text, (0, 255, 0),
    #           font=FONT_STYLE)
    # frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

cv2.imwrite(target_name, frame)

         这是生成的图片

        这是识别到的内容

         

        至此,一次简单的ocr便完成了