⚡爬虫高级篇⚡五行代码识别验证码—— ddddocr(带带弟弟OCR)
Posted 肥学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⚡爬虫高级篇⚡五行代码识别验证码—— ddddocr(带带弟弟OCR)相关的知识,希望对你有一定的参考价值。
📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏
📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
📣这是个面试和考研的算法练习我们一起加油上岸之路
💠导读
前段时间在学校做项目的时候接触了深度学习的图像识别这一块,不过我作为一个小白刚入门就想做到精度极高难度可想而知,除非调用API接口。在为项目奔波的时候找到了一个关于验证码识别的练手项目但是,当时人家用的是pillow
和pytesseract
虽然使用已经较为方便了而且精度也不是很差,但是肥学
还是不满足在苦苦搜寻下找到了一个可以几行代码就可以解决的库名为——ddddocr
据说谐音为带带弟弟OCR正好用来破解爬虫里面的验证码
.
.
.
💠开启验证之旅
💠简介
Github地址:传送门
环境要求:
python >= 3.8
Windows/Linux/Macox..
大家要是想试试这个功能又苦于python版本是3.8
以下的话可以下载Anaconda
另外建个环境将他们分离这样也不至
🌸 🌸 🌸
参数说明:
Ddddocr
接受两个参数
参数名 | 默认值 | 说明 |
---|---|---|
use_gpu | False | Bool 是否使用gpu进行推理,如果该值为False则device_id不生效 |
device_id | 0 | int cuda设备号,目前仅支持单张显卡 |
classification
参数名 | 默认值 | 说明 |
---|---|---|
img | 0 | bytes 图片的bytes格式 |
🌸 🌸 🌸
💠初级实测
安装库文件
pip install ddddocr
test.jpg
import ddddocr
import time
begin=time.time()
ocr = ddddocr.DdddOcr()
with open('test.png', 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
finish=time.time()
print("结果:")
print(res)
print("用时:%s 秒" % str(finish-begin))
结果:
7364
用时:0.10026359558105469 秒
怎么样是不是很简单,但是这个验证码有点太简单了我们来点复杂一点点的。
.
.
.
💠升级
觉得不够过瘾我亲自手写了一个,试试它的效果吧一起来看看。
import ddddocr
import time
begin=time.time()
arr=[]
ocr = ddddocr.DdddOcr()
for i in range(1,5):
with open(('%d.png'%i), 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
arr.append(res)
finish=time.time()
print(arr)
print("用时:%s 秒" % str(finish-begin))
['uwv6','7482','DWSe','feixue']
用时:0.13045329758155361 秒
结果可以看出第三章照片的w
背换成W
除了大小写以外其他好像没有什么问题,大家可以试试。
💠制作验证码
只是会破解不行我们这次来个彻底的,上手做一个。原理很简单就是简单的随机函数和PIL
库的使用
from PIL import Image,ImageDraw,ImageFont
import random
def getRandomColor():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return (r,g,b)
def getRandomStr():
num_random = str(random.randint(1,9))
random_upper_alpha = chr(random.randint(65,90))
random_char = random.choice([num_random,random_upper_alpha])
return random_char
image = Image.new('RGB',(120,40),(255,255,255))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(r'K:\\msyh.ttc',size=24)
for i in range(4):
draw.text((10+i*30,10),getRandomStr(),getRandomColor(),font=font)
width = 120
height = 40
for i in range(5):
x1 = random.randint(0,width)
x2 = random.randint(0,width)
y1 = random.randint(0,height)
y2 = random.randint(0,height)
draw.line((x1,x2,y1,y2),fill=getRandomColor())
for i in range(20):
draw.point([random.randint(0,width),random.randint(0,height)],fill=getRandomColor())
x = random.randint(0,width)
y = random.randint(0,height)
draw.arc((x,y,x+5,y+5),0,90,fill=getRandomColor())
image.save('feixue.jpg')
💠结尾
另外大家猜猜要是换成汉字它能不能识别??? 这里不久不揭晓答案了,欢迎大佬们评论区告诉我们答案。
今天的分享就到这里了。谢谢大佬们的观看,可以的话给个🌸 🌸 🌸 三联 🌸 🌸 🌸再走吧!!
📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
📣python有趣练手项目,可以让你快乐学python练手项目专栏
以上是关于⚡爬虫高级篇⚡五行代码识别验证码—— ddddocr(带带弟弟OCR)的主要内容,如果未能解决你的问题,请参考以下文章
AI实战:附源代码手把手教你文字识别模型(入门篇:验证码识别)