九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
小白輕松使用騰訊云GPU服務器部署OCR中英文識別服務
userphoto

2022.07.05 北京

關注

一直想搞一個GPU服務器來部署一下 PaddleOCR 的OCR識別服務,剛好騰訊云有一個活動,可以免費領取GPU服務器,可以來體驗一自己部署OCR識別啦(CPU服務器也是可以部署的,但是識別速度不太理想~)。 這里不講 AI 訓練啥的,只說部署以及使用 !

服務器配置

我這里是領取的騰訊云體驗服務器 (GPU計算型GN8 - 6核 56G)

CPU: 6核

內存:56GB

硬盤:100GB

顯卡驅動:CUDA10.2

購買服務器

騰訊云GPU服務購買地址:https://cloud.tencent.com/product/gpu ,選擇安裝系統(tǒng)時推薦安裝市場鏡像里的公共鏡像,里面有已經安裝好的 CUDA 驅動, 推薦選擇 ”CentOS 7.6 NVIDIA GPU基礎鏡像(預裝驅動和CUDA 10.2)“ 這個鏡像,因為安裝使用 PaddlePaddle 需要 顯卡驅動 10.1 及以上。另外服務器需要一個完整的顯卡,不能是共享的顯卡,因為系統(tǒng)會識別不到。

如果你要自己安裝顯卡驅動,騰訊云也提供了教程文檔: https://cloud.tencent.com/document/product/560/8064

教程正式開始

安裝 Anaconda

Anaconda是1個常用的python包管理程序,里面可以設置好多個python環(huán)境。

先下載 Anaconda 安裝腳本

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh --no-check-certificate
下載 Anaconda

下載完成后,執(zhí)行安裝,會提示你閱讀授權,一直按回車就可以了

sh Anaconda3-2021.05-Linux-x86_64.sh

info-2.png

然后提示你是否同意,輸入yes

info-3.png

最后會詢問你安裝的位置,一般不用更改,輸入回車就行,它會自動解壓縮

info-4.png

安裝好了之后,把Anaconda配置到環(huán)境變量,就可以用快捷 conda 命令了

vim ~/.bashrc #編輯環(huán)境配置文件
export PATH="~/anaconda3/bin:$PATH" # 在第一行加入這個

vim 輸入 i 可以編輯,編輯好了之后按 Esc, 然后輸入 :wq 保存修改

info-5.png

保存好了之后更新環(huán)境變量,在命令行輸入:

source ~/.bash_profile

最后驗證一下是否配置成功,沒有保存的話就是配置成功了!

info-6.png

安裝好了之后,創(chuàng)建一個 python3.8的環(huán)境,執(zhí)行一下命令,會有一個確認,輸入 y ,然后回車就可以了

conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

激活 paddle_env 環(huán)境

conda activate paddle_env

開始安裝 PaddlePaddle

PaddlePaddle 是百度開源的深度學習框架

PaddlePaddle官網:https://www.paddlepaddle.org.cn

安裝時根據自己的服務器配置選擇對應的安裝腳本

info-7.png

由于國內服務器訪問Anaconda官方源可能會很慢,所以這里可以設置一下清華的鏡像源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
info-7.png

開始安裝GPU版Paddle, 也會有一個輸入確認,輸入y回車就好了,這里安裝會有點久哦

conda install paddlepaddle-gpu==2.3.0 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
info-9.png

安裝好PaddlePaddle 之后就可以開始安裝PaddleOCR

安裝PaddleOCR

PaddleOCR是百度基于PaddlePaddle開源的OCR文字識別服務

Github地址:https://github.com/PaddlePaddle/PaddleOCR/

安裝,輸入以下命令,安裝好了之后就可以在命令行體驗OCR識別服務了

pip install "paddleocr>=2.0." -i https://mirror.baidu.com/pypi/simple
info-10.png

下載一個測試圖片體驗包:地址

wget https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip #下載
unzip ppocr_img.zip #解壓

開始體驗OCR識別

cd ppocr_img #進入剛才下載解壓的圖片目錄

執(zhí)行OCR識別

paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu true

執(zhí)行可能會報錯,這里需要安裝 兩個 lib libX11libXext

yum install -y libX11 
yum install -y libXext
info-11-error.png

這樣就是識別出來啦,使用GPU服務器識別超快的

info-12.png

部署OCR識別API服務

部署的話,Paddle 提供了 PaddleHub 和 Paddle Serving 兩個方式,使用PaddleHub是最方便的,命令行直接執(zhí)行就可以了, Paddle Serving 部署的話更穩(wěn)定,而且支持 c++ 編譯部署。

