Mac/Linux安装人脸识别常用库(tensorflow、pytorch、dlib、face_recognition、opencv、CMake、gcc/g++)————所有环境一次性配置好

0 背景与准备

因为要做人脸识别的项目,所以需要配置相对应的环境和库,常用深度学习的数值计算库为tensorflow、pytorch,常用的人脸识别库为face_recognition,常用的图像处理库opencv

下图为使用库识别后的效果。

在这里插入图片描述

因为本地环境为Mac,服务器环境为Linux,为了方便调试和部署,于是在本地和远程linux上都配置了相同的人脸识别环境。

安装这三个常用人脸识别的库都需要安装anaconda,都需要在Anaconda的虚拟环境中进行安装。

Mac安装的方法为,直接到Anaconda官方下载链接,下载安装后即可。

Linux下安装Anaconda的方法为:

 wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh

bash Anaconda3-5.3.1-Linux-x86_64.sh

source ~/.bashrc

创建Anaconda虚拟环境的方法如下:

# 创建环境
conda create --name tensorflow-env python=3.6

# 激活环境
source activate tensorflow-env

# 安装库

# 退出环境
source deactivate  tensorflow-env

使用Pycharm创建Anaconda环境方法如下:

请添加图片描述

添加安装源:

conda config --add channels https://pypi.tuna.tsinghua.edu.cn/simple
conda config --set show_channel_urls yes
conda config --show channels

# 如果后面安装有问题,再删除默认通道

vi ~/.condarc

执行,将进入`condarc`这个文件,按下`‘i’`进入`‘Insert’`模式将`‘- defaults’`这一行删除.

1 tensorflow环境【数值计算的开源软件库】

首先创建python版本3.6的Anaconda的虚拟环境。

在命令端执行如下执行,如果是Pycharm,则在Teriminal中执行指令。
请添加图片描述

conda install tensorflow

如果上面的方法安装不成功,则更换安装源(安装源可自行选择)进行安装:

pip --default-timeout=100 install tensorflow==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple 

测试代码:

import tensorflow as tf
x=tf.constant(3)
y=tf.constant(2)
z=x+y
sess=tf.Session()
print(sess.run(z))

print(tf.__version__)

安装的是tensorflow2,但是却想使用tensorflow1中的方法,可以使用如下的方法。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

2 pytorch环境【数值计算的开源软件库】

首先创建python版本3.7的Anaconda的虚拟环境。

执行指令如下:

conda install  torch 

如果上面的方法安装不成功,则更换安装源进行安装:

pip --default-timeout=100 install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

其他常用的图像处理库:

conda install PIL
conda install numpy

测试代码:

import torch

x = torch.rand(5, 3)
print(x)

print(torch.__version__)

3 face_recognition【基于dlib的人脸识别库】

首先创建python版本3.7的Anaconda的虚拟环境。

执行如下指令:

pip install dlib
# 或下面的方式
pip --default-timeout=100 install dlib -i https://pypi.tuna.tsinghua.edu.cn/simple


pip --default-timeout=100 install face_recognition -i https://pypi.tuna.tsinghua.edu.cn/simple

如果在Linux下安装时,提示gcc版本过低,可以使用如下方式安装高版本gcc(linux):

wget http://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz

tar -zxvf gcc-5.4.0.tar.gz

cd gcc-5.4.0

./contrib/download_prerequisites

mkdir gcc_5_4_0_build
cd gcc_5_4_0_build

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib


sudo make && make install

gcc -v

# 查看软链接
ls /usr/bin/gcc* -l 

# 删除原有软连接
sudo rm /usr/bin/gcc

# 查看gcc的安装位置
whereis gcc

# 建立软链接(根据自己gcc的安装路径,配置软链接)
sudo ln -s  /usr/local/lib/gcc/x86_64-unknown-linux-gnu/5.4.0   /usr/bin/gcc

gcc版本过低报错:

请添加图片描述

成功安装:

请添加图片描述
在这里插入图片描述

安装后面模型使用到的库(可选择安装,如果不实践后面的人脸验证项目):

