Распознавание лица (howdy)

Материал из ALT Linux Wiki

Введение

Howdy обеспечивает аутентификацию пользователя по геометрии лица. Howdy использует встроенные ИК-излучатели и камеру в сочетании с функцией распознавания лиц.

Используя Howdy совместно с PAM, можно настроить аутентификацию по геометрии лица везде, где до этого работала парольная аутентификация: вход в систему, экран блокировки, sudo, su и т.д.

Список поддерживаемых камер и их настроек можно посмотреть здесь.

Примечание: Рекомендуется использовать ИК(IR)-камеру, так как её нельзя обмануть фотографией или изображением на смартфоне.


Установка

Установить пакет howdy:

# apt-get install howdy

Для возможности настройки в графическом интерфейсе на платформах с KDE (дистрибутивы Альт Рабочая станция К, Альт Образование) установить пакет kde5-kcm-howdy:

# apt-get install kde5-kcm-howdy

Для возможности настройки Howdy в графическом интерфейсе на платформах отличных от KDE можно установить пакет howdy-gtk:

# apt-get install howdy-gtk

Добавление модели лица в Howdy

Графический интерфейс

Модуль «Распознавание лица» (KDE)

В KDE для настройки параметров Howdy и создания моделей лица можно воспользоваться графическим интерфейсом: «Параметры системы KDE5» → «Предпочтения пользователя» → «Распознавание лица».

Примечание: Запустить модуль настройки распознавания лица также можно из командной строки, выполнив команду:
$ kcmshell5 howdy


Параметры системы KDE5. Распознавание лица

В модуле «Распознавание лица» на вкладке «Устройство» необходимо выбрать ИК-камеру и нажать кнопку «Применить»:

Распознавание лица. Настройка камеры

В этом же окне можно настроить:

  • «Порог яркости» — кадр с яркостью ниже этого порога считается слишком тёмным и распознавание не производится (чем ниже этот параметр, тем меньше темных кадров игнорируется);
  • «Достоверность» — уверенность в принадлежности обнаруженного лица пользователю аккаунта (чем значение ниже, тем точнее должно быть совпадение). Не рекомендуется устанавливать значения выше 5;
  • «Предпросмотр» — включить камеру для предпросмотра изображения.

Нажатие кнопки «Сброс» приведёт к сбросу настроек к предыдущему сохранённому варианту, а нажатие кнопки «По умолчание» — к настройкам по умолчанию («Камера не выбрана», «Порог яркости»=60, «Достоверность»=3,5).

При сохранении настроек будет запрошен пароль пользователя root:

Запрос аутентификации от PolicyKit для сохранения настроек Howdy

Для добавления лица пользователя в базу данных на вкладке «Список моделей» модуля «Распознавание лица» необходимо нажать кнопку «Добавить». В открывшемся окне следует ввести имя модели и нажать кнопку «Сканировать»:

Создание модели для распознавания лица

Будет запрошен пароль текущего пользователя:

Запрос пароля пользователя

После ввода пароля начнётся процедура создания модели. Чтобы правильно создать модель следует смотреть в камеру.

В случае успешного создания модель появится в списке:

Модель лица успешно добавлена

Можно добавить еще несколько вариантов лица, повторно запустив процедуру создания модели (кнопка «Добавить»).

Для удаления модели следует выделить её в списке и нажать кнопку «Удалить»:

Список моделей

Howdy GTK

Запуск (для пользователя должен быть настроен sudo):

$ sudo howdy-gtk

При первом запуске будет запущен мастер настройки Howdy:

Мастер настройки Howdy

Примечание: Мастер настройки Howdy будет запущен только если не существует ни одной модели (в /etc/howdy нет каталога models).


В ходе работы мастера настройки Howdy найдёт и покажет все доступные камеры. На этом шаге необходимо выбрать ИК-камеру («Рекомендуется, совместимая инфракрасная камера»):

Howdy. Настройка камеры

На следующем шаге проверяется работа камеры:

Howdy. Проверка камеры

Затем добавляется модель лица. Здесь необходимо нажать ссылку «Начать сканирование лица»:

Howdy. Добавление образца лица

Если модель лица добавлена успешно, на следующем шаге настраивается политика достоверности (параметр certainty):

Howdy. Настройка политики достоверности

При всех последующих запусках будет открываться окно «Настройка Howdy» где можно просмотреть настройки камеры (вкладка «Камера»), добавлять/удалять образцы для разных пользователей (вкладка «Образцы»):

Настройка Howdy. Вкладка «Образцы»

Командная строка

Все настройки Howdy можно выполнить в командной строке.

Синтаксис команды howdy:

# howdy [-U пользователь] [-y] команда [аргумент]

где команда может принимать одно из следующих значений:

  • add — добавить новую модель лица пользователя;
  • clear — удалить все модели лица пользователя;
  • config — открыть файл конфигурации в редакторе по умолчанию;
  • disable — отключить или включить howdy;
  • list — вывести список всех сохраненных моделей лица пользователя;
  • remove — удалить определённую модель лица пользователя;
  • snapshot — сделайте снимок с камеры;
  • set — установить параметр конфигурации;
  • test — выполнить тест камеры и методов распознавания;
  • version — вывести версию howdy.

В конфигурации Howdy в параметре device_path необходимо указать устройство ИК-камеры, например:

device_path = /dev/video0

