通过Python+TensorFlow实现人脸识别(一)

1.简介

虽然说是Python+TensorFlow实现人脸识别,但实际上还需要用到dlib、opencv以及numpy等第三方包,所以我们需要先进行完整的环境搭建。

我的Python版本是3.6,系统是macOS,如果你是Python 2.X的话可能会有所区别。建议大家选择Anaconda来进行Python的包管理。

在搭建过程中参考了这些文章:
Anaconda的安装与搭建:https://www.zhihu.com/question/24289087
通过pip安装dlib:https://www.zhihu.com/question/34524316
以及总体参考了:http://tumumu.cn/2017/05/02/deep-learning-face/

2.环境搭建

2.1安装Anaconda

直接在官网https://www.anaconda.com/download/#macos 下载你对应的 Python版本的即可,我选择的是64-Bit Command-Line Installer (511 MB)
安装方法直接参考官方文档
https://docs.anaconda.com/anaconda/install/mac-os#macos-graphical-install
完成之后你可以在终端直接输入Python,如果显示和下面类似那说明就OK了

Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 12:04:33) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

接下来是就是通过conda安装我们所需要的包了,关于conda的基本使用命令以及修改镜像地址请参考这篇博文:
https://foofish.net/anaconda-install.html

修改了镜像地址下载速度很快!

2.2安装tensorflow、opencv

在这之前,先把你的conda更新到最新版本,在终端输入:

conda update -n base conda

更新完毕,可以安装tensorflow了:

conda install tensorflow

然后是opencv:

conda install opencv

每安装完一个包都可以通过

conda list

来查看包列表里是否有刚刚安装的包。

2.3pip安装dlib

不知道为什么我的conda里根本没有dlib,所以改用pip下载。
首先,先要安装依赖库

# for macOS

brew install cmake
brew install boost
brew install boost-python --with-python3

brew install 可能需要翻墙,卡在Updating Homebrew…可以直接Control+c跳过

然后才是本体

pip install dlib

成功的话应该会提示这个:

Successfully built dlib
Installing collected packages: dlib
Successfully installed dlib-19.10.0

3.测试

环境搭建完毕,我们可以写一个Python程序来测试这些导入包是否奏效,我使用Sublime Text来编写Python程序,这里使用了
http://tumumu.cn/2017/05/02/deep-learning-face/
里的一部分代码进行测试。

下面是测试代码:

import cv2
import dlib
import os
import sys
import random

output_dir = './my_faces'
size = 64

if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 改变图片的亮度与对比度
def relight(img, light=1, bias=0):
    w = img.shape[1]
    h = img.shape[0]
    #image = []
    for i in range(0,w):
        for j in range(0,h):
            for c in range(3):
                tmp = int(img[j,i,c]*light + bias)
                if tmp > 255:
                    tmp = 255
                elif tmp < 0:
                    tmp = 0
                img[j,i,c] = tmp
    return img

#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()
# 打开摄像头 参数为输入流,可以为摄像头或视频文件
camera = cv2.VideoCapture(0)

index = 1
while True:
    if (index <= 100):
        print('Being processed picture %s' % index)
        # 从摄像头读取照片
        success, img = camera.read()
        # 转为灰度图片
        gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 使用detector进行人脸检测
        dets = detector(gray_img, 1)

        for i, d in enumerate(dets):
            x1 = d.top() if d.top() > 0 else 0
            y1 = d.bottom() if d.bottom() > 0 else 0
            x2 = d.left() if d.left() > 0 else 0
            y2 = d.right() if d.right() > 0 else 0

            face = img[x1:y1,x2:y2]
            # 调整图片的对比度与亮度, 对比度与亮度值都取随机数,这样能增加样本的多样性
            face = relight(face, random.uniform(0.5, 1.5), random.randint(-50, 50))

            face = cv2.resize(face, (size,size))

            cv2.imshow('image', face)

            cv2.imwrite(output_dir+'/'+str(index)+'.jpg', face)

            index += 1
        key = cv2.waitKey(30) & 0xff
        if key == 27:
            break
    else:
        print('Finished!')
        break

保存为get_my_faces.py文件,在终端里进到.py文件所在的目录,输入

python get_my_faces.py

如果运行成功那么应该会打开你电脑的前置摄像头并检测100张人脸输出到同目录下的my_faces文件夹,如下所示
这里写图片描述

检测的时候比较慢,不用急。

下一篇:通过Python+TensorFlow实现人脸识别(二)

猜你喜欢

转载自blog.csdn.net/qq_32925781/article/details/79809599