在 Ubuntu Linux 下启用 ThinkPad X1 Carbon 的 IR 面部解锁功能
不少笔记本都会配备 IR 红外线感应摄像头,为的是实现面部解锁,尤其是 Surface 就是标配,在 Windows 10 里这个功能被称为 Windows Hello,简单说就是你掀开机器,就会直接扫脸解锁进入系统,不再需要你输入密码什么的。
在 Linux 下是否可以使用这个功能呢?
可以。
使用这个叫做 howdy 的项目即可。
https://github.com/boltgolt/howdy
安装
Ubuntu Linux 安装 howdy 可以添加 PPA
sudo add-apt-repository ppa:boltgolt/howdy
sudo apt update
sudo apt install howdy
至于其他系统呢可以参考官方的安装手册。
这里需要注意的是,安装 howdy 的过程中会使用 pip 等包管理器安装一些第三方的 Python 包,最好确保你的网络是科学上网状态,不谈速度很慢。当然你也可以使用 proxychains4 之类的工具强制走代理。
howdy 这个工具简单来说似乎是使用 opencv 之类的库来计算完成面部识别的,安装起来依赖的内容很多,而且占用很大的磁盘空间,有洁癖的高贵的 Archer 们可以选择不装。
配置
安装完毕后我们还不能马上使用,需要进行一些调整。ThinkPad X1 Carbon 2017 IR 摄像头版实际上是有两个摄像头的,一个是 IR 摄像头,一个是普通摄像头,我们需要先确定 IR 摄像头的位置。
sudo apt install v4l-utils
先安装 v4l-ctl 工具来检查摄像头状态。
v4l2-ctl --list-devices
可以看到我的摄像头有两个,一个是 IR,一个是普通的,我们可以记下 IR 摄像头是 /dev/video0
这时候可以进入 howdy 的配置文件里,修改对应的摄像头路径,并且进行一些配置修改。
sudo howdy config
修改以下几条信息:
device_path = /dev/video0 #修改 IR 摄像头路径
dark_threshold = 100 #修改 IR 摄像头的暗光阈值,可以调高一点,这样在暗光下也能识别
force_mjpeg = true #如果你摄像头支持 mjpeg 格式,就可以用这个
配置修改完毕后就可以测试一下摄像头是否可用了。
sudo howdy test
你有可能遇到一些类似“setMouseCallback on Qt windows”的错误,这个错误的原因可能是 howdy 的安装脚本是用 pip 安装的 opencv,而新版 opencv 在 Ubuntu 下有问题,我们可以卸载掉 pip 安装的,换回 Ubuntu 官方源的。
sudo pip remove opencv-python
sudo apt install libopencv-dev python3-opencv
理论上安装完毕后再测试一下,测试没问题的话,你就可以使用了, 首先用命令添加自己的人脸:
sudo howdy add
每一张人脸可以增加一个识别的标识,随便输入就行了。
你可以尝试锁屏然后直视 IR 摄像头,看看是不是可以直接解锁,我这里就 OK 了,我的环境是诸多 Archer 们最不屑的 Gnome-Shell 3.36.3,可能高贵的 KDE 也可以用吧。
下面是一些问题:
Q:我解锁的时候有时候会失败,提示 Unknown Error 1。
A:这是权限问题,你可以给对应的信息一些权限:
sudo chmod o+x /lib/security/howdy/dlib-data
sudo chmod a+x /lib/security/howdy/recorders/
或者你也可以
sudo chmod a+x -R /lib/security/howdy/recorders/
但我感觉不太推荐就是了。
Q:我录脸之后,戴眼镜/戴口罩可以解锁吗?
A:不可以,我建议你每个状态都录一下脸,不戴眼镜录一个,戴眼睛录一个,戴眼睛戴口罩录一个……而且每个脸可以多录几次,提高识别率,但是戴口罩录的话我不保证会被别人冒充。
Q:不开灯可以识别吗?
A:我测试了,IR 摄像头是可以的。毕竟暗光没问题,那些说暗光不能解锁的,你特么有 IR 摄像头吗?
Q:普通摄像头可以识别码?
A:可以,摄像头在配置文件里写入普通摄像头就行了。但是暗光环境下可能就无效了。
Q:录脸之后每次打开 Terminal 后 sudo 命令直接就扫脸识别了?这也太惊悚了。
A:howdy config 命令里可以进行详细设置。更多可以看官方 Wiki。