


L'interdiction de fumer, c'est bien ! Reconnaissance du tabagisme + reconnaissance du visage
Bonjour à tous.
Aujourd'hui je vais partager avec vous un projet de reconnaissance du tabagisme + reconnaissance faciale. De nombreux lieux publics, sites de production et écoles interdisent de fumer. Il est encore nécessaire de mettre en œuvre une interdiction de fumer et de laisser l'IA identifier automatiquement les comportements liés au tabagisme et identifier qui fume.
Utilisez l'algorithme de détection de cible pour déterminer le comportement tabagique, extrayez le visage du fumeur et utilisez l'algorithme de reconnaissance faciale pour déterminer qui fume. L’idée est relativement simple, mais les détails restent un peu gênants.
Les données de formation et le code source utilisés dans le projet ont été empaquetés. Toujours pareil, obtenez-le dans la section commentaires.
1. Pour détecter les cigarettes
J'ai utilisé 5 000 éléments de données sur le tabagisme étiquetés comme données d'entraînement
et je les ai placés dans le répertoire de l'ensemble de données.
Formez le modèle de détection de cible YOLOv5.
La première étape, copiez data/coco128.yaml dans smoke.yaml et modifiez le répertoire de l'ensemble de données et les informations de configuration de la catégorie
path: ../dataset/smoke # dataset root dir train: images/train# train images (relative to 'path') 128 images val: images/test# val images (relative to 'path') 128 images test:# test images (optional) # Classes names: 0: smoke
La deuxième étape, copiez ./models/yolov5s.yaml dans smoke.yaml, modifiez nc
nc: 1# number of classes
La troisième étape consiste à télécharger le modèle pré-entraîné yolov5s.pt et à le placer dans le répertoire {yolov5 directory}/weights
Exécutez la commande suivante pour entraîner
python ./train.py --data ./data/smoke.yaml --cfg ./models/smoke.yaml --weights ./weights/yolov5s.pt --batch-size 30 --epochs 120 --workers 8 --name smoke --project smoke_s
Une fois la formation terminée, vous peut voir le résultat suivant :
Très bien.
Une fois la formation terminée, la position best.pt peut être trouvée et utilisée plus tard pour la détection des cigarettes.
model = torch.hub.load('../28_people_counting/yolov5', 'custom', './weights/ciga.pt', source='local') results = self.model(img[:, :, ::-1]) pd = results.pandas().xyxy[0] ciga_pd = pd[pd['class'] == 0]
Après avoir pu identifier les cigarettes, il nous reste encore à déterminer si nous fumons actuellement.
Vous pouvez utiliser le cadre de détection de cigarette et le cadre de détection de bouche pour calculer l'IOU afin de déterminer Pour parler franchement, il s'agit de déterminer si les deux cadres se croisent. Si tel est le cas, on considère que vous fumez actuellement.
Cadre de détection de la bouche, utilisant les points clés du visage pour identifier.
2. Reconnaissance faciale
Il existe de nombreux modèles matures pour les algorithmes de reconnaissance faciale. Nous n'avons pas besoin de les former nous-mêmes, nous pouvons simplement ajuster la base de données directement.
J'utilise ici la bibliothèque dlib, qui peut identifier 68 points clés sur un visage et extraire les traits du visage en fonction de ces 68 points clés.
face_detector = dlib.get_frontal_face_detector() face_sp = dlib.shape_predictor('./weights/shape_predictor_68_face_landmarks.dat') dets = face_detector(img, 1) face_list = [] for face in dets: l, t, r, b = face.left(), face.top(), face.right(), face.bottom() face_shape = face_sp(img, face)
face_detector peut détecter les visages et renvoyer le cadre de détection de visage. face_sp est basé sur le cadre de détection de visage et identifie 68 points clés du visage.
À partir de ces 68 points clés, nous pouvons obtenir le cadre de détection buccale pour déterminer si vous fumez.
Enfin, nous espérons toujours utiliser des algorithmes de reconnaissance faciale pour identifier qui fume.
La première étape consiste à extraire les caractéristiques du visage
face_feature_model = dlib.face_recognition_model_v1('./weights/dlib_face_recognition_resnet_model_v1.dat') face_descriptor = face_feature_model.compute_face_descriptor(img, face_shape)
face_descriptorCalculez un vecteur de caractéristiques pour chaque visage en fonction de la position et de la distance entre les 68 points clés du visage. Ce principe est similaire au word2vec que nous avons partagé auparavant ou au mappage de vidéos sur des vecteurs à N dimensions.
La deuxième étape consiste à saisir les visages existants dans la base de données des visages. J'ai préparé 3 comportements tabagiques dans des films et des séries télévisées
Découpez les visages des vidéos, vectorisez-les et écrivez-les dans la base de données des visages (remplacés par des fichiers)
La troisième étape, le comportement tabagique se produit Enfin, nous pouvons recadrer le visage du fumeur, calculer le vecteur du visage, le comparer avec les caractéristiques de la base de données des visages, trouver le visage le plus similaire et renvoyer le nom correspondant
def find_face_name(self, face_feat): """ 人脸识别,计算吸烟者名称 :param face_feat: :return: """ cur_face_feature = np.asarray(face_feat, dtype=np.float64).reshape((1, -1)) # 计算两个向量(两张脸)余弦相似度 distances = np.linalg.norm((cur_face_feature - self.face_feats), axis=1) min_dist_index = np.argmin(distances) min_dist = distances[min_dist_index] if min_dist < 0.3: return self.face_name_list[min_dist_index] else: return '未知'
Il y en a beaucoup d'autres dans ce projet Où cela peut-il être développé, par exemple : la vidéo que j'ai fournie n'a qu'un seul visage, mais il doit y avoir plusieurs visages dans la surveillance réelle. À ce stade, vous pouvez utiliser l'algorithme MOT pour suivre les piétons, puis identifier chaque personne individuellement parce qu'elle fume. Vous pouvez également créer une zone statistique distincte pour enregistrer les comportements tabagiques identifiés et les utiliser comme preuve d'avertissements et de sanctions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide complet pour vérifier la configuration HDFS dans les systèmes CentOS Cet article vous guidera comment vérifier efficacement la configuration et l'état de l'exécution des HDF sur les systèmes CentOS. Les étapes suivantes vous aideront à bien comprendre la configuration et le fonctionnement des HDF. Vérifiez la variable d'environnement Hadoop: Tout d'abord, assurez-vous que la variable d'environnement Hadoop est correctement définie. Dans le terminal, exécutez la commande suivante pour vérifier que Hadoop est installé et configuré correctement: HadoopVersion Check HDFS Fichier de configuration: Le fichier de configuration de base de HDFS est situé dans le répertoire / etc / hadoop / conf / le répertoire, où Core-site.xml et hdfs-site.xml sont cruciaux. utiliser

