[DOCKER] Extrahieren Sie mit ffmpeg und OpenVINO Gesichtsbilder aus Videos

] In Zusammenarbeit wird nur das Gesichtsbild aus dem Video extrahiert. スクリーンショット 2020-10-03 024809.png

1. Vorbereitung des Videos

Es wird davon ausgegangen, dass der Dateiname "input.mp4" lautet und sich im Download-Ordner von Windows 10 befindet.

2. Ändern Sie das Video auf 1 fps

active_face_detection_demo ist eine Inferenz für alle Frames, daher ist es praktisch, die Verarbeitungszeit zu verkürzen und später mit ffmpeg zu extrahieren. Konvertieren Sie input.mp4` in 1 Bild pro Sekunde.

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. Gesichtserkennung mit OpenVINO-Demo

Fast das gleiche wie das, was ich zuvor versucht habe, aber ich erhalte die Rohausgabe mit der 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. Extrahieren Sie mit ffmpeg aus raw.txt

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)
~~

Wie oben erwähnt, werden in raw.txt Kandidaten für jeden Frame in der Reihenfolge der Nähe zum Gesicht ausgegeben, und gesichtsähnliche Kandidaten (Bewertungswert von 0,5 oder mehr) sind mit "WIRD RENDERED!" Markiert.

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

Da die Anzahl von "[0,1]" die Anzahl der Bilder ist, übergeben Sie sie später an die Option "-ss" (da es sich um ein Video mit 1 Bild pro Sekunde handelt, können Sie die Anzahl der Bilder an die Option "-ss" übergeben, die die Anzahl der Sekunden überschreitet). .. Nur diejenigen mit einem hohen Gesichtsbewertungswert (WIRD GELIEFERT! Ist 0,5 oder mehr, aber da es sich um einen Affen handelt, ist der oben genannte Wert höher) aus den Koordinaten Ernte .html # crop) Holen Sie sich die Filterparameter und drucken Sie den Befehl ffmpeg (er scheint immer quadratisch zu sein).

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

Da eine Datei mit den oben genannten Befehlen erstellt wird,

sh ffmpeg.sh

Durch Ausführen in der Shell wird jedes Gesichtsbild ausgegeben.

5. Ändern Sie die Größe nach Bedarf

mogrify -resize 128x128! *.jpg

Es scheint praktisch, mit ImageMagick mogrify dieselbe Größe zu haben.

Recommended Posts

Extrahieren Sie mit ffmpeg und OpenVINO Gesichtsbilder aus Videos
FFmpeg Teilen Sie den Bildschirm und kombinieren Sie mehrere Videos
So richten Sie Computer Vision für die Verfolgung von Bildern und Videos mit TrackingJs ein
Geben Sie einfach Bilder mit Spring MVC ein und geben Sie sie aus
[Anfänger] Laden Sie Bilder und Dateien mit Spring hoch [Autark]
Bearbeiten Sie Performance-Videos einfach mit ffmpeg mit Ruby
Laden Sie Bilder von externen Sites / Domains mit Playframework2