Python制作简易OCR文字识别系统

这篇具有很好参考价值的文章主要介绍了Python制作简易OCR文字识别系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前不久看了一篇“如何使用Python检测和识别车牌?”用OpenCV对输入图像进行预处理,用imutils将原始输入图像裁剪成所需的大小,用pytesseract将提取车牌字符转换成字符串(车牌识别)。

但经实测,美式车牌识别基本正确,但中国92式车牌、新能源车牌识别基本失败,失败的现象主要是将汉字识别为字母,或将汉字与后面的字母合并识别为另一个汉字。将“GA36-2007中华人民共和国机动车号牌”标准上的37个汉字用pytesseract进行汉字识别,正确率小于50%,但网页截屏识别正确率极高(高于95%),只有极个别字识别错误。因此就用Python做了个界面,制作成了“简易OCR文字识别系统”,这样通过鼠标操作就可以将图片文字转换为文本文字(如图1所示),识别效果见图19~22。

Python制作简易OCR文字识别系统

1 简易OCR文字识别系统界面

一、pytesseract简介

tesseract原意为:宇宙魔方、超立方体、超正方体、四维超正方体、四次元立方体等意。pytesseract库是Python开源的OCR(光学字符识别)库,能够识别图片上的数字、英文和中文等。它要求字迹规整、清晰可见,适合识别印刷体(如报刊、杂志照片,电脑或手机截屏等)。其他如手写体、车牌、验证码等识别效果较差。

二、pytesseract安装

pytesseract库属于人工智能(AI)领域的库,需要配置底层应用和依赖库,不是一条pip就能完成安装。pytesseract库依赖Tesseract-OCR,也就是要安装Tesseract-OCR才有效。

1. 安装和配置Tesseract-OCR

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

(1) 下载Tesseract-OCR

  1. GitHub 官网地址:查看源码

https://github.com/tesseract-ocr/tesseract

在这可以查看和下载源码,自己编译,如果不想查看源码。只想直接使用,请下载下面的官网安装包。

官网安装包下载地址1:https://digi.bib.uni-mannheim.de/tesseract/

Python制作简易OCR文字识别系统官网安装包下载地址2:https://github.com/UB-Mannheim/tesseract/wiki 

Python制作简易OCR文字识别系统

本人安装的是tesseract-ocr-w64-setup-v5.3.0.20221214.exe(见图2)。

(2) 安装Tesseract-OCR

双击下载的安装包进行安装。

Python制作简易OCR文字识别系统

2 下载的安装包

选择语言就用默认的英语(此语言指安装程序所用语言)。

Python制作简易OCR文字识别系统

 3 选安装语言界面

待定安装时的语言(没有中文)后,选同意安装(I Agree)。

Python制作简易OCR文字识别系统

 4 授权协议界面

选择组件时,注意把汉字笔迹训练数据的简体、繁体都选上,这样可以进行简体汉字和繁体汉字的识别。

Python制作简易OCR文字识别系统

 5 选择安装组件界面

点Additional script data (download)前的“+”,从中选图6中的4项:Han Simplified script、Han Simplified vertical script(简体),Han Traditional script、Han Traditional vertical script(繁体)。

Python制作简易OCR文字识别系统

 6 选择添加笔迹数据界面

把汉字语言训练数据的简体、繁体也都选上。

Additional language data (download)中选四项(见图7):Han Simplified script、Han Simplified vertical script(简体),Han Traditional script、Han Traditional vertical script(繁体)。

Python制作简易OCR文字识别系统

 7 选择添加语言数据界面

选择安装组件(选中文简体、繁体共四项),见图8。

Python制作简易OCR文字识别系统

 8 选择中文组件界面

组件选好后,需要选择安装路径(见图9)。默认安装路径为:C:\Program Files\Tesseract-OCR,如果修改了安装目录,建议先复制一份,后面配置环境变量时要用到。

Python制作简易OCR文字识别系统

 9 确定安装路径界面

出现图10画面后,点击“安装”(Install)进行安装。

Python制作简易OCR文字识别系统

 10 等待安装界面