$ pip3 install scikit-learn
$ pip3 install numpy
$ pip3 install opencv-contrib-python

安装过程中,如果遇到了Requirement already satisfied: numpy in /root/anaconda3/envs/tensorflow-env/lib/python3.6/site-packages (1.19.5),可以使用pip install --target=/root/anaconda3/envs/tensorflow-env/lib/python3.6/site-packages numpy进行安装(--target=后填写自己包的路径)/

4 opencv【图像处理库】

4.1 安装opencv库(CMake、gcc/c++)

Mac的安装opencv的方法为:使用brew进行opencv的安装:

brew install opencv

Linux安装opencv,

可以使用如下指令直接安装,但是安装的版本比较老,不推荐。

yum install opencv opencv-devel opencv-python -y

pkg-config --modversion opencv

# opencv版本:2.4.5

这里使用下面👇的方法进行安装,

首先安装cmake3,用于编译opencv源代码,方法如下:

# 安装openssl
yum install openssl openssl-devel

## 1. 查看当前cmake版本
[root@localhost ~]# cmake -version
cmake version 2.8.12.2
## 2. 进行卸载
[root@localhost ~]# yum remove -y cmake
## 3. 进行安装包的下载,也可以下载好安装包后传至相应的目录
[root@localhost ~]# mkdir /opt/cmake
[root@localhost ~]# cd /opt/cmake/
## 4. 下载或拷贝,解压
[root@localhost cmake]# wget https://cmake.org/files/v3.16/cmake-3.16.6.tar.gz
[root@localhost cmake]# tar -zxvf cmake-3.16.6.tar.gz
## 5. 安装基本工具
[root@localhost cmake]# yum install -y gcc gcc-c++  
## 6. 进行编译连接
[root@localhost cmake]# cd cmake-3.16.6  && ./configure --prefix=/usr/local/cmake
## 7. 安装
[root@localhost cmake-3.16.6]# make && make install 
## 8. 创建链接
[root@localhost cmake-3.16.6]# ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake 
## 9. 查看版本
[root@localhost cmake-3.16.6]# cmake -version
cmake version 3.16.6

CMake suite maintained and supported by Kitware (kitware.com/cmake).

安装opencv的方法如下:


# opencv包
wget https://github.com/opencv/opencv/archive/4.1.2.zip

# 下面为扩展包(这里未安装)
wget https://github.com/opencv/opencv_contrib/archive/4.1.2.zip

# 解压文件夹
unzip 4.1.2.zip

# 进入到下载
cd opencv4.1.2

mkdir build

cd build

# 构建

# cmake .. -DCMAKE_BUILD_TYPE=Release -DCUDA_nppi_LIBRARY=true -DWITH_CUDA=OFF -DBUILD_TIFF=ON

# 上面的构建方法比较简略,刚好够python可以用,如果想C++也可以用,并且可以进行包管理,可以进行下面的方法构建。
# (opencv4版本之后,默认配置是不生成 opencv.pc,Linux下使用opencv时,需要使用pkg-config来进行环境变量的管理,这个软件需要.pc类型的文件作为软件配置信息,如果不配置,会出现opencv安装成功但是c编程无法使用的情况。)

cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON ..
  
cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
  
cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF ..
  
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

# 编译和安装或者使用分开使用两条语句
# make && make install

# 编译(根据线程数填写数字)
# make -j 4

# 安装
make install

#添加在文件末尾并保存退出
export  PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
#退出后执行
source /etc/profile 

#看下是否编译成功
pkg-config --libs opencv
#如果没有反应再试下下面的语句
pkg-config --libs opencv4

# 查看版本 
pkg-config opencv --modversion #4版本以下
opencv_version #4版本以上

# 配置环境变量
vi /etc/profile

# 启动conda虚拟环境
source activate tensorflow-env

# 安装python的opencv包
pip install opencv-python

部分安装截图如下:

请添加图片描述

构建截图:
在这里插入图片描述

