python文字识别

news2024/11/25 4:58:18

Tesseract

文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别。Tesseract是一个用于文字识别的工具。

Tesseract的安装及配置

https://digi.bib.uni-mannheim.de/tesseract/
在上述链接下载自己需要的版本。下载后安装,并设置全局变量。
命令行运行tesseract -v,如果和下图一样即安装成功。
在这里插入图片描述

下载语言包

Tesseract默认是不支持中文的,如果想要识别中文或者其它语言需要下载相应的语言包。下载地址如下:https://tesseract-ocr.github.io/tessdoc/Data-Files ,进入网站后我们往下翻
在这里插入图片描述
其中有两个中文语言包,一个Chinese-Simplified和Chinese-Traditional,它们分别是简体中文和繁体中文,我们选择需要的下载即可。下载完成后我们需要放到Tesseract的路径下的tessdata目录下。

pytesseract

pytesseract是一款用于光学字符识别(OCR)的python工具,能够识别图片上的数字、英文和中文等。
pytesseract是对Tesseract-OCR的一层封装,同时也可以单独作为对Tesseract引擎的调用脚本,支持使用PIL库(Python Imaging Library)读取各种图片文件类型,包括jpeg、png、gif、bmp、tiff等其它格式。作为脚本使用时,pytesseract将打印识别出的文字,而不是将其写入文件。

Tesseract-OCR是由HP实验室开发由Google维护的开源OCR(Optical Character Recognition,光学字符识别)引擎。可以不断的训练的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。

用于文字识别:

pip install pytesseract

用于图片读取:

pip install Pillow

识别文字的方法:

image_to_string(image, lang=None, boxes=False, config=None)
  • image表示图像
  • lang表示语言,默认使用英文
  • 如果boxes设为True,那么“batch.nochop makebox”被添加到tesseract调用中
  • 如果设置了config,则配置会添加到命令中,例如config =“ - psm 6”。

示例如下:

import pytesseract
from PIL import Image
# 读取图片
im = Image.open('sentence.jpg')
# 识别文字
string = pytesseract.image_to_string(im)
print(string)

若需识别中文,需要设置lang='chi_sim'

import pytesseract
from PIL import Image
# 读取图片
im = Image.open('sentence.png')
# 识别文字,并指定语言
string = pytesseract.image_to_string(im, lang='chi_sim')
print(string)

批量图片识别

  1. 设置txt文件中内容如下:
    sentence1.jpg
    sentence2.jpg
    可用如下代码生成:
import os
# 文字图片的路径
path = 'text_img/'
# 获取图片路径列表
imgs = [path + i for i in os.listdir(path)]
# 打开文件
f = open('text.txt', 'w+', encoding='utf-8')
# 将各个图片的路径写入text.txt文件当中
for img in imgs:
    f.write(img + '\n')
# 关闭文件
f.close()
  1. 识别文字
import pytesseract
# 识别文字
string = pytesseract.image_to_string('text.txt', lang='chi_sim')
print(string)

EasyOCR

Python中OCR第三方库非常多,比如easyocr、PaddleOCR、cnocr等等。
EasyOCR检测部分使用CRAFT算法,识别模型为CRNN,由3个组件组成:特征提取Resnet、序列标记LSTM、解码CTC。整个深度学习过程基于pytorch实现。
图片–预处理(去噪、色彩饱和度、尖锐处理等)–文字检测(CRAFT)–中间处理(倾斜处理等)—文字识别—后续处理—输出结果

安装EasyOCR

在官网https://pytorch.org/中找到操作系统对应的安装方法

  1. 先安装pytorch
pip3 install torch torchvision torchaudio

在这里插入图片描述
2. 安装easyocr

pip install easyocr

安装完成后,可以通过easyocr.__version__查看版本号
3. 安装检测模型、识别模型(语言包)
https://www.jaided.ai/easyocr/modelhub/
下载文本检测模型:
在这里插入图片描述
下载识别模型,识别模型对应了各种语言包,下图是简体中文和英文的识别模型:
在这里插入图片描述
将下载的模型文件解压后拷贝到用户目录的.EasyOCR\model文件夹下。
【注】这里下载的识别模型(语言包)的文件名称和后面看到的语言类型并不是完全对应的,比如在代码中的语言类型ch_sim对应简体中文(zh_sim_g2),en对应英文(english_g2)。

使用

第1步创建Reader()实例,第2步用readtxt()方法检测和识别。