如出现“Next”(下一步)就一直点击。

Python制作简易OCR文字识别系统

 11安装时的安装进度界面

直到安装完成。

Python制作简易OCR文字识别系统

 12 安装完成时界面

出现图12界面时,点击“完成”(Finish)完成安装。

安装结束后,进入窗口运行模式(开始→运行→cmd),输入:tesseract --version

如出现图13提示,表明tesseract安装时未在系统搜索路径(path)中,需要配置环境变量,需手工配置。

Python制作简易OCR文字识别系统

 13 测试版本失败界面

(3) 配置环境变量

  1. 配置系统变量:path

添加Tesseract-OCR安装目录(如:C:\Program Files\Tesseract-OCR)搜索路径。

选“系统变量”中的path,然后点“编辑”,此时会弹出如图14所示的编辑环境变量对话框,点“新建”,输入安装Tesseract-OCR安装目录(此例为默认安装目录:C:\Program Files\Tesseract-OCR)。

Python制作简易OCR文字识别系统

14 环境变量中系统变量配置界面

  1. 添加系统变量:TESSDATA_PREFIX

添加 TESSDATA_PREFIX 系统变量(见图15),值为:C:\Program Files\Tesseract-OCR\tessdata,即Tesseract-OCR安装目录下的tessdata文件夹。

Python制作简易OCR文字识别系统

 15 环境变量中添加系统变量界面

配置后,需重启电脑配置才能生效。

(4) 查看Tesseract-OCR是否安装成功

cmd运行输入:tesseract --version,能够正确显示版本号,说明成功。

Python制作简易OCR文字识别系统

16 测试版本成功界面

如没有汉字训练集将无法识别汉字,可下载语言包解压到Tesseract-OCR安装目录下的tessdata文件夹(如:C:\Program Files\Tesseract-OCR\tessdata)。

本人下载的tesseract-ocr-w64-setup-v5.3.0.20221214.exe,安装后已有汉字训练集,如图17。

Python制作简易OCR文字识别系统

 17 安装目录下tessdata文件夹界面

也可用命令tesseract --list-langs查看本地Tesseract-OCR支持语言库。

Python制作简易OCR文字识别系统

18 检查安装语言库界面

2. 安装Python的pytesseract库

pip install pytesseract

pytesseract库非常小,只有14K,它只要是调用前面安装的Tesseract-OCR进行文字识别。

三、pytesseract应用

导入pytesseract库后

用pytesseract.image_to_string()方法将识别文字以字符串形式返回。语法结构如下:

pytesseract.image_to_string(image, lang=None, config='', nice=0,  output_type='string',

                       timeout=0)

式中:image为文字图像,lang为用指定语言识别。中文简体汉字为lang='chi_sim',与上图箭头所指名称一致。其他用默认值。

例1:中、英文识别。

import pytesseract
from PIL import Image

# 英文识别
filename = '英文样本.png'
img = Image.open(filename)
result = pytesseract.image_to_string(img, lang='eng')
print(f'英文识别结果:\n {result}')
# 中文识别
filename = '简体中文.png'
img = Image.open(filename)
result = pytesseract.image_to_string(img,lang='chi_sim') #使用简体中文解析图片
print(f'中文识别结果:\n {result}')

例2:制作简易OCR文字识别系统。

Python制作GUI界面需要用到Tkinter的组件(widget)有:

1. tkinter.Frame()

Tkinter Frame(框架)组件就是一个容器。语法结构如下:

w = tkinter.Frame(master, option, ...)

其中:master为容器对象(如窗体等),其他可以用默认值。

2. tkinter.Label()

标签(Label)组件用于显示不可编辑的文本或图形、图像。语法结构如下:

w = tkinter.Label(master, option, ...)

其中:master为容器对象(如窗体、框架等)options: 可选项,即该标签的可设置的属性。这些选项可以用键=值的形式设置,并以逗号分隔。重要选项:image设置标签显示的图像;text设置显示的文本,可以包含换行符(\n)