编译截图:
在这里插入图片描述
安装截图
在这里插入图片描述
使用python命令端,查看是否安装成功以及安装版本:
请添加图片描述

测试C++ opencv版本可用,在文件夹中创建如下文件:

qr.cpp文件(作用:框出图片中二维码的部分):

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/imgproc/types_c.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

using namespace cv;
using namespace std;
Mat src; Mat src_gray;Mat src_out;
RNG rng(12345);

//轮廓中心点
Point Center_point(vector<vector<Point> > contours,int i)//找到所提取轮廓的中心点
   {
          int centerx=0,centery=0,n=contours[i].size();
          //在提取的小正方形的边界上每隔周长个像素提取一个点的坐标,求所提取四个点的平均坐标(即为小正方形的大致中心)
          centerx = (contours[i][n/4].x + contours[i][n*2/4].x + contours[i][3*n/4].x + contours[i][n-1].x)/4;
          centery = (contours[i][n/4].y + contours[i][n*2/4].y + contours[i][3*n/4].y + contours[i][n-1].y)/4;
          Point point1=Point(centerx,centery);
          return point1;
   }

int main( int argc, char** argv[] )
{
  src = imread( "1.jpg", 1 );
//判断是否载入图像
  if(src.empty())
    {
        fprintf(stderr, "Can not load image %s\n", 1);
        return -1;
    }
  Mat src_all=src.clone();
//图像转化为灰度图像
  cvtColor( src, src_gray, CV_BGR2GRAY );//opencv2.x颜色空间转换code用的宏定义是CV_前缀开头,opencv3之后则是COLOR_开头)

//图像滤波和均衡化会影响图像,影响下面轮廓检测
  //medianBlur(src_gray, src_gray, 3); //中值滤波
 // equalizeHist( src_gray, src_gray );//均衡化

  Scalar color = Scalar(1,1,255 );//RGB颜色值分别为1,1,255
  Mat drawing = Mat::zeros( src.size(), CV_8UC3 );//画布
  Mat drawing2 = Mat::zeros( src.size(), CV_8UC3 );//画布
//图像二值化
  Mat src_threshold;
  threshold(src_gray, src_threshold, 112, 255, THRESH_BINARY );//threshold(const Mat& src, Mat& dst, double thresh,double maxVal, int thresholdType );

//对图像进行轮廓检测,调用查找轮廓函数
  vector<vector<Point> > contours,contours2;
  vector<Vec4i> hierarchy;
  findContours( src_threshold, contours, hierarchy,  CV_RETR_TREE, CHAIN_APPROX_NONE, Point(0, 0) );//CV_RETR_TREE, 检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓内.CV_CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点到contours向量内

    int c=0,ic=0,k=0,area=0,i=0;
//寻找有两个子轮廓的父轮廓
    int parentIdx=-1;
    for( int i = 0; i< contours.size(); i++ )//contours[i]代表的是第i个轮廓,contours[i].size()代表的是第i个轮廓上所有的像素点数
    {
        if (hierarchy[i][2] != -1 && ic==0)//有子轮廓
        {
            parentIdx = i;
            ic++;
        }
        else if (hierarchy[i][2] != -1)
        {
            ic++;
        }
        else if(hierarchy[i][2] == -1)//无子轮廓
        {
            ic = 0;
            parentIdx = -1;
        }

       //有两个子轮廓
        if ( ic >= 2)
        {
            contours2.push_back(contours[parentIdx]);//保存找到的黑色定位角
            drawContours( drawing, contours, parentIdx,  CV_RGB(255,0,0) , 1, 8);//画出三个黑色定位角的轮廓
            ic = 0;
            parentIdx = -1;
            area = contourArea(contours[i]);//得出一个二维码定位角的面积,以便计算其边长(area_side)
        }
    }
//填充轮廓
    for(int i=0; i<contours2.size(); i++)
        drawContours( drawing2, contours2, i,  CV_RGB(255,0,0) , -1, 4, hierarchy[k][2], 0, Point() );

//获取三个定位角的中心坐标
     Point point[3];
    for(int i=0; i<contours2.size(); i++)
    {
        point[i] = Center_point( contours2, i );
    }
//计算轮廓的面积,计算定位角的面积,从而计算出边长

	area = contourArea(contours2[0]);///
    int area_side = cvRound (sqrt (double(area)));
//连接三个黑色正方形区域,形成一个轮廓
    for(int i=0; i<contours2.size(); i++)
    {
        //三个定位角连线
        line(drawing2,point[i%contours2.size()],point[(i+1)%contours2.size()],CV_RGB(100,100,255),area_side/2,8);
    }


	//框出这整个二维码
	Mat gray_all,src_treshold_all;
	vector<vector<Point> > contours_all;
    vector<Vec4i> hierarchy_all;
	cvtColor( drawing2, gray_all, CV_BGR2GRAY );
	threshold( gray_all, src_treshold_all, 45, 255, THRESH_BINARY );
	findContours( src_treshold_all, contours_all, hierarchy_all,  RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0) );//RETR_EXTERNAL表示只寻找最外层轮廓

 //求最小包围矩形
	 RotatedRect rectPoint = minAreaRect(contours_all[0]);
	 Point2f fourPoint2f[4]; //矩形的质心


	 //将rectPoint变量中存储的坐标值放到 P的数组中
	 rectPoint.points(fourPoint2f);
	  for (int i = 0; i < 4; i++)
        {
            line(src_all, fourPoint2f[i%4], fourPoint2f[(i + 1)%4], Scalar(20,21,237), 3);
        }
	 imshow( "二维码", src_all );
    waitKey(0);
    return(0);
}

