diy:projets:facedetection
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
diy:projets:facedetection [2018/05/24 09:10] – spujol | diy:projets:facedetection [2018/06/01 11:02] (Version actuelle) – [Explication du programme] spujol | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Présentation du projet ====== | ====== Présentation du projet ====== | ||
- | Le but de se projet est de pouvoir détecter les visages sur des photos ou vidéos. | + | Le but de ce projet est de pouvoir détecter les visages sur des photos ou vidéos. |
====== Outils requis et Librairies Python====== | ====== Outils requis et Librairies Python====== | ||
Ligne 7: | Ligne 7: | ||
Ce programme se base sur [[https:// | Ce programme se base sur [[https:// | ||
- | Nous allons aussi utiliser différentes librairies de python | + | Nous allons aussi utiliser différentes librairies de python |
<code python> | <code python> | ||
Ligne 19: | Ligne 19: | ||
====== Explication du programme====== | ====== Explication du programme====== | ||
- | La première fonction à faire est la plus importante, il s'agit de la fonction qui va permettre de détecter les visages sur l' | + | La première fonction à faire est la plus importante, il s'agit de la fonction qui va permettre de détecter les visages sur l' |
<code python> | <code python> | ||
def detectionVisage(img): | def detectionVisage(img): | ||
cascade = cv2.CascadeClassifier("/ | cascade = cv2.CascadeClassifier("/ | ||
- | | + | |
- | visage = cascade.detectMultiScale(imgHSV, 1.2, 4, | + | #La commande ci-dessous permet de détecter les visages |
+ | # | ||
+ | visage = cascade.detectMultiScale(imgGray, 1.2, 4, | ||
if len(visage) == 0: | if len(visage) == 0: | ||
return [],img | return [],img | ||
Ligne 32: | Ligne 34: | ||
</ | </ | ||
+ | La conversion en image de gris permet de faciliter la détection de visage. | ||
+ | Ensuite la fonction suivante, va permettre d' | ||
+ | |||
+ | <code python> | ||
+ | def rect(visage, | ||
+ | for x,y,h,w in visage: | ||
+ | #La commande ci-dessous rajoute le rectangle autour du visage concernés | ||
+ | # | ||
+ | cv2.rectangle(img, | ||
+ | return img | ||
+ | </ | ||
+ | |||
+ | Nous avons donc en notre possession les deux fonctions importantes qui permettent la détection de visages. Il ne nous reste plus qu'a les appliquer à une images ou une vidéo. | ||
+ | |||
+ | Pour une image, il suffit juste d' | ||
+ | |||
+ | <code python> | ||
+ | img = cv2.imread(" | ||
+ | visage, img = detectionVisage(img) | ||
+ | cv2.imwrite(" | ||
+ | </ | ||
+ | |||
+ | Pour une vidéo, il faut appliquer les fonctions de détection à chaque frame de celle-ci et remonter la vidéo avec les images modifiées. | ||
+ | |||
+ | <code python> | ||
+ | vid = cv2.VideoCapture(' | ||
+ | vid.open(' | ||
+ | fourcc = cv2.VideoWriter_fourcc(' | ||
+ | i=1000000 | ||
+ | os.system(' | ||
+ | while vid.isOpened(): | ||
+ | ret,img = vid.read() | ||
+ | if ret == True: | ||
+ | vis,img = detectionVisage(img) | ||
+ | img = rect(vis, | ||
+ | cv2.imwrite(' | ||
+ | i += 1 | ||
+ | else: | ||
+ | break | ||
+ | vid.release() | ||
+ | os.system(' | ||
+ | os.system(" | ||
+ | os.popen(" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Utilisation du Raspberry ====== | ||
+ | |||
+ | Ce programme fonctionne évidemment avec des images et vidéos importées directement d'un raspberry. Pour ce faire, nous avons besoin des scripts Bash ci-dessous permettant la connexion au raspberry. | ||
+ | |||
+ | Pour une image: | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | |||
+ | ip=$1 | ||
+ | cat detectVisImg.sh | ssh pi@$ip sh | ||
+ | rm imgDetectVisage.jpeg | ||
+ | scp pi@$ip: | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | |||
+ | if [ -d "/ | ||
+ | then | ||
+ | cd tempPS | ||
+ | sudo rm *.jpeg | ||
+ | else | ||
+ | mkdir ./tempPS | ||
+ | cd tempPS | ||
+ | fi | ||
+ | raspistill -vf -hf -o imgDetectVisage.jpeg | ||
+ | exit | ||
+ | </ | ||
+ | |||
+ | Pour une vidéo: | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | |||
+ | ip=$1 | ||
+ | cat DetectVisVid.sh | ssh pi@$ip sh | ||
+ | rm vidDetectVisage.avi | ||
+ | scp pi@$ip: | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | |||
+ | if [ -d "/ | ||
+ | then | ||
+ | cd tempPS | ||
+ | sudo rm *.avi | ||
+ | else | ||
+ | mkdir ./tempPS | ||
+ | cd tempPS | ||
+ | fi | ||
+ | raspivid -vf -hf -o vidDetectVisage.avi -t 60000 | ||
+ | exit | ||
+ | </ | ||
+ | |||
+ | Pour appeler un script Bash en python on utilise la commande suivante, qui permet de lire une commande systeme : | ||
+ | |||
+ | <code python> | ||
+ | os.popen(" | ||
+ | </ | ||
diy/projets/facedetection.1527153024.txt.gz · Dernière modification : 2018/05/24 09:10 de spujol