当前位置: 首页 > news >正文

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 报错

相关文章:

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

强烈建议您在Docker内构建Paddle Serving&#xff0c;更多镜像请查看Docker镜像列表。 提示-1&#xff1a;Paddle Serving项目仅支持Python3.6/3.7/3.8/3.9&#xff0c;接下来所有的与Python/Pip相关的操作都需要选择正确的Python版本。 提示-2&#xff1a;以下示例中GPU环境均…...

苏德战争前期苏联损失惨重(马井堂)

苏德战争前期&#xff08;1941年6月22日德国发动“巴巴罗萨行动”至1941年底至1942年初&#xff09;是苏联在二战中损失最惨重的阶段之一。以下是主要方面的损失概述&#xff1a; ‌一、军事损失‌ ‌人员伤亡与俘虏‌ 至1941年底&#xff0c;苏军伤亡约‌300万人‌&#xff…...

SI5338-EVB Usage Guide(LVPECL、LVDS、HCSL、CMOS、SSTL、HSTL)

目录 1. 简介 1.1 EVB 介绍 1.2 Si5338 Block Diagram 2. EVB 详解 2.1 实物图 2.2 基本配置 2.2.1 Universal Pin 2.2.2 IIC I/F 2.2.3 Input Clocks 2.2.4 Output Frequencies 2.2.5 Output Driver 2.2.6 Freq and Phase Offset 2.2.7 Spread Spectrum 2.2.8 快…...

LeetCode LCP40 心算挑战题解

看似一道简单的题目&#xff0c;实则不然&#xff0c;没有看评论的话&#xff0c;实在想不出来怎么写。 现在则由我来转述思想供大家参考理解&#xff0c;还是先给出示例&#xff0c;供大家更好的理解这个题目。 输入&#xff1a;cards [1,2,8,9], cnt 3输出&#xff1a;18解…...

Smart Link+Monitor Link组网

1.技术背景及原理 一般情况下&#xff0c;Smart Link只能感知与其接口直连的链路故障。将Monitor Link配置在Smart Link的上游设备上&#xff0c;可使Smart Link迅速感知上游链路故障&#xff0c;进行链路切换。Smart Link与Monitor Link配合使用&#xff0c;扩大了Smart Link…...

【计算机网络】​TCP(传输控制协议)套接字,多线程远程执行命令编程​

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;UDP套接字编程&#xff08;英汉字典以及多线程聊天室编写&#xff09…...

PostgreSQL 中 VACUUM FULL 对索引的影响

PostgreSQL 中 VACUUM FULL 对索引的影响 是的&#xff0c;VACUUM FULL 会重建表上的所有索引。这是它与普通 VACUUM 命令的一个重要区别。 一、VACUUM FULL 的工作原理 表重建过程&#xff1a; 创建表的全新副本只将有效数据写入新存储删除原始表文件将新文件重命名为原表名…...

DeepSeek本地部署及WebUI可视化完全指南

以下是为您整理的DeepSeek本地部署及WebUI可视化完全指南&#xff0c;整合了官方文档及社区实践的最佳方案&#xff1a; 一、环境准备 1. 硬件需求 CPU&#xff1a;推荐支持AVX2指令集的Intel i7或AMD Ryzen 7及以上处理器 。 GPU&#xff08;可选但推荐&#xff09;&#xf…...

大模型时代的新燃料:大规模拟真多风格语音合成数据集

以大模型技术为核心驱动力的人工智能变革浪潮中&#xff0c;语音交互领域正迎来广阔的成长空间&#xff0c;应用场景持续拓宽与延伸。 其中&#xff0c;数据作为驱动语音大模型进化的关键要素&#xff0c;重要性愈发凸显。丰富多样的高质量数据能够让语音大模型充分学习到语音…...

单体项目到微服务的架构演变与K8s发展是否会代替微服务

单体项目到微服务的架构演变与K8s发展是否会代替微服务 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于单体项目到微服务的架构演变以及Kubernetes&#xff08;k8s&#xff09;的发展是否会代替微服务的相关问题。本文通过一个故事场景来展示这些问题的实际解决…...