這里講一下 PaddleHub 和 Paddle Serving python 部署 (推薦還是 Paddle Serving 部署)

PaddleHub 部署 OCR 識別API

安裝 PaddleHub

pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple

啟動 API 服務

hub serving start -m ch_pp-ocrv3 --use_gpu   #會自動下載OCR模型

這樣就啟動了一個 OCR 識別服務

info-13.png

接口的請求地址為:http://127.0.0.1:8866/predict/ch_pp-ocrv3

識別的時候需要把圖片轉為base64, 然后 json 請求去提交參數

python 測試腳本

import requests
import json
import cv2
import base64

def cv2_to_base64(image):
    data = cv2.imencode('.jpg', image)[1]
    return base64.b64encode(data.tostring()).decode('utf8')

# 發(fā)送HTTP請求
data = {'images':[cv2_to_base64(cv2.imread("你的圖片地址"))]}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/ch_pp-ocrv3"
r = requests.post(url=url, headers=headers, data=json.dumps(data))

# 打印預測結果
print(r.json())
info-14.png

通過 curl 去請求接口

curl --location --request POST 'http://127.0.0.1:8866/predict/ch_pp-ocrv3' --header 'Content-Type: application/json' --data-raw '{"images":["圖片的base64內容,不需前面的base64標識"]}'

結果返回:

{"msg":[{"data":[{"confidence":0.9314630627632141,"text":"(paddle env][root@M-1-2-centos","text_box_position":[[6,10],[231,10],[231,23],[6,23]]},{"confidence":0.9092367887496948,"text":"ppocr imgl# hub serving start -m chpp-ocrv3 --use_gpu","text_box_position":[[227,10],[612,12],[612,25],[227,23]]},{"confidence":0.939938485622406,"text":"[2022-05-30 19:49:34 +0800]","text_box_position":[[5,25],[191,25],[191,38],[5,38]]},{"confidence":0.8236835598945618,"text":"[28320]","text_box_position":[[200,26],[246,26],[246,37],[200,37]]},{"confidence":0.6653339862823486,"text":"LINFO]","text_box_position":[[256,26],[295,26],[295,37],[256,37]]},{"confidence":0.842379093170166,"text":"starting gunicorn 2o.1.0","text_box_position":[[301,26],[474,26],[474,38],[301,38]]},{"confidence":0.939938485622406,"text":"[2022-05-30 19:49:34 +0800]","text_box_position":[[5,40],[191,40],[191,53],[5,53]]},{"confidence":0.8367705345153809,"text":"[28320]","text_box_position":[[200,41],[247,41],[247,52],[200,52]]},{"confidence":0.86468505859375,"text":"[INFO]","text_box_position":[[257,41],[297,41],[297,52],[257,52]]},{"confidence":0.9211856722831726,"text":"Listening at: http://0.0.0.0:8866 (28320)","text_box_position":[[302,40],[589,40],[589,53],[302,53]]},{"confidence":0.9346868395805359,"text":"[2022-05-3019:49:34+0800]","text_box_position":[[4,55],[191,54],[191,67],[4,68]]},{"confidence":0.9421297311782837,"text":"[28320]","text_box_position":[[199,55],[247,55],[247,68],[199,68]]},{"confidence":0.9394086003303528,"text":"[INFO]","text_box_position":[[256,55],[298,55],[298,68],[256,68]]},{"confidence":0.9321832656860352,"text":"Using worker: sync","text_box_position":[[302,56],[430,56],[430,68],[302,68]]},{"confidence":0.9334865808486938,"text":"[2022-05-30 19:49:34 +0800]","text_box_position":[[4,70],[191,70],[191,83],[4,83]]},{"confidence":0.8994974493980408,"text":"[INFO] ","text_box_position":[[256,70],[305,70],[305,84],[256,84]]},{"confidence":0.8855429887771606,"text":"[28324]","text_box_position":[[200,71],[246,71],[246,82],[200,82]]},{"confidence":0.9438435435295105,"text":"Booting worker with pid: 28324","text_box_position":[[300,70],[515,69],[515,83],[300,84]]}],"save_path":""}],"results":"","status":"000"}

這樣就可以正常使用啦,識別速度的話大概在 100-300ms 左右,挺快的。

官方的部署教程:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/deploy/hubserving/readme.md

通過Paddle Serving 部署OCR識別服務

