CnOCR 是 Python 3 下的文字識(shí)別(Optical Character Recognition,簡稱OCR)工具包,支持簡體中文、繁體中文(部分模型)、英文和數(shù)字的常見字符識(shí)別,支持豎排文字的識(shí)別。自帶了20+個(gè)訓(xùn)練好的識(shí)別模型,適用于不同應(yīng)用場景,安裝后即可直接使用。同時(shí),CnOCR也提供簡單的訓(xùn)練命令供使用者訓(xùn)練自己的模型。歡迎加入 交流群。CnOCR 追求的目標(biāo)一直是使用簡單,而不是實(shí)現(xiàn)各種最新的模型算法。
CnOCR V2.2 前兩天終于上線了,內(nèi)部集成了場景文字檢測功能,終于不挑圖片了~。而且,文檔做了大規(guī)模更新,可愛多了~。
官方代碼庫:https://github.com/breezedeus/cnocr 。
可以使用 在線 Demo (https://cnocr.readthedocs.io/zh/latest/demo/) 查看效果。
之前版本把文本檢測 CnSTD 分離出來的初衷是 CnOCR 不用依賴opencv,降低安裝成本,結(jié)果發(fā)現(xiàn)opencv的安裝對大部分人來說不是事。分離出來的另一個(gè)問題是很多人在第一次用CnOCR時(shí)都是在隨便的一張圖片上看效果,然后覺得效果很差就不用了。真正結(jié)合CnSTD試驗(yàn)效果的人很少。從 V2.2 開始,CnOCR 內(nèi)部調(diào)用 CnSTD 進(jìn)行文本檢測,這樣整個(gè)文本檢測+文本識(shí)別過程都在 CnOCR 內(nèi)部完成,對用戶完全透明。
CnOCR 新版 V2.2 會(huì)比 PaddleOCR (ppocr) 好用,主要體現(xiàn)在四個(gè)方面:
CnOCR 安裝更簡單,不依賴PaddlePaddle;
CnOCR 使用更簡單,主要接口依舊就3個(gè),文檔盡量簡潔明了;
CnOCR 精度不低于 ppocr,因?yàn)?CnOCR 中引入了 ppocr 的主要模型(ONNX版本)。而且從我的使用經(jīng)驗(yàn)看,CnOCR 自己訓(xùn)練的模型在某些場景精度是比 ppocr 模型更高的,比如不常見的漢字排列,簡單的文字截圖圖片;
CnOCR 速度更快。CnOCR 中支持的ppocr模型是 ONNX版本,會(huì)比 ppocr 的 paddle版本更快一倍左右(經(jīng)驗(yàn)值)。而且 CnOCR 自己訓(xùn)練的部分識(shí)別模型更精簡,速度也會(huì)更快。
嗯,順利的話一行命令即可完成安裝。
> pip install cnocr
更多說明可見 安裝文檔。
注:如果電腦中從未安裝過PyTorch
,OpenCV
python包,初次安裝可能會(huì)遇到問題,但一般都是常見問題,可以自行百度/Google解決。
所有參數(shù)都使用默認(rèn)值即可。如果發(fā)現(xiàn)效果不夠好,多調(diào)整下各個(gè)參數(shù)看效果,最終往往能獲得比較理想的精度。
from cnocr import CnOcr
img_fp = './docs/examples/huochepiao.jpeg'
ocr = CnOcr() # 所有參數(shù)都使用默認(rèn)值
out = ocr.ocr(img_fp)
print(out)
識(shí)別結(jié)果:
針對 排版簡單的印刷體文字圖片,如截圖圖片,掃描件圖片等,可使用 det_model_name='naive_det'
,相當(dāng)于不使用文本檢測模型,而使用簡單的規(guī)則進(jìn)行分行。
使用 det_model_name='naive_det'
的最大優(yōu)勢是速度快,劣勢是對圖片比較挑剔。如何判斷是否該使用此檢測模型呢?最簡單的方式就是拿應(yīng)用圖片試試效果,效果好就用,不好就不用。
from cnocr import CnOcr
img_fp = './docs/examples/multi-line_cn1.png'
ocr = CnOcr(det_model_name='naive_det')
out = ocr.ocr(img_fp)
print(out)
識(shí)別結(jié)果:
采用來自 ppocr 的中文識(shí)別模型 rec_model_name='ch_PP-OCRv3'
進(jìn)行識(shí)別。
from cnocr import CnOcr
img_fp = './docs/examples/shupai.png'
ocr = CnOcr(rec_model_name='ch_PP-OCRv3')
out = ocr.ocr(img_fp)
print(out)
識(shí)別結(jié)果:
雖然中文檢測和識(shí)別模型也能識(shí)別英文,但專為英文文字訓(xùn)練的檢測器和識(shí)別器往往精度更高。如果是純英文的應(yīng)用場景,建議使用來自 ppocr 的英文檢測模型 det_model_name='en_PP-OCRv3_det'
, 和英文識(shí)別模型 rec_model_name='en_PP-OCRv3'
。
from cnocr import CnOcr
img_fp = './docs/examples/en_book1.jpeg'
ocr = CnOcr(det_model_name='en_PP-OCRv3_det', rec_model_name='en_PP-OCRv3')
out = ocr.ocr(img_fp)
print(out)
識(shí)別結(jié)果:
采用來自ppocr的繁體識(shí)別模型 rec_model_name='chinese_cht_PP-OCRv3'
進(jìn)行識(shí)別。
from cnocr import CnOcr
img_fp = './docs/examples/fanti.jpg'
ocr = CnOcr(rec_model_name='chinese_cht_PP-OCRv3') # 識(shí)別模型使用繁體識(shí)別模型
out = ocr.ocr(img_fp)
print(out)
使用此模型時(shí)請注意以下問題:
識(shí)別精度一般,不是很好;
除了繁體字,對標(biāo)點(diǎn)、英文、數(shù)字的識(shí)別都不好;
此模型不支持豎排文字的識(shí)別。
識(shí)別結(jié)果:
如果明確知道待識(shí)別的圖片是單行文字圖片(如下圖),可以使用類函數(shù) CnOcr.ocr_for_single_line()
進(jìn)行識(shí)別。這樣就省掉了文字檢測的時(shí)間,速度會(huì)快一倍以上。
調(diào)用代碼如下:
from cnocr import CnOcr
img_fp = './docs/examples/helloworld.jpg'
ocr = CnOcr()
out = ocr.ocr_for_single_line(img_fp)
print(out)
核酸疫苗截圖識(shí)別
身份證識(shí)別
飯店小票識(shí)別
聯(lián)系客服