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

相关文章:

文字识别软件cnocr学习笔记

• 安装 pip install cnocr • 基础的使用方法 首次运行会下载安装模型,如果没有梯子,会报错: 在网络上查找cnocr的模型资源,并下载到本地。https://download.csdn.net/download/qq_33464428/89514689?ops_request_misc%257B%2…...

本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】

本地部署DeepSeek R1 界面可视化open-webui 本文主要讲述如何用ollama镜像和open-webui镜像部署DeepSeek R1, 镜像比较方便我们在各个机器之间快速部署。 显卡推荐 模型版本CPU内存GPU显卡推荐1.5B4核8GB非必需4GBRTX1650、RTX20607B、8B8核16GB8GBRTX3070、RTX…...

macOS部署DeepSeek-r1

好奇,跟着网友们的操作试了一下 网上方案很多,主要参考的是这篇 DeepSeek 接入 PyCharm,轻松助力编程_pycharm deepseek-CSDN博客 方案是:PyCharm CodeGPT插件 DeepSeek-r1:1.5b 假设已经安装好了PyCharm PyCharm: the Pyth…...

基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片?1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...

基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)

在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...

C++中const T为什么少见?它有什么用途?

在C中,右值引用(T&&)是移动语义和完美转发的核心特性之一,但你是否注意到,const T&&(const右值引用)却很少被使用?它到底有什么用途? 今天我们就来深入…...

Leetcode 位计算

