最近有一个项目需要用到文字识别,但是又是内网项目,不能用在线的第三方接口。
在Github找了一些包,都对比了一番
最终还是决定使用百度开源的PaddleOCR
机器配置:
12核CPU、16GB DDR4内存、RTX 2060-6G、1TB固态硬盘、1TB机械硬盘
环境:
系统Centos 7.9、Docker CE 20.10、Python3.7
安装CentOS和Docker的过程就略过了,这也不是本文讨论的重点,网上一大把安装教程。
安装英伟达显卡驱动
参考我另外一篇博文 CentOS7 安装 英伟达显卡驱动
在Docker 19.3之后,要使用GPU无需安装nvidia-docker
可以直接在docker启动的时候带上gpu参数即可
只需要安装container-runtime这个包即可
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo
使用yum安装
yum install nvidia-container-runtime
如果连不了Github.io,可以尝试修改hosts(失效了给我留言,我会及时更新)
185.199.109.153 nvidia.github.io
另外国内Docker的镜像下载速度有点慢
这里用阿里云的镜像加速
阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
把加速器地址复制下来
然后在Linux服务器上修改文件
vi /etc/docker/daemon.json
最终修改效果如下,为了方便,这里直接提供了文件,只需要替换掉加速地址即可
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"registry-mirrors": [
"https://xxxxxx.mirror.aliyuncs.com"
]
}
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
查看docker的安装情况
docker info
结果如下
[root@localhost soft]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc.)
Server:
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 1
Server Version: 20.10.6
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux nvidia runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1160.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 12
Total Memory: 15.42GiB
Name: localhost.localdomain
ID: G2GD:OFY7:RJI5:JTSX:MOFP:TP7X:PIDQ:KLLF:NROF:CQXR:OJHG:TJO2
Docker Root Dir: /server/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://xxxxxx.mirror.aliyuncs.com/
Live Restore Enabled: false
在安装paddleOCR之前需要安装paddlepaddle
官网地址 飞桨PaddlePaddle-源于产业实践的开源深度学习平台
cuda版本根据你的具体版本来进行选择
如果不知道cuda版本输入命令查看
nvidia-smi
我的机器CUDA版本是11,选择如图
官网还是使用的nvidia-docker进行安装的,我们不需要这么麻烦,直接在docker HUB上面找镜像
https://hub.docker.com/r/paddlepaddle/paddle/tags/?page=1&ordering=last_updated
复制红框内的地址
等待下载,下载完毕之后输入
docker images
镜像文件
构建和启动容器
docker run -d -p 19196:19196 --name ppocr --gpus all -it -v $PWD:/paddle paddlepaddle/paddle:2.0.2-gpu-cuda11.0-cudnn8 /bin/bash
注:
这里 --gpus 是用GPU模式启动
all代表使用所有显卡
需要单独使用某一张显卡的话,例如使用3号显卡 --gpus "device=3"
附录一个命令:查看容器列表
docker container ls
进入容器后,查看GPU环境
pip show paddlepaddle-gpu
PaddlePaddle-gpu环境已经有了
开始下载PaddleOCR
git clone https://github.com/PaddlePaddle/PaddleOCR.git
如果github慢,可以选择官方的gitee
git clone https://gitee.com/paddlepaddle/PaddleOCR
到这里应该开始安装依赖了
但是注意!坑来了
镜像里面默认的是python2.7
输入python3 -V 命令 输出的是python3.5
尤其注意,其实镜像里面是带了python 3.5 3.6 3.7甚至3.8
只是我们需要这样使用
python3.7 -V
目前官方推荐的是使用python3.7
3.8目前还不能完全兼容,当然之后肯定会优先使用更新的版本
我这里没有使用多应用程序,直接使用的docker里面自带的python安装的环境和包
如果有需要用多个应用程序的建议使用anaconda或者virtualenv
进入项目目录
cd PaddleOCR
使用python3.7安装依赖
pip3.7 install -r requirements.txt -i https://mirror.baidu.com/pypi/simple --default-timeout=10000
接着就可以开心的使用OCR了
参考官方文档
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/doc/doc_ch/quickstart.md
=============分割线================
使用paddleocr.wheel来进行快速部署
pip3.7 install "paddleocr>=2.0.1" -i https://mirror.baidu.com/pypi/simple --default-timeout=10000
随便写个py文件,代码如下
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
img_path = './1.jpg' # 这里写图片地址
result = ocr.ocr(img_path, cls=True)
for line in result:
print(line)
这里会自动下载轻量级的模型,如果需要替换为服务端更强大的模型文件,参考https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/doc/doc_ch/algorithm_overview.md
运行我们写的脚本文件
python3.7 main.py
我放了一张文字较多的图片
识别的时间0.5秒,识别的中文也挺准确的。