超简单的OCR模块:cnocr

前言

        毫无疑问的是,关于人工智能方向,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.mfbz.cn/a/341897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全的概述

网络空间的概念 2003年美国提出网络空间的概念:一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义:网络空间为继海,陆,空,天以外的第五大人类活动领域 网络安全发展历史 通信保密阶段 --- 计算机安全阶段…

基于 Spring Boot+MySQL实现的在线考试系统源码+数据库,基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统

1. 部署相关 1.1. 介绍 一个 JAVA 实现的在线考试系统,主要实现一套基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统(没有主观题) 1.2. 系统架构 后端技术栈基于 Spring Boot数据库MySQLORMMyBatis & MyBatis-plus缓存Redis、guava的L…

漏洞复现--Confluence远程代码执行漏洞(CVE-2023-22527)

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

深兰科技陈海波出席“2023浙商年度主题大会”并与知名主持人白岩松对话

1月17日,“2023浙商年度主题大会”在浙江杭州举行。本次大会由浙商总会主办,来自全球的600余名浙商代表汇聚一堂,共叙乡情、共享机遇、共谋发展。在“浙商年度创新样本”发布环节中,深兰科技创始人、董事长陈海波作为人工智能领域…

windows用mingw(g++)编译opencv,opencv_contrib,并install安装

windows下用mingw编译opencv貌似不支持cuda,选cuda会报错,我无法解决,所以没选cuda,下面两种编译方式支持。 如要用msvc编译opencv,参考我另外一篇文章 https://blog.csdn.net/weixin_44733606/article/details/1357…

autosar学习笔记 之SecOC

SecOC 接下来SecOC标准就更复杂一点,它不单单是做了通讯校验。 SecOC是基于对称密钥加密的一套机制,需要对ECU间的通讯作身份认证处理,来更好的防止伪装攻击,谈起对称或非对称加密,就会涉及到密钥的存储和Mac值的计算。 因此SECOC机制对于密钥的硬件存储,也有一定的要求…

[C++] external “C“的作用和使用场景(案例)

C中extern "C"的作用是什么? 在 C 中,extern "C" 的作用是告诉编译器按照 C 语言的规范来处理函数名和变量名。这是因为 C 编译器会对函数名和变量名进行名称修饰(name mangling),以区分不同的函数和变量。而在 C 语言中…

2024年天津市公务员考试报名开始啦

2024年天津市公务员考试报名开始,详细流程如下: ⭐报名入口:天津市公开招考公务员网上报名信息系统网站 ✅报名时间:2024年1月23日8:30-1月29日18:00 ✅资格审查时间:2024年1月23日8:30-1月30日18:00 ✅打印准考证…

element-ui 打包流程源码解析(下)

目录 目录结构和使用1,npm 安装1.1,完整引入1.2,按需引入 2,CDN3,国际化 接上文:element-ui 打包流程源码解析(上) 文章中提到的【上文】都指它 ↑ 目录结构和使用 我们从使用方式来…

Raspbian安装云台

Raspbian安装云台 1. 源由2. 选型3. 组装4. 调试4.1 python3-print问题4.2 python函数入参类型错误4.3 缺少mjpg-streamer可执行文件4.4 缺失编译头文件和库4.5 python库缺失4.6 图像无法显示,但libcamera-jpeg测试正常4.7 异常IOCTL报错4.8 Git问题 5. 效果5.1 WEB…

ftp连接报错:227 entering passive mode

用阿里的云服务器,宝塔安装的linux环境,ftp连接总包这个错误:227 entering passive mode 原因是云服务器没有放开39000/40000的端口 如果使用的是阿里云服务器,需要在安全组设置中,对22、21端口放行,并且…

layui 自定义日期选择器今日、昨日 、本周、本月、上个月等

1、layui 日期选择器 laydate日期选择器 <div class"layui-input-inline"><input class"layui-input" id"dateTime" placeholder"日期范围"> </div><script> layui.use([laydate], function () {laydate.ren…

从零学习开发一个RISC-V操作系统(四)丨RISC-V汇编语言编程

本篇文章的内容 一、RISC-V汇编语言简介1.1 RISC-V 汇编语言的基本格式1.2 RISC-V 汇编指令操作对象1.3 RISC-V 汇编指令编码格式1.4 RISC-V 汇编指令分类 二、RISC-V汇编语言详解2.1 add 加法指令2.2 sub 减法指令 本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习…

瑞_力扣LeetCode_104. 二叉树的最大深度

文章目录 题目 104. 二叉树的最大深度题解后序遍历 递归实现后序遍历 迭代实现层序遍历 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《刷题》的力扣LeetCode系列&#xff0c;主要以力扣LeetCode网的题进行解析与分享。本文仅供大家交流、学习及研究使用&#xff0c;禁…

关于图像分割项目的可视化脚本

1. 前言 之前实现了目标检测和图像分类任务的可视化脚本&#xff0c;本章将最后一个分割任务的可视化脚本实现 效果展示如下&#xff1a; 代码会在当前目录保存展示好的图片&#xff0c;从左到右依次为&#xff0c;原图、mask图、mask覆盖在原图的掩膜图 关于目标检测的可视化…

最长子字符串的长度(二) - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 给你一个字符串 s&#xff0c;字符串s首尾相连成一个环形 &#xff0c;请你在环中找出’l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。 输入描…

保护隐私数据:使用Java `transient`关键字

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 保护隐私数据&#xff1a;使用Java transient关键字 前言什么是java对象序列化transient关键字的基础知识序列化与反序列化过程避免transient的陷阱 前言 在数字时代&#xff0c;数据安全至关重要。无…

单片机中MCU跑RTOS相比裸机的优势

经常有读者问关于RTOS的问题&#xff0c;比如&#xff1a;我现在要不要学习RTOS&#xff1f; 学习RTOS有什么好处&#xff1f; 我的项目要不要跑RTOS&#xff1f; 问这些问题&#xff0c;其实归根结底还是对RTOS理解的不够&#xff0c;项目开发的经验还不足等。针对这部分朋友…

JVM系列-4.类加载器

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

RK3568平台 TinyAlsa集成第三方音频算法

一.tinyalsa介绍 ALSA&#xff08;Advanced Linux Sound Architecture&#xff09;是一个开源项目&#xff0c;涵盖了用户空间和内核空间对音频设备的操作接口&#xff0c;通过应用层使用alsalib可以实现对音频设备的控制 TinyAlsa是android推出的一个精简的ALSA库&#xff0c…