Сделать это можно:

  • отредактировав вручную файл /etc/howdy/config.ini;
  • открыв файл конфигурации для редактирования в текстовом редакторе по умолчанию командой:
    # howdy -U user config
    
  • выполнив команду:
    # howdy -U user set device_path /dev/video0
    
Примечание: При запуске команды howdy config можно указать нужный редактор:
# EDITOR=vim howdy -U user config


В большинстве случаев устройством для веб-камеры будет /dev/video0.

Примечание: Если камер несколько, можно воспользоваться утилитой v4l-utils, чтобы определить нужную.

Установить пакет v4l-utils:

# apt-get install v4l-utils

Вывести список устройств:

$ v4l2-ctl --list-devices
Integrated Camera: Integrated C (usb-0000:00:14.0-7):
	/dev/video0
	/dev/video1
	/dev/video2
	/dev/video3
	/dev/media0
	/dev/media1

Получить информацию по конкретному устройству:

$ v4l2-ctl -d /dev/video0 --all

Устройство должно иметь возможность захвата видео, а не только захвата метаданных.

Получить список камер также можно, выполнив команду:

$ find /dev/v4l/by-path/*
/dev/v4l/by-path/pci-0000:00:14.0-usb-0:7:1.0-video-index0
/dev/v4l/by-path/pci-0000:00:14.0-usb-0:7:1.0-video-index1
/dev/v4l/by-path/pci-0000:00:14.0-usb-0:7:1.2-video-index0
/dev/v4l/by-path/pci-0000:00:14.0-usb-0:7:1.2-video-index1


После установки правильного пути к устройству, можно выполнить команду:

# howdy -U user test

Будет открыто окно для тестирования (для выхода необходимо в терминале нажать <Ctrl>+<C>).

Для добавления лица пользователя в базу данных для распознавания следует выполнить команду:

# howdy -U user add
Добавление образца лица пользователя user
Использование метки по умолчанию "Модель №1", так как установлен флаг -y

Пожалуйста, смотрите прямо в камеру

Сканирование завершено
Добавлен новый образец лица пользователя user
Внимание! При добавлении образца лица пользователя окно с изображением не открывается, чтобы правильно создать модель следует смотреть в камеру.


Можно добавить еще несколько вариантов лица, повторно запустив команду howdy add.

Если для пользователя настроен sudo он может самостоятельно добавить образец своего лица, выполнив команду

$ sudo howdy add
Добавление образца лица пользователя user
Введите название для нового образца лица [Модель №2]: 

Пожалуйста, смотрите прямо в камеру

Сканирование завершено
Добавлен новый образец лица пользователя user

Получить список всех моделей для пользователя можно, выполнив команду:

# howdy -U user list
Найденные образцы лица для пользователя user:

ID  Date                 Label
0   2023-12-12 10:19:19  test1
1   2023-12-12 10:28:49  test2
2   2023-12-12 10:57:50  Модель №2
3   2023-12-12 11:04:23  Модель №3

Для удаления определённой модели лица пользователя необходимо указать идентификатор этой модели:

# howdy -U user remove 3
Это удалит образец лица с названием "Модель №3" для пользователя user
Вы все равно хотите продолжить? [y/N]: y

Удален образец лица 3

Удалить все модели лица пользователя можно, выполнив команду:

# howdy -U user clear
Будут удалены все модели для пользователя user
Вы все равно хотите продолжить? [y/N]: y

Образцы лица удалены

Изменить значение параметра конфигурации howdy можно, выполнив команду howdy set, например:

# howdy -U user set dark_threshold 70
Файл конфигурации обновлен

Данная команда установит для параметра dark_threshold («Порог яркости») значение 70.

Настройка аутентификации

Чтобы Howdy мог аутентифицировать пользователя, необходимо в тот файл конфигурации PAM, где может потребоваться использование Howdy добавить строку:

auth            sufficient      pam_howdy.so

Например, для настройки локальной аутентификации эту строку следует добавить в начало файла /etc/pam.d/system-auth-local-only:

#%PAM-1.0
auth            sufficient      pam_howdy.so
auth            required        pam_tcb.so shadow fork nullok
account         required        pam_tcb.so shadow fork
password        required        pam_passwdqc.so config=/etc/passwdqc.conf
password        required        pam_tcb.so use_authtok shadow fork nullok write_to=tcb
session         required        pam_tcb.so

В данном случае сначала будет проводится проверка распознавания лица, и в случае если лицо не распознано, будет запрошен пароль.

Аутентификация по лицу при входе пользователя в систему:

Аутентификация по лицу

Запрос пароля, если лицо не распознано:

Запрос пароля, если лицо не распознано

Аутентификация по лицу при регистрации пользователя в консоли:

Аутентификация по лицу при регистрации пользователя в консоли

Если для пользователя не созданы модели, будет сразу запрошен пароль.

Ограничение прав пользователей

По умолчанию при сохранении настроек howdy в модуле «Распознавание лица» запрашивается пароль администратора, а при создании и удалении модели — пароль пользователя (см. /usr/share/polkit-1/actions/org.kde.kcontrol.kcmhowdy.policy). Изменить это поведение можно при помощи средств polkit.

Например, чтобы запретить пользователю test удалять модели в модуле «Распознавание лица» можно создать файл /etc/polkit-1/rules.d/60-kcmhowdy.rules со следующим содержимым:

polkit.addRule(function (action, subject) {
  if (action.id == "org.kde.kcontrol.kcmhowdy.removefacemodel" &&
        subject.user == test) {
    return polkit.Result.NO;
  }
})

Ссылки