相比較于hubserving部署,PaddleServing具備以下優(yōu)點:

  • 支持客戶端和服務端之間高并發(fā)和高效通信

  • 支持 工業(yè)級的服務能力 例如模型管理,在線加載,在線A/B測試等

  • 支持 多種編程語言 開發(fā)客戶端,例如C++, Python和Java

  • 先準備PaddleOCR 環(huán)境,這里拉去github代碼的話會好慢,可以自己先科學下載,然后上傳到服務器git clone https://github.com/PaddlePaddle/PaddleOCR --depth=1

進入到工作目錄

cd PaddleOCR/deploy/pdserving/準備PaddleServing的運行環(huán)境,步驟如下

# 安裝serving,用于啟動服務
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server_gpu-0.8.3.post102-py3-none-any.whl
pip3 install paddle_serving_server_gpu-0.8.3.post102-py3-none-any.whl


# 安裝client,用于向服務發(fā)送請求
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.8.3-cp38-none-any.whl
pip3 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
pip3 install paddle_serving_app-0.8.3-py3-none-any.whl

模型轉換

使用PaddleServing做服務化部署時,需要將保存的inference模型轉換為serving易于部署的模型。

首先,下載PP-OCR的inference模型

# 下載并解壓 OCR 文本檢測模型
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 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_serving_client把下載的inference模型轉換成易于server部署的模型格式。

# 轉換檢測模型
python3 -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/

# 轉換識別模型
python3 -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/

檢測模型轉換完成后,會在當前文件夾多出ppocr_det_v3_serving 和ppocr_det_v3_client的文件夾,具備如下格式:

|- ppocr_det_v3_serving/
  |- __model__  
  |- __params__
  |- serving_server_conf.prototxt  
  |- serving_server_conf.stream.prototxt

|- ppocr_det_v3_client
  |- serving_client_conf.prototxt  
  |- serving_client_conf.stream.prototxt

Paddle Serving pipeline部署

# 啟動服務,運行日志保存在log.txt
python3 web_service.py &>log.txt &
info-15.png

運行日志,沒有報錯的話就是啟動成功啦

info-16.png

然后可以使用他提供的client代碼去請求測試一下

info-17.png

提供 HTTP API 去請求測試

請求地址:http://127.0.0.1:9998/ocr/prediction

請求方式: json

請求參數:{"key": "image", "value": "圖片的base64"}

curl --location --request POST 'http://127.0.0.1:9998/ocr/prediction' 
--header 'Content-Type: application/json' 
--data-raw '{"key":"image","value":"圖片的base64"}'

返回的數據格式:

{
"err_no": 0,
"err_msg": "",
"key": [
    "result"
],
"value": [
    "[[('(padde env)[root@M-1-2-centoppocrimghub servingstart -m chpp-ocrv3--usegpu', 0.84638405), [[5.0, 10.0], [611.0, 12.0], [611.0, 24.0], [5.0, 22.0]]], [('[2022-05-3019:49:34+0800][28320】[INF0]Startingqunicorm20.1.', 0.81580645), [[5.0, 25.0], [472.0, 25.0], [472.0, 38.0], [5.0, 37.0]]], [('[2022-05-3019:49:34+0800][28320][INF0]Listeningat:http://0.0.0.0:8866(28320)', 0.84695405), [[5.0, 40.0], [589.0, 40.0], [589.0, 54.0], [5.0, 54.0]]], [('[2022-05-319:49:34+0800][28320】[INF0]Usingworker:sync', 0.7949861), [[5.0, 54.0], [430.0, 56.0], [430.0, 68.0], [5.0, 66.0]]], [('[2022-05-319:49:34+080】[28324】[INFO】Bootingworkerwith pid:28324', 0.85473406), [[4.0, 70.0], [515.0, 70.0], [515.0, 84.0], [4.0, 84.0]]]]"
],
"tensors": []
}

這樣就完成啦,可以正常使用啦,如果提供其他語言調用的話可以查看他們的官方文檔

結語

部署這個相對還是挺簡單的,Paddle 官方的文檔也挺齊全,不過一些特殊文字識別的話還是需要自己去定制訓練的,這里騰訊的GPU服務器還是挺不錯的,這個還是免費體驗的,哈哈哈。自己部署了一個OCR 識別服務,還是很有成就感的!

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
GitHub 熱榜:這款超硬核的 OCR 開源工具,我給 99.99 分!
PaddleOCR詳解和識別圖片中文字
更更好用的開源Python OCR工具包——CnOCR V2.2
【強烈推薦】.NET開源的OCR文字識別工具
PaddleOCR環(huán)境配置與安裝
【深度學習系列】關于PaddlePaddle的一些避“坑”技巧
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服