AI驱动的决策智能系统(AIDP)和自然语言交互式分析

在当今快速变化的商业环境中&#xff0c;以下几个企业级系统领域最有可能成为新的热点&#xff0c;其驱动力来自数字化转型加速、AI技术爆发、全球化协同需求以及ESG&#xff08;环境、社会、治理&#xff09;合规压力的叠加 1. AI驱动的决策智能系统&#xff08;AIDP&#xf…...

kubernetes》》k8s》》Service 、Ingress 区别

K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源&#xff0c;它提供了七层&#xff08;应用层&#xff09;的负载均衡功能。Ingress可以根据主机名、…...

全面接入!Qwen3现已上线千帆

百度智能云千帆正式上线通义千问团队开源的最新一代Qwen3系列模型&#xff0c;包括旗舰级MoE模型Qwen3-235B-A22B、轻量级MoE模型Qwen3-30B-A3B。千帆大模型平台开源模型进一步扩充&#xff0c;以多维开放的模型服务、全栈模型开发、应用开发工具链、多模态数据治理及安全的能力…...

Python-日志检测异常行为的详细技术方案

以下是根据行为日志检测异常行为的详细技术方案&#xff0c;涵盖数据收集、特征工程、模型选择、部署与优化的全流程&#xff1a; 1. 数据收集与预处理 1.1 数据来源 行为日志通常包括以下类型&#xff1a; 用户行为日志&#xff1a;点击、登录、交易、页面停留时间等。系统…...

DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题

DeepSeek-Prover-V2-671B最新体验地址&#xff1a;Prover版仅适合解决专业数学证明问题 DeepSeek 团队于 2025 年 4 月 30 日正式在Hugging Face开源了其重量级新作 —— DeepSeek-Prover-V2-671B&#xff0c;这是一款专为解决数学定理证明和形式化推理任务而设计的超大规模语…...

Java写数据结构:队列

1.概念&#xff1a; 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾&#xff08;Tail/Rear&#xff09; 出队列&#xf…...

LeetCode 2905 找出满足差值条件的下标II 题解

示例 nums [8, 3, 12, 5, 1, 10, 7, 13] indexDifference 3 valueDifference 6答案 [maxIdx, j] [0, 4]我的思路是直接枚举写&#xff0c;但这题是中等题&#xff0c;一定不会让你好过的&#xff0c;所以也是喜提了超时&#xff0c;先说一下我的做题思路吧。 其实很简单就…...

【思考】欧洲大停电分析

当地时间4月28日中午&#xff0c;西班牙和葡萄牙发生了大规模停电事故&#xff0c;两国多个地区的电力供应中断&#xff0c;波及超过5000万伊比利亚半岛民众&#xff0c;交通、通信、医疗等关键领域受到影响&#xff0c;马德里网球公开赛因停电被迫暂停&#xff0c;周边法国、意…...

[论文精读]Agent综述—— A survey on large language model based autonomous agents

A survey on large language model based autonomous agents ⏲️年份: 2024 &#x1f440;期刊: Frontiers of Computer Science &#x1f331;影响因子:3.4 &#x1f4da;数字对象唯一标识符DOl: 10.1007/s11704-024-40231-1 &#x1f935;作者: Wang Lei,Ma Chen,Feng X…...

金融风控的“天眼”:遥感技术的创新应用

在金融市场的复杂博弈中&#xff0c;风险管控一直是金融机构的核心竞争力。然而&#xff0c;传统的风控手段在应对现代金融市场的快速变化时&#xff0c;往往显得捉襟见肘。 如今&#xff0c;遥感技术的创新应用为金融风控带来了全新的视角和手段。星图云开放平台的遥感金融立体…...

SpringMVC知识点总结(速查速记)

