Linux人脸识别登录认证
本人主机使用系统为Manjaro,其他系统未做尝试
安装
$ yay -S howdy v4l-utils
具体选项在这里就不多过多介绍,安装过程最好使用代理,安装时需要在github下载源码进行编译,未使用代理时下载速度感人
配置
在使用sudo时启用howdy,编辑/etc/pam.d/sudo,添加:
auth sufficient pam_python.so /lib/security/howdy/pam.py
在登录时使用howdy,编辑/etc/pam.d/system-local-login(GDM或者SDDM),添加:
auth sufficient pam_python.so /lib/security/howdy/pam.py
查看摄像头设备位置
$ v4l2-ctl --list-devices
编辑howdy配置文件,将 device_path
的路径修改为设备实际的路径,比如/etc/video0
:
$ sudo howdy config
为howdy添加面部信息,面朝摄像头:
$ sudo howdy add
测试
新打开一个终端输入sudo -s
测试howdy是否可用
问题
在认证成功后会出现类似下面的警告:
[ WARN:0] global /build/opencv/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (1760) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module source reported: Could not read from resource.
[ WARN:0] global /build/opencv/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /build/opencv/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
原因是上游构建opencv软件包时使用默认警告级别LOG_LEVEL_WARNING = 3
,C++中cv::utils::logging API可以设置更高级别的日志等级去隐藏低级别的警告,但是此API未在python-cv2中公开。临时解决的方法是在每个用户或者全局中添加OPENCV_LOG_LEVEL=ERROR
的环境变量。
解决方法
打开.xprofile
添加:
export OPENCV_LOG_LEVEL=ERROR
注销重新登录
PS:此方法可能带来其他潜在隐藏问题