当前位置: 首页 > news >正文

文字识别软件cnocr学习笔记

• 安装

pip install cnocr

• 基础的使用方法

   首次运行会下载安装模型,如果没有梯子,会报错:

在网络上查找cnocr的模型资源,并下载到本地。https://download.csdn.net/download/qq_33464428/89514689?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522751fb72b959dcac98e2fb460683254ea%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fcommercial.%2522%257D&request_id=751fb72b959dcac98e2fb460683254ea&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~all~insert_commercial~default-3-89514689-null-null.142^v101^pc_search_result_base5&utm_term=cnocr%20%E6%A8%A1%E5%9E%8B&spm=1018.2226.3001.4187.4

我放到了网盘:

链接: https://pan.baidu.com/s/1HQhyWNhWMjp09m-XTM97hQ

提取码: 6ddy 

模型的默认目录:

        Windows系统:C:\Users\当前用户\AppData\Roaming\cnstd\版本号\ppocr

        Linux系统:~/.cnocr/版本号/

        把下载得到的模型解压,每个模型按文件夹保存在上述目录即可。

ocr() 标准的多行文字检测识别

参数:
        img_fp:图像文件的路径,也可以是图像的二进制数据(如使用 open().read() 读取的内容),或者是一个 numpy.ndarray 类型的图像数据(例如使用 cv2.imread() 读取的图像)。
返回值:返回一个包含识别结果的列表,列表中的每个元素是一个字典,字典包含两个键:
        text:识别出的文本内容。
        score:识别结果的置信度得分,取值范围是 0 到 1,得分越高表示识别结果越可靠。
        position:(np.ndarray or None),检测出的文字对应的矩形框;np.ndarray, shape: (4, 2),对应 box 4个点的坐标值 (x, y) ;

示例代码:

from cnocr import CnOcr

ocr = CnOcr()
img_path = 'test.jpg'
res = ocr.ocr(img_path)
for line in res:
    print(f"文本: {line['text']}, 置信度: {line['score']}")
 图像分辨率对速度的影响

使用不同的分辨率对ocr的生成时间做了如下测试:

分辨率       生成时间

3k*4k            28s
1.6k*1k         0.71s
900*500        0.29s
768*768        0.12s
800*300        0.33s
800150         0.7s

        看得出,当图像很大时,由于数据量巨大,所以生成时间很长,但是图像很小时,时间也变长。这是由于模型内部的输入图形的标准像素是768*768,所以使用768*768速度最快。

ocr_for_single_line()   识别单行文本

        该方法适用于识别单行文本的图像,当图像中只有一行文本时,使用此方法可以获得更快的识别结果。
参数:

img_fp:与 ocr() 方法的 img_fp 参数含义相同。

返回值:

        返回一个元组,包含两个元素:

        第一个元素是识别出的文本内容。

        第二个元素是识别结果的置信度得分。

示例代码:

from cnocr import CnOcr

ocr = CnOcr()
img_path = 'single_line_test.jpg'
text, score = ocr.ocr_for_single_line(img_path)
print(f"文本: {text}, 置信度: {score}")

其他说明:

        模型选择:在初始化 CnOcr 类时,可以通过 model_name 参数选择不同的识别模型,以适应不同的识别需求。例如:
        ocr = CnOcr(model_name='densenet_lite_136-fc')

速度:

对于800*150像素这样像素的图形,生成时间是0.01s级。

使用GPU:

要使用GPU,在创建ocr对象时使用以下参数: 

ocr = CnOcr(model_backend='pytorch', context='cuda')
或
ocr = CnOcr(model_backend='pytorch', context='gpu')

第一次使用GPU会出现报错:

解决办法:卸载并重新安装onnxruntime

pip uninstall onnxruntime
pip install onnxruntime-gpu

经测试,使用RTX2080Ti,处理一个3024*4032像素的图像,时间为5秒,使用cpu为8秒,而处理一个768*768的图像,速度几乎没有区别。

 自定义字符集

       在初始化 CnOcr 对象时指定 vocab 参数。这样,模型只会识别 vocab 中包含的字符。

from cnocr import CnOcr

# 自定义字符集,只识别数字和字母
vocab = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ocr = CnOcr(vocab=vocab)
img_path = 'custom_charset_image.jpg'
res = ocr.ocr(img_path)
for line in res:
    print(f"文本: {line['text']}, 置信度: {line['score']}")

 使用不同的模型

        Cnocr 提供了多种预训练模型,在初始化 CnOcr 对象时通过 model_name 参数选择不同的模型,以适应不同的识别需求。

from cnocr import CnOcr

# 使用 densenet_lite_136-fc 模型
ocr = CnOcr(model_name='densenet_lite_136-fc')
img_path = 'image.jpg'
res = ocr.ocr(img_path)
for line in res:
    print(f"文本: {line['text']}, 置信度: {line['score']}")

 批量识别

如果有多个图像需要进行识别,可以编写一个循环来实现批量识别。

from cnocr import CnOcr
import os

ocr = CnOcr()
image_dir = 'image_directory'  # 包含多个图像的目录

for filename in os.listdir(image_dir):
    if filename.endswith(('.png', '.jpg', '.jpeg')):
        img_path = os.path.join(image_dir, filename)
        res = ocr.ocr(img_path)
        print(f"图像: {filename}")
        for line in res:
            print(f"文本: {line['text']}, 置信度: {line['score']}")
        print()

 ocr_for_single_lines()    识别多个单行文本

        与 ocr_for_single_line() 类似,不过它接受的输入是一个由多个单行文本图像数据的列表。

相关文章:

  • AATWS: gnome下无敌的应用切换器
  • 在Ubutu18.04下搭建nfs服务器
  • 【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)
  • Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory
  • (网络安全)渗透测试
  • 高并发内存池项目介绍
  • [NKU]C++基础课(四)补充:继承
  • 项目管理的核心是什么?
  • XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译
  • 案例-22.配置文件-@ConfigurationProperties
  • 【探寻C++之旅】第五章:模板
  • 解决华硕主板的Boot界面无法设置M.2的系统启动盘问题
  • Kafka Connect 数据格式转换器
  • Python装饰器根本写法
  • leetcode_位运算 190.颠倒二进制位
  • 8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改
  • 第三章 组件(6)- 事件处理
  • 设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
  • centos服务器巡检脚本
  • Windows逆向工程入门之字符串类型解析与拓展
  • 一周观展|五一假期将到,特展大展陆续开幕
  • 新版国家卫生监督抽查计划发布,首次明确打击网络“医托”
  • 罗马教皇方济各葬礼在梵蒂冈举行
  • 从中央政治局会议看经济工作着力点:以高质量发展的确定性应对外部不确定性
  • 阿联酋启动第三届全球航空奖评选,奖金总额达百万美元
  • 神舟二十号载人飞船与空间站组合体完成自主快速交会对接