文章目录 前言1、MVC是什么2、SpringMVC是什么3、SpringMVC请求流程 && 环境搭建3.1 SpringMVC请求流程3.2 搭建环境3.2.1开发环境3.2.2 环境配置步骤 4. url地址映射 && 参数绑定4.1 url地址映射之RequestMapping①、映射单个url②、映射多个url③、映射url到…...

配置 Odoo 的 PostgreSQL 数据库以允许远程访问的步骤

1. 修改 PostgreSQL 配置文件 a. 修改 postgresql.conf 找到 PostgreSQL 的主配置文件 postgresql.conf&#xff0c;通常位于 /etc/postgresql/<版本号>/main/ 目录下。修改 listen_addresses 项的值为 *&#xff0c;表示允许来自任何 IP 地址的连接&#xff1a; sudo…...

涨薪技术|0到1学会性能测试第42课-apache监控与调优

前面的推文我们学习了操作系统性能监控与调优知识,如CPU、内存、磁盘、网络监控等,今天开始分享中间件apache监控与调优知识,后续文章都会系统分享干货,带大家从0到1学会性能测试! Apache是世界上使用最多的web服务器软件一种,它可以运行在几乎所有广泛使用的计算机平台上…...

【学习笔记】Shell编程--Bash变量

变量类型说明环境变量 与Shell的执行环境相关的一些变量。如PATH&#xff0c;HOME等&#xff0c;用户可重新定义。 一、环境变量的创建&#xff1a;export&#xff0c; export ABCD2 二、环境变量的查看 使用echo命令查看单个环境变量。如&#xff1a; echo $PATH 使用printenv…...

SpringBoot+Redis全局唯一ID生成器

&#x1f4e6; 优雅版 Redis ID 生成器工具类 支持&#xff1a; 项目启动时自动初始化起始值获取自增 ID 方法yml 配置化起始值可灵活扩展多业务线 ID &#x1f4cc; application.yml 配置 id-generator:member-start-value: 1000000000&#x1f4cc; 配置类&#xff1a;IdG…...

micro-app前端微服务原理解析

一、核心设计思想 基于 WebComponents 的组件化渲染 micro-app 借鉴 WebComponents 的 CustomElement 和 ShadowDom 特性&#xff0c;将子应用封装为类似 WebComponent 的自定义标签&#xff08;如 <micro-app>&#xff09;。通过 ShadowDom 的天然隔离机制&#xff0c;实…...

大连理工大学选修课——机器学习笔记(7):集成学习及随机森林

集成学习及随机森林 集成学习概述 泛化能力的局限 每种学习模型的能力都有其上限 限制于特定结构受限于训练样本的质量和规模 如何再提高泛化能力&#xff1f; 研究新结构扩大训练规模 提升模型的泛化能力 创造性思路 组合多个学习模型 集成学习 集成学习不是特定的…...

[特殊字符] Spring Cloud 微服务配置统一管理:基于 Nacos 的最佳实践详解

在微服务架构中&#xff0c;配置文件众多、管理复杂是常见问题。本文将手把手演示如何将配置集中托管到 Nacos&#xff0c;并在 Spring Cloud Alibaba 项目中实现统一配置管理 自动刷新机制。 一、为什么要使用 Nacos 统一配置&#xff1f; 传统方式下&#xff0c;每个服务都…...

【mysql】执行过程,背诵版

sql执行再mysql的执行过程 1. 建立连接 sql通过tcp/ip发送到服务器服务器检查用户名&#xff0c;密码&#xff0c;权限创建线程处理连接 如果是sql8.0之前&#xff0c;select会先从缓存中查找&#xff0c;命中则返回&#xff0c;由于表结构变更会导致缓存失效&#xff0c;已废…...

[Survey] Image Segmentation in Foundation Model Era: A Survey

BaseInfo TitleImage Segmentation in Foundation Model Era: A SurveyAdresshttps://arxiv.org/pdf/2408.12957Journal/Time-Author北理工、上交、浙大 CCAI 、瑞士苏黎世联邦理工学院、德国慕尼黑工业大学Codehttps://github.com/stanley-313/ImageSegFM-Survey 1. Introdu…...