创建Reader()实例

参数如下:

  • lang_list (list):识别语言代码,比如[‘ch_sim’,’en’]分别表示简体中文和英文。
  • gpu (bool, string, default = True) :是否使能GPU,只有安装了GPU版本才有效。
  • model_storage_directory (string, default = None) :模型存储位置,依次查找系统变量EASYOCR_MODULE_PATH (preferred)、MODULE_PATH (if defined)表示的路径或者~/.EasyOCR/路径。
  • download_enabled (bool, default = True):如果没有对应模型文件时,自动下载模型。
  • user_network_directory (bool, default = None) :用户自定义识别网络的路径,如果没有指明,则在MODULE_PATH + ‘/user_network’ (~/.EasyOCR/user_network)目录中查找。
  • recog_network (string, default = ‘standard’) :替代标准模型,使用自定义的识别网络。
  • detector (bool, default = True) :是否加载检测模型。
  • recognizer (bool, default = True) :是否加载识别模型。

readtxt()方法检测和识别

参数详解:

  • image (string, numpy array, byte) : 输入图像;
  • decoder (string, default = ‘greedy’):选项有 ‘greedy’、‘beamsearch’ 和 ‘wordbeamsearch’;
  • beamWidth (int, default = 5) : 当解码器 = ‘beamsearch’ 或 ‘wordbeamsearch’ 时要保留多少光束;
  • batch_size (int, default = 1) : batch_size>1 将使 EasyOCR 更快但使用更多内存;
  • worker (int, default = 0) : 数据加载器中使用的编号线程;
  • allowlist (string) : 强制 EasyOCR 只识别字符的子集。对特定问题有用(例如车牌等);
  • blocklist (string) : 字符的块子集。如果给定了允许列表,则此参数将被忽略。
  • detail (int, default = 1): 将此设置为 0 以进行简单输出;
  • paragraph (bool, default = False):将结果合并到段落中;
  • min_size (int, default = 10) : 过滤文本框小于最小值(以像素为单位);
  • rotation_info (list, default = None) : 允许 EasyOCR 旋转每个文本框并返回具有最佳置信度分数的文本框。符合条件的值为 90、180 和 270。例如,对所有可能的文本方向尝试 [90, 180 ,270]。
  • contrast_ths (float, default = 0.1) : 对比度低于此值的文本框将被传入模型 2 次。首先是原始图像,其次是对比度调整为“adjust_contrast”值。结果将返回具有更高置信度的那个;
  • adjust_contrast (float, default = 0.5) : 低对比度文本框的目标对比度级别。
  • text_threshold (float, default = 0.7) : 文本置信度阈值
  • low_text (float, default = 0.4) : 文本下限分数
  • link_threshold (float, default = 0.4) : 链接置信度阈值
  • canvas_size (int, default = 2560) :最大图像尺寸。大于此值的图像将被缩小。
  • mag_ratio (float, default = 1) :图像放大率
  • slope_ths (float, default = 0.1) - 考虑合并的最大斜率 (delta y/delta x)。低值意味着不会合并平铺框。
  • ycenter_ths (float, default = 0.5) - y 方向的最大偏移。不应该合并不同级别的框。
  • height_ths (float, default = 0.5) - 盒子高度的最大差异。不应合并文本大小非常不同的框。
  • width_ths (float, default = 0.5) - 合并框的最大水平距离。
  • add_margin (float, default = 0.1) - 将边界框向所有方向扩展某个值。这对于具有复杂脚本的语言(例如泰语)很重要。
  • x_ths (float, default = 1.0) - 当段落=True 时合并文本框的最大水平距离。
  • y_ths (float, default = 0.5) - 当段落 = True 时合并文本框的最大垂直距离。

示例:

import easyocr
 
reader = easyocr.Reader(
    lang_list=['ch_sim', 'en'], # 需要导入的语言识别模型,可以传入多个语言模型,其中英语模型en可以与其他语言共同使用
    gpu=False, # 默认为True
    download_enabled=True # 默认为True,如果 EasyOCR 无法找到模型文件,则启用下载
)
 
result = reader.readtext('id_card.jpg', detail=1 ) # 图片可以传入图片路径、也可以传入图片链接。但推荐传入图片路径,会提高识别速度。包含中文会出错。设置detail=0可以简化输出结果,默认为1
print(result)

结果如下:readtext 返回的列表中,每个元素都是一个元组,内含三个信息:位置、文字、置信度:

