PaddleOCR文字识别场景应用
OCR文字识别
飞桨开源文字识别模型套件PaddleOCR,支持中英文识别;支持倾斜、竖排等多种方向文字识别。
使用场景
- 车牌识别
- 身份证识别
- 图片文字识别
安装python环境
使用paddlepaddle需要先安装python环境,可以通过anaconda一键安装python环境
anaconda下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D
- Linux下使用wget下载
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.11-Linux-x86_64.sh
找不到wget命令?
yum install wget
- 开始anaconda安装python环境
sh Anaconda3-2021.11-Linux-x86_64.sh
按照安装提示安装,遇到查看许可时可输入q来退出
继续直到完成安装
如果此处选择的是no,需要手动将conda加入环境变量
手动将conda加入环境变量(选择yes请忽略此步)
vim ~/.bashrc
# 在第一行输入:
export PATH="~/anaconda3/bin:$PATH"
# 刷新环境变量
source ~/.bash_profile
- 验证是否能识别conda命令
conda info --envs
显示当前有base环境,则conda已加入环境变量
创建conda环境
- 创建paddle_env的运行环境
# 此处为加速下载,使用清华源
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
等待安装完成,系统会创建1个名为paddle_env、python版本为3.8的可执行环境
- 激活刚创建的paddle_env环境
conda activate paddle_env
基于PaddleServing的服务部署
PaddleServing服务部署,支持客户端和服务端之间高并发和高效通信,支持工业级的服务能力,例如模型管理,在线加载,在线A/B测试等,支持多种编程语言开发客户端,例如C++, Python和Java。
- 安装paddle
# 默认安装CPU版本
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
- 克隆PaddleOCR repo代码
git clone https://github.com/PaddlePaddle/PaddleOCR
- 安装第三方库
cd PaddleOCR
pip3 install -r requirements.txt
- 安装PaddleOCR whl包
pip install "paddleocr>=2.0.1"
- 准备PaddleServing的运行环境
# 安装serving,用于启动服务
pip3 install paddle-serving-server==0.7.0
# 安装client,用于向服务发送请求
pip3 install paddle-serving-client==0.7.0
# 安装serving-app
pip3 install paddle-serving-app==0.7.0
- 安装模型
使用PaddleServing做服务化部署时,需要将保存的inference模型转换为serving易于部署的模型。
# 进入PaddleOCR
cd PaddleOCR
# 创建inference目录
mkdir inference
# 下载并解压 OCR 文本检测模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.1/ch/ch_ppocr_mobile_v2.1_det_infer.tar && tar xf ch_ppocr_mobile_v2.1_det_infer.tar
# 下载并解压 OCR 文本识别模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.1/ch/ch_ppocr_mobile_v2.1_rec_infer.tar && tar xf ch_ppocr_mobile_v2.1_rec_infer.tar
# 转换检测模型
python3 -m paddle_serving_client.convert --dirname ./ch_ppocr_mobile_v2.1_det_infer/ \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--serving_server ./ppocr_det_mobile_2.1_serving/ \
--serving_client ./ppocr_det_mobile_2.1_client/
# 转换识别模型
python3 -m paddle_serving_client.convert --dirname ./ch_ppocr_mobile_v2.1_rec_infer/ \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--serving_server ./ppocr_rec_mobile_2.1_serving/ \
--serving_client ./ppocr_rec_mobile_2.1_client/
启动服务
进入到工作目录
cd PaddleOCR/deploy/pdserver/
_ init _.py # 空目录 必须
config.yml # 启动服务的配置文件
ocr_reader.py # OCR模型预处理和后处理的代码实现
pipeline_http_client.py # 发送pipeline预测请求的脚本
web_service.py # 启动pipeline服务端的脚本
修改配置文件中模型位置
vi config.yml
启动服务
python3 web_service.py
默认服务端口9998,可以在config.yml中修改
报错ImportError: libGL.so.1: cannot open shared object file: No such file or directory?
yum install mesa-libGL.x86_64
报错ImportError: libXrender.so.1: cannot open shared object file: No such file or directory?
yum install libXrender.x86_64
后台启动服务
# 运行日志保存在log.txt
python3 web_service.py &>log.txt &
python测试服务是否可用
python pipeline_http_client.py
Java端文字识别测试
测试图片
public class AiImageOcr {
public static void main(String[] args) throws IOException {
Date startDate = new Date();
String url = "http://xxx:9998/ocr/prediction";
Date startDate = new Date();
JSONObject params = new JSONObject();
String base64Image = null;
try {
base64Image = Base64Utils.encodeToString(IOUtils.toByteArray(new FileInputStream(FileUtil.file("xxx.jpg"))));
} catch (IOException e) {
e.printStackTrace();
}
params.put("images", new String[] { base64Image });
String result = HttpRequest.post(url)
.header(Header.CONTENT_TYPE, "application/json")
.body(params.toString())
.timeout(50000)
.execute().body();
Date endDate = new Date();
System.out.println(result);
System.out.println("请求时间time==" + DateUtil.between(startDate, endDate, DateUnit.SECOND));
}
}
更多推荐
所有评论(0)