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:此方法可能带来其他潜在隐藏问题

原文地址:https://www.cnblogs.com/venoms/p/13779262.html