用OCR技術,自動識別各種驗證碼,工具已開源
今天我在給大家分享一個 OCR? 應用——ddddocr自動識別驗證碼。
前面 4 個d是“帶帶弟弟”的首拼音。[/笑哭]。
項目地址:https://github.com/sml2h3/ddddocr。
使用的時候用pip?命令直接安裝即可pip install ddddocr。
OCR的核心技術包含兩方面,一是目標檢測模型檢測圖片中的文字,二是文字識別模型,將圖片中的文字轉(zhuǎn)成文本文字。
第一類驗證碼最簡單,它們沒有復雜的背景圖片,所以目標檢測模型可以省略,直接將圖片送入文字識別模型即可。
識別代碼如下:
import ddddocr
from PIL import Image
# 模型
ocr = ddddocr.DdddOcr(beta=True)
# 驗證碼圖片
with open('test.jpg', 'rb') as f:
image = f.read()
res = ocr.classification(image)
# 驗證碼文字內(nèi)容
print(res)
第二類驗證碼有復雜的背景,需要先用目標檢測模型框出文字,在進行識別。
代碼如下:
import ddddocr
import cv2
det = ddddocr.DdddOcr(det=True)
with open("test2.jpg", 'rb') as f:
image = f.read()
# 目標檢測
poses = det.detection(image)
print(poses)
im = cv2.imread("test2.jpg")
# 遍歷檢測出的文字
for box in poses:
x1, y1, x2, y2 = box
# 給每個文字畫矩形框
im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)
cv2.imwrite("result.jpg", im)
輸出結果如下:
可以看到文字部分已經(jīng)被框出來了,如果我們在上述代碼直接將im[y1:y2, x1:x2]送入文字識別模型,就可以識別出對應的文本內(nèi)容了。
ddddocr還能識別下面這種帶滑塊的驗證碼。
這種雖然不屬于OCR的業(yè)務范疇,但作為一個通用的驗證碼識別工具,作者還是支持了,必須給作者點個贊。