3095. 或值至少 K 的最短子数组 I 3097. Shortest Subarray With OR at Least K II class Solution:def minimumSubarrayLength(self, nums: List[int], k: int) -> int:n len(nums)bits [0] * 30res infdef calc(bits):return sum(1 << i for i in range(30) if…...

SpringBoot3.x整合WebSocket

SpringBoot3.x整合WebSocket 本文主要介绍最新springboot3.x下如何整合WebSocket. WebSocket简述 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议&#xff…...

猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势

1. 原生Office功能完整嵌入&#xff0c;排版一致性保障 猿大师办公助手直接调用本地安装的微软Office、金山WPS或永中Office&#xff0c;支持所有原生功能&#xff08;如复杂公式、VBA宏等&#xff09;&#xff0c;确保网页编辑与本地打开的文档排版完全一致。 提供OLE嵌入和完…...

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…...

Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠

Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠 作为数据工程师,Hive JOIN就像吃火锅选蘸料——放错位置味道全变!今天带你破解字节/阿里等大厂高频面试题:ON和WHERE后的过滤条件究竟有什么不同? 一、核心差异对比表 特性ON子句WHERE子句执行时机JOIN操作时JOIN完成后…...

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…...

javaEE-13.spring MVC

目录 什么是spring web mvc: 什么是MVC: 一.创建一个spring项目 二.实现功能: 创建helloController.java项目: 建立连接&#xff1a; RequestMapping注解: 1.RequestMapping注解的使用&#xff1a; 2. RequestMapping 是GET还是POST请求 3.指定请求方法 RestControll…...

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...

Nginx 常用命令和部署详解及案例示范

一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…...

GO大模型应用开发框架-

Eino 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架&#xff0c;如 LangChain 和 LlamaIndex 等获取灵感&#xff0c;同时借鉴前沿研究成果与实际应用&#xff0c;提供了一个强调简洁性、可扩展性、可靠性与有效性&#xff0…...

保姆级!springboot访问Ollama API并调用DeepSeek模型 Api

要在springboot中访问Ollama API并调用DeepSeek模型,你需要遵循以下步骤。首先,确保你有一个有效的Ollama服务器实例运行中,并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级!使用Ollama本地部署DeepSeek-R1大模型 并java通过api 调用 使用Spring Boot + Sprin…...

力扣hot100 ——搜索二维矩阵 || m+n复杂度优化解法

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 解题思路&#xff1a; 借助行和列有序特性&#xff0c;不断按行或者列缩小范围&#xff1b;途中数字表示每…...

娱乐使用,可以生成转账、图片、聊天等对话内容

软件介绍 今天要给大家介绍一款由吾爱大佬 lifeixue 开发的趣味软件。它的玩法超丰富&#xff0c;能够生成各式各样的角色&#xff0c;支持文字聊天、发红包、转账、发语音以及分享图片等多种互动形式&#xff0c;不过在分享前得着重提醒&#xff0c;此软件仅供娱乐&#xff0…...

【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

zmq源码分析之消息可读通知机制

文章目录核心流程详细实现1. 网络数据接收与解析2. 消息传递到 Socket3. 用户层通知机制4. zmq_poll 实现技术要点1. 消息完整性检测2. 通知机制3. 线程安全完整流程图示总结核心流程 ZeroMQ 检测完整消息可读并通知用户的完整流程&#xff1a; 网络数据接收&#xff1a;stre…...

仅限首批GCC 14.3+Clang 19.0开发者访问:C++26反射AST遍历器底层内存布局与constexpr反射缓存机制(附可运行benchmark)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C26反射特性在元编程中的应用源码分析 C26 正式引入静态反射&#xff08;static reflection&#xff09;核心设施&#xff0c;基于 std::reflexpr 和 meta::info 类型系统&#xff0c;使编译期类型 int…...

League Akari重生计时器与CD监控:游戏内实时辅助功能深度解析

League Akari重生计时器与CD监控&#xff1a;游戏内实时辅助功能深度解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的《英雄联盟…...

飞书多维表API:三种数据筛选策略的性能与场景抉择

1. 飞书多维表API数据筛选的三种策略解析 第一次接触飞书多维表API时&#xff0c;最让我头疼的就是数据筛选问题。记得去年做电商数据分析系统时&#xff0c;运营团队每天需要从近10万条订单记录中提取特定平台的数据。最初简单粗暴地全量拉取数据&#xff0c;结果接口响应慢得…...

C语言内存安全面试必考TOP 15题(2026最新真题库+逐行安全分析)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C语言内存安全面试全景概览 C语言因其直接操作内存的特性&#xff0c;在系统编程与嵌入式开发中不可替代&#xff0c;但也成为内存安全漏洞的高发区。面试官常通过内存管理类问题考察候选人对底层机制…...

机器学习重采样方法:原理、实现与工程实践

1. 理解重采样方法的核心价值在机器学习实践中&#xff0c;我们经常面临一个根本性矛盾&#xff1a;模型需要在训练数据上学习规律&#xff0c;但最终要在未见过的数据上表现良好。这就引出了机器学习中最关键的挑战之一——如何准确评估模型在真实场景中的表现&#xff1f;重采…...

二叉树先序线索化及先序线索二叉树找后继

#include <stdio.h> #include <stdlib.h>// 线索二叉树结点 typedef struct ThreadNode {int data;struct ThreadNode *lchild, *rchild;int ltag, rtag; } ThreadNode, *ThreadTree;ThreadNode *pre NULL;void create(ThreadTree &T) {T (ThreadNode *)mal…...

AutoCAD字体缺失终结者:FontCenter插件完整使用指南

AutoCAD字体缺失终结者&#xff1a;FontCenter插件完整使用指南 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 你是否经常在打开AutoCAD图纸时遇到字体缺失的困扰&#xff1f;FontCenter正是为解决这一…...

BilibiliDown:5分钟掌握B站视频音频下载的终极免费工具指南

BilibiliDown&#xff1a;5分钟掌握B站视频音频下载的终极免费工具指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirr…...

收藏备用|2026年AI大模型风口已至!小白程序员必看,抓住机会实现职业翻身

本文专为CSDN平台小白程序员、转行从业者打造&#xff0c;详细拆解2026年AI大模型的核心概念、最新应用场景及就业前景&#xff0c;深度分析模型研发、算法、数据科学等六大热门岗位的职责、2026年最新要求&#xff0c;独家整理从基础入门到前沿进阶的七阶段学习路线&#xff0…...