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));
    }
}
GitHub 加速计划 / pa / PaddleOCR
50
11
下载
Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
最近提交(Master分支:4 个月前 )
0d41ffc9 4 天前
d523388e * add ppformulanet * rename loss * modify doc * add export code * modify yaml for global ref 5 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