Howdy
Howdy は Linux 上で Windows Hello と同じことを実現するプログラムです。コンピュータの赤外線センサーとカメラを使ってユーザーの顔を認識します。
目次
インストール
設定
必要に応じて Howdy を起動する
Howdy でユーザーを認証するには、Howdy を使用したい PAM の設定ファイルに修正を加える必要があります。設定ファイルに以下の行を追加してください:
auth sufficient pam_python.so /lib/security/howdy/pam.py
例
/etc/pam.d/sudo
# PAM-1.0 auth sufficient pam_python.so /lib/security/howdy/pam.py auth include system-auth account include system-auth session include system-auth
赤外線センサーの追加
使用したい赤外線センサーと対応する /dev/videoX
ファイルを確認してください。cheese や fswebcamAUR などのプログラムで確認できます。ファイル名が確認できたら /lib/security/howdy/config.ini
をテキストエディタを使って手動で編集するか sudo howdy config
を実行してください。
Howdy に顔を追加
Howdy に顔モデルを追加するには sudo howdy add
を実行してください。
トラブルシューティング
赤外線カメラのテスト
赤外線カメラが正しく機能していることを最初に確認する事が有用です。以下のコマンドでgstreamerパッケージを使用して、デバイスをテストするために10枚のjpg写真を撮影できます。(/dev/video0 をあなたの赤外線カメラのデバイスファイルに置き換えます)
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=10 ! image/jpeg ! multifilesink location="frame-%02d.jpg"
Howdy が機能しない
root で howdy test
を実行することで Howdy が正しく機能するかどうか確認できます。機能している場合、PAM の設定ファイルを確認してください。SDDM など一部のプログラムは PAM で正しく機能せず、問題が発生することがあります [1]。
入力デバイスの認識エラー
一部の赤外線センサー(Thinkpad T480など)では、構成ファイルでフレームの幅と高さを定義する必要があります。
frame_width = 400 frame_height = 400
赤外線カメラ出力の幅と高さ: v4l2-ctl --list-devices --all
。
GStreamer warnings in shell
You might have howdy working but get warning like this in shell:
$sudo howdy test
[ WARN:0] global /build/opencv/src/opencv-4.1.1/modules/videoio/src/cap_gstreamer.cpp (1756) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module source reported: Could not read from resource. [ WARN:0] global /build/opencv/src/opencv-4.1.1/modules/videoio/src/cap_gstreamer.cpp (886) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0] global /build/opencv/src/opencv-4.1.1/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created ...
This is caused by upstream opencv package built with default warning level LOG_LEVEL_WARNING = 3
. The cv::utils::logging API in C++ can set log level higher in order to hide lower level warning, but this API is not exposed into python-cv2 yet.
A temporary solution for this is addding an environment variable OPENCV_LOG_LEVEL=ERROR
to your system per user or globally.