Implémentation d'un système de détection de la fatigue du conducteur basé sur des méthodes d'estimation de caractéristiques et de paramètres

Adresse de téléchargement des ressources : https://download.csdn.net/download/sheziqiong/88312655
Adresse de téléchargement des ressources : https://download.csdn.net/download/sheziqiong/88312655

1. Travaux connexes

Lors du salon CES Asia 2018, iFlytek a présenté son système de détection de la fatigue du conducteur. Leur système peut utiliser des méthodes de vision par ordinateur pour obtenir des données de la caméra telles que l'orientation du visage, la position, l'orientation des pupilles, l'ouverture et la fermeture des yeux, la fréquence des clignements, le taux de contraction des pupilles, etc., et utiliser ces données pour calculer l'attention du conducteur en temps réel. degré de concentration. J'ai expérimenté leur système sur le terrain et il était très réactif et précis.

2. Idée générale

Influencé par la DEMO iFlytek, lorsque j'ai réalisé ce rapport final, j'espérais également utiliser cette méthode basée sur la détection de fonctionnalités et le calcul de paramètres. Je pense que cette méthode n'est pas complètement une boîte noire (par rapport aux images d'entraînement du réseau CNN pur), et peut être meilleure en termes d'interprétabilité. De plus, cette méthode peut également détecter et enregistrer d'autres signes physiques. Ces signes physiques Les données ont également un beaucoup de valeur pour le mien.

L'expérience que j'ai menée était divisée en trois étapes :

  • Cette étape d'obtention des points caractéristiques du visage (tels que les yeux, le nez, la bouche et les contours) grâce à la détection des points caractéristiques de l'image
    peut être résolue à l'aide du célèbre dlib (King, 2018). Il existe un modèle bien entraîné : shape_predictor_68_face_landmarks.dat . Grâce à lui, 68 points clés du visage peuvent être obtenus.

  • Prétraitement, évaluation de l'orientation, de la position et des informations d'ouverture et de fermeture des yeux du visage à travers 68 points clés. La
    principale difficulté pour juger de l'orientation et de la position du visage est d'estimer les informations tridimensionnelles du visage. S'il y a trois -informations dimensionnelles, vous pouvez utiliser la fonction OpenCV solvePnP pour calculer l'orientation et la position d'un objet. Cependant, comme les informations de profondeur de la caméra monoculaire sont manquantes, les données 3D ne peuvent pas être véritablement obtenues. Par conséquent, pour comprendre l'orientation du visage d'une personne, il est nécessaire de coopérer avec certaines données statistiques anthropométriques (la distance entre la racine du nez et divers organes du visage).OK. Le calcul de l'ouverture et de la fermeture des yeux est relativement simple, car il existe déjà des données de points caractéristiques, de sorte que la hauteur entre les paupières est calculée et divisée par la largeur entre les coins des yeux. Afin d'augmenter le nombre de points caractéristiques et de réduire la quantité d'informations manquantes, les 68 points caractéristiques sont également soustraits de bout en bout (convertis en déplacements) et inclus dans les caractéristiques.
    Pour les 6 informations de latitude du visage, les 2 informations sur les degrés d'ouverture et de fermeture des yeux et les 68 informations de déplacement de points caractéristiques obtenues à la deuxième étape (chaque point caractéristique est remplacé par deux caractéristiques de déplacement x et y), il y a 144 caractéristiques dans une image, et Entrez dans le réseau neuronal LSTM pour la formation et la prédiction.

  • Détection de la position des points caractéristiques du visage dans les images.
    La détection des points caractéristiques du visage utilise dlib. dlib a deux fonctions clés : dlib.get_frontal_face_detector() et dlib.shape_predictor(predictor_path). Le premier est un algorithme de détection de visage intégré qui utilise la pyramide HOG pour détecter les limites de la zone du visage. Ce dernier est utilisé pour détecter les points caractéristiques dans une zone et générer les coordonnées de ces points caractéristiques. Il nécessite un modèle pré-entraîné (transmis via la méthode du chemin de fichier) pour fonctionner correctement.

En utilisant le modèle pré-entraîné shape_predictor_68_face_landmarks.dat, vous pouvez obtenir les coordonnées des 68 positions de points caractéristiques. Après les avoir connectés, vous pouvez obtenir l'effet comme indiqué sur la figure (le rouge est le résultat de la détection de la pyramide HOG, le bleu est le résultat de shape_predictor, uniquement la même ligne A reliant les points caractéristiques d'un organe).

3. Prétraitez les points caractéristiques pour obtenir les informations en 6 dimensions de l'ouverture et de la fermeture du visage et des yeux.

Lorsqu'elle s'assoupit en conduisant alors qu'elle est fatiguée, le visage de la personne s'affaisse, parfois tremble légèrement et les yeux plissent légèrement. Ceci est très différent de lorsqu’une personne est éveillée, regarde vers l’avant ou légèrement vers le haut et tourne la tête régulièrement. C’est notre compréhension intuitive de la conduite en fatigue. Mettez ces informations dans le réseau LSTM pour la formation et laissez la machine identifier automatiquement ces informations, ce qui peut obtenir de bons résultats. Il est donc important de capturer ces informations à partir d’images.

