0 背景
公司项目需要人脸识别,本来app自带人脸识别,结果api支持的设备试了一圈就一个同事的华为Mate40Pro可以,所以使用无望。接着找了一下免费的java离线人脸识别sdk,发现虹软的确实简单好用,一会就在linux上弄好并测试通过了,然而在准备集成进去开写代码时,不小心看到了一眼首次激活需联网,后续方可离线使用,好吧,我们内网机器首次都不可能的,接着看了下离线激活方法,首先需要企业认证,这一步我们肯定没法做的,毕竟不是之前的小公司了,营业执照啥的随便给我肯定不行,直接放弃了。后来在同事推荐下看了下face_recognition这个项目,之前基本没用过python,于是有了漫长的踩坑之旅。
为了避免各位安装过程还有问题,做了一个docker镜像供大家使用。
文末有face_recognition的docker版本,可直接导入docker运行!!!
文末有face_recognition的docker版本,可直接导入docker运行!!!
文末有face_recognition的docker版本,可直接导入docker运行!!!
1 离线安装python3和pip3
1,在有外网的环境下,下载好安装包和依赖
下载Python3的安装包访问https://www.python.org/ftp/python/,下载合适的安装包
下载依赖:
yumdownloader --destdir=/home/packages zlib zlib-devel bzip2-devel epel-release ncurses-devel mpfr libmpc kernel-headers glibc glibc-common glibc-headers glibc-devel cpp gcc libffi-devel libgcc libgomp libstdc++ libstdc++-devel gcc-c++
注:使用 yumdownloader 命令 需先安装yum-utils
2,上传rpm到内网机器安装
rpm -ivh --force --nodeps *rpm
3,上传python安装包到内网机器安装
tar -xzvf Python-3.8.12.tgz
4,进入解压路径
cd Python-3.8.12
5,设置安装路径并开始安装
./configure --prefix=/usr/local/python3.8 --enable-shared
make && make install
ln -s /usr/local/python3.8/bin/python3 /usr/bin/python3
echo "/usr/local/python3.8/lib" > /etc/ld.so.conf.d/python3.8.conf
ldconfig
6,检查Python3.8.12是否安装成功
python3 -V
7,python 3.8.12中自带了pip,所以只需要建立链接就行
ln -s /usr/local/python3.8/bin/pip3.8 /usr/bin/pip3
8,检查pip是否安装成功
pip3 -V
参考链接:https://www.cnblogs.com/LittleMaster/p/16469534.html
9,内外网机器均要升级pip版本(必做!非常重要!!!)
https://pypi.org/project/pip/#files 去下载whl文件,然后pip3 install xxx.whl即可升级成功。
2 离线升级gcc/切换gcc(安装dlib需要4.9+)
方法简介:找一台可以联网的机器,使用yum安装好gcc版本控制工具包,压缩后,直接复制到不能联网的机器,修改环境变量即可!具体操作如下
2.1 虚拟机【能联网的】
1、安装centos-release-scl源
yum -y install centos-release-scl
2、安装devtoolset,注意,如果想安装9版本的,就改成devtoolset-9-gcc*,以此类推
yum -y install devtoolset-9-gcc*
PS:如果不清楚有哪些本版可以使用 yum list |grep devtoolset查询,注意:需要先安装centos-release-scl才可以查询到 !!!
3、激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-9 bash
查看一下gcc版本
gcc -v
4、查询已安装的devtoolset所在目录
# 查询已安装的gcc包 [root@localhost rh]# rpm -qa |grep gcc gcc-4.8.5-16.el7.x86_64 gcc-c++-4.8.5-16.el7.x86_64 libgcc-4.8.5-16.el7.x86_64 gcc-gfortran-4.8.5-16.el7.x86_64 devtoolset-9-gcc-9.3.1-2.el7.x86_64 devtoolset-9-gcc-c++-9.3.1-2.el7.x86_64 # 查询gcc包安装的具体位置,查询结果:安装目录为/opt/rh/devtoolset-9 [root@localhost rh]# rpm -ql devtoolset-9-gcc-9.3.1-2.el7.x86_64 [root@localhost rh]# rpm -ql devtoolset-9-gcc-c++-9.3.1-2.el7.x86_64
5、压缩 /opt/rh/devtoolset-9/
cd /opt/rh/ tar -czvf devtoolset-9.tar.gz devtoolset-9/
2.2 虚拟机【离线】
1、将压缩包复制到离线服务器,解压到/opt/rh/目录,解压后的目录为/opt/rh/devtoolset-9
tar -xzvf devtoolset-9.tar.gz -C /opt/rh/
2、临时切换版本
source /opt/rh/devtoolset-9/enable
3、永久切换,需要修改/etc/profile文件
# gcc环境变量,建议添加至最后一行 vim /etc/profile ############## 需要添加的文本 - 开始 ############## source /opt/rh/devtoolset-9/enable ############## 需要添加的文本 - 结束 ############## # 刷新环境变量 source /etc/profile
查看一下gcc版本
gcc -v
参考链接:https://blog.csdn.net/u013539566/article/details/126750260
3 离线安装CMake(安装dlib需要)
去 https://cmake.org/download/ 下载sh版本和tar都行,然后上传到服务器,解压后链接一下camke
ln -s /home/cmake-3.24.2-linux-x86_64/bin/cmake /usr/bin/cmake
4 离线安装dlib
http://dlib.net/ 去下载dlib,上传至服务器,解压后进入目录,执行:
python3 setup.py install
注意:老版需要boost库,具体多少版本之前忘了,安新点的版本总之没毛病。
5 离线安装face_recognition
5.1 在外网机器下载所需的其他依赖
1、安装pip install pipdeptree,
也可下载文件离线安装,无依赖
2、执行 pipdeptree
查看所有包及其依赖
3、执行 pipdeptree -p xxxx包名
查看指定包,其需要的依赖
4、执行 pipdeptree -p xxxx包名 -r
查看哪些其它包,依赖于此指定包
5.1.2 下载所需依赖
创建个requirement.txt写入:
face-recognition==1.4.0
然后执行pip3 download -r requirement.txt 就会下载该项目的所需依赖。
ps:如果要下载当前机器的所有已安装的包,执行pip3 freeze > requirement.txt再执行下载命令即可。
5.2 在内网机器安装所需的其他依赖
将下载后得到的那些whl文件和tar文件传到内网机器,whl直接pip3 install xxx.whl安装即可,tar文件先解压tar -zxf xxx.tar.gz,然后在cd到解压目录执行python3 setup.py install即可安装完成。
注意:dlib之前已经安装过了,所以这里不需要再安装了。如果安装whl时报错,使用pip3 debug --verbose查看当前支持哪些平台,看看下载的那些whl文件名是否支持,不支持先升级pip版本,还不行就去pypi.org挨着找到支持的为止,比如我就用的下边这个。
5.3 安装face_recognition并测试
先把项目拉下来,然后打成压缩包放到内网机器解压
git clonehttps://github.com/ageitgey/face_recognition.git
然后执行python3 setup.py install即可安装完成。
只要前面依赖环境装好了,这个应该没啥问题的。
安装后链接下命令方便在全局使用:ln -s /usr/local/bin/face_recognition /usr/bin/face_recognition
最后开始测试,创建个knowImg,放了张大四照片在里面,然后在上级目录放些待识别图片,结果如下:
可以看出除了别人的照片,本人的照片都识别出来了,识别率也很真实,值越低越匹配。
至此,踩坑结束,花费了整整一天半的时间。
6 docker版本安装使用
资源地址:https://download.csdn.net/download/baikunlong/86838814
1、解压得到face_recognition_centos.tar文件
tar -zxf face_recognition_centos.tar.gz
2、导入镜像文件
docker import face_recognition_centos.tar face_recognition_centos:v1
3、运行该镜像
docker run -itd -v /opt/faceImg:/opt/faceImg --name frc face_recognition_centos:v1 bash
参数:/opt/faceImg是我存放所有人脸图片的目录
4、在外部调用(如java调用)人脸识别即可拿到返回值
调用:
docker exec frc face_recognition --show-distance true /opt/faceImg/zhangsan21/ /opt/faceImg/zhangsan21-temp.jpg
结果:
/opt/faceImg/zhangsan21-temp.jpg,zhangsan21,0.33687193198815224