Linux 部署以paddle Serving 的方式部署 PaddleOCR CPU版本

強烈建議您在Docker內構建Paddle Serving,更多鏡像請查看Docker鏡像列表。
提示-1:Paddle Serving項目僅支持Python3.6/3.7/3.8/3.9,接下來所有的與Python/Pip相關的操作都需要選擇正確的Python版本。

提示-2:以下示例中GPU環境均為cuda11.2-cudnn8,如果您使用Python Pipeline來部署,并需要Nvidia TensorRT來優化預測性能,請參考以下說明來選擇其他版本。

一、docker鏡像下載及容器啟動

開發鏡像有兩種, 分別為:
Serving 鏡像: registry.baidubce.com/paddlepaddle/serving:{Tag}
Paddle 鏡像: registry.baidubce.com/paddlepaddle/paddle:{Tag}

兩種鏡像都支持安裝Serving, 但是:在Paddle docker鏡像上部署 Servin g服務需要安裝額外依賴庫,因此,我們直接使用 Serving 開發鏡像。
在這里插入圖片描述
下載 CPU最新版鏡像, 并啟動容器:

# 啟動 CPU Docker
docker pull registry.baidubce.com/paddlepaddle/serving:0.9.0-devel
docker run -p 9292:9292 --name test_cpu -dit registry.baidubce.com/paddlepaddle/serving:0.9.0-devel bash
docker exec -it test_cpu bash
git clone https://github.com/PaddlePaddle/Serving

二、在鏡像中安裝相關依賴

2.1 安裝requirements

cd Serving
pip3 install -r python/requirements.txt

這里可能會報錯:

