CentOs7 docker部署face_recognition

前情提要

第一次采用docker部署python项目(该项目是基于win10环境下安装好的face_recognition开发完成),竟然遇到了光是部署环境就差点把人劝退的face_recognition。搞了几天终于部署好了,因此记录一下整个过程。

基本情况

python人脸识别项目是在windows10上采用pycharm工具编写完成,运用face_recognition包进行人脸识别。该包依赖的dlib安装的是dlib-19.7.0版本,其他配套的环境python:3.6,opencv-python:3.4.2.16,opencv-contrib-python:3.4.2.16,numpy:1.16.0.
下面准备将在win10系统下完成的python项目部署到centos7系统的服务器中。

准备工作

  1. 安装虚拟机基础环境–docker、pip 。我安装的是centos7系统,具体流程可直接搜网上安装教程;
  2. 克隆虚拟机。为了保险起见,将安装好基础环境的虚拟机克隆一份,在克隆后的虚拟机上进行docker部署 ;
  3. 编写好的Python项目 。这是我的python项目截图,其中.py文件是我的python项目,requirements.txt记录.py文件用到的各种包,Dockerfile是一个用来构建镜像的文本文件,包含了一条条构建镜像所需的指令和说明。在这里插入图片描述

下面将展开requirements的生成和Dockerfile的编写。

requirements生成

我用的pycharm,直接在terminal下面输入,即可生成该py文件需要的包及版本号:

pip freeze > requirements.txt

在生成的requirements.txt可能包含很多依赖,这时得按照项目需要手动删掉一些不需要的依赖包。

Dockerfile编写

踩过的坑

自己编写Dockerfile时,遇到了很多坑,主要集中在face_recogniton的环境搭建上。
face_recognition包依赖于dlib环境,而在win10环境下安装的dlib-19.7.0-cp36-cp36m-win_amd64.whl不需要安装cmake和boost即可运行。但在linux环境下,没有linux版本的whl,对应的dlib-19.7.0.tar.gz需要cmake和boost环境的支撑。因此,在Dockerfile中直接写了

RUN pip install cmake -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install boost -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install dlib

虽然cmake和boost会提示成功安装,但在安装face_recognition时直接报错,说boost找不到:
在这里插入图片描述
为了解决该问题找了各种方法,如去boost.org官网下载新版本的boost(国内镜像源只有boost-0.1.tar.gz),并按照相应的安装步骤试图直接安装,但又提示./b2找不到。
不知点开了多少网页终于得知,dlib在19.9.0版本后不需要依赖boost,只需要cmake即可应用,瞬间燃起了希望之火,而后又查阅一些成功将face_recognition上传到docker里的Dockerfile,一触即发成功安装。

成功

下面直接展示成功的Dockerfile内容。

# docker基础环境
FROM python:3.6
# 将当前目录的文件拷贝到face_recognition文件中
COPY . /face_recognition
# 设置工作目录为face_recognition文件夹
WORKDIR /face_recognition
# 安装依赖环境(虽然是centos系统,但不会影响安装)
RUN apt-get update -y
RUN apt-get install -y \
    git \
    cmake \
    libsm6 \
    libxext6 \
    libxrender-dev \
    python3 \
    python3-pip \
    gcc \
    python3-tk \
    libopenblas-dev \ 
    liblapack-dev

# 安装dlib
RUN git clone git://github.com/davisking/dlib.git && \
    cd dlib && \
    mkdir build && \
    cd build && \
    cmake .. && \
    cmake --build . && \
    cd .. && \
    python3 setup.py install 
# 安装Face Recognition和OpenCV,指定国内镜像源,这样下载速度快些
RUN pip3 install face_recognition -i https://pypi.douban.com/simple/
RUN pip3 install opencv-python -i https://pypi.douban.com/simple/
# 安装requirements里的其他安装包
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 采用Python运行img_face_code_pickle.py(这里可以修改为你要运行的py文件)
CMD ["python", "img_face_code_pickle.py"]

docker部署

1、上传python项目

因为虚拟机上安装的是centos7无桌面版本,所以借助FinalShell工具来将windows上的Python文件上传到虚拟机。具体操作如下:

  • 查看虚拟机ip地址
#1、查看虚拟机ip地址
ifconfig

找到ens33对应的inet(图中红框标记处)为本机IP地址。
在这里插入图片描述

  • FinalShell连接虚拟机
    打开FinalShell,创建新的SHH连接,输入虚拟机的ip地址、用户名及密码,即可连接成功。
    在这里插入图片描述

  • FinalShell上传文件
    打开连接。首先,在root目录下创建一个文件用以存放Python项目,并进入到文件中。

# 1、创建文件
mkdir pythonFile
#2、进入文件
cd pythonFile

然后将windows上的Python文件拖拽到pythonFile中,即可完成文件的上传。
在这里插入图片描述

2、部署

进入Dockerfile文件所在的根目录,我这里是docker_recognition目录

[root@localhost ~]# cd pythonFile
[root@localhost pythonFile]# ls
docker_recognition
[root@localhost pythonFile]# cd docker_recognition
[root@localhost docker_recognition]# ls
dbTableGen.py  Dockerfile  img_face_code_pickle.py  model.py  requirements.txt

在该目录下,创建docker镜像

docker build -t img_face_recognition . # . 表示当前路径

整个创建过程会比较漫长,耐心等待。。。最后若创建成功会有Successfully built xxxxx提示语。
创建完成后,查看docker镜像,输入

docker images

即可看到创建好的face_recognition镜像
在这里插入图片描述
运行镜像

docker run img_face_recognition

得到结果,因为在Dockerfile中写了CMD运行指令,所以可直接得到CMD中py文件的结果。

Dockerfile中未写CMD指令,要运行Python项目。首先cd进入到python项目所在根目录,然后在终端完成以下步骤:

  • 第一步 运行镜像。其中-i以交互模式运行容器,通常与 -t 同时使用;-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;-d 后台运行容器,并返回容器ID。
docker run -itd img_face_recognition
  • 第二步 列出所有在运行的容器
docker ps
  • 第三步 找到对应镜像容器,进入到容器内部
docker exec -it 容器id /bin/bash
  • 第四步 运行py文件
python 文件名.py

最终得到结果,如图所示:
在这里插入图片描述
至此,终于所有的部署已完成。

BUG记录

  1. Dockerfile不是文本文档,没有txt后缀。
  2. 运行代码时出现AttributeError: module ‘face_recognition’ has no attribute ‘face_locations’。
    在这里插入图片描述
    这是因为python文件取名时,与face_recognition包重名。解决方法:对取名为face_recognition的py文件,重命名即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值