真会玩,程序员用AI认双胞胎儿子!“这个树莓派版人脸识别系统,没我认得准”
2021-02-19
学术头条
我行我show!中国医院管理案例评选,医院卓越管理实践大秀场。点击查看
到了 2021 年,人们普遍认为,通过学习算法和人工智能研究,机器在很多方面都优于人类。长期以来,机器一直主导着制造业和供应链领域,甚至开始涉足更复杂的任务,比如自动驾驶,甚至撰写高难度综合类文章。但是,在面部识别方面,机器的发展真的已经超过人类大脑了吗?
图|Alexander 和 Nicolas
举个例子,我最近购买了一部带有指纹识别器的手机,我问我的儿子们是否想做一个小实验:一个将指纹录入,然后另一个用自己的手指去解锁,这显然是行不通的。事实证明,多种环境因素(其中只有一种是基因)驱使了子宫内的“指纹”形成,因此双胞胎通常具有不同的指纹。
为了帮助回答有关“人类或机器谁更擅长识别同卵双胞胎”的问题,我决定设计一个比指纹读取器稍微复杂的实验,并邀请我的“小科学家们”(我的儿子)接受培训以提供帮助。
我现在已经拥有一些用于其他项目的 Raspberry Pi,因此我测试了三个,看哪种最适合该应用程序。Pi Zero 可以正常工作,但在分析视频提要的帧并编译所有必需的软件时,它耗时 48 小时(是的,编译该软件需要 2 天)。对于任何想要运行类似环境的人,我强烈推荐 Pi 4b(8GB 型号),因为它具有更快的处理器,多个内核和扩展内存。我们测试的三个 Pi 的详细细节和形状因子如下所示。该设置过程的其余部分假定使用 Pi 4b(8GB)。
图 | Pi Zero,Pi 3b+ 和 Pi 4b- 刻度铅笔。
WiFi:启动 Pi 时,需要将其连接到本地网络。创建一个名为 wpa_supplicant.conf 的文件,并将其放在 SD 卡的顶层。确保文件格式为纯文本,并以 .conf 结尾。保存文件之前,添加你地理位置的两个字母的国家/地区代码以及 WiFi 网络的 SSID 和 PSK(保留双引号)。
SSH:由于我们将 Pi 设置为无头运行(没有监视器),因此我们需要一种连接到它进行管理和配置的方法——使用 SSH。要启用 Linux SSH 守护程序并自动进行,请将一个名为 ssh 的文件放置在 SD 卡的顶层,该文件不包含任何内容且没有文件扩展名。 视频:我们将在没有显示器连接的情况下启动 Pi,但仍希望在对其进行远程控制时启用视频,因此即使没有被检测到,我们也必须强制 HDMI 处于活动状态。编辑 SD 卡顶层的名为 config.txt 的文件,然后取消 hdmi_force_hotplug = 1 行的注释。
现在,通过打开终端(在 Mac 上)或使用 Putty(在 Windows 上)和 SSH 将 IP 地址作为用户名“Pi”(默认密码为“raspberry”)来验证你可以连接到 Pi。
设置:步骤 2
安装过程的第二步是安装和编译所有必需的软件。为了执行面部识别任务,我决定使用 OpenCV(开源计算机视觉库)和 Dlib。OpenCV 和 Dlib 具有许多优化算法,包括面部识别,已在工业界和学术界广泛应用,受到了良好的尊重和支持,并且具有用于 Python 编程语言的接口,这些接口可用于驱动模型训练和识别程序。互联网上有许多在 Raspberry Pi 上设置 OpenCV 和 Dlib 的示例,但是我找不到任何简洁而全面的内容,因此创建了一个简单的包装程序来安装所有的必备软件并编译 OpenCV 和 Dlib 源代码。要下载和执行此包装程序,请执行以下操作:
以 pi 用户的身份通过 SSH 连接到 Pi,并确保你位于 pi 用户的主目录中:cd~ 在Github上克隆我们的Raspberry Pi面部识别存储库的副本:git clone https://github.com/tomalessi/pi-facial-recognition.git 执行安装脚本(大约需要 1 个小时):pi-facial-recognition / pi-setup.sh
Pi 现在已经准备好拍照和训练面部识别模型。为此,我们需要查看 Pi 上的窗口环境,以便通过 VNC Viewer 连接到它。你需要在 Pi 上启用 VNC 服务器,并在你的工作站上下载一个客户端。请按照以下步骤操作:
Pi 设置:SSH 到 PI,执行命令 sudo raspi-config,向下滚动到界面选项 →VNC 并启用它。启用此功能后,你需要重新启动。 工作站设置:从 RealVNC 下载并为你的平台安装 VNC Viewer(免费下载)。安装完成后,使用其 IP 地址设置从 VNC Viewer 到 Pi 的新连接,并确保你可以登录。成功登录后,你将会看到 Raspberry Pi OS 的背景。
通过执行以下命令并在观看实时视频后按空格键来拍照:python pi-facial-recognition / face-req.py -c photo -n Tom 通过将 -n 参数替换为另一个参数来继续为他人拍照名称。在终端窗口中按 ctrl + c 退出。 训练模型:python pi-facial-recognition / face-req.py -c train。分析每张照片,然后将结果序列化以用于分析视频时,大约需要 10 秒钟。 分析视频并应用面部识别模型:python pi-facial-recognition / face-req.py -c analyze。大约十秒钟后,应该开始直播视频。识别出的所有面孔将被标记为该人的名字,否则面孔将被标记为无法识别。按“q”退出。 清理环境并重新开始,请执行以下操作:python pi-facial-recognition / face-req.py -c clean。
注意:我们尝试了另一种实验,即以不同角度拍摄 10 张照片,但这并没有改变结果,可能是因为我们使用的是面向梯度直方图(HOG)的面部识别方法,它只适用于正面照片。
结果:测试 1
测试 1 是我本人和 Alexander,机器识别正确。
结果:测试 2
结果:测试 3
结果:测试 4
我尝试了一张较新的彩色照片(孩子可能已经 4 岁),机器再次出现故障。它错误地识别出两个 Nicolas。
为了提高系统的准确性,我想尝试一些不同的面部识别技术,比如利用 Dlib 支持的卷积神经网络(CNN)(尽管 Raspberry Pi 受其计算能力的限制),或者让 Pi 调用 GCP、AWS 或 Azure 中的公共服务进行面部识别。
学术界对双胞胎面部识别的研究也越来越多,因此技术肯定会继续改进,以解决我们在此处指出的一些现有缺陷——我和我的儿子们肯定会关注这个领域。
排版:佩奇
机器学习,程序员,双胞胎,AI,人脸,识别,测试

精彩评论
相关阅读
赞+1