OCR
optical character recognition 光学字符识别
采用扫描等光学输入方式,将一些报刊、书籍等文字----转为图像信息,再利用
文
字
识
别
文字识别
文字识别技术,将图像信息转为电子文本
tesseract-ocr
OCR的一个底层识别库
由google维护的一个开源库
pytesseract
python模块,对tesseract-ocr API 的封装
tesseract 安装
ubuntu;
sudo apt-get install tesseract
windows;
下载可执行文件
配置环境变量
C:\Program Files (x86)\Tesseract-OCR
使用tesseract
tesseract a.jpg filename
识别图片中的文字,得到的文字字符串放入filename
不准确! 怎么办?
默认的识别率较低,需要训练模型
- 使用别人训练好的模型
- 自己训练的模型
使用jTessBoxEditor训练模型,java开发的,故需安装java环境
JDK下载
2.1 安装JDK,”下一步“式
2.2 配置环境变量
我的电脑>右键>属性>高级系统设置
在系统变量–path 添加
%JAVA_HOME%\bin
%JAVA_HOME%\jre/bin
重启电脑
或者直接在已有的path中添加
C:\Program Files (x86)\Java\jdk1.8.0_15\bin
C:\Program Files (x86)\Java\jdk1.8.0_15\jre\bin
version: java8
2.3 安装jTessBoxEditor version2.3.1
解压-----------双击jTessBoxEditor.jar
安装成功
2.4 开始训练模型
Tools>Merge TIFF>
将当前图片目录的num.font.exp0.tif文件复制到Tesseract-OCR安装目录下
搜索‘cmd’–右键—以管理员身份运行----进入Tesseract-OCT目录–执行:tesseract num.font.exp0.tif num.font.exp0 -l eng batch.nochop makebox
此时生成box 文件,识别出的字符及坐标
命名规范:
[lang].[font].exp[num].tif
语言名称/字体名称/编号(随意)
jTessBoxEditor>Box Editor>Open
修改识别错误的字符
未识别到的,则insert
识别多的,则delete
需大量精力在此,对每一个张图片的每一个字母的坐标,内容进行精准的校对,然后save
全部校正后,点击File>save as ,覆盖之前的box文件
创建font_properties文件
文本方式打开:
font 0 0 0 0 0
创建num.bat
rem 执行改批处理前先要目录下创建font_properties文件
echo Run Tesseract for Training…
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
#没有生成xxxxxx.tr
!!!
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.
echo. & pause
未实现!!!
怎么处理图形验证码的?
1.tesseract-ocr
2.在线打码
pytesseract
ubuntu;
sudo pip3 install pytesseract
win;
python -m pip install pytesseract
使用;
import pytesseract
from PIL import Iamge
im = Image.open("xxx.jpg")
content_str = pytesseract.image_to_string(im)
极限 滑块 验证码
原理:
模拟人按住滑块,滑到缺口位置
先快后慢;
4/5,快速划过,
1/5, 加速,减速 滑动
全程都快速,会被识别到时爬虫
实现函数:
def get_track(distance):
"""
distance , 匀加速、匀减速的距离
速度v = v_0 + at a 加速度
位移s = v_0t + 1/2 * at**2
"""
#初始速度
v = 0
#单位时间
t = 0.3
#单位时间的位移
tracks = []
#当前的总位移
current = 0
mid = distance * 0.8
while current < distance:
if current < mid:
#匀加速
a = 2
else:
#匀减速
a = -3
v_0 = v
s = v_0*t + 0.5*a*t**2
current += s
tracks.append(round(s)) #四舍五入
#当前的速度
v = v_0 + a*t
return tracks
案例
# www.douban.com, 多次输错密码
from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
browser.get("https://www.douban.com/")
browser.maximize_window() #最大化
# 需点击 ‘密码登录’
#首先需切换到iframe
iframe = browser.find_element_by_xpath("//*[@id="anony-reg-new"]/div/div[1]/iframe")
#切换
browser.switch_to.frame(iframe)
#点击
click_pw = browser.find_element_by_xpath("/html/body/div[1]/div[1]/ul[1]/li[2]").click() #找到'密码登录'元素,并点击
brower.find_element_by_xpath('//*[@id="username"]').send_keys("17335320686")
browser.find_element_by_xpath('//*[@id="password"]').send_keys("xxxpw")
browser.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
time.sleep(2)
#滑块验证 在一个新的 iframe
captch_iframe = browser.find_element_by_xpath('//*[@id="tcaptcha_iframe"]')
browser.switch_to.frame(captch_iframe)
#找滑块按钮
drag_button = browser.find_element_by_xpath('//*[@id="tcaptcha_drag_button"]')
#鼠标事件,按住滑块
ActionChains(browser).click_and_hold(on_element=drag_button).perform()
#移动 快速移动的位移
ActionChains(browser).move_to_element_with_offset(to_element=drag_button,xoffset=180,yoffset=0)
#使用加速度移动剩下的距离
tracks = get_track(30) #剩下的距离30, 调整直到成功
for t in tracks:
ActionChains(browser).move_by_offset(xoffset=t,yoffset=0).perform()
#延时释放鼠标
time.sleep(1)
ActionChains(browser).release().perform()
自己实现OCR(pytorch)
目标
提取图片中的文字,转为字符串文本,结果可以作为NLP的输入。
1.检测文字的位置
CTPN算法,实际属于物体检测算法。
a.字体通常水平(左–右)排版,且字体间距大体相同
b.使用固定宽度的框,来检测文本的高度,然后拼接起来。
CTPN网络架构:H*W
VGG提取图像特征–>BLSTM(双向时序网络)融合上下文信息–>RPN完成检测
每个像素点,叠加10个框框,宽度相同,高度不同,如下:
2k得分:属于前景 分类的得分
![在这里插入图片描述](https://img-blog.csdnimg.cn/6efac785d7bb437bafee751fbf682e64.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTIyODE5OA==,size_16,color_FFFFFF,t_70 500x)
j卷积+递归
2.提取文字