Building wheels for collected packages: av
Building wheel for av (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python3.6 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/setup.py'"'"'; file='"'"'/tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-2di0ikr3
cwd: /tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/
Complete output (48 lines):
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.6
creating build/lib.linux-x86_64-3.6/av
copying av/main.py -> build/lib.linux-x86_64-3.6/av
copying av/init.py -> build/lib.linux-x86_64-3.6/av
copying av/datasets.py -> build/lib.linux-x86_64-3.6/av
copying av/deprecation.py -> build/lib.linux-x86_64-3.6/av
creating build/lib.linux-x86_64-3.6/av/container
copying av/container/init.py -> build/lib.linux-x86_64-3.6/av/container
creating build/lib.linux-x86_64-3.6/av/subtitles
copying av/subtitles/init.py -> build/lib.linux-x86_64-3.6/av/subtitles
creating build/lib.linux-x86_64-3.6/av/codec
copying av/codec/init.py -> build/lib.linux-x86_64-3.6/av/codec
creating build/lib.linux-x86_64-3.6/av/filter
copying av/filter/init.py -> build/lib.linux-x86_64-3.6/av/filter
creating build/lib.linux-x86_64-3.6/av/audio
copying av/audio/init.py -> build/lib.linux-x86_64-3.6/av/audio
creating build/lib.linux-x86_64-3.6/av/data
copying av/data/init.py -> build/lib.linux-x86_64-3.6/av/data
creating build/lib.linux-x86_64-3.6/av/video
copying av/video/init.py -> build/lib.linux-x86_64-3.6/av/video
creating build/lib.linux-x86_64-3.6/av/sidedata
copying av/sidedata/init.py -> build/lib.linux-x86_64-3.6/av/sidedata
running build_ext
running config
PyAV: 8.0.3 (unknown commit)
Python: 3.6.0 (default, Mar 4 2022, 05:45:55) \n[GCC 8.2.0]
platform: Linux-5.4.0-150-generic-x86_64-with-debian-stretch-sid
extension_extra:
include_dirs: [b'include']
libraries: []
library_dirs: []
define_macros: []
runtime_library_dirs: []
config_macros:
PYAV_COMMIT_STR="unknown-commit"
PYAV_VERSION=8.0.3
PYAV_VERSION_STR="8.0.3"
Could not find libavformat with pkg-config.
Could not find libavcodec with pkg-config.
Could not find libavdevice with pkg-config.
Could not find libavutil with pkg-config.
Could not find libavfilter with pkg-config.
Could not find libswscale with pkg-config.
Could not find libswresample with pkg-config.
ERROR: Failed building wheel for av
Running setup.py clean for av
Failed to build av
Installing collected packages: av
Running setup.py install for av ... error
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python3.6 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/setup.py'"'"'; file='"'"'/tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-8oce82tt/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/av
cwd: /tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/
Complete output (50 lines):
running install
/usr/local/lib/python3.6/site-packages/setuptools/command/install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
setuptools.SetuptoolsDeprecationWarning,
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.6
creating build/lib.linux-x86_64-3.6/av
copying av/main.py -> build/lib.linux-x86_64-3.6/av
copying av/init.py -> build/lib.linux-x86_64-3.6/av
copying av/datasets.py -> build/lib.linux-x86_64-3.6/av
copying av/deprecation.py -> build/lib.linux-x86_64-3.6/av
creating build/lib.linux-x86_64-3.6/av/container
copying av/container/init.py -> build/lib.linux-x86_64-3.6/av/container
creating build/lib.linux-x86_64-3.6/av/subtitles
copying av/subtitles/init.py -> build/lib.linux-x86_64-3.6/av/subtitles
creating build/lib.linux-x86_64-3.6/av/codec
copying av/codec/init.py -> build/lib.linux-x86_64-3.6/av/codec
creating build/lib.linux-x86_64-3.6/av/filter
copying av/filter/init.py -> build/lib.linux-x86_64-3.6/av/filter
creating build/lib.linux-x86_64-3.6/av/audio
copying av/audio/init.py -> build/lib.linux-x86_64-3.6/av/audio
creating build/lib.linux-x86_64-3.6/av/data
copying av/data/init.py -> build/lib.linux-x86_64-3.6/av/data
creating build/lib.linux-x86_64-3.6/av/video
copying av/video/init.py -> build/lib.linux-x86_64-3.6/av/video
creating build/lib.linux-x86_64-3.6/av/sidedata
copying av/sidedata/init.py -> build/lib.linux-x86_64-3.6/av/sidedata
running build_ext
running config
PyAV: 8.0.3 (unknown commit)
Python: 3.6.0 (default, Mar 4 2022, 05:45:55) \n[GCC 8.2.0]
platform: Linux-5.4.0-150-generic-x86_64-with-debian-stretch-sid
extension_extra:
include_dirs: [b'include']
libraries: []
library_dirs: []
define_macros: []
runtime_library_dirs: []
config_macros:
PYAV_COMMIT_STR="unknown-commit"
PYAV_VERSION=8.0.3
PYAV_VERSION_STR="8.0.3"
Could not find libavformat with pkg-config.
Could not find libavcodec with pkg-config.
Could not find libavdevice with pkg-config.
Could not find libavutil with pkg-config.
Could not find libavfilter with pkg-config.
Could not find libswscale with pkg-config.
Could not find libswresample with pkg-config.
----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python3.6 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/setup.py'"'"'; file='"'"'/tmp/pip-install-33ucddr6/av_a8ed30cb6adf4834b63b8b918a77b42a/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-8oce82tt/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/av Check the logs for full command output.

這是在pip安裝 av包時報錯。
到 官方項目中搜索開放的問題:
執行 pip3 install -r python/requirements.txt 報錯
雖然問題還是open的, 但提供的一個解決方案,我這里試了,可以解決 上面的問題。
這里遇到這個問題是因為: av 包版本與 FFmpeg 不兼容,可以試試:重新編譯 FFmpeg

wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.gz
tar -xzf ffmpeg-4.4.tar.gz
cd ffmpeg-4.4apt-get install -y build-essential yasm pkg-config./configure --enable-shared --prefix=/usr/local
make -j$(nproc)
make installldconfig/usr/local/bin/ffmpeg -version

之后重新安裝 av

pip3 cache purge
pip3 install av==8.0.3 --no-cache-dir

2.2 安裝服務所需whl包,共有3種: client、app、server,安裝命令如下

pip3 install paddle-serving-client==0.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install paddle-serving-app==0.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple#  server 需要區分 CPU和GPU版本
CPU Serverpip3 install paddle-serving-server==0.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simpleGpu Serverpip3 install paddle-serving-server-gpu==0.9.0.post112 -i https://pypi.tuna.tsinghua.edu.cn/simple

后續需要進行模型轉換, 所以這里還需要額外安裝paddle包:

# CPU環境請執行
pip3 install paddlepaddle==2.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

檢查已經安裝的包:

λ 3cf905f11bfc /home pip list | grep paddle
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
paddle-bfloat         0.1.7
paddle-serving-app    0.9.0
paddle-serving-client 0.9.0
paddle-serving-server 0.9.0
paddlepaddle          2.4.2

三、下載模型及模型轉換

3.1 下載代碼及模型

import osos.chdir("/home/aistudio")
# 下載代碼
!git clone https://gitee.com/paddlepaddle/PaddleOCR.git
os.chdir("/home/aistudio/PaddleOCR")os.chdir("/home/aistudio/PaddleOCR/deploy/pdserving/")# 下載并解壓 OCR 文本檢測模型 paddleocr v2
!wget https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar -O ch_PP-OCRv2_det_infer.tar && tar -xf ch_PP-OCRv2_det_infer.tar && rm ch_PP-OCRv2_det_infer.tar
# 下載并解壓 OCR 文本識別模型
!wget https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar -O ch_PP-OCRv2_rec_infer.tar &&  tar -xf ch_PP-OCRv2_rec_infer.tar && rm ch_PP-OCRv2_rec_infer.tar# paddleocr v3
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 && rm ch_PP-OCRv3_det_infer.tarwget 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 && rm ch_PP-OCRv3_rec_infer.tar

3.2 模型轉換

python3 -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_det_infer/ \--model_filename inference.pdmodel          \--params_filename inference.pdiparams       \--serving_server ./ppocrv3_det_serving/ \--serving_client ./ppocrv3_det_client/python3 -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_rec_infer/ \--model_filename inference.pdmodel          \--params_filename inference.pdiparams       \--serving_server ./ppocrv3_rec_serving/  \--serving_client ./ppocrv3_rec_client/

執行完后, 檢查文件夾

tree -h *_client *_serving# 服務端用到的
|- ppocrv2_det_serving/|- __model__  |- __params__|- serving_server_conf.prototxt  |- serving_server_conf.stream.prototxt# 客戶端用到的
|- ppocrv2_det_client|- serving_client_conf.prototxt  |- serving_client_conf.stream.prototxt

沒問題,如果有v3,還有存在ppocrv3_det_client和ppocrv3_det_serving 文件夾

四、啟動PaddleOCR 服務

啟動OCR服務, PaddleOCR 的 pdserving目錄包含啟動pipeline服務和發送預測請求的代碼,包括:

__init__.pyconfig.yml            # 啟動服務的配置文件ocr_reader.py         # OCR模型預處理和后處理的代碼實現pipeline_http_client.py   # 發送預測請求的腳本web_service.py        # 啟動服務端的腳本

一行命令即可啟動服務:

開啟新的終端運行下列啟動服務的命令

#python3 web_service.py --config=config.yml#  后臺啟動
nohup python3 web_service.py --config=config.yml &>web_serving_log.txt &

成功啟動服務后,web_serving_log.txt中會打印類似如下日志

在這里插入圖片描述

五、發送客戶端請求

import os
os.chdir("/home/aistudio/PaddleOCR/deploy/pdserving/")
!python pipeline_http_client.py{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['3504811', '屬瑞金醫院', '標本號:OA', '支吉單(臨床內分泌', '標本種類:血清', '標志提示:', '門診號:E05535540', '門診科別:門診內分泌', '條碼號:10080603139 臨床診斷:', '申請醫生:孫首悅', '檢測日期:2010', '產', '齡:31', '檢驗備注:', '結果', '參考范圍', '項目', '3.12', 'FT3', '2.62--6.49pmol/L', '15.40', 'FT4', '9.01--19.04pmol/L', '1.31', '0.35--4.94uIU/ml', 'STSH', '0.15', '<4.1110/ml', 'TGAB', '0.1', '25.0U/L', 'TRAb', '0.17', '<5.611U/ml', 'TPOAb', '0.1', '0.1--10.0pg/ml', '降鈣素', '報告時間:10-08-0711:28', '打印時間:1', '采樣時間:10-08-0611:23', '收到時間:10-08-0611:44', '核', '檢驗:李紀平', '對:保', '以上7項檢驗結果僅供臨床醫師參考']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['Mairiedu|er|農', '*|Palais du LOUVRE', '公 LES ARTS DECORATIFS', '* Musée du LOUVRE', 'Theatre', 'du PALAIS-ROYAL L&']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['小學數學第八冊第三單元測試題', '(小數乘法)', '姓名:', '班別:', '分數:', '計算題.(共38分)', '1.直接寫出得數。(10分)', '0.8X25=', '0X4.23=', '0.57+0.43=', '2.4X0.2=', '0.02', 'X500=', '2.8X10=', '8.29X100=', '2.5X0.4=', '4.87-1.7=', '8.07', 'X1000=', '2.用堅式計算。(12分)', '2.97X3.8=', '7.05X0.84=']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['Paddle.jit.saveO', ': best accuracy.pdopt', ': inference.pdmodel', 'ich det mv3', '模型訓練', 'i best accuracy.pdparams', '模型轉換', 'opt優化模型', 'i inference.pdiparams', 'idb opt.nb', ': best accuracy.states']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['2', '證#', '', '##', '孔叫叫E2號動']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['股股東的持股情況', '單位:股', '股東總數(戶)', '75.103', '前十名股東持股情況', '持有有限售條', '質押或凍結情況', '股東名稱', '期末持股數量', '比例', '件股份數量', '股東性質', '股份狀態', '數量', '國有法人', 'HONG Leong Bank', '境外法人', '浩海產業投資基金管理', '240000000', '境內非國有法人', '0', '國有法人', '公司', '16000000', '16000000', '公司', '國有法人', '成都欣天頤投資有限責', '0', '國有法人', '上海東昌投資發展有限', '3.3220%', '凍結', '公司', '50.000.00境內非國有法人', '新華文軒出版傳媒股份', '0', '80000.000', '國有法人', '四川新華發行集團有限', '71243800', '1.9723%', '公司', '國有法人', '71.154.900', '限責任公司', '國有法人']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['右', '天然の', '#', '味の占', '濃厚衣', '夢少久', '本勇5辦', '味\\\\深', '燒', '深辦の蘇石', '蘇扣子布', '5味の', '3-9', '警', '鮑の己品', '匕辛', '節辦', '永書', '香', '夢之', '二の兩石', '脂の秉龍', '力力', 'N', '乙龍の揚', '', '出來龍了', ':', '新鮮', '少手', '炊吉大了', '風味豊', '熟成L力', '二人辦', '美味', '芳醇', '口の.', 'C', '二の石', '史方辦套', '旬', '産地直送', '久七', '食人二', '秘の', '<<', '淹機個一卜', '>1一>一', '本場の', '朝探', '俊味吉', '七3寸子']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['1', 'EPPING', 'Twinned with', 'Eppingen,']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['代號', '項目', '結果', '參考值', '單位', '谷丙轉氨酶', '25.6', '0--40', 'ALT', 'U/L', 'TBIL', '總膽紅素', '11.2', '<20', 'UMO1/L', '直接膽紅素', '3.3', '0--7', 'DBIL', 'UMOL/L', '間接膽紅素', '7.9', 'IBIL', '1.5--15', 'UMOL/L', '總蛋白', '58.9V', '60--80', 'TP', 'S/L', '白蛋白', '35.1', '33--55', 'ALB', ':/L', '球蛋白', '23.8', '20--30', 'GLO', '8/L', '白球比', 'A/G', '1.5', '1.5--2.5', 'ALP', '可性磷酉酯', '93', '15--112', 'IU/L', '谷氨酰轉肽酸', '<50', '14.3', 'GGT', 'U/L', '谷草轉氨酶', 'AST', '16.3', '8--40', 'U/L', '乳酸脫氫酶', 'LDH', '167', '114--240', 'U/L', '腺甘脫氨酶', '12.6', '4--24', 'ADA', 'U/L']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['Halten', 'Sie', 'Sie', 'was', 'versprechen', 'Und', 'geben', 'Sie noch', 'was dazu']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['CreditCord', '中國工商銀行', 'INDUSTRIL AD COMMERCIA BAHKSLUHIN', '持卡人存根', '商戶名稱&編號(MERCHANT NAME&CODE)', '工行浣紗支行積分兌換', '120214020408', '檢索參考號(SYSTEMINOJ)', '終端號(TERMINAL)', '60128018', '001', '卡號(CARD NUMBER):', '622210512', 'S', '卡別(CARDTYPE)', '有效期(EXPIRY', '牡丹準貨記卡', '交易日期DATE)', '交易時間(TIMEE)', '2012-10-23', '12:43:15', '批次號(BATCHNO.)', '流水號(TRACEHOJ', '000016', '積分兌獎', '信用卡積分:50000', '持卡人姓名(CARDHOLDERNAME)', 'MR.1', '持卡人簽名', '(CARDHOLDER S', 'SIGNATURE:']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['上海斯格威鉑爾受大酒店', '一打浦路15號', '綠洲仕格維花園公寓', '打浦路252935號']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['訂007778', 'PASS', '登機牌', 'BOARDING', '座位號', '序號', 'SERIALNO.', '艙位 CLASS', 'SEAT NO.', '航班 FLIGHT', '日期 DATE', 'W', '03DEC', '035', 'MU2379', 'GATE', '登機口', '始發地', 'FROM', '登機時間BDT', '自的地 TO', '福州', 'TAIYUAN', 'G11', 'FUZHOU', '身份識別ID NO.', '姓名NAME', 'ZHANGQIWET', '票號TKT NO', '張祺偉', '票價 FARE', 'ETKT7813699238489/1', '登機口于起飛前10分鐘關閉 GATES CLOSE 10 MINUTES BEFORE DEPARTURE TIME']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['7788.com', 'Z57A001950', '杭州東售', '2013年07月07日13:39開', '06車12B號', '二等座', '杭州東', 'G7512次', '上海虹橋', 'HangZhouDong', 'Shang HaiHongQiao', '¥73.00元', '限乘當日當次車', '余友紅', '檢票口16', '3623301993****0941', '9004-1300-5707-08A0-0195-0', '和諧號', 'C0400']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['中國農業銀行', 'AGRICULTURAL BANK OF CHINA', '美太網點辦', '理務貴全融華務']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['土地整治與土壤修復研究中心', '華南農業大學|東圖']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['合格證', '品名:純棉單面背心套', '執行標準:FZ/T73025-2006', '安全類別:GB18401-2010', 'A類嬰幼兒用品', '貨號:B2390', 'DREA', '等級:一等品檢驗員:08', 'WOTHERAL', '成份:面料:100%棉', '小晶晶母嬰', '品名:純棉單面背心套', '上裝:66/48', '零售價:47.50元', '下裝:66/47']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['Meters/bonwe', '洗滌說明', '淘X口Ne', '最高洗滌溫度30°C', '常規程序', '不可漂白', '懸掛晾干', '熨斗底板最高溫度110°C', '常規干洗', '注童事項:']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['純臻營養護發素', '產品信息/參數', '(45元/每公斤,100公斤起訂', '每瓶22元,1000瓶起訂)', '【品牌】:代加工方式/OEMODM', '【品名】:純臻營養護發素', '【產品編號】:YM-X-3011', 'ODMOEM', '(凈含量】:220ml', '【適用人群):適合所有膚質', '[主要成分】:鯨蠟硬脂醇、燕麥B-葡聚', '糖、椰油酰胺內基甜菜堿、泛醒', '(成品包材)', '主要功能】:可緊致頭發磷層,從而達到', '即時持久改善頭發光澤的效果,給干燥的頭', '發足夠的滋養']"], 'tensors': []}
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['欄L。未來味元氨']"], 'tensors': []}
==> total number of test imgs:  20

文檔中,后續還有服務優化的一些配置, 接下來的文章中繼續補充。。。

六、參考

Paddle Serving官方安裝文檔
基于 Paddle Serving 的 OCR 服務化部署實戰
執行 pip3 install -r python/requirements.txt 報錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81187.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AOSP Android14 Launcher3——Launcher的狀態介紹LauncherState類

Launcher3中有一個跟Launcher狀態相關的類&#xff0c;叫LauncherState LauncherState 是 Launcher3 中定義各種用戶界面狀態的抽象基類。你可以把它想象成一個狀態機&#xff0c;定義了 Launcher 可能處于的不同視覺和交互模式&#xff0c;例如主屏幕、所有應用列表、最近任務…

鴻蒙NEXT開發動畫(方塊動畫旋轉)

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件&#xff0c;代碼如下&#xff1a; /*** SpinKit 風格的旋轉加載動畫組件。** component* param spinSize - 動畫容器大小&#xff08;必須為正數&#xff09;* param spinColor - 動畫顏色&#xff08;支持資源引用&#xf…

深入解析Java架構師面試:從核心技術到AI應用

深入解析Java架構師面試&#xff1a;從核心技術到AI應用 在互聯網大廠的Java求職者面試中&#xff0c;技術深度和項目經驗是成功的關鍵。本文以嚴肅的面試官與資深Java架構師馬架構&#xff08;擁有十年研發及架構設計經驗&#xff09;之間的對話為背景&#xff0c;詳細展示了…

Qt窗口關閉特效:自底而上逐漸消失

廢話不多說&#xff0c;直接上代碼&#xff1a; 構造函數&#xff1a; MyWidget(QWidget *parent nullptr) {// 設置窗口屬性&#xff1a;支持透明背景setAttribute(Qt::WA_TranslucentBackground);// 移除窗口邊框setWindowFlags(Qt::FramelessWindowHint);} closeEvent函數…

AI對IT行業的重塑:挑戰與機遇并存的技術革命

一、必要性&#xff1a;AI成為IT行業的基礎設施 在云計算、大數據和物聯網構成的數字生態中&#xff0c;AI技術已成為IT行業的"水電煤"。以微軟Azure為例&#xff0c;其AI云服務支撐著全球超過85%的《財富》500強企業&#xff0c;通過機器學習模型自動優化服務器集群…

[論文梳理] 足式機器人規劃控制流程 - 接觸碰撞的控制 - 模型誤差 - 自動駕駛車的安全合規(4個課堂討論問題)

目錄 問題 1&#xff1a;足式機器人運動規劃 & 控制的典型流程 (pipline) 1.1 問題 1.2 目標 1.3 典型流程&#xff08;Pipeline&#xff09; 1.3.1 環境感知&#xff08;Perception&#xff09; 1.3.2 高層規劃&#xff08;High-Level Planning&#xff09; 1.3.3 …

阿里云短信接入實現示例

1&#xff09;構建Springboot項目 2) 添加依賴 <!--阿里云短信--> <dependency><groupId>com.aliyun</groupId><artifactId>alibabacloud-dysmsapi20170525</artifactId><version>3.0.0</version> </dependency><…

邏輯回歸之參數選擇:從理論到實踐

一、邏輯回歸概述 邏輯回歸雖然名字中帶有“回歸”&#xff0c;但它是一種用于處理二分類或多分類問題的算法。其核心思想是通過構建一個線性模型&#xff0c;將輸入特征進行線性組合&#xff0c;再利用邏輯函數&#xff08;如Sigmoid函數&#xff09;將線性組合的結果映射到0…

綜合案例建模(1)

文章目錄 滾花手扭螺絲機箱封蓋螺絲螺絲孔錐形墊片 滾花手扭螺絲 前視基準面畫草圖&#xff0c;旋轉生成主體 倒角0.5 頂面&#xff0c;草圖轉換實體引用&#xff0c;去復制邊線 生成螺旋線路徑 頂面繪制草圖 上一步畫的草圖沿螺旋線掃描切除 鏡像掃描特征 陣列鏡像掃描特征 創…

SQL語句練習 自學SQL網 多表查詢

目錄 Day 6 用JOINs進行多表聯合查詢 Day 7 外連接 OUTER JOINs Day 8 外連接 特殊關鍵字 NULLs Day 6 用JOINs進行多表聯合查詢 SELECT * FROM Boxoffice INNER JOIN movies ON movies.idboxoffice.Movie_id;SELECT * FROM Boxoffice INNER JOIN moviesON movies.idboxoffi…

游戲引擎學習第247天:簡化DEBUG_VALUE

歡迎。關于紋理傳輸的詳細情況。 上周我們剛剛完成了紋理下載的相關工作&#xff0c;但實際上并沒有完全解決這個問題。問題的核心是&#xff0c;當前關于紋理下載的正確方式仍然存在較大的不確定性。盡管我們在進行紋理下載的工作時已有一定進展&#xff0c;但依舊有不少模糊…

python將字符串轉成二進制數組

python將字符串轉成二進制數組 功能概述&#xff1a; save_binary_to_json() 函數&#xff1a;將字符串轉換為二進制數據&#xff08;字節的整數表示&#xff09;&#xff0c;并保存到JSON文件中。 load_binary_from_json() 函數&#xff1a;從JSON文件中讀取二進制數據并還原…

【springboot知識】配置方式實現SpringCloudGateway相關功能

配置方式實現SpringCloudGateway相關功能 Spring Cloud Gateway 核心功能與實戰實現指南一、核心功能架構二、六大核心功能實現1. 動態路由配置2. 斷言(Predicate)配置3. 過濾器(Filter)配置4. 負載均衡配置5. 熔斷降級配置6. 限流配置 三、高級配置技巧1. 跨域配置2. 重試機制…

Windows 10 環境二進制方式安裝 MySQL 8.0.41

文章目錄 初始化數據庫配置文件注冊成服務啟停服務鏈接服務器登錄之后重置密碼卸載 初始化數據庫 D:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin\mysqld -I --console --basedirD:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64 --datadi…

流式通信技術對比:SSE vs WebSocket 應用場景與最佳實踐

在構建動態、實時交互的現代 Web 應用時&#xff0c;實時通信能力至關重要。Server-Sent Events&#xff08;SSE&#xff09; 和 WebSocket 是當前最主流的兩種技術方案&#xff0c;它們都支持服務器主動向客戶端推送數據&#xff0c;但在通信模式、應用場景和實現復雜度上存在…

復雜度和順序表(雙指針方法)

目錄 目錄 目錄 前言&#xff1a; 一、時間復雜度和空間復雜度 1.1概念 1.2規則 二、順序表 2.1靜態順序表 2.2動態順序表 三、雙指針法 四、總結 前言&#xff1a; 時間復雜度和空間復雜度是用于判斷算法好壞的指標&#xff0c;程序性能的核心指標。時間復雜度主要衡…

flutter 專題 六十四 在原生項目中集成Flutter

概述 使用Flutter從零開始開發App是一件輕松愜意的事情&#xff0c;但對于一些成熟的產品來說&#xff0c;完全摒棄原有App的歷史沉淀&#xff0c;全面轉向Flutter是不現實的。因此使用Flutter去統一Android、iOS技術棧&#xff0c;把它作為已有原生App的擴展能力&#xff0c;…

Java高階程序員學習計劃(詳細到天,需有一定Java基礎)

??致敬讀者 ??感謝閱讀??笑口常開??生日快樂?早點睡覺??博主相關 ??博主信息??博客首頁??專欄推薦??活動信息文章目錄 Java高階程序員學習計劃(詳細到天,需有一定Java基礎)第一階段(30天)Java基礎:Java生態工具鏈:設計模式與編碼規范:第二階段(15天…

JS自動化獲取網站信息開發說明

一、自動獲取信息的必要性 1. 提高效率與節省時間 批量處理&#xff1a;自動化可以快速抓取大量數據&#xff0c;比人工手動操作快得多。 24/7 運行&#xff1a;自動化工具可以全天候工作&#xff0c;不受時間限制。 減少重復勞動&#xff1a;避免人工反復執行相同的任務&am…

Android Kotlin 依賴注入全解:Koin appModule 配置與多 ViewModel 數據共享實戰指南

一、基礎配置與概念 1. 什么是 appModule appModule 是 Koin 依賴注入框架中的核心配置模塊&#xff0c;用于集中管理應用中的所有依賴項。它本質上是一個 Koin 模塊&#xff08;org.koin.core.module.Module&#xff09;&#xff0c;通過 DSL 方式聲明各種組件的創建方式和依…