由于Tkinter只支持.png和.gif格式图像,且没有缩放功能,故其他格式图像需要用模块PIL的Image进行缩放、用PIL的ImageTk进行格式转换。

3. tkinter.Button()

功能按钮(Button)组件也可称作按钮,在组件中可以设计在单击功能按钮时,执行某一个特定的动作(callback方法)。语法结构如下:

tkinter.Button(master, option, ...)

其中:master为容器对象(如窗体、框架等)options: 可选项,即该标签的可设置的属性。这些选项可以用键=值的形式设置,并以逗号分隔。重要选项:command单击功能按钮时,执行此方法(一般是自定义函数)image设置功能钮上显示的图像;text设置功能按钮的文字名称。

4. tkinter.Scorllbar()

使用滚动条组件,可以给其他组件添加流动条。语法结构如下:

tkinter.Scorllbar(master, [orient=None, ][options])

其中:master为容器对象(如窗体、框架等)options: 可选项,即该标签的可设置的属性。这些选项可以用键=值的形式设置,并以逗号分隔。重要选项:orient用于指定方向,默认为垂直方向,可设为HORIZONTAL(水平,tkinter常量)、VERTICAL(垂直,tkinter常量);command设置回调控件的xview方法(水平方向)或回调控件的yview方法(垂直方向);set()方法将scroll和其它的控件关联。

tk.Radiobutton(frm_tools, variable=v_r, text=mF, value=i)

5. tkinter.Radiobutton()

单选钮组件也称单选框,用于单选,一组中只能选项。单选钮可以添加文本和图像。当单选钮选择,可以执行指定的函数,或者获取所选的值。使用单选按的语法结构如下:

tkinter.Radiobutton(master, options)

其中:master为容器对象(如窗体、框架等)options: 可选项,即该标签的可设置的属性。这些选项可以用键=值的形式设置,并以逗号分隔。重要选项:text设置单选钮文本显示内容(选项名称);variable为选按钮索引变量,通过变量的值确定哪个单选项被选中;value设置单选钮选中时设定variable的值;command设置单选钮选中时调用命令(函数)。

还有两个对话框:打开文件对话框和“另存为”对话框,详见实例。

简易OCR文字识别系统界面用二个框架,上一框架用于布置功能按钮和选项,包括:“打开”按钮打开待识别图像,将所选图像缩放到合适的大小在标签中显示;“识别”按钮将打开的图像按选定语言识别为选定语言的文字,并在多行文本框中显示(可编辑);“保存”按钮将所识别、修改后的文本用图像名保存在图像所在文件夹(纯文本格式);“另存为”按钮用户可改变文件夹、文件名保存所识别、修改后的文本;三个语言单选钮,可选择“纯英文”、“简体中文”和“繁体中文”。下一框架用天显示待识别的图像的标签、显示识别后的文本(可编辑)的多行文本框和滚动条(当识别显示的文本超过文本框高度时控制文本滚动),参考图1。

完整代码如下:

####################################################
# 设计 Zhang Ruilin          创建 2023-03-25 09:19 #
# 简易文字识别(OCR):支持 PNG 格式图片,可编辑保存 #
####################################################
import pytesseract as ocr			    # OCR模块
import tkinter as tk				    # 导入模块tkinter为别名tk
from tkinter import filedialog as fd	导入对话框
from PIL import Image,ImageTk			# 导入Python图像处理库

win = tk.Tk()					        # 创建窗体
win.title('简易文字识别(OCR)系统')		# 设置标题
file_name = ''

def openimg():
    global file_name
    file_name = fd.askopenfilename(filetypes=(('图片',['.png','.gif','.jpg',
                    '.jpeg','.bmp','tif']),))   # Tk只支持png、gif,需转换
    print(file_name)
    try:
        im = Image.open(file_name)
        ratio = 1
        if im.size[0] > 400 or im.size[1]>600:	# 缩放高不超过600,宽不超过400
            ratio = min(400/im.size[0],600/im.size[1])
            im = im.resize((int(ratio*im.size[0]+0.5),int(ratio*im.size[1]+0.5)))
        photo = ImageTk.PhotoImage(im)	# 用PIL转换为tkinter支持图像
        img.config(image = photo)		# 更新图像
        img.photo_ref = photo 
    except:
        pass