关于杰理ac791切换版本, git clone下来仍然是最新版本问题

在git clone 之后&#xff0c;在本地切换分支 常规流程&#xff1a;git clone →git branch →git branch -a → git checkout 分支名...

生成项目.gitignore文件的多种高效方式

在使用 Git 进行版本控制时&#xff0c;.gitignore 文件是不可或缺的配置文件。它可以帮助我们指定哪些文件或目录不需要被 Git 跟踪&#xff0c;从而避免将不必要的文件&#xff08;如临时文件、编译生成的文件等&#xff09;提交到仓库中。这篇文章将介绍几种生成 .gitignore…...

2025年“深圳杯”数学建模挑战赛D题-法医物证多人身份鉴定问题

法医物证多人身份鉴定问题 小驴数模 犯罪现场法医物证鉴定是关系到国家安全、公共安全、人民生命财产安全和社会稳定的重大问题。目前法医物证鉴定依赖DNA分析技术不断提升。DNA检验的核心是STR&#xff08;Short Tandem Repeat&#xff0c;短串联重复序列&#xff09;分析技术…...

嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战

一、数组操作&#xff1a;3x3 数组的对角和、偶数和、奇数和 题目 求 3x3 数组的对角元素和、偶数元素和、奇数元素和。 知识点 数组遍历&#xff1a;通过双重循环访问数组的每个元素&#xff0c;外层循环控制行&#xff0c;内层循环控制列。对角元素判断&#xff1a; 主对…...

JAVA SE 反射,枚举与lambda表达式

文章目录 &#x1f4d5;1. 反射✏️1.1 反射相关的类✏️1.2 Class类中的相关方法✏️1.3 Field类中的相关方法✏️1.4 Method类中的相关方法✏️1.5 Constructor类中的相关方法✏️1.6 获取Class对象的三种方式✏️1.7 反射的使用 &#x1f4d5;2. 枚举2.1 枚举的定义✏️2.2 …...

每日算法-250430

每日算法 - 2025年4月30日 记录下今天解决的两道题目。 870. 优势洗牌 (Advantage Shuffle) 题目描述 解题思路与方法 核心思想&#xff1a;贪心策略 (田忌赛马) 这道题的目标是对于 nums1 中的每个元素&#xff0c;找到 nums2 中一个比它小的元素进行配对&#xff08;如果…...

MacOS 安装 cocoapods

MacOS 安装 cocoapods 下面使用 HomeBrew 安装 cocoapods 一、检测 HomeBrew 是否安装 打开终端执行命令 brew -v #如果安装&#xff0c;输出如 Homebrew 4.5.0如果未安装 Mac HomeBrew安装 二、检测 ruby 是否安装 系统一般自带了 ruby 但是这个升级有些麻烦&#xff0c;我…...

MATLAB绘制饼图(二维/三维)

在数据分析与展示领域&#xff0c;饼图是一种直观且高效的可视化工具&#xff0c;能够在瞬间传递各部分与整体的比例关系。今天&#xff0c;我将分享一段 MATLAB 绘制二维及三维饼图的代码&#xff0c;助你轻松将数据以饼图形式呈现于众人眼前。 无论是二维饼图的简洁明了&…...

python将字符串转成二进制数组

python将字符串转成二进制数组 功能概述&#xff1a; save_binary_to_json() 函数&#xff1a;将字符串转换为二进制数据&#xff08;字节的整数表示&#xff09;&#xff0c;并保存到JSON文件中。 load_binary_from_json() 函数&#xff1a;从JSON文件中读取二进制数据并还原…...

防止HTTPS页面通过<iframe>标签嵌入HTTP内容

防止HTTPS页面通过<iframe>标签嵌入HTTP内容 出于安全考虑&#xff0c;现代浏览器实施了严格的规则来防止HTTPS页面通过<iframe>标签嵌入HTTP内容。这种行为主要是为了防止所谓的“混合内容”问题&#xff0c;即在一个安全&#xff08;加密&#xff09;的页面中…...

windows 使用websocket++ (C++环境)