La commande de fermeture CENTOS est arrêtée et la syntaxe est la fermeture de [options] le temps [informations]. Les options incluent: -H Arrêtez immédiatement le système; -P éteignez l'alimentation après l'arrêt; -r redémarrer; -t temps d'attente. Les temps peuvent être spécifiés comme immédiats (maintenant), minutes (minutes) ou une heure spécifique (HH: mm). Des informations supplémentaires peuvent être affichées dans les messages système.

La politique de sauvegarde et de récupération de GitLab dans le système CentOS afin d'assurer la sécurité et la récupérabilité des données, Gitlab on CentOS fournit une variété de méthodes de sauvegarde. Cet article introduira plusieurs méthodes de sauvegarde courantes, paramètres de configuration et processus de récupération en détail pour vous aider à établir une stratégie complète de sauvegarde et de récupération de GitLab. 1. MANUEL BACKUP Utilisez le Gitlab-RakegitLab: Backup: Créer la commande pour exécuter la sauvegarde manuelle. Cette commande sauvegarde des informations clés telles que le référentiel Gitlab, la base de données, les utilisateurs, les groupes d'utilisateurs, les clés et les autorisations. Le fichier de sauvegarde par défaut est stocké dans le répertoire / var / opt / gitlab / backups. Vous pouvez modifier / etc / gitlab

L'installation de MySQL sur CENTOS implique les étapes suivantes: Ajout de la source MySQL YUM appropriée. Exécutez la commande YUM Install MySQL-Server pour installer le serveur MySQL. Utilisez la commande mysql_secure_installation pour créer des paramètres de sécurité, tels que la définition du mot de passe de l'utilisateur racine. Personnalisez le fichier de configuration MySQL selon les besoins. Écoutez les paramètres MySQL et optimisez les bases de données pour les performances.

Un guide complet pour consulter les journaux GitLab sous Centos System Cet article vous guidera comment afficher divers journaux GitLab dans le système CentOS, y compris les journaux principaux, les journaux d'exception et d'autres journaux connexes. Veuillez noter que le chemin du fichier journal peut varier en fonction de la version Gitlab et de la méthode d'installation. Si le chemin suivant n'existe pas, veuillez vérifier le répertoire d'installation et les fichiers de configuration de GitLab. 1. Afficher le journal GitLab principal Utilisez la commande suivante pour afficher le fichier journal principal de l'application GitLabRails: Commande: sudocat / var / log / gitlab / gitlab-rails / production.log Cette commande affichera le produit

La formation distribuée par Pytorch sur le système CentOS nécessite les étapes suivantes: Installation de Pytorch: La prémisse est que Python et PIP sont installés dans le système CentOS. Selon votre version CUDA, obtenez la commande d'installation appropriée sur le site officiel de Pytorch. Pour la formation du processeur uniquement, vous pouvez utiliser la commande suivante: pipinstalltorchtorchVisionTorChaudio Si vous avez besoin d'une prise en charge du GPU, assurez-vous que la version correspondante de CUDA et CUDNN est installée et utilise la version Pytorch correspondante pour l'installation. Configuration de l'environnement distribué: la formation distribuée nécessite généralement plusieurs machines ou des GPU multiples uniques. Lieu

Activer l'accélération du GPU Pytorch sur le système CentOS nécessite l'installation de versions CUDA, CUDNN et GPU de Pytorch. Les étapes suivantes vous guideront tout au long du processus: CUDA et CUDNN Installation détermineront la compatibilité de la version CUDA: utilisez la commande NVIDIA-SMI pour afficher la version CUDA prise en charge par votre carte graphique NVIDIA. Par exemple, votre carte graphique MX450 peut prendre en charge CUDA11.1 ou plus. Téléchargez et installez Cudatoolkit: visitez le site officiel de Nvidiacudatoolkit et téléchargez et installez la version correspondante selon la version CUDA la plus élevée prise en charge par votre carte graphique. Installez la bibliothèque CUDNN:

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.
