OCR通用驗證碼識別SDK免費開源版-ddddocr
今天ddddocr又更新啦!
當前版本為1.4.3
本次升級的主要原因為,dddd_trainer 的開源進行適配,使dddd_trainer 訓練出的模型可以直接無縫導入到ddddocr里面來使用
使用ddddocr調用dddd_trainer 訓練后的模型
dddd_trainer 訓練后會在models目錄里導出charsets.json和onnx模型
如下所示,import_onnx_path為onnx所在地址,charsets_path為onnx所在地址
1.4.0版本更新內容
本次更新新增了兩種滑塊識別算法,算法非深度神經網絡實現,僅使用opencv和PIL完成。
算法1
小滑塊為單獨的png圖片,背景是透明圖,如下圖
然后背景為帶小滑塊坑位的,如下圖
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)
提示:如果小圖無過多背景部分,則可以添加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)
算法2
一張圖為帶坑位的原圖,如下圖
一張圖為原圖,如下圖
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)
更新內容2
添加全局ocr關閉參數,初始化時傳入
dddd = ddddocr.DdddOcr(ocr=False)
則為關閉ocr功能,如果det = True,則會自動關閉ocr
1.3.1版本更新內容
想必很多做驗證碼的新手,一定頭疼碰到點選類型的圖像,做樣本費時費力,神經網絡不會寫,訓練設備太昂貴,模型效果又不好。
市場上常見的點選類驗證碼圖片如下圖所示
那么今天,他來了,ddddocr帶著重磅更新大搖大擺的走來了。
簡介
ddddocr是由sml2h3開發(fā)的專為驗證碼廠商進行對自家新版本驗證碼難易強度進行驗證的一個python庫,其由作者與kerlomz共同合作完成,通過大批量生成隨機數據后進行深度網絡訓練,本身并非針對任何一家驗證碼廠商而制作,本庫使用效果完全靠玄學,可能可以識別,可能不能識別。
ddddocr奉行著開箱即用、最簡依賴的理念,盡量減少用戶的配置和使用成本,希望給每一位測試者帶來舒適的體驗
項目地址: 點我傳送
更新說明
本次更新其實分為兩部分,其中有一部分是在1.2.0版本就已經更新了,但是在這里還是有必要提一下的。
第一部分 OCR識別部分
在1.2.0開始,ddddocr的識別部分進行了一次beta更新,主要更新在于網絡結構主體的升級,其訓練數據并沒有發(fā)生過多的改變,所以理論上在識別結果上,原先可能識別效果的很好的圖形在1.2.0上有一小部分概率會有一定程度的下降,也有可能原本識別不好的圖形在1.2.0之后效果卻變得特別好。 測試代碼:
import ddddocr ocr = ddddocr.DdddOcr() with open("test.jpg", 'rb') as f: image = f.read() res = ocr.classification(image) print(res)
由于事實上確實在一些圖片上老版本的模型識別效果比新模型好,特地這次更新把老模型也加入進去了,通過在初始化ddddocr的時候使用old參數即可快速切換老模型
import ddddocr ocr = ddddocr.DdddOcr(old=True) with open("test.jpg", 'rb') as f: image = f.read() res = ocr.classification(image) print(res)
OCR部分應該已經有很多人做了測試,在這里就放一部分網友的測試圖片。
等等更多圖片等你測試喲~
第二部分 目標檢測部分
在本次1.3.0的更新中,目標檢測部分隆重登場! 目標檢測部分同樣也是由大量隨機合成數據訓練而成,對于現在已有的點選驗證碼圖片或者未知的驗證碼圖片都有可能具備一定的識別能力,適用于文字點選和圖標點選。 簡單來說,對于點選類的驗證碼,可以快速的檢測出圖片上的文字或者圖標。
import ddddocr import cv2 det = ddddocr.DdddOcr(det=True) with open("test.jpg", 'rb') as f: image = f.read() poses = det.detection(image) print(poses) im = cv2.imread("test.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)
舉些例子:
以上只是目前我能找到的點選驗證碼圖片,做了一個簡單的測試。
安裝
環(huán)境支持
python <= 3.9
Windows/Linux/Macos..
暫時不支持Macbook M1(X),M1(X)用戶需要自己編譯onnxruntime才可以使用
安裝命令
pip install ddddocr
以上命令將自動安裝符合自己電腦環(huán)境的最新ddddocr
dddd_trainer 帶帶弟弟OCR訓練工具
ddddocr
帶帶弟弟OCR所用的訓練工具今天正式開源啦!項目僅支持N卡訓練,A卡或其他卡就先別看啦
ddddocr 與 ocr_api_server 的無縫部署
項目基于Pytorch進行開發(fā),支持cnn與crnn進行訓練、斷點恢復、自動導出onnx模型,并同時支持無縫使用訓練環(huán)境支持
Windows/Linux
Macos僅支持cpu訓練
1、深度學習必備環(huán)境配置(非僅本項目要求,而是所有深度學習項目要求,cpu訓練除外)
pytorch 官網查看自己系統(tǒng)與硬件支持的pytorch版本,注意30系列之前的N卡,如2080Ti等請選擇cuda11以下的版本(例:CUDA 10.2),如果為30系N卡,僅支持CUDA 11版本,請選擇CUDA 11以上版本(例:CUDA 11.3),然后根據選擇的條件顯示的pytorch安裝命令完成pytorch安裝,由于pytorch的版本更新速度導致很多pypi源僅緩存了cpu版本,CUDA版本需要自己在官網安裝。
開始本教程前請先前往安裝CUDA和CUDNN
根據自己顯卡型號與系統(tǒng)選擇
注意cudnn支持的cuda版本號要與你安裝的cuda版本號對應,不同版本的cuda支持的顯卡不一樣,20系無腦選擇10.2版本cuda,30系無腦選擇11.3版本cuda,這里有啥問題就百度吧,算是一個基礎問題。
2、訓練部分
- 以下所有變量均以 {param} 格式代替,表示可根據自己需要修改,而使用時并不需要帶上{},如步驟創(chuàng)建新的訓練項目,使用時可以直接寫
python app.py create test_project
-
1、Clone本項目到本地
git clone https://github.com/sml2h3/dddd_trainer.git
-
2、進入項目目錄并安裝本項目所需依賴
pip install -r requirements.txt -i https://pypi.douban.com/simple
-
3、創(chuàng)建新的訓練項目
python app.py create {project_name}
如果想要創(chuàng)建一個CNN的項目,則可以加上--single參數,CNN項目適用于圖片寬高是一個確定值和識別結果位數一定的情況
python app.py create {project_name} --single
project_name 為項目名稱,盡量不要以特殊符號命名
-
4、準備數據
項目支持兩種形式的數據
A、從文件名導入
圖片均在同一個文件夾中,且命名為類似,其中/root/images_set為圖片所在目錄,可以為任意目錄地址
/root/images_set/ |---- abcde_隨機hash值.jpg |---- sdae_隨機hash值.jpg |---- 醬悶肘子_隨機hash值.jpg
如下圖所示
那么圖片命名可以是
mkGu_000001d00f140741741ed9916240d8d5.jpg
為考慮各種情況,dddd_trainer不會自動去處理大小寫問題,如果想訓練大小寫,則在樣本標注時就需要自己標注好大小寫,如上面例子
B、從文件中導入
受限于可能樣本組織形式或者特殊字符,本項目支持從txt文檔中導入數據,數據集目錄必須包含有
labels.txt
文件和images
文件夾, 其中/root/images_set為圖片所在目錄,可以為任意目錄地址labels.txt
文件中包含了所有在/root/images_set/images
目錄下基于/root/images_set/images
的圖片相對路徑,/root/images_set/images
下可以有目錄。當然,在這種模式下,圖片的文件名隨意,可以有具體label也可以沒有,因為咱們不從這里獲取圖片的label
如下所示
-
a.images下無目錄的形式
/root/images_set/ |---- labels.txt |---- images |---- 隨機hash值.jpg |---- 隨機hash值.jpg |---- 醬悶肘子_隨機hash值.jpg labels.txt文件內容為(其中\(zhòng)t制表符為每行文件名與label的分隔符) 隨機hash值.jpg\tabcd 隨機hash值.jpg\tsdae 醬悶肘子_隨機hash值.jpg\t醬悶肘子
b.images下有目錄的形式
/root/images_set/ |---- labels.txt |---- images |---- aaaa |---- 隨機hash值.jpg |---- 醬悶肘子_隨機hash值.jpg labels.txt文件內容為(其中\(zhòng)t制表符為每行文件名與label的分隔符) aaaa/隨機hash值.jpg\tabcd aaaa/隨機hash值.jpg\tsdae 醬悶肘子_隨機hash值.jpg\t醬悶肘子
為了新手更好的理解本部分的內容,本項目也提供了兩套基礎數據集提供測試
-
5、修改配置文件
Model:
CharSet: [] # 字符集,不要動,會自動生成
ImageChannel: 1 # 圖片通道數,如果你想以灰度圖進行訓練,則設置為1,彩圖,則設置為3。如果設置為1,數據集是彩圖,項目會在訓練的過程中自動在內存中將讀取到的彩圖轉為灰度圖,并不需要提前自己修改并且該設置不會修改本地圖片
ImageHeight: 64 # 圖片自動縮放后的高度,單位為px,高度必須為16的倍數,會自動縮放圖像
ImageWidth: -1 # 圖片自動縮放后的寬度,單位為px,本項若設置為-1,將自動根據情況調整
Word: false # 是否為CNN模型,這里在創(chuàng)建項目的時候通過參數控制,不要自己修改
System:
Allow_Ext: [jpg, jpeg, png, bmp] # 支持的圖片后綴,不滿足的圖片將會被自動忽略
GPU: true # 是否啟用GPU去訓練,使用GPU訓練需要參考步驟一安裝好環(huán)境
GPU_ID: 0 # GPU設備號,0為第一張顯卡
Path: '' # 數據集根目錄,在緩存圖片步驟會自動生成,不需要自己改,除非數據集地址改了
Project: test # 項目名稱 也就是{project_name}
Val: 0.03 # 驗證集的數據量比例,0.03就是3%,在緩存數據時,會自動選則3%的圖片用作訓練過程中的數據驗證,修改本值之后需要重新緩存數據
Train:
BATCH_SIZE: 32 # 訓練時每一個batch_size的大小,主要取決于你的顯存或內存大小,可以根據自己的情況,多測試,一般為16的倍數,如16,32,64,128
CNN: {NAME: ddddocr} # 特征提取的模型,目前支持的值為ddddocr,effnetv2_l,effnetv2_m,effnetv2_xl,effnetv2_s,mobilenetv2,mobilenetv3_s,mobilenetv3_l
DROPOUT: 0.3 # 非專業(yè)人員不要動
LR: 0.01 # 初始學習率
OPTIMIZER: SGD # 優(yōu)化器,不要動
SAVE_CHECKPOINTS_STEP: 2000 # 每多少step保存一次模型
TARGET: {Accuracy: 0.97, Cost: 0.05, Epoch: 20} # 訓練結束的目標,同時滿足時自動結束訓練并保存onnx模型,Accuracy為需要滿足的最小準確率,Cost為需要滿足的最小損失,Epoch為需要滿足的最小訓練輪數
TEST_BATCH_SIZE: 32 # 測試時每一個batch_size的大小,主要取決于你的顯存或內存大小,可以根據自己的情況,多測試,一般為16的倍數,如16,32,64,128
TEST_STEP: 1000 # 每多少step進行一次測試
配置文件位于本項目根目錄下projects/{project_name}/config.yaml
-
6、緩存數據
python app.py cache {project_name} /root/images_set/
如果是從labels.txt里面讀取數據
python app.py cache {project_name} /root/images_set/ file
-
7、開始訓練或恢復訓練
python app.py train {project_name}
-
8、部署
你們先訓練著,我去適配ddddocr和ocr_api_server了,適配完我再繼續(xù)更新文檔