[
    ([[27, 37], [341, 37], [341, 79], [27, 79]], '姓  名  爱新觉罗 。玄烨', 0.6958897643232619),
    ([[29, 99], [157, 99], [157, 135], [29, 135]], '性  别  男', 0.914532774041559),
    ([[180, 95], [284, 95], [284, 131], [180, 131]], '民蔟满', 0.4622474180193509),
    ([[30, 152], [94, 152], [94, 182], [30, 182]], '出  生', 0.6015505790710449),
    ([[110, 152], [344, 152], [344, 184], [110, 184]], '1654 年54日', 0.42167866223467815),
    ([[29, 205], [421, 205], [421, 243], [29, 243]], '住  址   北京市东城区景山前街4号', 0.6362530289101117),
    ([[105, 251], [267, 251], [267, 287], [105, 287]], '紫禁城乾清宫', 0.8425745057905053),
    ([[32, 346], [200, 346], [200, 378], [32, 378]], '公民身份证号码', 0.22538012770296922),
    ([[218, 348], [566, 348], [566, 376], [218, 376]], '000003165405049842', 0.902066405195785)
]

若:detail=0,从而只返回文字内容:

['姓  名  爱新觉罗 。玄烨', '性  别  男', '民蔟满', '出  生', '1654 年54日', '住  址  北京市东城区景山前街4号', '紫禁城 乾清宫', '公民身份证号码', '000003165405049842']

若识别率不高,则可对图片进行一些处理,可参照如下:

cv2.pyrMeanShiftFiltering(src, dst, double sp, double sr, int maxLevel=1, TermCriteria termcrit=TermCriteria)

原理:meanShfit均值漂移算法是一种通用的聚类算法,它的基本原理是:对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。可以利用均值偏移算法的这个特性,实现彩色图像分割.

  • src,输入图像,8位,三通道的彩色图像,并不要求必须是RGB格式,HSV、YUV等Opencv中的彩色图像格式均可;
  • dst,输出图像,跟输入src有同样的大小和数据格式
  • sp,定义的漂移物理空间半径大小
  • sr,定义的漂移色彩空间半径大小
  • maxLevel,定义金字塔的最大层数
  • termcrit,定义的漂移迭代终止条件,可以设置为迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合

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

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

相关文章

chisel之scala 语法

Chisel新手教程之Scala语言(1) Value & variable Value是immutable的,当它被分配一个数据后,无法进行重新分配。用 val 表示。 Variable是mutable的,可以重复赋值。用 var 表示。示例如下: val a …

视觉SLAM十四讲学习笔记(一)初识SLAM

目录 前言 一、传感器 1 传感器分类 2 相机 二、经典视觉 SLAM 框架 1 视觉里程计 2 后端优化 3 回环检测 4 建图 5 SLAM系统 三、SLAM 问题的数学表述 四、Ubuntu20.04配置SLAM十四讲 前言 SLAM: Simultaneous Localization and Mapping 同时定位与地图构建&#…

R语言阈值效应函数cut.tab2.0版发布(支持线性回归、逻辑回归、cox回归,自定义拐点)

阈值效应和饱和效应是剂量-反应关系中常见的两种现象。阈值效应是指当某种物质的剂量达到一定高度时,才会对生物体产生影响,而低于这个剂量则不会产生影响。饱和效应是指当某种物质的剂量达到一定高度后,其影响不再随剂量的增加而增加&#x…

2024-2-4-复习作业

源代码&#xff1a; #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct Node {datatype data;struct Node *next;struct Node *prev; }*DoubleLinkList;DoubleLinkList create() {DoubleLinkList s(DoubleLinkList)malloc(sizeof(st…

大白话介绍循环神经网络

循环神经网络实质为递归式的网络&#xff0c;它在处理时序任务表现出优良的效果&#xff0c;毕竟递归本来就是一步套一步的向下进行&#xff0c;而自然语言处理任务中涉及的文本天然满足这种时序性&#xff0c;比如我们写字就是从左到右一步步来的鸭&#xff0c;刚接触深度学习…

【transformer】Hugging Face 安装环境(03/10)

一、说明 关于transformer库的安装环境的说明&#xff1b;因为transformer是一个不小的大型软件&#xff0c;安装的时候对环境还是需要一定规划&#xff0c;一般安装在虚拟环境中&#xff0c;以便与常规软件进行隔离。 二、安装 为您正在使用的任何深度学习库安装 Transformer&…

