DdddOcr,其由本作者與kerlomz 共同合作完成,通過大批量生成隨機數據後進行深度網絡訓練,本身並非針對任何一家驗證碼廠商而製作,本庫使用效果完全靠玄學,可能可以識別,可能不能識別。
DdddOcr、最簡依賴的理念,盡量減少使用者的配置和使用成本,希望帶給每位測試者舒適的體驗
專案地址: 點我傳送
一個容易使用的通用驗證碼辨識python函式庫
探索本項目的文件»
· 報告Bug · 提出新特性
贊助合作商
上手指南
環境支援
安裝步驟
文件目錄說明
專案底層支持
使用文件
基礎ocr識別能力
目標偵測能力
滑桿偵測
OCR機率輸出
自訂OCR訓練模型導入
版本控制
相關推薦文章or項目
作者
捐贈
Star歷史
贊助合作商 | 推薦理由 | |
---|---|---|
YesCaptcha | GooglereCaptcha驗證碼/ hCaptcha驗證碼/ funCaptcha驗證碼商業級辨識介面點我直達VIP4 | |
超級鷹 | 全球領先的智慧圖片分類及識別商家,安全、準確、高效、穩定、開放,強大的技術及校驗團隊,支援大並發。 7*24h作業進度管理 | |
Malenia | Malenia企業級代理IP網關平台/代理IP分銷軟體 | |
雨雲VPS | 註冊首月5折 | 浙江節點低價大頻寬,100M每月30元 |
系統 | CPU | GPU | 最大支援py版本 | 備註 |
---|---|---|---|---|
Windows 64位 | √ | √ | 3.12 | 部分版本windows需要安裝vc運行庫 |
Windows 32位元 | × | × | - | |
Linux 64 / ARM64 | √ | √ | 3.12 | |
Linux 32 | × | × | - | |
Macos X64 | √ | √ | 3.12 | M1/M2/M3...晶片參考#67 |
i. 從pypi安裝
pip install ddddocr
ii. 從原始碼安裝
git clone https://github.com/sml2h3/ddddocr.gitcd ddddocr python setup.py
請勿直接在ddddocr專案的根目錄內直接import ddddocr ,請確保你的開發專案目錄名稱不為ddddocr,此為基礎常識。
eg:
ddddocr ├── MANIFEST.in ├── LICENSE ├── README.md ├── /ddddocr/ │ │── __init__.py 主代码库文件 │ │── common.onnx 新ocr模型 │ │── common_det.onnx 目标检测模型 │ │── common_old.onnx 老ocr模型 │ │── logo.png │ │── README.md │ │── requirements.txt ├── logo.png └── setup.py
本項目基於dddd_trainer 訓練所得,訓練底層框架位pytorch,ddddocr推理底層抵賴於onnxruntime,故本項目的最大兼容性與python版本支持主要取決於onnxruntime。
主要用於識別單行文字,即文字部分佔據圖片的主體部分,例如常見的英數驗證碼等,本項目可以對中文、英文(隨機大小寫or透過設定結果範圍圈定大小寫)、數字以及部分特殊字元。
# example.pyimport ddddocrocr = ddddocr.DdddOcr()image = open("example.jpg", "rb").read()result = ocr.classification(image)print(result)
本函式庫內建有兩套ocr模型,預設不會自動切換,需要在初始化ddddocr的時候透過參數進行切換
# example.pyimport ddddocrocr = ddddocr.DdddOcr(beta=True) # 切換為第二套ocr模型image = open("example.jpg", "rb").read()result = ocr.classification(image)print( result)
提示對於部分透明黑色png格式圖片得辨識支援: classification
方法使用png_fix
參數,預設為False
ocr.classification(image, png_fix=True)
注意
之前發現很多人喜歡在每次ocr識別的時候都重新初始化ddddocr,即每次都執行ocr = ddddocr.DdddOcr()
,這是錯誤的,通常來說只需要初始化一次即可,因為每次初始化和初始化後的第一次辨識速度都非常慢
參考例圖
包括且不限於以下圖片
主要用於快速偵測出影像中可能的目標主體位置,由於被偵測出的目標不一定為文字,所以本功能只提供目標的bbox位置(在⽬標偵測⾥,我們通常使⽤bbox(bounding box,縮寫是bbox)來描述⽬標位置。
如果使用過程中無需呼叫ocr功能,可以在初始化時透過傳參ocr=False
關閉ocr功能,開啟目標偵測需要傳入參數det=True
import ddddocrimport cv2det = ddddocr.DdddOcr(det=True)with open("test.jpg", 'rb') as f:image = f.read()bboxes = det.detection(image)print(bboxes)im = cv2 .imread("test.jpg")for bbox in bboxes:x1, y1, x2, y2 = bboxim = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255 ), thickness=2)cv2.imwrite("result.jpg", im)
參考例圖
包括且不限於以下圖片
本專案的滑塊偵測功能並非AI識別實現,皆為opencv內建演算法實現。可能對於截圖黨用戶沒那麼友善~,如果使用過程中無需調用ocr功能或目標檢測功能,可以在初始化時透過傳參ocr=False
關閉ocr功能或det=False
來關閉目標檢測功能
本功能內建兩套演算法實現,適用於兩種不同情況,請參考以下說明
a.算法1
演算法1原理是透過滑桿影像的邊緣在背景圖中計算找到相對應的坑位,可以分別取得到滑桿圖和背景圖,滑桿圖為透明背景圖
滑桿圖
背景圖
det = ddddocr.DdddOcr(det=False, ocr=False) with open('target.png', 'rb') as f:target_bytes = f.read() with open('background.png', 'rb') as f:background_bytes = f.read() res = det.slide_match(target_bytes, background_bytes) print(res)
由於滑桿圖可能存在透明邊框的問題,導致計算結果不一定準確,需要自行估算滑桿圖透明邊框的寬度用於修正得出的bbox
提示:如果滑桿沒有過多背景部分,則可以新增simple_target參數, 通常為jpg或bmp格式的圖片
slide = ddddocr.DdddOcr(det=False, ocr=False) with open('target.jpg', 'rb') as f:target_bytes = f.read() with open('background.jpg', 'rb') as f:background_bytes = f.read() res = slide.slide_match(target_bytes, background_bytes, simple_target=True) print(res)
a.演算法2
演算法2是透過比較兩張圖的不同之處進行判斷滑桿目標坑位的位置
參考圖a,帶有目標坑位陰影的全圖
參考圖b,全圖
slide = ddddocr.DdddOcr(det=False, ocr=False)with open('bg.jpg', 'rb') as f:target_bytes = f.read() with open('fullpage.jpg', 'rb') as f:background_bytes = f.read() img = cv2.imread("bg.jpg") res = slide.slide_comparison(target_bytes, background_bytes)print(res)
為了提供更靈活的ocr結果控制與範圍限定,專案支援對ocr結果進行範圍限定。
可以透過在呼叫classification
方法的時候傳參probability=True
,此時classification
方法將會傳回全字元表的機率當然也可以透過set_ranges
方法設定輸出字元範圍來限定回傳的結果。
Ⅰ. set_ranges
方法限定返回字元返回
本方法接受1個參數,如果輸入為int類型為內建的字元集限制,string類型則為自訂的字元集
若為int類型,請參考下表
參數值 | 意義 |
---|---|
0 | 純整數0-9 |
1 | 純小寫英文az |
2 | 純大寫英文AZ |
3 | 小寫英文az + 大寫英文AZ |
4 | 小寫英文az + 整數0-9 |
5 | 大寫英文AZ + 整數0-9 |
6 | 小寫英文az + 大寫英文AZ + 整數0-9 |
7 | 預設字元庫- 小寫英文az - 大寫英文AZ - 整數0-9 |
若為string類型請傳入一段不包含空格的文本,其中的每個字元均為待選字詞如: "0123456789+-x/=""
import ddddocrocr = ddddocr.DdddOcr()image = open("test.jpg", "rb").read()ocr.set_ranges("0123456789+-x/=")result = ocr.classification(image, probability=True )s = ""for i in result['probability']:s += result['charsets'][i.index(max(i))]print(s)
本專案支援導入來自於dddd_trainer 進行自訂訓練後的模型,參考導入程式碼為
import ddddocrocr = ddddocr.DdddOcr(det=False, ocr=False, import_onnx_path="myproject_0.984375_139_13000_2022-02-26-15-34-13.onnwithx" ', 'rb') as f:image_bytes = f.read()res = ocr.classification(image_bytes)print(res)
本專案使用Git進行版本管理。您可以在repository參看目前可用版本。
帶弟弟OCR,純VBA本地獲取網路驗證碼整體解決方案
ddddocr rust 版本
captcha-killer的修改版
透過ddddocr訓練字母數字驗證碼模型並識別部署調用
……
歡迎更多優秀案例或教程等進行投稿,可直接新建issue標題以【投稿】開頭,附上公開教程站點鏈接,我會選擇根據文章內容選擇相對不重複或者有重點內容等進行readme展示,感謝各位朋友~
好友數過多不一定通過,有問題可以在issue進行交流
該項目簽署了MIT 授權許可,詳情請參閱LICENSE