一、简介 websocket官方网址&#xff1a;http://websocket.org/ websocketpp官方网址&#xff1a;https://www.zaphoyd.com/websocketpp websocketpp使用手册&#xff1a;https://www.zaphoyd.com/websocketpp/manual/ websocketpp 是 C 的 WebSocket 客户端/服务器库. 它是…...

无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享

你知道怎么下载无水印视频素材吗&#xff1f;今天小编就给大家推荐十个高清无水印视频素材下载的网站&#xff0c;如果你也是苦于下载高清无水印的短视频素材&#xff0c;赶紧来看看吧&#xff5e; 1. 稻虎网 首推的是稻虎网。这个网站简直就是短视频创作者的宝库。无论你需要…...

【dify—5】Dify关联Ollama

目录 一、修改.env文件 二、启动dify 三、访问dify 四、设置关联 五、添加模型插件 5.1 添加模型 5.2 配置信息​编辑 第一部分 安装difydocker教程&#xff1a;【difydocker安装教程】-CSDN博客 第二部分 dock重装教程&#xff1a; 【dify—2】docker重装-CSDN博客 第三…...

PostgreSQL可串行化快照隔离和冻结处理

1.可串行化快照隔离 可串行化快照隔离SSI已经嵌入到快照隔离SI中&#xff0c;以实现真正的可串行化隔离等级。 SSI实现基本策略 使用SIREDA锁记录事务访问的所有对象&#xff08;元组&#xff0c;页面&#xff0c;关系&#xff09;。 当写入任何堆元组/索引元组时&#xff…...

Java 多线程进阶:什么是线程安全?

在多线程编程中&#xff0c;“线程安全”是一个非常重要但又常被误解的概念。尤其对于刚接触多线程的人来说&#xff0c;不理解线程安全的本质&#xff0c;容易写出“偶尔出错”的代码——这类 bug 往往隐蔽且难以复现。 本文将用尽可能通俗的语言&#xff0c;从三个角度解释线…...

Java导出带图片的Excel

使用easypoi导出带图片的Excel&#xff0c; 引入依赖 依赖中着重要剔除可能会造成冲突的依赖&#xff0c;不剔除的话可能会报错 Exception in thread “main” java.lang.NoSuchFieldError: Class org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook does not …...

Keysight万用表使用指南及基于Python采集数据生成Excel文件

文章目录 说明使用的库openpyxlpyvisa 代码说明效果展示参考代码 说明 本文介绍了 Keysight 34465A 的基本使用和 SCPI 指令设置&#xff0c;演示了使用 Python 的 PyVISA 库控制两台 34465A 同时采集数据的完整流程&#xff0c;包括设置采样参数、触发测量、读取数据、使用 O…...

HarmonyOS Next-DevEco Studio(5.0.2)无网络环境配置(详细教程)

开发者如果电脑处于完全无网环境&#xff0c;可以参考下面文档进行相关配置 DevEco Studio(5.0.2)开发环境一览&#xff1a; 工具版本DevEco Studio5.0.2openHarmonySDK14ohpm5.0.11node.js18.20.1hypium1.0.21 一、下载DevEco Studio&#xff08;5.0.2 Release&#xff09;…...

数字中国的建设之路:超聚变以“智算数能”四大密钥,共建智能体时代

文 | 智能相对论 作者 | 陈泊丞 即便是数字中国建设这样的宏大叙事&#xff0c;在长期的行业实践与业务聚焦之下&#xff0c;未来的发展路径也将会越来越清晰。日前&#xff0c;第八届数字中国建设峰会在福建拉开序幕&#xff0c;各大论坛、企业、机构、组织等纷纷围绕数字中…...

PageOffice在线打开word文件,并实现切换文件

本示例关键代码的编写位置&#xff0c;请参考“PageOffice 开发者中心-快速起步–开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 注意 本文中展示的代码均为关键代码&#xff0c;复制粘贴到您的项目中&#xff0c;按照实际的情况&#xff0c;例如文档路径&#xff…...