百度飛槳paddle,是百度旗下的開(kāi)源深度學(xué)習(xí)平臺(tái)。
官網(wǎng):https://www.paddlepaddle.org.cn/
OCR(光學(xué)字符識(shí)別,Optical Character Recognition)是一種將圖像中的文字轉(zhuǎn)換為可編輯文本的技術(shù)。它廣泛應(yīng)用于文檔數(shù)字化、信息提取和數(shù)據(jù)處理等領(lǐng)域。OCR 可以識(shí)別印刷文本、手寫文本,甚至某些類型的字體和符號(hào)。
簡(jiǎn)單的說(shuō),就是從圖片里面、PDF或者表格的截圖里面,抽取出來(lái)文字信息,以及它的坐標(biāo)位置等信息。
前端時(shí)間有個(gè)項(xiàng)目用到OCR圖片識(shí)別提取驗(yàn)證碼、另外要提取圖片中的姓名信息,使用PaddleOcr來(lái)實(shí)現(xiàn),使用起來(lái)還是非常不錯(cuò)的。
1、一些網(wǎng)站的驗(yàn)證碼可以識(shí)別。之前用的版本,只能說(shuō)中規(guī)中矩,成功率在80-95左右。
如果是輕量級(jí)的數(shù)字驗(yàn)證碼,可以先嘗試一下ddddocr,官網(wǎng)在:https://github.com/sml2h3/ddddocr
也是開(kāi)源且免費(fèi)的。普通 的數(shù)字驗(yàn)證碼準(zhǔn)確率還是比較高,能上90%以上。
收費(fèi)的話,可以考慮百度、阿里云的專門的OCR驗(yàn)證碼識(shí)別庫(kù),這些是有些成本的。Aws亞馬遜和Google的也非常好用,只用過(guò)Aws的,準(zhǔn)確率還是非常高。
2、識(shí)別圖片內(nèi)容,提取重要信息。
這個(gè)功能一些多模態(tài)的大模型 是可以直接實(shí)現(xiàn)的,但是呢,Token也不便宜,成本挺高。
如果用PaddleOCR識(shí)別成文字,再扔進(jìn)本地的開(kāi)源模型,就可以覆蓋掉這塊的成本。
3、手機(jī)自動(dòng)化,可以輔助進(jìn)行坐標(biāo)定位
可以通過(guò)截屏,然后直接扔進(jìn)Paddle識(shí)別出文字所在的位置,返回坐標(biāo)直接點(diǎn)擊,懶人專用。
PaddleOCR 3.0新增三大特色能力:
1、全場(chǎng)景文字識(shí)別模型PP-OCRv5:?jiǎn)文P椭С治宸N文字類型和復(fù)雜手寫體識(shí)別;整體識(shí)別精度相比上一代提升13個(gè)百分點(diǎn)。
?? 單模型支持五種文字類型(簡(jiǎn)體中文、繁體中文、中文拼音、英文和日文)。
?? 支持復(fù)雜手寫體識(shí)別:復(fù)雜連筆、非規(guī)范字跡識(shí)別性能顯著提升。
?? 整體識(shí)別精度提升 - 多種應(yīng)用場(chǎng)景達(dá)到 SOTA 精度, 相比上一版本PP-OCRv4,識(shí)別精度提升13個(gè)百分點(diǎn)!
2、通用文檔解析方案PP-StructureV3:支持多場(chǎng)景、多版式 PDF 高精度解析,在公開(kāi)評(píng)測(cè)集中領(lǐng)先眾多開(kāi)源和閉源方案。
?? 支持多場(chǎng)景 PDF 高精度解析,在 OmniDocBench 基準(zhǔn)測(cè)試中領(lǐng)先眾多開(kāi)源和閉源方案。
?? 多項(xiàng)專精能力: 印章識(shí)別、圖表轉(zhuǎn)表格、嵌套公式/圖片的表格識(shí)別、豎排文本解析及復(fù)雜表格結(jié)構(gòu)分析等。
3、智能文檔理解方案PP-ChatOCRv4:原生支持文心大模型4.5 Turbo,精度相比上一代提升15個(gè)百分點(diǎn)。
?? 文檔圖像(PDF/PNG/JPG)關(guān)鍵信息提取精度相比上一代提升15個(gè)百分點(diǎn)!
?? 原生支持文心大模型4.5 Turbo,還兼容 PaddleNLP、Ollama、vLLM 等工具部署的大模型。
?? 集成 PP-DocBee2,支持印刷文字、手寫體文字、印章信息、表格、圖表等常見(jiàn)的復(fù)雜文檔信息抽取和理解的能力。
是騾子是馬,得溜一下才知道。
1、先需要安裝官方的PaddlePaddle包。看官網(wǎng)安裝說(shuō)明
https://www.paddlepaddle.org.cn/install/quick
Paddle包早已經(jīng)是3.0的版本,而OCR之前是2.1的版本,我們今天要升級(jí)到3.0再使用。
安裝Paddle命令:
pip install -U paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
再安裝真正的OCR包,使用官方鏡像,以便升級(jí)到最新的PaddleOCR3.0版本。
pip install paddleocr -U -i https://pypi.org/simple
這里-i指定使用Pypi官方源,如果使用的阿里云的源或者清華的源,可能包還沒(méi)有同步,可以直接使用官方這個(gè)源安裝下載。
2、舊版本的使用方法
paddleocr = PaddleOCR(use_angle_cls=True, lang='ch') # 你可以換成 'ch' 或 'en'
image_file='captcha/captcha1_20250425_235439_726.png'
result = paddleocr.ocr(image_file, cls=True)
for line in result[0]:
box, (text, confidence) = line
print(f'文本: {text}, 置信度: {confidence}, 坐標(biāo): {box}')
輸出結(jié)果:
文本: 8tnk8z, 置信度: 0.9906759262084961, 坐標(biāo): [[40.0, 19.0], [276.0, 17.0], [277.0, 80.0], [41.0, 82.0]]
因?yàn)閳D片比較簡(jiǎn)單,所以非常容易識(shí)別出來(lái)
3、新版本使用推理方法調(diào)用文本識(shí)別模型。
img_file = 'captcha/captcha1_20250425_235439_726.png'
# 文本識(shí)別模型
model = TextRecognition(model_name='PP-OCRv5_server_rec') # 文本識(shí)別模型
output = model.predict(input=img_file, batch_size=1)
for res in output:
if not isinstance(res, TextRecResult):
continue
print(res.json)
print(f'識(shí)別文本: {res.get('rec_text')}, 置信度: {res.get('rec_score')}')
識(shí)別結(jié)果還是比較準(zhǔn)確。
4、再嘗試之前的舊代碼,發(fā)現(xiàn)已經(jīng)不可用了。
這里發(fā)現(xiàn),官方API已經(jīng)變更了,之前的ocr已經(jīng)廢棄不可用,這個(gè)文本推理,也不會(huì)再輸出坐標(biāo)信息。
嘗試新的方法來(lái)使用
# 文本識(shí)別模型
ocr = PaddleOCR(
# lang='en', # 指定中文ch還是英文en模型
# ocr_version='PP-OCRv5', # 指定模型版本
# device='cpu', # mps使用蘋果芯片,cpu使用intel芯片,gpu使用nvidia芯片
use_doc_orientation_classify=False, # 不使用 方向分類
use_doc_unwarping=False, # 不使用 文本圖像矯正模型,文本圖像預(yù)處理
use_textline_orientation=False, # 不使用 文本行方向分類模型
# text_detection_model_name='PP-OCRv5_server_det',
# text_recognition_model_name='PP-OCRv5_server_rec',
)
# ocr = PaddleOCR() # 文本圖像預(yù)處理+文本檢測(cè)+方向分類+文本識(shí)別
# ocr = PaddleOCR(use_doc_orientation_classify=False, use_doc_unwarping=False) # 文本檢測(cè)+方向分類+文本識(shí)別
# ocr = PaddleOCR(use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=False) # 文本檢測(cè)+文本識(shí)別
# output = ocr.predict('截圖/iShot_2025-05-21_09.46.10.png')
output = ocr.predict(img_file)
for res in output:
if not isinstance(res, OCRResult):
continue
for idx, item in enumerate(res.get('rec_texts')):
rec_boxes = res.get('rec_boxes')[idx]
x_min, y_min, x_max, y_max = rec_boxes[0], rec_boxes[1], rec_boxes[2], rec_boxes[3]
center_x, center_y = (x_min + x_max) / 2, (y_min + y_max) / 2
data = {
'text': res.get('rec_texts')[idx], # 識(shí)別出的文本內(nèi)容
'score': res.get('rec_scores')[idx], # 置信可靠度
'boxes': res.get('rec_boxes')[idx], # 文本框坐標(biāo)
'polys': res.get('rec_polys')[idx], # 文本 矩形邊界框數(shù)組
'center': (center_x, center_y), # 中心點(diǎn)坐標(biāo)
}
print(f'識(shí)別文本:{data['text']},置信度:{data['score']},中心點(diǎn)坐標(biāo):{data['center']}')
發(fā)現(xiàn)驗(yàn)證碼識(shí)別在這里不能用了,但是普通的文本識(shí)別是可以正常使用的??赡苁悄睦锱渲貌粚?duì)。于是打開(kāi)官網(wǎng)的測(cè)試網(wǎng)址,看看是不是代碼的問(wèn)題。
官方在線測(cè)試:https://aistudio.baidu.com/community/app/91660/webUI
測(cè)試發(fā)現(xiàn)官方的頁(yè)面也無(wú)法識(shí)別驗(yàn)證碼,但是截圖和PDf類是可以正常識(shí)別的。
換一張圖片看看效果
整體上中文的識(shí)別率還是非常高的。
官方還有非常多的示例,可以提取表格和版面解析,適用于不同的場(chǎng)景??梢园葱枞∮谩emo也比較簡(jiǎn)單,幾分鐘就可以上手跑起來(lái)。
百度的這個(gè)開(kāi)源項(xiàng)目還是非常好用。在OCR里面算是頭部工具了。
目前看和上一個(gè)版本之間的調(diào)用,差異比較大。
如果要識(shí)別驗(yàn)證碼,使用TextRecognition的方法單獨(dú)做文本識(shí)別。
如果要識(shí)別圖片上的文字,可以使用PaddleOCR的predicate來(lái)實(shí)現(xiàn)。
官方的在線測(cè)試網(wǎng)站,可以試試,OCR的效果還是很好的:
移動(dòng)端的OCR V5模型 只有16M大小,手機(jī)上也能隨意使用。
聯(lián)系客服