Parlons d’abord de l’acquisition d’informations en 6 dimensions sur les visages humains. Comme mentionné ci-dessus, la caméra monoculaire ne contient pas d'informations de profondeur et les informations de l'image monoculaire ne peuvent pas estimer la direction du visage (car cela équivaut à projeter des coordonnées 3D sur un plan 2D et ne peut pas être restauré). Pour restaurer approximativement des informations bidimensionnelles en informations tridimensionnelles, certaines informations supplémentaires (ou connaissances préalables) sont nécessaires, telles que la distance moyenne des traits du visage en anthropométrie (Wikipedia, 2018).

Nous faisons ici référence à un article (Lemaignan SG, 2016) et à son implémentation de code (Lemaignan, 2018). Le code combine la distance moyenne entre les traits du visage donnée par OpenCV et Wikipedia pour modéliser le visage humain. Je l'ai modifié en fonction du code de l'auteur afin qu'il puisse prétraiter les captures d'écran vidéo dans l'ensemble de données par lots et générer les données d'informations sur le visage en 6 dimensions dans un tableau. Pour des modifications spécifiques et des méthodes d'exécution de code, veuillez consulter le code source que j'ai soumis.

Utilisez cet algorithme pour traiter par lots toutes les images de l'ensemble de données. Une fois le traitement terminé, une caractéristique tridimensionnelle supplémentaire est obtenue et l'effet est le suivant :

Ensuite, les informations d'ouverture et de fermeture des yeux sont calculées. La distribution des données de 68 points caractéristiques est illustrée dans la figure (Rosebrock, 2017) :

Le degré d'ouverture et de fermeture de l'œil droit peut être obtenu par la formule suivante (il en va de même pour l'œil gauche) :

Les informations en 6 dimensions de la tête et les informations en deux dimensions de l'ouverture et de la fermeture des yeux, un total d'informations en 8 dimensions. Si possible, des informations telles que l'orientation des élèves et le taux de contraction des élèves devraient également être collectées, mais je n'ai pas réussi. Comme mentionné précédemment, seules 8 entités sont extraites d'une image et il peut y avoir beaucoup de perte d'informations. Par conséquent, j'ai traité les 68 points de coordonnées et les ai ajoutés en tant qu'entités. Considérant que les coordonnées elles-mêmes ne sont pas très significatives, mais que le déplacement des coordonnées est plus significatif, j'ai soustrait ces points de coordonnées d'un bout à l'autre et les ai convertis en déplacements. Un déplacement a deux composantes, x et y, ce qui représente donc 136 autres caractéristiques. De cette façon, le prétraitement est terminé. L'extraction d'une image en 144 caractéristiques liées au visage peut masquer de nombreux détails de l'image, tels que l'éclairage, la couleur de la peau, la position de la tête (liée à la hauteur), le battement des rideaux en arrière-plan... (même si des informations utiles peuvent être perdues) . Plus important encore, une image devient 144 nombres, ce qui simplifie grandement les données d'entrée. Les données d'entrée pour chaque image deviennent plus simples, permettant de traiter la relation entre les images (informations de synchronisation) (la quantité de calcul ne sera pas excessive). ).

5. Former le modèle de réseau LSTM et le classer

Je n'ai pas eu beaucoup de contact avec l'apprentissage automatique pendant mes années universitaires, donc cette étape est plutôt une copie sans une compréhension approfondie. Après avoir fait quelques recherches, j'ai découvert les réseaux LSTM, qui peuvent être utilisés pour traiter des informations temporelles. J'ai essayé Tensorflow, mais c'était toujours difficile de démarrer. Plus tard, je suis passé à Keras et j'ai utilisé une API de niveau supérieur et plus facile à comprendre encapsulée par Keras.

L'exigence d'entrée de la couche LSTM de Keras est constituée de données tridimensionnelles : (numéro d'échantillon, numéro de période (pas de temps), vecteur de caractéristiques). Les données prétraitées sont exactement ces données tridimensionnelles, et la plupart des formes sont : (?, 64, 144) .

J'ai essentiellement construit un réseau LSTM en me référant à l'exemple de code dans la documentation Keras (Keras, 2018). Après la couche LSTM, une couche Dense est ajoutée et le modèle est terminé.

Pendant l'entraînement, j'ai exécuté 500 époques et le résultat final était : 78,12 % de précision sur l'ensemble de tests. Et comme les images sont extraites en fonctionnalités, la vitesse de formation est très rapide. L'effet est assez gratifiant.

Adresse de téléchargement des ressources : https://download.csdn.net/download/sheziqiong/88312655
Adresse de téléchargement des ressources : https://download.csdn.net/download/sheziqiong/88312655

Je suppose que tu aimes

Origine blog.csdn.net/newlw/article/details/132752469
conseillé
Classement