基于PaddlePaddle的OCR识别,识别车牌号

最近在研究百度的开源的OCR识别框架PaddlePaddle,虽然它的教程很详细,但对大多数人来说,其实我只想用其中某一个功能,能有个快速让我部署的方式就好了。我搜索了很多资料,最后自己做了一个docker镜像,可以完成快速部署。

下面例子就是快速部署一个可以识别车牌的系统。

1.搭建

  1. 启动容器,映射8080端口,其实就是一个web网站,可以通过以下地址访问:http://xxx.xxx.xxx.xxx:8080/predict/chinese_ocr_db_crnn_server
mkdir -p /data/paddle
chown -R 1000:1000 /data/paddle
docker run -d --name paddle -p 8080:8866 -v /data/paddle:/paddle wjf8882300/paddle:2.0.0
  1. 写一段官方的python代码测试下,把图片传给它,它返回一段数据就是识别后的结果。
import requests
import json
import cv2
import base64

# 把图片转为base64码
def cv2_to_base64(image):
    data = cv2.imencode('.jpg', image)[1]
    return base64.b64encode(data.tostring()).decode('utf8')

# 发送HTTP请求
data = {
     'images':[cv2_to_base64(cv2.imread("e:/data/1.jpg"))]}
headers = {
     "Content-type": "application/json"}
url = "http://xxx.xxx.xxx.xxx:8080/predict/chinese_ocr_db_crnn_server"
r = requests.post(url=url, headers=headers, data=json.dumps(data))

# 打印预测结果
print(r.json()["results"])

安装python依赖包

# cv2
pip3 install opencv-python -i https://mirror.baidu.com/pypi/simple

2.测试

待识别图片:
基于PaddlePaddle的OCR识别,识别车牌号_第1张图片

输出效果:可以看到有E·05EV8

[{
     'data': [{
     'confidence': 0.9619042277336121, 'text': 'E·05EV8', 'text_box_position': [[99, 197], [360, 197], [360, 270], [99, 270]]}, {
     'confidence': 0.5242013931274414, 'text': '苏办', 'text_box_position': [[82, 207], [112, 207], [112, 259], [82, 259]]}], 'save_path': ''}]

至此已经全部结束,识别系统搭建完毕,有兴趣的可以继续看下关于镜像的介绍。

3.镜像说明

制作镜像的原因是我在看官方教程的时候走了不少弯路,开源的框架分了很多模块,上手不容易,也许我太笨了。
Dockerfile

# 百度paddlepaddle 2.0官方镜像,它是基于ubuntu的
FROM paddlepaddle/paddle:2.0.0

# 解决时区问题
RUN apt-get install -y tzdata 
ENV TZ Asia/Shanghai
RUN /bin/cp /usr/share/zoneinfo/${TZ} /etc/localtime && echo '${TZ}' >/etc/timezone

# 安装paddlehub以及相关依赖
# 这边特别要注意,开源文档里面很多地方直接用hub install这个命令,是基于paddlehub安装成功的情况下,之前我看了半天也没看明白,所以说我笨呢
RUN pip3 install paddlehub shapely pyclipper matplotlib scipy==1.2.1 --upgrade -i https://mirror.baidu.com/pypi/simple
# 安装中文字识别模块
RUN hub install chinese_ocr_db_crnn_server==1.0.3

# 这个是启动脚本
COPY ./docker-entrypoint.sh ./docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]

docker-entrypoint.sh

#!/bin/bash
# 启动中文识别模块,这个服务默认8866端口,这也是为什么上面启动的时候要映射这个端口
hub serving start -m chinese_ocr_db_crnn_server

4.最后

经过测试,这个识别效果比较一般,目前车牌是没问题的,不过发票识别不了,火车票也不行,识别之后就崩掉了。要达到预期,还是要更深入的学习PaddlePaddle框架。

你可能感兴趣的:(人工智能,docker,python,ocr,人工智能)