当前位置: 首页 > 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 CnOcrocr = 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 CnOcrocr = 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 osocr = 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() 类似,不过它接受的输入是一个由多个单行文本图像数据的列表。

http://www.lryc.cn/news/540456.html

相关文章:

  • 本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】
  • macOS部署DeepSeek-r1
  • 基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
  • 基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
  • C++中const T为什么少见?它有什么用途?
  • Leetcode 位计算
  • SpringBoot3.x整合WebSocket
  • 猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势
  • STM32创建静态库lib
  • Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠
  • MAC快速本地部署Deepseek (win也可以)
  • javaEE-13.spring MVC
  • C/C++ | 每日一练 (2)
  • Nginx 常用命令和部署详解及案例示范
  • GO大模型应用开发框架-
  • 保姆级!springboot访问Ollama API并调用DeepSeek模型 Api
  • 力扣hot100 ——搜索二维矩阵 || m+n复杂度优化解法
  • 娱乐使用,可以生成转账、图片、聊天等对话内容
  • 【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门
  • 使用 FFmpeg 剪辑视频指南
  • AWS云从业者认证题库 AWS Cloud Practitioner
  • 高性能内存对象缓存Memcached详细实验操作
  • 【C++复习专题】—— 类和对象,包含类的引入、访问限定符、类的6个默认成员函数等
  • Three.js 快速入门教程【一】开启你的 3D Web 开发之旅
  • Windows 图形显示驱动开发-CPU 内存调节和64KB 页面支持
  • PLC通信交互系统技术分享
  • ceph HEALTH_WARN clock skew detected on mon.f, mon.o, mon.p, mon.q
  • Git命令行入门
  • pdf-extract-kit paddle paddleocr pdf2markdown.py(效果不佳)
  • Android 10.0 移除wifi功能及相关菜单