CMakeLists.txt文件

cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

project(QR)
find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS})
add_executable(qr qr.cpp)
target_link_libraries(qr ${OpenCV_LIBS})

编译执行:

cmake .
make
./qr 1.jpg

# 执行结果(没有界面的linux)
(二维码:22837): Gtk-WARNING **: 18:02:43.491: cannot open display:

附带卸载opencv的方法:

 rm -rf  /usr/local/share/licenses/opencv4/
rm -rf  /usr/local/include/opencv4/
rm -rf  /usr/local/lib64/cmake/opencv4/
rm -rf /usr/local/lib64/libopencv_core.so.4.1.2
rm -rf /usr/local/lib64/libopencv_core.so.4.1
rm -rf /usr/local/lib64/libopencv_core.so

 
 rm -rf /usr/local/bin/setup_vars_opencv4.sh
 rm -rf /usr/local/share/opencv4/valgrind.supp
  
rm -rf /usr/local/bin/setup_vars_opencv4.sh
rm -rf /usr/local/share/opencv4/valgrind.supp

rm -rf /usr/local/share/licenses/opencv4/

 删除下面路径下的所有opencv库
 cd /usr/local/lib64/
 
 shopt -s extglob
 rm -fr !(cmake)

cd /root/opencv-4.1.2/build/

sudo make uninstall
cd ..
sudo rm -r build

4.2 Pycharm配置环境

pycharm配置opencv环境:

  • 1),首先在项目中,运行如下代码,
import sys

# 下面的路径为我本地的opencv地址,可更具自己具体情况作修改
# 一般都在/usr/local/Cellar/路径下
sys.path.append("/usr/local/Cellar/opencv/4.3.0_5/")
  • 2 )打开pycharm的设置,点击加号➕,在里面搜索opencv,然后执行安装。

请添加图片描述

在这里插入图片描述
如果搜不到opencv-py库,可以点击Manage Repositories,添加安装源:
在这里插入图片描述
或者在pycharm的命令端添加,执行如下指令:

% conda 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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
% conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/

conda config --add channels https://pypi.tuna.tsinghua.edu.cn/simple

% conda config --set show_channel_urls yes

在这里插入图片描述

5 继续学习

此网页包括三个使用搭建的平台进行人脸识别的实际项目,文中附带可实际运行的代码。

参考博文

ccw1078的博客

吕振江的博客

bxzsy的博客

陈Cocke

HeyMountain

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星蓝雨

如果觉得文章不错,可以请喝咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值