BackIconM1 Face Recognition

2021年5月16日

Openai logomark

Hamster1963

前言

在搭载M1芯片的mac上顺利进行开发是一件不仅随缘而且需要人品的事情,不仅仅因为M1芯片的ARM架构所带来的编译方式的不同,bugsur新的文件路径系统以及时不时的抽风也使得顺利开发的路上艰难险阻。今天就来看看GitHub上大名鼎鼎的开源人脸库face_recognition如何比较顺利地在M1上跑起来且实现简单的实时人脸识别的功能。

⚠️

由于不可描述的原因,网络环境所造成的安装失败不在本文讨论范围中。

第一部分 关于环境的那点事

网络环境搭建

ℹ️️
建议进行设置省去不必要的麻烦

大部分的环境搭建与库安装需要使用终端进行,由于终端默认并不走代理的网络,为了此后下载的顺利,先需要设置终端也可以使用代理。

首先,在当前用户根目录新建一个文件名为 .bash_profile 的空白文本,然后输入以下代码:

function proxy_off(){
unset http_proxy
unset https_proxy
unset ftp_proxy
unset rsync_proxy
echo -e "已关闭代理"
}

function proxy_on() {
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
export http_proxy="https://127.0.0.1:1087"
export https_proxy=$http_proxy
        export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
        export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$http_proxy
        export FTP_PROXY=$http_proxy
export RSYNC_PROXY=$http_proxy
echo -e "已开启代理"
}

export no_proxyexport http_proxy填入对应的本地代理服务器地址以及端口,可以在你的代理软件中查看。

截屏2021-03-31 上午12.42.42.png

将文件配置好并放在用户根目录后

当让终端走代理的时候,输入:

source ~/.bash_profile proxy_on

想关闭代理的时候,输入:

proxy_off

基本环境搭建

安装python最新版本

从python官网下载最新版本 python 记得选中 universal

安装完成后在终端输入

open ~/.bash_profile

在文件中加上一行环境变量配置后保存退出

export PATH=/usr/local/bin:$PATH

重新打开终端输入

source ~/.bash_profile python3 --version -------注意是python3

顺利的话你会在终端中看到python的版本号信息,python安装到此结束。

各种依赖包安装

👋️

可以试试直接安装 ,设置好终端网络代理后


在终端中输入 pip3 install face_recognition

在安装face_recognition之前我们需要安装:
homebrew
miniforge
numpy
openblas
opencv
cmake
dlib

安装homebrew

下载安装过程略

安装完成后根据提示在终端中输入

open ~/ .zprofile

在文件中加入

eval "$(/opt/homebrew/bin/brew shellenv)"

保存后重启homebrew,在终端中输入

brew

如果出现各种指令提示,证明安装成功

安装miniforge

在网站中选择Apple Silicon版本下载,下载后直接运行即可

demo.png

接下来我们需要在终端中激活

conda create -n myenv python=3.9 //创建名为myenv,python版本为3.9的环境 conda activate myenv //激活环境

安装numpy

激活conda且配置好网络代理后可以直接在终端中输入

pip3 install numpy=1.9.14

等待下载安装,安装完成后检测是否安装成功,在终端中输入

python3
>>>import numpy

没报错的话就安装成功了

安装openblas

激活conda且配置好网络代理后可以直接在终端中输入

pip3 install openblas

等待下载安装,安装完成后检测是否安装成功,在终端中输入

python3
>>>import openblas

没报错安装成功

需要编译的库

opencv
cmake
dlib

安装opencv

点击链接下载opencv库,仅适用于M1芯片

opencv_contrib_python-4.5.0+bbaa777-cp39-cp39-macosx_11_0_arm64.whl

在终端中激活环境

conda activate myenv //激活环境

定位到下载目录并安装

cd 目录 pip3 install opencv_contrib_python-4.5.0+bbaa777-cp39-cp39-macosx_11_0_arm64.whl

等待安装即可

安装cmake

终端配置好网络代理后输入

brew install cmake //安装cmake

安装Dlib

激活conda且配置好网络代理后直接在终端中输入

pip3 install dlib

安装后在终端输入

python3 >>>import dlib

如果未报错恭喜你安装成功,我们就差最后一步了。

安装face_recognition

激活conda且配置好网络代理后直接在终端中输入

pip3 install face_recognition

安装完成后在终端中输入

python3
>>>import face_recognition

如果没有报错证明万里长征我们已经走了一半了。

也可以使用 pip3 list 命令来查看所有已经安装的库 如图

截屏2021-03-31 上午1.05.28.png

到此安装告一段落。

第二部分 开始造轮子吧

由于安装这些依赖和库可能已经损耗你的大部分精力了,

所以接下来我们就快速地来看看怎么把这个简单的实时人脸识别跑起来。

⚠️
摄像头是必须的,所以请不要关上盖子运行接下来的步骤

下载py文件

从GitHub上下载

facerec_from_webcam_faster.py

使用编辑器编辑

用你喜欢的编辑器打开,这里使用vscode示范,下面代码都是从源文件中截出,对应修改即可。


# Load a sample picture and learn how to recognize it.

图片人名1_image = face_recognition.load_image_file("把这里改成你要识别的图片的路径")

图片人名1_face_encoding = face_recognition.face_encodings(图片人名1_image)[0]



# Load a second sample picture and learn how to recognize it.

图片人名2_image = face_recognition.load_image_file("把这里改成你要识别的图片2的路径")

图片人名2_face_encoding = face_recognition.face_encodings(图片人名1_image)[0]

# Create arrays of known face encodings and their names
known_face_encodings = [
    图片人名1_face_encoding,
    图片人名2_face_encoding
]
known_face_names = [
    "图片1所对应的全名",
    "图片2所对应的全名"
]

例子

如图,图片1为Obama,图片2为biden

WX20210328-195510@2x.png

运行一下吧!

打开终端,输入

python3 <将文件拖到这里或者粘贴文件的路径>

就像这样

WX20210328-195510@2x.png

按下回车等待奇迹的发生

不出意外的话,掏出你的小手机拿出一张照片或者把你的脸对准摄像头,就可以看到

Demo

大功告成啦!

尾巴

总体来说跑起这个小项目还是基本没有难度的,最主要的是有稳定的网络以及足够的耐心

face_recognition这个库具有很多方向的应用,今天只是简单地入门一下,还有很多玩法可以发掘哦!