5行Python實現驗證碼識別

最近發現一個新庫,試用一下發現非常實用,特意今天分享給大家。

該庫名也是非常有趣 —— ddddocr(諧音帶帶弟弟OCR)

環境要求

python >= 3.8
Windows/Linux/Macox..

可以通過以下命令安裝

pip install ddddocr

參數說明

 

 測試圖片

測試代碼

 

import ddddocr

ocr = ddddocr.DdddOcr()
with open('1.jpg', 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)

print(res)

 

自寫驗證碼 

只是會破解不行我們這次來個徹底的,上手做一個。原理很簡單就是簡單的隨機函數和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')

  自己嘗試一下可不可識別吧

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章