机器视觉与tesseract

OCR

optical character recognition 光学字符识别
采用扫描等光学输入方式,将一些报刊、书籍等文字----转为图像信息,再利用 文 字 识 别 文字识别 技术,将图像信息转为电子文本

tesseract-ocr

OCR的一个底层识别库
由google维护的一个开源库

github地址
可执行程序下载安装

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

不准确! 怎么办?
默认的识别率较低,需要训练模型

  1. 使用别人训练好的模型
  2. 自己训练的模型
    使用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.提取文字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值