标签:alt 安装文件 技术 bom头 content charm run 商业 数字识别
大屏23Tesseract字库训练Tesseract 3
超级详细的Tesseract-OCR样本训练方法
Sharon Liu 2018-11-05 16:38:52 55039 收藏 163
分类专栏: C++ java
版权
Tesseract-OCR样本训练方法
一、简介
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护。
二、下载
1.从https://github.com/UB-Mannheim/tesseract/wiki下载tesseract安装包,目前最新的版本是tesseract-ocr-w64-setup-v4.0.0.20181030.exe。
2.从https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/下载jTessBoxEditor训练工具,目前最新的版本是jTessBoxEditor-2.2.0.zip。
3.由于jTessBoxEditor是用Java开发的,需要安装Java虚拟机才能运行。从https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载Java JDK,目前最新的版本事jdk-8u191-windows-x64.exe。
三、安装tesseract
1.双击tesseract-ocr-setup-4.00.00dev.exe运行。
2.点击Next。
3.I accept the terms of the License Agreement前的复选框打勾,点击Next。
4.Install for anyone using this computer前的复选框打勾,点击Next。
5.选择需要安装的内容,点击Next。
6.点击Browse…选择安装路径,默认安装在C:\Program Files(x86)\Tesseract-OCR,点击Next。
7.点击Install。
8.等待安装完成。
9.点击Next。
10.Show README前的复选框取消打勾,点击Finish。
四、安装Java JDK
1.双击jdk-8u191-windows-x64.exe运行。
2.点击下一步。
3.点击更改。
4.输入安装路径后,点击确定。
5.点击下一步。
6.等待安装完成。
7.点击关闭。
五、配置Java环境变量
1.此电脑右键。
2. 点击属性。
3.点击高级系统设置。
4.选择高级->环境变量。
5.点击新建。
6.变量名输入JAVA_HOME,变量值输入JDK安装目录,点击确定。
7.系统变量中,选择Path,点击编辑。
8.点击新建。
9.输入%JAVA_HOME%\bin,点击确定。
10.点击确定。
11.点击确定。
12.重启电脑。
六、安装jTessBoxEditor
1.解压
2.双击jTessBoxEditor-2.2.0
3.双击jTessBoxEditor
4.双击jTessBoxEditor,jar运行
5.出现以下界面则安装成功。
七、制作训练样本
1. 运行jTessBoxEditor工具,点击Tools。
2.点击Merge TIFF。
3.文件类型选择All Image Files,选择样本图片,点击打开。
4.文件名输入num.font.exp0.tif,文件类型选择TIFF,点击保存。
5.点击确定。
6. 将num.font.exp0.tif文件复制到Tesseract-OCR安装目录。
7. 生成Box File文件。打开cmd命令行,以管理员身份运行。
8.进入Tesseract-OCR安装目录。
9.执行命令:
tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox
生成的box文件为num.font.exp0.box,box文件为Tesseract识别出的字符及其坐标。
注:Make Box File 文件名有一定的格式,不能随便乱取名字,命令格式为:
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。
10. 将上一步生成的.box和.tif样本文件放在同一目录。我是放在Tesseract-OCR默认安装目录下。
11.运行jTessBoxEditor工具,点击Box Editor。
12.点击Open。
13.选择之前生成的num.font.exp0.tif,点击打开。
14. 可以看出有些字符识别的位置不准确,可以通过该工具手动对每张图片中识别错误的字符和位置进行校正。校正完成后保存即可。
注: 这里必须修改识别错误的字符,否则做出来的traineddata文件也是错的。可以在下面的界面中修改并保存,也可以直接在traineddata文件中修改。
15. 定义字体特征文件。创建一个名称为font_properties的字体特征文件。font_properties不含有BOM头,文件内容格式如下:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。
这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:
font 0 0 0 0 0
这里全取值为0,表示字体不是粗体、斜体等等。
16. 生成语言文件。在样本图片所在目录下创建一个批处理文件,输入如下内容:
rem 执行改批处理前先要目录下创建font_properties文件
echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
echo Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
echo Clustering..
cntraining.exe num.font.exp0.tr
echo Rename Files..
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable
echo Create Tessdata..
combine_tessdata.exe num.
17. 执行批处理文件, num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到程序的样本文件夹里,就可以使用了。
————————————————
版权声明:本文为CSDN博主「Sharon Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sylsjane/article/details/83751297
import requests
import shelve
url=‘Your URL‘
verifyCodeUrl=‘Your verifyCodeUrl‘
s=requests.Session()
html=s.get(‘Your URL‘).content
f=open(‘verifyCode.jpg‘,‘wb‘)
f.write(html)
f.close()
作者:匿名用户
链接:https://www.zhihu.com/question/21451510/answer/36788950
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:匿名用户
链接:https://www.zhihu.com/question/21451510/answer/92877734
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
importrequests
fromselenium
import
webdriver
fromxxx
import
decaptcha
w=
webdriver.PhantomJS()
s=
requests.Session()
w.get(url)
cookie=
[]
foritem
in
w.get_cookies():
cookie.append(item[‘name‘]
+
‘=‘
+
item[‘value‘])
c=
‘;‘.join(cookie)
s.headers.update({‘cookie‘:c})
whilenot
isLogin:
capt
=
decaptcha(s.get(captchaUrl).content)
w.find_element...
w.send_keys...
?赞同 13??22 条评论
?分享
?收藏?喜欢
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
我用的方法也是截图,将网页固定大小,截图后使用OCR技术进行识别。不过这个截图方法太死板,我希望有一个可以获取验证码在屏幕坐标的函数,那样就可以截取一个固定大小,无论验证码在屏幕的任何位置都可以去截取而不用修改代码。
包使用的是tesseract-ocr
import win32gui
from ctypes import *
import ctypes
from PIL import ImageGrab
import win32api,win32con
import pyHook
import pythoncom
from selenium import webdriver
import os
import time
#此处登录网站并且输入用户名密码
browser = webdriver.Chrome()
browser.get("此处输入你的网址")
browser.find_element_by_id("username").send_keys("用户名")
browser.find_element_by_id("password").send_keys("密码")
#对验证码部分进行截图
while (1):
class RECT(ctypes.Structure):
_fields_ = [(‘left‘, ctypes.c_int),
(‘top‘, ctypes.c_int),
(‘right‘, ctypes.c_int),
(‘bottom‘, ctypes.c_int)]
rect = RECT()
HWND = win32gui.GetForegroundWindow()
ctypes.windll.user32.GetWindowRect(HWND,
ctypes.byref(rect))
# 下面这行是只截取验证码这个区域
coordinate = (rect.left+432, rect.top+463, rect.right-420, rect.bottom-525)
pic = ImageGrab.grab(coordinate)
pic.save("D:\\verificationcode.jpg")
#使用OCR技术进行识别
command = "tesseract verificationcode.jpg d:\\verresult"
os.system(command)
f = open("d:\\verresult.txt",‘r‘)
line = f.read(4)
#print line
f.close()
g=line.isalnum()
#print g
#枚举识别,如果识别失败则重新截图识别,直到进入系统。
if g:
browser.find_element_by_id("authcode").send_keys(line)
browser.find_element_by_xpath("//button[@type=‘submit‘]").click()
#print "click submit ok"
time.sleep(2)
# 获取系统的title,比如成功登录进去以后的title是“系统首页”
if u"系统首页" == browser.title :
print "login success"
break
else:
#下面就是验证码错误以后的处理,比如点掉提示验证码错误的框等等。
#print "login faild"
time.sleep(2)
browser.find_element_by_id("okBtn").click()
#print "click okbtn ok"
time.sleep(2)
browser.find_element_by_id("authCodeImg").click()
#print "click codeimg ok"
else:
browser.find_element_by_id("authCodeImg").click()
如果不跨域,注入 js,【把 img 画到 canvas,然后 toDataURL】或【xhr 然后 readAsDataURL】,把 base64 写入文本节点或者什么属性里面,然后再外面获取就是了
Tesseract-OCR 图片数字识别的样本训练
一声笑555 2018-06-12 16:57:22 15641 收藏 35
分类专栏: python 文章标签: python pytesseract Tesseract-OCR jTessBoxEditor
版权
最近想利用python写一段识别穿越火线交易所各种道具价格的代码。命令行执行:
tesseract.exe grab.jpg result -l eng
使用默认的Tesseract语言库总会识别成字母或者乱码,如下图:
于是参考https://blog.csdn.net/yasi_xi/article/details/8763385这篇帖子,训练了一个对游戏中数字识别度较高的样本库。
训练样本:
待识别的图像如下图中出售价格及我的CF点
python代码:
import win32con
import win32gui
import pytesseract
from PIL import ImageGrab
import time
def get_bin_table(threshold=105):
# 获取灰度转二值的映射table
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
return table
def grab():
hwnd = win32gui.FindWindow(0, "Crossfire20170910_0000.bmp - 画图") # 获取句柄
print(hwnd)
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
print(left, top, right, bottom)
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
win32gui.SetForegroundWindow(hwnd)
time.sleep(0.2)
img = ImageGrab.grab((870,478,913,495)) # 截图,获取需要识别的区域
img.show()
imggray = img.convert(‘L‘) # 转化为灰度图
table = get_bin_table()
out = imggray.point(table, ‘1‘)
#out.show()
text = pytesseract.image_to_string(out) # 使用简体中文解析图片则改为chi_sim
text = text.upper()
print(text)
# img.save(‘C:/Users/Ysx/PycharmProjects/ocr/out/%s.jpg‘ % text)
if __name__ == ‘__main__‘:
grab()
使用默认的语言库识别成功率不高,会识别为乱码或者字母。所以计划自己训练一个只能识别数字的准确语言库。
1.训练环境:首先安装jdk-10.0.1_windows-x64_bin.exe,它是java的运行环境。然后下载工具jTessBoxEditor,它是训练样本的工具。
2.样本图像:从CF截图如下图像(越多越好,不过总共也就10个数字)。
3.合并图像:运行jTessBoxEditor,菜单栏中Tools--Merge TIFF。在弹出的对话框中选择样本图像(按Shift选择多张),合并名为num.font.exp0.tif文件。
4.生成Box file文件:
命令行执行:
cd C:\Users\Ysx\PycharmProjects\ocr\train
tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox
* 生成num.font.exp0.box,BOX文件为Tessercat识别出的文字和其坐标。
5.文字校正:jTessBoxEditor工具打开num.font.exp0.tif,增加未识别的、修改识别错误的数字。
6.定义字体特征文件:(当前目录下新建记事本,输入font 0 0 0 0 0,存为font_properties,注意删除.txt后缀)
格式应为<fontname> <italic> <bold> <fixed> <serif> <fraktur>,取值1/0代表是否拥有对应属性。
7.生成语言文件:(当前目录下新建记事本,输入下列代码,存为1.bat)
rem 执行改批处理前先要目录下创建font_properties文件
echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
echo Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
echo Clustering..
cntraining.exe num.font.exp0.tr
echo Rename Files..
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable
echo Create Tessdata..
combine_tessdata.exe num.
双击1.bat执行,生成的num.traineddata存到对应的Tesseract-OCR\tessdata目录。
8.使用训练得到的num语言库:
命令行执行:
tesseract.exe grab.jpg result -l num
原来不易识别的数字可以识别了,下一步就是做交易价格低于某值的时候自动操作购买道具的代码了。
Tesseract-OCR安装和pytesseract配置参考http://www.inimei.cn/archives/297.html
字库训练https://blog.csdn.net/a443475601/article/details/9854003
————————————————
版权声明:本文为CSDN博主「一声笑555」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012555556/article/details/80666809
Tesseract 3.02字库训练
苹果皮 2013-08-09 13:41:57 21604 收藏 6
版权
下载chi_sim.traindata字库
下载tesseract-ocr-setup-3.02.02.exe
下载地址:http://code.google.com/p/tesseract-ocr/downloads/list
下载jTessBoxEditor用于修改box文件
下载地址:http://download.csdn.net/detail/a443475601/5896893 里面自带java运行库,安装后 然后启动命令行 java -jar jTessBoxEditor.jar即可打开
为了方便 tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言 fontname是字体
比如我们要训练自定义字库 image 字体名MyFont
那么我们把tif文件重命名 image.MyFont.exp0.tif
下面开始训练字库:
1、tesseract image.MyFont.exp0.tif image.MyFont.exp0 -l chi_sim batch.nochop makebox
该步骤会生成一个image.MyFont.exp0.box文件
把tif文件和box文件放在同一目录,用jTessBoxEditor.jar打开tif文件,然后根据实际情况修改box文件
2、tesseract image.MyFont.exp0.tif image.MyFont.exp0 nobatch box.train
该步骤生成一个image.MyFont.exp0.tr文件
3、unicharset_extractor image.MyFont.exp0.box
该步骤生成一个unicharset文件
4、新建一个font_properties文件
里面内容写入MyFont 0 0 0 0 0 表示默认普通字体
5、运行命令
shapeclustering -F font_properties -U unicharset image.MyFont.exp0.tr
mftraining -F font_properties -U unicharset -O image.unicharset image.MyFont.exp0.tr
cntraining image.MyFont.exp0.tr
6、把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上image.
7、执行combine_tessdata image.
然后把image.traineddata放到tessdata目录
8、用新的字库对图片进行分析
tesseract test.tif output -l image
————————————————
版权声明:本文为CSDN博主「苹果皮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a443475601/article/details/9854003
yasi_xi 2013-04-06 09:53:59 91292 收藏 11
转自:http://blog.csdn.net/feihu521a/article/details/8433077
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护,目前发布在Googel Project上。地址为http://code.google.com/p/tesseract-ocr/。
1.安装Tesseract
从 http://code.google.com/p/tesseract-ocr/downloads/list下载Tesseract,目前版本为Tesseract3.02。因为只是测试使用,这里直接下载winodws下的安装文件tesseract-ocr-setup-3.02.02.exe。安装成功后会在相应磁盘上生成一个Tesseract-OCR目录。通过目录下的tesseract.exe程序就可以对图像字符进行识别了。
2.准备一副待识别的图像,这里用画图工具随便写了一串数字,保存为number.jpg,如下图所示:
3. 打开命令行,定位到Tesseract-OCR目录,输入命令:
[plain] view plain copy
其中result表示输出结果文件txt名称,eng表示用以识别的语言文件为英文。
3. 打开Tesseract-OCR目录下的result.txt文件,看到识别的结果为7542315857,有3个字符识别错误,识别率还不是很高,那有没有什么方法来提供识别率呢?Tesseract提供了一套训练样本的方法,用以生成自己所需的识别语言库。下面介绍一下具体训练样本的方法。
关于如何训练样本,Tesseract-OCR官网有详细的介绍 http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3。这里通过一个简单的例子来介绍一下如何进行样本训练。
1.下载工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,这个工具是用来训练样本用的,由于该工具是用JAVA开发的,需要安装JAVA虚拟机才能运行。
2. 获取样本图像。用画图工具绘制了5张0-9的文样本图像(当然样本越多越好),如下图所示:
3.合并样本图像。运行jTessBoxEditor工具,在点击菜单栏中Tools--->Merge TIFF。在弹出的对话框中选择样本图像(按Shift选择多张),合并成num.font.exp0.tif文件。
4.生成Box File文件。打开命令行,执行命令:
[plain] view plain copy
生成的BOX文件为num.font.exp0.box,BOX文件为Tessercat识别出的文字和其坐标。
注:Make Box File 文件名有一定的格式,不能随便乱取名字,命令格式为:
[plain] view plain copy
其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。
【Yasi】:先前自己定义了tessdata的环境变量 TESSDATA_PREFIX 值为 E:\tesseract\tessdata,但没有从tesseract源文件目录中将tessdata子目录中的内容copy到 E:\tesseract\tessdata 中,造成上面的命令报错,说找不到batch.nochop 和 makebox。解决办法:将 tesseract 源文件目录中所有文件和子文件夹(可能充分但非必要,先不管这些啦)copy到 E:\tesseract\tessdata 中。
5.文字校正。运行jTessBoxEditor工具,打开num.font.exp0.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如下图所示。可以看出有些字符识别的不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。
【Yasi】这里必须修改识别错误的字符,否则做出来的traineddata文件也是错的。可以在下面的界面中修改并保存,也可以直接在traineddata文件中修改。
6.定义字体特征文件。Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties的字体特征文件。
font_properties不含有BOM头,文件内容格式如下:
[plain] view plain copy
其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。
这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:
[plain] view plain copy
这里全取值为0,表示字体不是粗体、斜体等等。
7.生成语言文件。在样本图片所在目录下创建一个批处理文件,输入如下内容。
[plain] view plain copy
11. cntraining.exe num.font.exp0.tr
13. echo Rename Files..
15. rename inttemp num.inttemp
17. rename shapetable num.shapetable
19. echo Create Tessdata..
将批处理通过命令行执行。执行后的结果如下:
需确认打印结果中的Offset 1、3、4、5、13这些项不是-1。这样,一个新的语言文件就生成了。
num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到Tesseract-OCR-->tessdata目录下。可以用它来进行字符识别了。
用训练后的语言库识别number.jpg文件, 打开命令行,定位到Tesseract-OCR目录,输入命令:
[plain] view plain copy
识别结果如如图所示,可以看到识别率提高了不少。通过自定义训练样本,可以进行图形验证码、车牌号码识别等。感兴趣的朋友可以研究研究。
下面是num-yasi.png
将生成的num.traineddata拷贝到E:\tesseract\tessdata,即环境变量TESSDATA_PREFIX
设置的路径下,执行下面的命令( 注意第二条命令结尾是num,即新加的traineddata,而不是eng)
E:\
tesseract\
tesseract-svn\
vs2008\
LIB_Debug\
tesseractd.exenum-yasi.png
result-eng
-l
eng
E:\
tesseract\
tesseract-svn\
vs2008\
LIB_Debug\
tesseractd.exenum-yasi.png
result-num
-l
num
下图是两次识别结果对比
使用eng traineddata的结果完全不靠谱;使用了自己的traineddata,识别出来的当然都是数字,但正确率实在糟糕。可能是我自己手写的字体和用来做traineddata的手写数字的字体差别太大了吧。
标签:alt 安装文件 技术 bom头 content charm run 商业 数字识别
原文地址:https://www.cnblogs.com/xinxihua/p/14587122.html