Face Recognition 搭建过程总结
本学期选修了 “应用人工智能” 课,并且在期末课程设计时用到了 Face Recognition 的库,于是记录一下在服务器部署的过程。
Face Recognition 的具体内容请浏览 GitHub 。
服务器运行 CentOS 7 系统。
系统环境配置
基本安装
yum -y install wgetyum -y install vimyum groupinstall "Development Tools"
配置国内 yum 源
cd /etc/yum.repos.dmv CentOS-Base.repo CentOS-Base.repo.bkwget http://mirrors.163.com/.help/CentOS7-Base-163.repoyum makecache
配置 epel 源
yum -y install epel-release
Anaconda 3
个人并没有装在 Anaconda 环境下,这里仅做个记录。
安装 Anaconda 3
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.1.0-Linux-x86_64.shbash /root/Anaconda3-5.1.0-Linux-x86_64.shENTER ...按提示操作- 记得将 Anaconda 3 写入系统环境变量
配置 Anaconda 3
conda update condaconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/conda config --set show_channel_urls yesconda create -n face-recognition python=3.6source activate face-recognitionsource deactivateconda remove -n face-recognition --allconda remove --name face-recognition package_name
在 Anaconda 环境下安装 face-recognition
conda install -c menpo dlibpip install face_recognition
安装 Python3
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-develwget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xzmkdir /usr/local/python3tar -xvJf Python-3.6.5.tar.xzcd Python-3.6.5./configure --prefix=/usr/local/python3make && make installln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3- 修改
/etc/profile文件,在文件末尾添加PATH=$PATH:/usr/local/python3/bin并保存 source /etc/profilepip install virtualenv
如果缺少 Cython
pip install Cython
pypi 使用清华镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-packagepip install --upgrade pip:升级 pip
全局环境下安装
依赖
yum install cmakeyum install gtk2-develyum install libdc1394-develyum install libv4l-develyum install gstreamer-plugins-base-develyum install libjpeg-turbo-develyum install jasper-develyum install openexr-develyum install libtiff-develyum install libwebp-develyum install opencvyum install opencv-pythonyum install opencv-develyum install boostyum install boost-develyum install boost-doc
安装
pip install dlibpip install face_recognition
部署
virtualenv(可选)
pip install virtualenv
安装 Nginx
参考前面安装 Hexo 的文章
安装 Node.js
参考前面安装 Hexo 的文章
安装 uWSGI
pip install uwsgi
使用 uwsgi 怎么都配置不正确,头快秃了,于是放弃。
安装 Gunicorn
后来选择使用 Node.js 所有并没有用到,这里也只是做记录。
pip install gunicorn
使用 Gunicorn
假设 /Face_Recognition 下有 web_service.py 文件。
gunicorn web_service:app:最简单的执行。gunicorn web_service:app -p web_service.pid -D:为了在后台运行(即变成守护进程),可以使用-D选项。为了将来方便关闭gunicorn,使用-p <file>来简化在进程中的搜索。cat web_service.pid:输出相关 pidkill -HUP 'cat web_service.pid'和kill 'cat web_service.pid':挂起并关闭gunicorn web_service:app -p web_service.pid -b 127.0.0.1:xxxx -D:当端口被占用时,使用-b自定义端口
配置 Nginx
在
/etc/nginx/conf.d/下新建face_recognition.conf
文件内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server {
listen 80;
server_name xxxx;
# Handle all locations
location / {
# Pass the request to Gunicorn
proxy_pass http://127.0.0.1:xxx;
# Set some HTTP headers so that our app knows where the request really came from
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}nginx -tnginx -s reload
ProxyFix
有时,你会遇到 Flask 不能恰当处理转发的请求的情况。这也许是因为在 Nginx 中设置的某些 HTTP 报文头部造成的。我们可以使用 Werkzeug 的 ProxyFix 来修复转发请求。
1 | from flask import Flask |
参考
Node.js + Nginx 反向代理
后来改用 Node.js 。
在 /etc/nginx/conf.d 目录下新建配置文件
1 | upstream rockjins { |
C++/g++:内部错误 Killed (程序 cc1plus)
这个原因是内存不足, 解决方法是在 linux 下增加临时 swap 空间:
sudo dd if=/dev/zero of=/home/swap bs=64M count=16注释:of=/home/swap,放置 swap 的空间;count 的大小就是增加的 swap 空间的大小,64M 就是块大小,这里是 64MB ,所以总共空间就是 bs*count=1024MB 。这里分配空间的时候需要一点时间,等待执行完毕。sudo mkswap /home/swap(可能会提示 warning: don’t erase bootbits sectorson whole disk. Use -f to force,不用理会) 注释:把刚才空间格式化成 swap 格式sudo swapon /home/swap注释:使用刚才创建的 swap 空间- 执行你相关的操作,如 make
如果创建了临时空间仍然提示 “g++: 内部错误:Killed (程序 cc1plus)”,可能分配的空间不够大,可继续分配更大的空间。
关闭:
sudo swapoff /home/swapsudo rm /home/swap