发布于 

在搭载M1芯片的mac上使用face_recognition库实现实时人脸识别小demo

前言

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

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

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

网络环境搭建

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

大部分的环境搭建与库安装需要使用终端进行,由于终端默认并不走代理的网络,

为了此后下载的顺利,先需要设置终端也可以使用代理。

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

.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="http://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 记得选中 macOS 64-bit universal2 installer

安装完成后在终端输入

open ~/.bash_profile 

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

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

重新打开终端输入

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

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

各种依赖包安装

radiation

yellow, 头铁的可以试试直接安装 设置好终端网络代理后 在终端中输入 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

注意

鉴于M1版本的开发工具适配进程目前并不同步,所以这里使用miniforge来进行库管理

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

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

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

这三个包如果安装失败,可以多试几次,cmake有概率编译失败

安装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

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

对着检查一下吧

homebrew
miniforge
numpy
openblas
opencv
cmake
dlib

安装face_recognition

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

pip3 install face_recognition

如果出现了任何错误,欢迎在评论区告诉我

温馨提示

此过程需要网络以及人品双buff叠加,请坐和放宽……

安装完成后在终端中输入

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-193809@2x.png

运行一下吧!

打开终端,输入

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

就像这样

WX20210328-195510@2x.png

按下回车等待奇迹的发生

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

521616932197_.pic_hd.jpg

大功告成啦!

尾巴

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

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

致谢

谢谢阅读,欢迎你的留言!


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

@Hamster