[DOCKER] Extraire des images de visage à partir de vidéos avec ffmpeg et OpenVINO

Essayez avant OpenVINO's interactive_face_detection_demo En coopération, seule l'image du visage est extraite de la vidéo. スクリーンショット 2020-10-03 024809.png

1. Préparation de la vidéo

Il est supposé que le nom du fichier est ʻinput.mp4` et il se trouve dans le dossier de téléchargement de Windows 10.

2. Modifiez la vidéo à 1 ips

interactive_face_detection_demo est une inférence pour toutes les images, il est donc pratique pour raccourcir le temps de traitement et lors de l'extraction avec ffmpeg décrit plus tard. Convertissez input.mp4` en 1 image par seconde.

cd /cygdrive/c/Users/${USER}/Downloads/
ls -l input.mp4

mkdir -p output/
ffmpeg -i input.mp4 -r 1 output/input_r1.mp4 -y

3. Détection de visage avec la démo OpenVINO

Presque le même que celui que j'ai essayé avant, mais j'obtiens la sortie brute avec l'option -r.

echo 'source ${INTEL_OPENVINO_DIR}/bin/setupvars.sh

cd ${INTEL_CVSDK_DIR}/inference_engine/demos/
sed -i "s/*)/interactive_face_detection_demo)/g" CMakeLists.txt
./build_demos.sh

${INTEL_CVSDK_DIR}/deployment_tools/tools/model_downloader/downloader.py \
  --name face-detection-adas-0001 \
  --output_dir /content/model/ \
  --precisions FP32

echo `date`: start detection

/root/omz_demos_build/intel64/Release/interactive_face_detection_demo \
  -i /Downloads/output/input_r1.mp4 \
  -m /content/model/intel/face-detection-adas-0001/FP32/face-detection-adas-0001.xml \
  -no_show \
  -no_wait \
  -async \
  -r > /Downloads/output/raw.txt

echo `date`: end detection' | docker run -v /c/Users/${USER}/Downloads:/Downloads -u root -i --rm openvino/ubuntu18_dev:2020.4

4. Extrait de raw.txt avec ffmpeg

raw.txt


~~
[116,1] element, prob = 0.0198675    (-4,209)-(48,48)
[117,1] element, prob = 0.0198515    (444,146)-(68,68)
[0,1] element, prob = 0.999333    (222,115)-(205,205) WILL BE RENDERED!
[1,1] element, prob = 0.0601832    (405,393)-(94,94)
~~

Comme mentionné ci-dessus, dans raw.txt, les candidats sont affichés par ordre de proximité du visage pour chaque image, et les candidats de type visage (valeur d'évaluation de 0,5 ou plus) sont marqués avec SERA RENDU!.

THRESHOLD=0.9
perl -ne '$i++ if m{^\[0,1\]}; printf "ffmpeg -loglevel error -ss ".($i-1)." -i input_r1.mp4 -vframes 1 -vf crop=$4:$5:$2:$3 %05d.jpg -y\n", ++$j if m{([0-9.]+)\s+\((\d+),(\d+)\)-\((\d+),(\d+)\)} and $1 > '${THRESHOLD} raw.txt > ffmpeg.sh

Puisque le nombre de [0,1] est le nombre d'images, passez-le à l'option -ss plus tard (puisqu'il s'agit d'une vidéo d'une image par seconde, vous pouvez passer le nombre d'images à l'option -ss qui passe le nombre de secondes) .. Seuls ceux avec une valeur d'évaluation faciale élevée (SERA RENDU! Est égal ou supérieur à 0,5, mais comme il s'agit d'un singe, ce qui précède est plus élevé), à partir des coordonnées crop .html # crop) Récupère les paramètres de filtre et affiche la commande ffmpeg (elle semble toujours carrée).

ffmpeg.sh


ffmpeg -loglevel error -ss 32 -i input_r1.mp4 -vframes 1 -vf crop=36:36:109:178 00001.jpg -y
ffmpeg -loglevel error -ss 36 -i input_r1.mp4 -vframes 1 -vf crop=34:34:107:177 00002.jpg -y
ffmpeg -loglevel error -ss 37 -i input_r1.mp4 -vframes 1 -vf crop=32:32:108:178 00003.jpg -y
ffmpeg -loglevel error -ss 39 -i input_r1.mp4 -vframes 1 -vf crop=32:32:109:179 00004.jpg -y
ffmpeg -loglevel error -ss 40 -i input_r1.mp4 -vframes 1 -vf crop=37:37:97:178 00005.jpg -y
ffmpeg -loglevel error -ss 41 -i input_r1.mp4 -vframes 1 -vf crop=34:34:46:176 00006.jpg -y
ffmpeg -loglevel error -ss 44 -i input_r1.mp4 -vframes 1 -vf crop=64:64:552:236 00007.jpg -y

Puisqu'un fichier contenant les commandes ci-dessus est créé,

sh ffmpeg.sh

En l'exécutant dans le shell, chaque image de visage est sortie.

5. Redimensionner au besoin

mogrify -resize 128x128! *.jpg

Il semble pratique d'avoir la même taille avec ImageMagick mogrify.

Recommended Posts

Extraire des images de visage à partir de vidéos avec ffmpeg et OpenVINO
FFmpeg Divisez l'écran et combinez plusieurs vidéos
Comment configurer la vision par ordinateur pour le suivi des images et des vidéos avec TrackingJs
Juste des images d'entrée et de sortie avec Spring MVC
[Débutant] Téléchargez des images et des fichiers avec Spring [Autosuffisant]
Modifiez facilement des vidéos de performance avec ffmpeg en utilisant Ruby
Chargez des images à partir de sites / domaines externes avec Playframework2