超简单的OCR模块:cnocr

news2024/11/16 7:36:11

前言

        毫无疑问的是,关于人工智能方向,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便完成了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1403621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用芯片学习——HC245芯片

HC245三态输出八路总线收发器 使用说明 这些八路总线收发器专为数据总线之间的异步双向通信而设计。控制功能实现可更大限度地减少外部时序要求。根据方向控制 (DIR) 输入上的逻辑电平,此类器件将数据从 A 总线发送至 B 总线,或者将数据从 B 总线发送至…

使用torch实现RNN

在实验室的项目遇到了困难,弄不明白LSTM的原理。到网上搜索,发现LSTM是RNN的变种,那就从RNN开始学吧。 带隐藏状态的RNN可以用下面两个公式来表示: 可以看出,一个RNN的参数有W_xh,W_hh,b_h&am…

c语言->学会offsetof宏计算结构体相对偏移量

前言 ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 目的,学习offsetof宏计算结构体相对偏移量 1.offsetof宏 来我们看图…

2.服务拆分和远程调用

2.服务拆分和远程调用 任何分布式架构都离不开服务的拆分,微服务也是一样。 2.1.服务拆分原则 这里我总结了微服务拆分时的几个原则: 不同微服务,不要重复开发相同业务微服务数据独立,不要访问其它微服务的数据库微服务可以将…

基于springboot vue实现的医院管理系统

一、 项目介绍 角色:管理员、患者、医生 基于springboot vue实现的医院管理系统,有管理员、医生和患者三种角色。系统拥有丰富的功能,能够满足各类用户的需求,系统提供了登录和注册功能,确保用户的信息安全和权限管理。…

类于对象下

再识构造函数——初始化列表——成员变量定义的地方 之前我们说:构造函数,对自定义类型会去调用他的默认构造函数,但是如果内置类型也没有写构造函数呢? 这里我们引用出——初始化列表(也是一种构造函数)…

四、RHCE--远程连接服务器

四、RHCE--远程连接服务器 1、远程连接服务器简介2、连接加密技术简介(1)版本协商阶段(2)密钥和算法协商阶段(3)认证阶段 3、ssh服务配置4、用户登录ssh服务器 1、远程连接服务器简介 (1&#…

【算法竞赛C++STL基础】栈,链表,队列,优先队列,map,set以及迭代器的用法

文章目录 1,前知——模板函数的实现2, hash 表1,定义2,ASCII码表3,咉射关系 3,迭代器4,STL关系1,stl 的基础关系2,stl 的分类1,相关分类2,相关简介顺序容器关联容器适配容器 3. STL 的相关函数的学习3.1 STL函数中都含…

vue项目编译非常慢,经常卡在某个百分点

1、注册插件 2、在项目根目录下的 babel.config.js 文件中加入下方配置 3、将import导入方式改为require导入方式,返回promise 4、如果动态加载组件import引入组件找不到组件(Error: Cannot find module) 使用 webpack 的 require.ensure() …

每天五分钟计算机视觉:掌握迁移学习使用技巧

本文重点 随着深度学习的发展,迁移学习已成为一种流行的机器学习方法,它能够将预训练模型应用于各种任务,从而实现快速模型训练和优化。然而,要想充分利用迁移学习的优势,我们需要掌握一些关键技巧。本文将介绍这些技巧,帮助您更好地应用迁移学习技术。 迁移学习的关键…

UG制图-视图与投影

当我们进入图纸页后,我们需要对产品进行投影然后进行标注 注意:如果是从零件3D中直接进入制图,默认情况下图框所在的图层是不显示的,我们可以通过菜单或者快捷键ctrl L进入图层设置模块,将图层170和173勾选为显示 我…

MySQL JSON数据类型

在日常开发中,我们经常会在 MySQL 中使用 JSON 字段,比如很多表中都有 extra 字段,用来记录一些特殊字段,通过这种方式不需要更改表结构,使用相对灵活。 目前对于 JSON 字段的实践各个项目不尽相同,MySQL 表…

SpringCloud Alibaba 深入源码 - Nacos 分级存储模型、支撑百万服务注册压力、解决并发读写问题(CopyOnWrite)

目录 一、SpringCloudAlibaba 源码分析 1.1、SpringCloud & SpringCloudAlibaba 常用组件 1.2、Nacos的服务注册表结构是怎样的? 1.2.1、Nacos的分级存储模型(理论层) 1.2.2、Nacos 源码启动(准备工作) 1.2.…

windows11上安装虚拟机VMware

1、安装虚拟机(待补充) 第二步:安装VMware tools 实现windows文件上传到虚拟机中 1、安装好虚拟机后,查看虚拟机ip用Xshell连接虚拟机,并安装VMware tools(只有安装了VMware tools才能实现虚拟机和本机的文件共享。在…

P4学习(六)实验三:a Control Plane using P4Runtime

目录 一. 实验目的二.阅读MyController.py文件1.导入P4Runtime的库2.main部分1. P4InfoHelper 实例化2. 创建交换机连接3. 设置主控制器4. 安装 P4 程序5. 写入隧道规则6. 读取表项和计数器(注释掉的部分)7. 定时打印隧道计数器8. 异常处理9. 关闭交换机…

动态规划系列问题之打家劫舍和买股票

动态规划系列问题 1.打家劫舍问题1.1打家劫舍I1.2打家劫舍II1.3打家劫舍III 2.买股票问题2.1买股票的最佳时机2.2买股票的最佳时机II2.3买股票的最佳时机III2.4买股票的最佳时机IV2.5买卖股票的最佳时机含冷冻期2.6买卖股票的最佳时机含手续费 题目解析参考了代码随想录 https:…

【Redis漏洞利用总结】

前言 redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis默认使用 6379 端口。 一、redis未授权访问漏洞 0x01 漏洞描述 描述: Redis是一套开源的使用ANSI C编写、支持网络、可基于内存…

基于深度学习的交通标志检测和识别(从原理-环境配置-代码运行)

基于深度学习的交通标志检测和识别是一种先进的计算机视觉技术,利用深度神经网络模型来准确地检测和识别道路上的各种交通标志。下面是对其介绍并分点阐述其重要性和应用场景: 1. 深度学习技术: 交通标志检测和识别利用深度学习技术&#x…

笔试面试题——二叉树进阶(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二叉搜索树与双向链表1、题目讲解2、思路讲解递归展开图3、代码实现 二、从前序遍历和中序…

刷题 ------ 排序

文章目录 1.K 次取返后最大化的数组和(堆)2.数组的相对排序(桶)3.最小绝对差4.根据数字二进制下1的数目排序(qsort)5.有多少小于当前数字的数字6.非递增顺序的最小子序列7.按照频率将数组升序排序&#xff…