def do_save():					        # 保存文件
    global file_name
    content = text.get(1.0, tk.END)		# 获取文本框的内容
    fname = file_name.split('.')
    fname[-1] = 'txt'				    # 改文件名为文本文件
    file_path = '.'.join(fname)			# 在图片同文件夹保存同名识别文件
    with open(file_path, 'w') as fw:
        fw.write(content)			    # 写文件

def do_saveas():				        # 另存文件
    fname = fd.asksaveasfile(initialdir=file_name,defaultextension='.txt',
            filetypes=(('文本文档', '.txt'),))
    content = text.get(1.0, tk.END)		# 获取文本框的内容
    fname.write(content)			    # 写文件
    fname.close()

def do_ocr():					        # 开始识别
    global file_name
    img = Image.open(file_name)
    print(v_r.get(),mLang[v_r.get()])
    result = ocr.image_to_string(img,
                 lang=mLang[v_r.get()])	# 使用对应字体集解析图片
    text.delete(1.0, tk.END)			# 清空文本框内容。1.0=1行1列
    text.insert(tk.END, result)			# 在文本最后插入内容

frm_tools = tk.Frame(win)			    # 创建放工具按钮的框架
frm_tools.pack()
frm_edits = tk.Frame(win)			    # 创建放编辑器的框架
frm_edits.pack()

# 创建一排工具,作为功能操作和参数选择,放置于frm_tools框架
lal_spc1 = tk.Label(frm_tools,width=1)	# 功能分类间隔1
lal_spc2 = tk.Label(frm_tools,width=1)	# 功能分类间隔2
photo0 = tk.PhotoImage(file='open.png')
btn_open = tk.Button(frm_tools, text='打开', image=photo0,
            command=openimg)			# 创建按钮用于打开图像
photo1 = tk.PhotoImage(file='save.png')
btn_save = tk.Button(frm_tools, text='保存', image=photo1,
            command=do_save)			# 创建按钮用于保存文本
photo2 = tk.PhotoImage(file='saveas.png')
btn_saveas  = tk.Button(frm_tools, text='另存', image=photo2,
            command=do_saveas)			# 创建按钮用于“另存”文本
photo3 = tk.PhotoImage(file='ocr.png')
btn_ocr = tk.Button(frm_tools, text='识别', image=photo3,
            command=do_ocr)			    # 创建按钮用于识别文本
# 放置按钮
btn_open.pack(side=tk.LEFT)
btn_ocr.pack(side=tk.LEFT)
lal_spc1.pack(side=tk.LEFT)
btn_save.pack(side=tk.LEFT)
btn_saveas.pack(side=tk.LEFT)
lal_spc2.pack(side=tk.LEFT)
# 放置单选钮
mFont = ('纯英文','简体中文','繁体中文')	# 定义三个语言单选钮
mLang = ['eng','chi_sim','chi_tra']		# 定义三个单选包对应的语言
v_r = tk.IntVar()
v_r.set(1)					            # 设置简体中文被选中,被选中v_r=value值
for i,mF in enumerate(mFont):
    tk.Radiobutton(frm_tools, variable=v_r, text=mF, value=i).pack(side=tk.LEFT)
# 创建标签,用于显示打开的待识别图像,放置于frm_edits框架
img = tk.Label(frm_edits, text=' '*50+'\n'*24, relief='sunken')
img.pack(side=tk.LEFT, fill=tk.BOTH)
# 创建多行文本框,用于显示、编辑识别文字,放置于frm_edits框架
text = tk.Text(frm_edits,width=50,heigh=40)
text.pack(side=tk.LEFT,fill=tk.BOTH)
ysbar = tk.Scrollbar(frm_edits, command=text.yview)	# 在frm_edits框架中创建滚动条					# 添加滚动条到框架
ysbar.pack(side=tk.LEFT, fill=tk.Y)
text.config(yscrollcommand=ysbar.set)	# 滚动条与文本框绑定

