天津門戶網(wǎng)站開發(fā)國家免費(fèi)技能培訓(xùn)官網(wǎng)
? ? ? ?OCR,即光學(xué)字符識別(Optical Character Recognition),是一種將圖像中的文字轉(zhuǎn)換為機(jī)器編碼文字的技術(shù)。這種技術(shù)可以識別和轉(zhuǎn)換各種來源的文本,包括掃描文檔、照片中的文字、手寫筆記等。光學(xué)字符識別(OCR)技術(shù)在實(shí)際應(yīng)用場景中的作用是多方面的。首先,OCR技術(shù)在文檔數(shù)字化方面扮演著關(guān)鍵角色。通過將紙質(zhì)文檔轉(zhuǎn)換為電子格式,如PDF或Word文檔,OCR不僅促進(jìn)了信息的保存和共享,也極大地提高了數(shù)據(jù)檢索的效率。這一過程對于歷史檔案的保存尤為重要,同時也在日常辦公環(huán)境中普遍應(yīng)用。其次,OCR技術(shù)在自動數(shù)據(jù)錄入領(lǐng)域的應(yīng)用顯著提高了工作效率。企業(yè)和機(jī)構(gòu)通過OCR技術(shù)自動讀取和錄入發(fā)票、表格等文檔中的數(shù)據(jù),大大減少了手動輸入的時間和錯誤率。這種應(yīng)用在金融、醫(yī)療、法律等行業(yè)中尤為重要,其中數(shù)據(jù)的準(zhǔn)確性對業(yè)務(wù)流程至關(guān)重要。此外,OCR技術(shù)在輔助視障人士閱讀方面也發(fā)揮著重要作用。通過將書籍和其他印刷材料轉(zhuǎn)換成電子文本,OCR技術(shù)使得這些內(nèi)容可以通過語音合成軟件朗讀,從而提高了視障人士的信息獲取能力和生活質(zhì)量。還有,OCR技術(shù)在交通和城市管理中也有廣泛應(yīng)用。例如,在交通領(lǐng)域,OCR可用于自動車牌識別,從而支持交通監(jiān)控和管理系統(tǒng)。在城市管理方面,OCR可用于識別和處理公共空間中的各種標(biāo)識和指示牌。
PPOCR 服務(wù)化部署
PaddleOCR提供2種服務(wù)部署方式:
- 基于PaddleHub Serving的部署:代碼路徑為"
./deploy/hubserving
",使用方法參考文檔; - 基于PaddleServing的部署:代碼路徑為"
./deploy/pdserving
",按照本教程使用。
基于PaddleServing的服務(wù)部署
本文檔將介紹如何使用PaddleServing?工具部署PP-OCR動態(tài)圖模型的pipeline在線服務(wù)。
相比較于hubserving部署,PaddleServing具備以下優(yōu)點(diǎn):
- 支持客戶端和服務(wù)端之間高并發(fā)和高效通信
- 支持 工業(yè)級的服務(wù)能力 例如模型管理,在線加載,在線A/B測試等
- 支持 多種編程語言 開發(fā)客戶端,例如C++, Python和Java
PaddleServing 支持多種語言部署,本例中提供了python pipeline 和 C++ 兩種部署方式,兩者的對比如下:
語言 | 速度 | 二次開發(fā) | 是否需要編譯 |
---|---|---|---|
C++ | 很快 | 略有難度 | 單模型預(yù)測無需編譯,多模型串聯(lián)需要編譯 |
python | 一般 | 容易 | 單模型/多模型 均無需編譯 |
更多有關(guān)PaddleServing服務(wù)化部署框架介紹和使用教程參考文檔。
?一、安裝paddle
1.創(chuàng)建沙盒環(huán)境并激活。
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda activate paddle_env
?2.安裝paddle和paddleocr。
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simplepip install "paddleocr>=2.0.1"
3.測試?
paddleocr --image_dir ./test/1.jpg --use_angle_cls true
二、服務(wù)化部署
下載項(xiàng)目:
https://github.com/PaddlePaddle/PaddleOCR
cd PaddleOCR?
pip install -r requirements.txt
cd /deploy/pdserving
?安裝serving,用于啟動服務(wù)。我的cuda版本是12.0。
參考:
https://github.com/PaddlePaddle/Serving/blob/v0.8.3/doc/Latest_Packages_CN.md
選擇自己合適的。
# 安裝serving,用于啟動服務(wù)
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server_gpu-0.8.3.post112-py3-none-any.whl
pip install paddle_serving_server_gpu-0.8.3.post112-py3-none-any.whl
# 安裝client,用于向服務(wù)發(fā)送請求
# 注意一定要與自己python的版本一致,我用的python版本是3.8,我下載的包就是cp38
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.8.3-cp38-none-any.whl
pip install paddle_serving_client-0.8.3-cp38-none-any.whl# 安裝serving-app
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_app-0.8.3-py3-none-any.whl
pip install paddle_serving_app-0.8.3-py3-none-any.whl
# 下載并解壓 OCR 文本檢測模型,下載不下來或者沒有wget命令就手動上傳再解壓
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar -O ch_PP-OCRv3_det_infer.tar && tar -xf ch_PP-OCRv3_det_infer.tar# 下載并解壓 OCR 文本檢測模型,下載不下來或者沒有wget命令就手動上傳再解壓
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar -O ch_PP-OCRv3_rec_infer.tar && tar -xf ch_PP-OCRv3_rec_infer.tar
重新安裝paddle版本,不安裝后面的步驟會報錯。?
pip install paddlepaddle==2.4.0# 轉(zhuǎn)換檢測模型
python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_det_infer/ --model_filename inference.pdmodel --params_filename inference.pdiparams --serving_server ./ppocr_det_v3_serving/ --serving_client ./ppocr_det_v3_client/python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_rec_infer/ --model_filename inference.pdmodel --params_filename inference.pdiparams --serving_server ./ppocr_rec_v3_serving/ --serving_client ./ppocr_rec_v3_client/
操作完之后會生成如下四個文件:
?后臺程序運(yùn)行:
# 運(yùn)行日志保存在log.txt
python web_service.py --config=config.yml &>/home/log.txt &
三、服務(wù)測試?
1.后臺測試(服務(wù)器上測試)
# 測試 該命令會檢測/home/PaddleOCR/doc/imgs下所有圖片進(jìn)行文字識別
python pipeline_http_client.py
2.http接口測試(本地訪問服務(wù)器測試)
2.1.python代碼測試
注意:xxxx改成你自己服務(wù)器的ip
import requests
import base64
import cv2
import jsonurl = "http://xxxxxxxx:9998/ocr/prediction"
img_file = 'test/1.jpg'def get_ocr_resultby_http(image):''':param image: :return:'''success,encoded_image = cv2.imencode(".jpg",image)#轉(zhuǎn)成二進(jìn)制#將數(shù)組轉(zhuǎn)為bytesbyte_data = encoded_image.tobytes()base64_image = base64.b64encode(byte_data).decode('utf8')data = {"key": ["image"], "value": [base64_image]}response = requests.post(url=url,data=json.dumps(data))ocr_result = eval(response.json()['value'][0])ocr_result = [[x[1],x[0]] for x in ocr_result]print(ocr_result)return ocr_resultimage = cv2.imread(img_file)
get_ocr_resultby_http(image )
2.2. postman訪問測試
1.打開postman。
2.使用 POST 請求。
3.在 Body 中以正確的格式發(fā)送數(shù)據(jù):
4.選擇 raw 并選擇 JSON。
JSON 應(yīng)該如下所示:
{"key": ["image"],"value": ["Base64編碼的圖像"]
}
Base64 編碼注意事項(xiàng):
確保在將圖像轉(zhuǎn)換為 Base64 編碼時不包含任何前綴(如 data:image/jpeg;base64,)。使用純粹的 Base64 字符串。
?