howdy facial recognition with fedora workstation 42
howdy facial recognition with fedora workstation 42
I had a bunch of issues setting it up to work on my laptop, but now that I have I would like to compile all the bits and stuff together into one guide!
source: https://copr.fedorainfracloud.org/coprs/principis/howdy-beta/ and https://github.com/boltgolt/howdy/issues/1004
- install dependencies
downloading: SEE GITHUB ISSUE SECTION “DOWNLOAD DEPENDENCIES” (I can’t post the links!)
installing:
cd ~/Downloads sudo dnf install \ python3-elevate-0.1.3-3.20240124git78e82a8.fc41.noarch.rpm \ python3-keyboard-0.13.5-3.fc41.noarch.rpm \ python3-pyv4l2-1.0.2-3.20240124gitf12f0b3.fc41.x86_64.rpm
installing opencv (note that I had to use pip install for opencv-python, so try that as well!)
sudo dnf install -y opencv opencv-devel opencv-python sudo dnf install -y v4l-utils
When I tried to install howdy from “howdy-beta, an error pops up with “nothing provides python3dist(ffmpeg-python)...”
BettridgeCameron on GitHub is the holy saviour with this fix:
dnf install https://kojipkgs.fedoraproject.org/packages/python-ffmpeg-python/0.2.0/8.fc41/noarch/python3-ffmpeg-python-0.2.0-8.fc41.noarch.rpm
- installing howdy
remove non-beta howdy (it doesn’t seem to work for Fedora 41+)
sudo dnf remove howdy sudo dnf copr remove principis/howdy
install beta howdy
sudo dnf copr enable principis/howdy-beta sudo dnf —refresh install howdy
- use sudo howdy config
device-path: use ls /dev/video*
or v4l2-ctl —list-devices
to see all device paths and test each of them using sudo howdy test
(for me it was /dev/video2
)
settings to change “freedy237” recommends: (note that howdy-beta uses different words e.g. “abort if” rather than “ignore”, make sure you have howdy-beta! This stumped me for a while)
detection_notice = true timeout_notice = true no_confirmation = false suppress_unknown = false abort_if_ssh = true abort_if_lid_closed = true disabled = false use_cnn = false workaround = input certainty = 4.0 timeout = 10 device_path = /dev/video0 # Replace with your detected device warn_no_device = true max_height = 480 frame_width = 640 frame_height = 480 dark_threshold = 80 recording_plugin = opencv device_format = v4l2 force_mjpeg = true exposure = -1 device_fps = 15 rotate = 1
- use
sudo howdy add
to add a face.
Name it anything you want, I go with names like “glasses” and “no-glasses” since…I wear glasses. Some random person on GitHub with a multi-monitor setup has it set to looking at different monitors. Whatever you want, doesn’t really matter.
You can use sudo howdy test
to check if it works. A red outline means it’s an unrecognised face, a green outline with the name means it is a recognises face. no outline means not a face. Also check that whether it is a “dark frame” or not vs a “scan frame”. You might need to set the dark threshold higher using config. (this was an issue I faced as well, for me 80 works)
- howdy on login
sudo nano /etc/pam.d/gdm-password
add: auth sufficient pam_howdy.so
a similar thing can be done for gnome’s password pop ups (e.g. when installing an app) by going to “polkit-1”
- howdy on sudo (you might not want this!)
sudo nano /etc/pam.d/sudo
add: auth sufficient pam_howdy.so no_confirmation
- permissions
sudo chmod o+rw /dev/video*
sudo chmod -R o+rx /usr/share/howdy/dlib-data
sudo chmod +x /usr/bin/howdy
sudo usermod -aG video gdm
sudo chmod 666 /dev/video*
sudo chmod 755 /usr/lib64/security/pam_howdy.so
- fix SELinux perms for login screen
create “howdy.te”
sudo nano howdy.te
add: (as seen on fedora copr repo)
module howdy 1.0; require { type lib_t; type xdm_t; type v4l_device_t; type sysctl_vm_t; class chr_file map; class file { create getattr open read write }; class dir add_name; } #============= xdm_t ============== allow xdm_t lib_t:dir add_name; allow xdm_t lib_t:file { create write }; allow xdm_t sysctl_vm_t:file { getattr open read }; allow xdm_t v4l_device_t:chr_file map;
compile and insert it
checkmodule -M -m -o howdy.mod howdy.te semodule_package -o howdy.pp -m howdy.mod semodule -i howdy.pp