win.mainloop()							# 进入消息循环

识别效果:见图19~22。

Python制作简易OCR文字识别系统

19 纯英文识别效果

Python制作简易OCR文字识别系统

 20 简体中文识别效果

Python制作简易OCR文字识别系统

 21 简体中文用繁体识别效果(有简转繁效果)

Python制作简易OCR文字识别系统

 22 繁体中文识别效果文章来源地址https://www.toymoban.com/news/detail-473648.html

到了这里,关于Python制作简易OCR文字识别系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OCR文字检测与识别系统:融合文字检测、文字识别和方向分类器的综合解决方案

    前两章主要介绍了DBNet文字检测算法以及CRNN文字识别算法。然而对于我们实际场景中的一张图像,想要单独基于文字检测或者识别模型,是无法同时获取文字位置与文字内容的,因此,我们将文字检测算法以及文字识别算法进行串联,构建了PP-OCR文字检测与识别系统。在实际

    2024年02月10日
    浏览(50)
  • Python调用微信OCR识别文字和坐标

    在看雪看到一篇文章:逆向调用QQ截图NT与WeChatOCR-软件逆向。里面说了怎么调用微信和QQ本地的OCR模型,还有很详细的分析过程。 我稍微看了下文章,多的也看不懂。大概流程是使用mmmojo.dll这个dll来与WeChatOCR.exe做通信的,也是用它来启动和关闭WeChatOCR.exe进程的。所以关键只

    2024年04月15日
    浏览(43)
  • 【Python第三方包】ocr文字识别(pyocr)

    2023年10月30日
    浏览(50)
  • Python - OpenCV、OCR识别摄像头中的文字

    使用Python3的OpenCV库来识别摄像头中的文字,以及使用OCR(光学字符识别)技术。 安装OpenCV库 在命令行中输入以下命令来安装OpenCV库: 安装Tesseract OCR库 Tesseract OCR库是一种免费的光学字符识别库,它可以识别多种语言的文字。您可以在命令行中使用以下命令来安装它: 打开

    2024年02月15日
    浏览(70)
  • 100天精通Python(实用脚本篇)——第113天:基于Tesseract-OCR实现OCR图片文字识别实战

    🔥🔥 本文已收录于 《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html 优点 : 订阅限时9.9付费专

    2024年01月22日
    浏览(49)
  • Python实现OCR大批量识别图片文字,并将文字保存到txt文档中,文末源码直接拿!

    在当今数字化时代,图像文字识别(Optical Character Recognition, OCR)技术的应用越来越广泛。 OCR技术可以将印刷体文字转化为可编辑的文本格式,从而方便进行文本分析、数据挖掘等操作。Python作为一种简洁、易用的编程语言,提供了丰富的图像处理和机器学习库,使得实现图

    2024年02月15日
    浏览(47)
  • 第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR

    OpenCV文字识别与OCR:用于识别图像中的文字内容,并进行光学字符识别。 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理计算机视觉算法。虽然CV 本身并不包含专门的 OCR(Optical Character Recognition,光学字符识别)功能,但可以配合其他

    2024年02月20日
    浏览(50)
  • OCR文字识别技术

    OCR全称是optical character recognition,中文光学字符识别。 主要技术是:把图像形状转变为文本字符。 简单来说,OCR技术就是通过图像处理和模式识别技术对光学的字符进行识别,即,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。 OCR 支持各

    2024年02月08日
    浏览(41)
  • OpenCV(九)--文字扫描OCR识别

    步骤:边缘检测+计算轮廓+变换+OCR OCR识别 识别结果: 完整代码

    2024年01月18日
    浏览(39)
  • ocr、人工智能、文字识别接口

    人工智能这个词近几年热度颇高,工业上有人称之为“机器代工”,生活中有人称之为“物联网”,而所体现出来的就是智能化,减少人工参与。翔云公有云平台应运而生,提供的OCR API及实名认证API使产品智能化,自动进行图片文字识别及身份证、手机号、银行卡、发票等信

    2024年04月26日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包