Python OCR识别图片验证码(二)

19 篇文章 0 订阅
17 篇文章 0 订阅

操作系统:Windows
Python:3.5
欢迎加入学习交流QQ群:657341423


上节讲到验证码的简单识别

但对于一些复杂的验证码,我们需要做一些简单的图片处理才能识别。

例如,我要识别这些验证码:
这里写图片描述

设计思路:首先将图片变灰,然后转为RGBA,即四个通道,每个通道代表每种颜色,这个涉及到图片处理的一些基础知识。这个可以研究一下opencv。这个比较有意义。然后判断通道的颜色来转换成黑白色彩。便于OCR识别。

from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilter  
import sys
import os  
import pytesseract
from pyocr import tesseract
import time

def eachFile(filepath):
	pathDir =  os.listdir(filepath)
	for allDir in pathDir:
		child = os.path.join('%s%s' % (filepath, allDir))
		if "jpg" in child:
			jpgList.append(child)

def OutCode(code):
	file=open(SettingFile+"data.txt",'w')
	file.write(code)
	file.close()
	print (code)

# 黑白反色,白色替换  
# 此处N直接为255  
# 小于N的 被替换成黑色  
# 大于等于N的 被替换成白色,255代表白色,0代表黑色
if __name__=='__main__':
	while 1:
		SettingFile="D:\\"
		jpgList=[]
		eachFile(SettingFile)
		for i in jpgList:
			try:
				im = Image.open(i)
				im=im.convert('L')#图片转换为灰色图像
				im=im.convert('RGBA')#图片转换成RGBA模式
				pixdata = im.load()

				for y in range(im.size[1]):
					for x in range(im.size[0]):
					#循环图像里的每一个像素。每个像素为一个长度为4的列表。因为图片转换成RGBA模式,所以列表长度为4,A就是透明度
							if pixdata[x,y][0]>170 and pixdata[x,y][1]>170 and pixdata[x,y][2]>170 and pixdata[x,y][3]>170:
								pixdata[x,y]=(255, 255, 255, 0)
							else:  
								pixdata[x,y]=(0, 0, 0, 0)
								
				im.save("asa.png")
				#下面code与注释的code实现的功能一样
				#code=pytesseract.image_to_string(im)
				code=tesseract.image_to_string(im)
				OutCode(code)
				os.remove(i)
			except Exception as e:
				code="Unrecognized"
				OutCode(code)
				os.remove(i)
		time.sleep(5)

这里我设计一个死循环,每隔五秒检测d盘下的jpg文件,然后输出识别后的结果。测试结果:
这里写图片描述

如图所示:asa.png为处理后的图片。然后给OCR识别。
(建议将图片改为png格式)
当然,这个OCR识别永远都是有一定的准确率。这个是无法改变的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xy-Huang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值