# Loguearse Mediante Reconocimiento Facial en Linux

**Windows Hello** es la aplicación de seguridad encargada del inicio de sesión mediante PIN, contraseña, y desde Windows 10 nos permite utilizar datos biométricos como rostro o huella digital. 

Sin embargo, **no hay distribuciones de Linux **que actualmente tengan incluida esta función. Para instalar reconocimiento facial, lo cual recomiendo en cuestiones de comodidad, debemos utilizar **Howdy**.

Howdy provee una autenticación del tipo Windows Hello mediante la **emisión de ondas infrarrojas**, y se encuentra disponible en Debian/Ubuntu, Arch Linux, Fedora y OpenSUSE.

En esta guía realizaremos la instalación y configuración en Ubuntu 20.04. De requerirse otra distro, se puede consultar el repositorio oficial de Howdy https://github.com/boltgolt/howdy. 

## Instalación en Ubuntu

```sh
sudo add-apt-repository ppa:boltgolt/howdy
sudo apt update
sudo apt install howdy
```

Durante la instalación, exactamente al 44% de la misma, se requiere al usuario elegir el algoritmo de inteligencia artificial a usar. Si posees un emisor infrarrojo en tu laptop, puedes optar por un reconocimiento rápido con la opción ‘f’. 

## Configuración

Lo primero que debemos hacer es elegir qué cámara queremos emplear. Si estamos en una laptop, por razones de seguridad, recomiendo elegir el emisor infrarrojo. Para conocer la ruta de las cámaras disponibles utilizamos el comando

```sh
ls /dev | grep “video”
video0
video1
```

No te asustes si dispones de una única cámara web y aparecen dos en lista, ya que el par corresponde al dispositivo y a metadata que se le provee al kernel de Linux. Por ejemplo, en las laptops es normal que ```video0``` y ```video2``` corresponden a la cámara web y al emisor infrarrojo respectivamente, mientras que ```video1``` y ```video3``` a sus metadatos correspondientes.

```sh
sudo howdy config
```

y en la opción ```device_path``` utilizamos

```sh
device_path = /dev/video2
```

Una vez guardado el archivo, si no estamos seguros de que cámara estamos utilizando, podemos realizar un test utilizando howdy

```sh
sudo howdy test
```

Adicionalmente, se recomienda configurar para mayor discreción y seguridad, no advertir al usuario:

```sh
detection_notice = false
no_confirmation = true
```

En ordenadores con procesamiento de video externo tales como equipos *gamers* o *workstations* podemos habilitar la opción, ```use_cnn``` el cual funciona mediante GPU y provee un reconocimiento mucho más preciso que HOG.

## Agregar Modelos (Rostros) 

Para agregar rostros debemos utilizar el comando

```sh
$ sudo howdy add
Adding face model for the user usuario1
Enter a label for this new model [Model #1] (max 24 characters): _
```

En mi caso tengo varios modelos, de izquierda, derecha, de frente, con lentes, con gorro, y podemos agregar diferentes personas si es necesario.

## Desactivar Howdy Para No Malgastar la Batería

Además de utilizar un algoritmo de inteligencia artificial basado en python, cada vez que queremos utilizar el super usuario (sudo) el dispositivo encenderá la cámara y emite ondas infrarrojas.

El CLI de Howdy permite habilitar o deshabilitar mediante el comando

```sh
sudo howdy disable 0 # ENABLE
sudo howdy disable 1 # DISABLE
```

Debido al uso de procesador y gasto de batería que esto conlleva, podemos crear un pequeño script usando el CLI de upower. Para obtener la ruta de la batería:

```sh
upower -e
```

Podemos ver la información de la batería mediante

```sh
upower -i /org/freedesktop/upower/devices/battery_BAT1
```

u opcionalmente

```sh
upower - i `upower -e | grep ‘BAT’`
```

Cuando la batería está desconectada, se encuentra en estado ‘descargando’.

```sh
upower -i /org/freedesktop/upower/devices/battery_BAT1 | grep “state 
```

Finalmente, podemos hacer el siguiente script para desactivar Howdy cuando nuestro dispositivo bootea y no está conectado a la alimentación.

```sh
#!/bin/bash

state=`upower -i /org/freedesktop/upower/devices/battery_BAT1 | grep “state”`
if  [[  $state==*”discharging”*  ]]
then
    sudo howdy disable 1
else
    sudo howdy disable 0
fi
```

Para que el script se ejecute automáticamente podemos agregar 

```sh
start on startup
task
exec /ruta/del/script/creado
```

en el archivo ```conf``` de ```/etc/init```