88.网游逆向分析与插件开发-物品使用-物品使用策略管理UI的设计

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;物品交换的逆向分析与C封装-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;f1b9b1a69ac3e2c3…

mov转换为mp4,就看这三种转换格式的方法

在数字视频处理的日常应用中&#xff0c;我们常常需要解决不同视频格式之间的兼容性问题。特别是在移动设备、社交媒体或视频编辑软件中&#xff0c;你可能会发现某些设备或平台更倾向于支持MP4格式&#xff0c;而你手头的视频却是以MOV格式存储的。 为了应对这种情况&#xf…

2.05作业

1.请编程实现哈希表的创建存储数组{12,24,234,234,23,234,23}&#xff0c;输入key查找的值&#xff0c;实现查找功能。 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> typedef int datatype; typedef struct Node {datat…

MySQL操作问题汇总

MySQL操作问题汇总 1.无法远程连接Ubuntu的MySQL2.ubuntu忘记mysql的root密码时的操作 1.无法远程连接Ubuntu的MySQL (1) 需要检查防火墙状态 > sudo ufw status #如果防火墙开启的情况&#xff0c;添加规则&#xff1a;允许3306端口开启 > sudo ufw allow 3306 (2) 需要…

【从0上手Cornerstone3D】如何使用CornerstoneTools中的工具之工具介绍

简单介绍一下在Cornerstone中什么是工具&#xff0c;工具是一个未实例化的类&#xff0c;它至少实现了BaseTool接口。 如果我们想要在我们的代码中使用一个工具&#xff0c;则必须实现以下两个步骤&#xff1a; 使用Cornerstone的顶层addTool函数添加未实例化的工具 将工具添…

Unity中blendtree和state间的过渡

混合树状态之间的过渡 如果属于此过渡的当前状态或下一状态是混合树状态&#xff0c;则混合树参数将出现在 Inspector 中。通过调整这些值可预览在混合树值设置为不同配置时的过渡表现情况。 如果混合树包含不同长度的剪辑&#xff0c;您应该测试在显示短剪辑和长剪辑时的过渡表…

ROS从入门到精通4-1:Docker安装与常用命令总结

目录 0 专栏介绍1 Docker与机器人应用2 Docker安装步骤3 Docker常用命令3.1 创建与启动容器3.2 暂停与删除容器3.3 容器文件拷贝3.4 构建镜像与上下文 0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0c;掌握ROS底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS进…

不下载任何插件和依赖,在线导出swagger的api接口文档(word)

一、前言 swagger是一个非常方便用来生成api的工具集&#xff0c;它提供了可视化的restful风格的web界面&#xff0c;方便查看生成的api。 但是&#xff0c;想要将swagger生成的api直接导出为doc文档&#xff0c; 似乎不太方便实现&#xff0c;解析swagger的json串&#xff0c;…

python的内置函数-print()、input()、range()

内置函数 一、print()二、input()三、range()range的定义与特点range()函数的使用使用range()创建数字列表 一、print() print()是一个内置函数&#xff0c;用于将指定的内容打印到控制台。 #基本用法&#xff1a; print(value1, ..., sep , end\n, filesys.stdout, flushFal…

RK3568平台 设备模型基本框架-kobject 和kset

一.什么是设备模型 字符设备驱动通常适用于相对简单的设备&#xff0c;对于一些更复杂的功能&#xff0c;比如说电源管理和热插拔事件管理&#xff0c;使用字符设备框架可能不够灵活和高效。为了应对更复杂的设备和功能&#xff0c;Linux内核提供了设备模型。设备模型允许开发…

小白水平理解面试经典题目LeetCode 21. Merge Two Sorted Lists【Linked List类】

21. 将两个有序列表融合 Linked List 数据结构也在面试中经常出现&#xff0c;作为很好处理客户信息存储的结构很方便&#xff0c;也是重点必会项目之一&#xff0c;看看我们如何教懂白月光&#xff0c;成功邀约看电影吧。 小白渣翻译 你将获得两个排序链表 list1 和 list2 …

MacOS系统电脑远程桌面控制windows系统电脑【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1…

c++阶梯之类与对象(中)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数概念的引出 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 特性 未使用构造与析构的版本 使用了构造与析构函数的版本 4. 拷贝构造函数 4.1 拷贝构造函数的概念 4.2 特性 结语 本节我们来认识…

数据挖掘实战-基于决策树算法构建北京市空气质量预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…