diff --git a/README.md b/README.md index 1e0a058..46c5fe7 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,12 @@ pip install requirements.txt ``` ## Get Started To test the GUI you can download our example use case videos from googledrive:
-As well as the respective processed ``.dat`` files which include all the analyses. -Run [main.py](main.py) and import the video file you would like to analyze. +As well as the respective processed ``.dat`` files which include all the analyses.
+You can then run [main.py](main.py) and import the video file you would like to analyze. + ## Processing - - +If you would like to analyze your own 360° video you can find the processing pipeline at [processing/](processing). +Please note the processing pipeline requires a GPU. ## Citation Please cite this paper if you use ConAn or parts of this publication in your research: diff --git a/exampledata/combine.py b/exampledata/combine.py new file mode 100644 index 0000000..4168d52 --- /dev/null +++ b/exampledata/combine.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +import pickle as pkl + + +def main(): + data = dict() + with open('G2_VID4_BodyMovement.pkl', 'rb') as handle: + data["BodyMovement"] = pkl.load(handle) + with open('G2_VID4_HeadPose.pkl', 'rb') as handle: + data["HeadPose"] = pkl.load(handle) + with open('G2_VID4_JAActivityUnits_V2.pkl', 'rb') as handle: + data['ActivityUnits'] = pkl.load(handle) + with open('G2_VID4_RTGene.pkl', 'rb') as handle: + data['RTGene'] = pkl.load(handle) + with open("G2_VID4_speakDiar.pkl", 'rb') as handle: + data["Speaker"] = pkl.load(handle) + data["originalVideoResolution"] = (5760, 2880) + with open('G2_VID4.dat', 'wb') as handle: + pkl.dump(data, handle, protocol=pkl.HIGHEST_PROTOCOL) + + +if __name__ == '__main__': + main() diff --git a/processing/ConAn_RunProcessing.ipynb b/processing/ConAn_RunProcessing.ipynb new file mode 100644 index 0000000..05e214c --- /dev/null +++ b/processing/ConAn_RunProcessing.ipynb @@ -0,0 +1,1155 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "import sys\n", + "import time " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Select video file " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'./../temp/ShowCase_1_frames'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "VIDEO = './../exampledata/ShowCase_1.mp4'\n", + "assert os.path.exists(VIDEO), 'Video path not recognized: no such file or directory'\n", + "\n", + "VIDEOOUT = VIDEO.split(\"/\")[-1].split(\".\")[0]\n", + "ROOT = \"/\".join(VIDEO.split(\"/\")[:-1]) + \"/\"\n", + "TMP_DIR = \"/\".join(VIDEO.split(\"/\")[:-2]) + \"/temp/\"\n", + "\n", + "if not(os.path.exists(TMP_DIR)):\n", + " os.mkdir(TMP_DIR)\n", + "\n", + "path = \"%s%s_frames\" % (TMP_DIR, VIDEOOUT)\n", + "if not(os.path.exists(path)):\n", + " os.mkdir(path)\n", + "path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Extract all video frames with ffmpeg\n", + "ffmpeg needs to be installed locally see [https://www.wikihow.com/Install-FFmpeg-on-Windows](https://www.wikihow.com/Install-FFmpeg-on-Windows)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "./../temp/ShowCase_1_frames/frame%04d.jpg\n", + "Wall time: 4min 21s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ffmpeg version 2021-10-11-git-90a0da9f14-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers\n", + " built with gcc 10.3.0 (Rev5, Built by MSYS2 project)\n", + " configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libglslang --enable-vulkan --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint\n", + " libavutil 57. 7.100 / 57. 7.100\n", + " libavcodec 59. 12.100 / 59. 12.100\n", + " libavformat 59. 6.100 / 59. 6.100\n", + " libavdevice 59. 0.101 / 59. 0.101\n", + " libavfilter 8. 12.100 / 8. 12.100\n", + " libswscale 6. 1.100 / 6. 1.100\n", + " libswresample 4. 0.100 / 4. 0.100\n", + " libpostproc 56. 0.100 / 56. 0.100\n", + "Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './../exampledata/ShowCase_1.mp4':\n", + " Metadata:\n", + " major_brand : isom\n", + " minor_version : 512\n", + " compatible_brands: isomiso2avc1mp41\n", + " creation_time : 2020-09-01T12:52:30.000000Z\n", + " encoder : Lavf58.13.101\n", + " Duration: 00:03:24.71, start: 0.000000, bitrate: 199228 kb/s\n", + " Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 5760x2880, 199098 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)\n", + " Metadata:\n", + " creation_time : 2020-09-01T12:52:30.000000Z\n", + " handler_name : VideoHandler\n", + " vendor_id : [0][0][0][0]\n", + " Side data:\n", + " stereo3d: 2D\n", + " spherical: equirectangular (0.000000/0.000000/0.000000) \n", + " Stream #0:1[0x2](und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)\n", + " Metadata:\n", + " creation_time : 2020-09-01T12:52:30.000000Z\n", + " handler_name : SoundHandler\n", + " vendor_id : [0][0][0][0]\n", + "Stream mapping:\n", + " Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))\n", + "Press [q] to stop, [?] for help\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e798ea500] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e799affc0] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79a55cc0] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79afb680] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79ba1100] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79c83a80] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79d18f00] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79dae380] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79e4ee80] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79ee4300] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e79fb7d00] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e7a052180] deprecated pixel format used, make sure you did set range correctly\n", + "[swscaler @ 0000026e79899d80] [swscaler @ 0000026e7a108c00] deprecated pixel format used, make sure you did set range correctly\n", + "Output #0, image2, to './../temp/ShowCase_1_frames/frame%04d.jpg':\n", + " Metadata:\n", + " major_brand : isom\n", + " minor_version : 512\n", + " compatible_brands: isomiso2avc1mp41\n", + " encoder : Lavf59.6.100\n", + " Stream #0:0(und): Video: mjpeg, yuvj420p(pc, progressive), 5760x2880, q=2-31, 200 kb/s, 29.97 fps, 29.97 tbn (default)\n", + " Metadata:\n", + " creation_time : 2020-09-01T12:52:30.000000Z\n", + " handler_name : VideoHandler\n", + " vendor_id : [0][0][0][0]\n", + " encoder : Lavc59.12.100 mjpeg\n", + " Side data:\n", + " cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A\n", + " stereo3d: 2D\n", + " spherical: equirectangular (0.000000/0.000000/0.000000) \n", + "frame= 1 fps=0.0 q=9.6 size=N/A time=00:00:00.03 bitrate=N/A speed=0.0554x \n", + "frame= 9 fps=8.1 q=24.6 size=N/A time=00:00:00.30 bitrate=N/A speed=0.269x \n", + "frame= 20 fps= 12 q=24.8 size=N/A time=00:00:00.66 bitrate=N/A speed=0.412x \n", + "frame= 33 fps= 15 q=24.8 size=N/A time=00:00:01.10 bitrate=N/A speed=0.512x \n", + "frame= 46 fps= 17 q=24.8 size=N/A time=00:00:01.53 bitrate=N/A speed=0.577x \n", + "frame= 59 fps= 19 q=24.8 size=N/A time=00:00:01.96 bitrate=N/A speed=0.618x \n", + "frame= 72 fps= 19 q=24.8 size=N/A time=00:00:02.40 bitrate=N/A speed=0.648x \n", + "frame= 85 fps= 20 q=24.8 size=N/A time=00:00:02.83 bitrate=N/A speed=0.668x \n", + "frame= 98 fps= 21 q=24.8 size=N/A time=00:00:03.26 bitrate=N/A speed=0.684x \n", + "frame= 111 fps= 21 q=24.8 size=N/A time=00:00:03.70 bitrate=N/A speed=0.698x \n", + "frame= 124 fps= 21 q=24.8 size=N/A time=00:00:04.13 bitrate=N/A speed=0.709x \n", + "frame= 137 fps= 21 q=24.8 size=N/A time=00:00:04.57 bitrate=N/A speed=0.717x \n", + "frame= 150 fps= 22 q=24.8 size=N/A time=00:00:05.00 bitrate=N/A speed=0.724x \n", + "frame= 162 fps= 22 q=24.8 size=N/A time=00:00:05.40 bitrate=N/A speed=0.728x \n", + "frame= 174 fps= 22 q=24.8 size=N/A time=00:00:05.80 bitrate=N/A speed=0.732x \n", + "frame= 187 fps= 22 q=24.8 size=N/A time=00:00:06.23 bitrate=N/A speed=0.737x \n", + "frame= 199 fps= 22 q=24.8 size=N/A time=00:00:06.63 bitrate=N/A speed=0.74x \n", + "frame= 212 fps= 22 q=24.8 size=N/A time=00:00:07.07 bitrate=N/A speed=0.743x \n", + "frame= 225 fps= 22 q=24.8 size=N/A time=00:00:07.50 bitrate=N/A speed=0.747x \n", + "frame= 238 fps= 23 q=24.8 size=N/A time=00:00:07.94 bitrate=N/A speed=0.751x \n", + "frame= 251 fps= 23 q=24.8 size=N/A time=00:00:08.37 bitrate=N/A speed=0.754x \n", + "frame= 264 fps= 23 q=24.8 size=N/A time=00:00:08.80 bitrate=N/A speed=0.756x \n", + "frame= 276 fps= 23 q=24.8 size=N/A time=00:00:09.20 bitrate=N/A speed=0.758x \n", + "frame= 288 fps= 23 q=24.8 size=N/A time=00:00:09.60 bitrate=N/A speed=0.758x \n", + "frame= 300 fps= 23 q=24.8 size=N/A time=00:00:10.01 bitrate=N/A speed=0.76x \n", + "frame= 312 fps= 23 q=24.8 size=N/A time=00:00:10.41 bitrate=N/A speed=0.761x \n", + "frame= 325 fps= 23 q=24.8 size=N/A time=00:00:10.84 bitrate=N/A speed=0.763x \n", + "frame= 337 fps= 23 q=24.8 size=N/A time=00:00:11.24 bitrate=N/A speed=0.762x \n", + "frame= 350 fps= 23 q=24.8 size=N/A time=00:00:11.67 bitrate=N/A speed=0.764x \n", + "frame= 362 fps= 23 q=24.8 size=N/A time=00:00:12.07 bitrate=N/A speed=0.765x \n", + "frame= 374 fps= 23 q=24.8 size=N/A time=00:00:12.47 bitrate=N/A speed=0.765x \n", + "frame= 386 fps= 23 q=24.8 size=N/A time=00:00:12.87 bitrate=N/A speed=0.766x \n", + "frame= 398 fps= 23 q=24.8 size=N/A time=00:00:13.27 bitrate=N/A speed=0.766x \n", + "frame= 410 fps= 23 q=24.8 size=N/A time=00:00:13.68 bitrate=N/A speed=0.767x \n", + "frame= 422 fps= 23 q=24.8 size=N/A time=00:00:14.08 bitrate=N/A speed=0.767x \n", + "frame= 434 fps= 23 q=24.8 size=N/A time=00:00:14.48 bitrate=N/A speed=0.768x \n", + "frame= 447 fps= 23 q=24.8 size=N/A time=00:00:14.91 bitrate=N/A speed=0.769x \n", + "frame= 459 fps= 23 q=24.8 size=N/A time=00:00:15.31 bitrate=N/A speed=0.77x \n", + "frame= 471 fps= 23 q=24.8 size=N/A time=00:00:15.71 bitrate=N/A speed=0.77x \n", + "frame= 483 fps= 23 q=24.8 size=N/A time=00:00:16.11 bitrate=N/A speed=0.77x \n", + "frame= 495 fps= 23 q=24.8 size=N/A time=00:00:16.51 bitrate=N/A speed=0.77x \n", + "frame= 507 fps= 23 q=24.8 size=N/A time=00:00:16.91 bitrate=N/A speed=0.771x \n", + "frame= 520 fps= 23 q=24.8 size=N/A time=00:00:17.35 bitrate=N/A speed=0.772x \n", + "frame= 532 fps= 23 q=24.8 size=N/A time=00:00:17.75 bitrate=N/A speed=0.771x \n", + "frame= 544 fps= 23 q=24.8 size=N/A time=00:00:18.15 bitrate=N/A speed=0.772x \n", + "frame= 557 fps= 23 q=24.8 size=N/A time=00:00:18.58 bitrate=N/A speed=0.772x \n", + "frame= 569 fps= 23 q=24.8 size=N/A time=00:00:18.98 bitrate=N/A speed=0.772x \n", + "frame= 582 fps= 23 q=24.8 size=N/A time=00:00:19.41 bitrate=N/A speed=0.773x \n", + "frame= 594 fps= 23 q=24.8 size=N/A time=00:00:19.81 bitrate=N/A speed=0.773x \n", + "frame= 606 fps= 23 q=24.8 size=N/A time=00:00:20.22 bitrate=N/A speed=0.773x \n", + "frame= 619 fps= 23 q=24.8 size=N/A time=00:00:20.65 bitrate=N/A speed=0.774x \n", + "frame= 632 fps= 23 q=24.8 size=N/A time=00:00:21.08 bitrate=N/A speed=0.774x \n", + "frame= 644 fps= 23 q=24.8 size=N/A time=00:00:21.48 bitrate=N/A speed=0.775x \n", + "frame= 657 fps= 23 q=24.8 size=N/A time=00:00:21.92 bitrate=N/A speed=0.775x \n", + "frame= 670 fps= 23 q=24.8 size=N/A time=00:00:22.35 bitrate=N/A speed=0.776x \n", + "frame= 683 fps= 23 q=24.8 size=N/A time=00:00:22.78 bitrate=N/A speed=0.776x \n", + "frame= 695 fps= 23 q=24.8 size=N/A time=00:00:23.18 bitrate=N/A speed=0.777x \n", + "frame= 707 fps= 23 q=24.8 size=N/A time=00:00:23.59 bitrate=N/A speed=0.777x \n", + "frame= 720 fps= 23 q=24.8 size=N/A time=00:00:24.02 bitrate=N/A speed=0.777x \n", + "frame= 733 fps= 23 q=24.8 size=N/A time=00:00:24.45 bitrate=N/A speed=0.778x \n", + "frame= 746 fps= 23 q=24.8 size=N/A time=00:00:24.89 bitrate=N/A speed=0.778x \n", + "frame= 758 fps= 23 q=24.8 size=N/A time=00:00:25.29 bitrate=N/A speed=0.779x \n", + "frame= 771 fps= 23 q=24.8 size=N/A time=00:00:25.72 bitrate=N/A speed=0.779x \n", + "frame= 783 fps= 23 q=24.8 size=N/A time=00:00:26.12 bitrate=N/A speed=0.779x \n", + "frame= 796 fps= 23 q=24.8 size=N/A time=00:00:26.55 bitrate=N/A speed=0.78x \n", + "frame= 808 fps= 23 q=24.8 size=N/A time=00:00:26.96 bitrate=N/A speed=0.78x \n", + "frame= 820 fps= 23 q=24.8 size=N/A time=00:00:27.36 bitrate=N/A speed=0.78x \n", + "frame= 832 fps= 23 q=24.8 size=N/A time=00:00:27.76 bitrate=N/A speed=0.78x \n", + "frame= 844 fps= 23 q=24.8 size=N/A time=00:00:28.16 bitrate=N/A speed=0.78x \n", + "frame= 857 fps= 23 q=24.8 size=N/A time=00:00:28.59 bitrate=N/A speed=0.78x \n", + "frame= 870 fps= 23 q=24.8 size=N/A time=00:00:29.02 bitrate=N/A speed=0.781x \n", + "frame= 882 fps= 23 q=24.8 size=N/A time=00:00:29.42 bitrate=N/A speed=0.781x \n", + "frame= 894 fps= 23 q=24.8 size=N/A time=00:00:29.82 bitrate=N/A speed=0.781x \n", + "frame= 906 fps= 23 q=24.8 size=N/A time=00:00:30.23 bitrate=N/A speed=0.781x \n", + "frame= 919 fps= 23 q=24.8 size=N/A time=00:00:30.66 bitrate=N/A speed=0.781x \n", + "frame= 931 fps= 23 q=24.8 size=N/A time=00:00:31.06 bitrate=N/A speed=0.782x \n", + "frame= 944 fps= 23 q=24.8 size=N/A time=00:00:31.49 bitrate=N/A speed=0.782x \n", + "frame= 956 fps= 23 q=24.8 size=N/A time=00:00:31.89 bitrate=N/A speed=0.782x \n", + "frame= 968 fps= 23 q=24.8 size=N/A time=00:00:32.29 bitrate=N/A speed=0.782x \n", + "frame= 980 fps= 23 q=24.8 size=N/A time=00:00:32.69 bitrate=N/A speed=0.781x \n", + "frame= 992 fps= 23 q=24.8 size=N/A time=00:00:33.09 bitrate=N/A speed=0.781x \n", + "frame= 1004 fps= 23 q=24.8 size=N/A time=00:00:33.50 bitrate=N/A speed=0.78x \n", + "frame= 1016 fps= 23 q=24.8 size=N/A time=00:00:33.90 bitrate=N/A speed=0.78x \n", + "frame= 1028 fps= 23 q=24.8 size=N/A time=00:00:34.30 bitrate=N/A speed=0.78x \n", + "frame= 1041 fps= 23 q=24.8 size=N/A time=00:00:34.73 bitrate=N/A speed=0.78x \n", + "frame= 1054 fps= 23 q=24.8 size=N/A time=00:00:35.16 bitrate=N/A speed=0.781x \n", + "frame= 1067 fps= 23 q=24.8 size=N/A time=00:00:35.60 bitrate=N/A speed=0.781x \n", + "frame= 1079 fps= 23 q=24.8 size=N/A time=00:00:36.00 bitrate=N/A speed=0.781x \n", + "frame= 1091 fps= 23 q=24.8 size=N/A time=00:00:36.40 bitrate=N/A speed=0.782x \n", + "frame= 1104 fps= 23 q=24.8 size=N/A time=00:00:36.83 bitrate=N/A speed=0.782x \n", + "frame= 1116 fps= 23 q=24.8 size=N/A time=00:00:37.23 bitrate=N/A speed=0.782x \n", + "frame= 1129 fps= 23 q=24.8 size=N/A time=00:00:37.67 bitrate=N/A speed=0.782x \n", + "frame= 1142 fps= 23 q=24.8 size=N/A time=00:00:38.10 bitrate=N/A speed=0.783x \n", + "frame= 1155 fps= 23 q=24.8 size=N/A time=00:00:38.53 bitrate=N/A speed=0.783x \n", + "frame= 1168 fps= 23 q=24.8 size=N/A time=00:00:38.97 bitrate=N/A speed=0.783x \n", + "frame= 1181 fps= 23 q=24.8 size=N/A time=00:00:39.40 bitrate=N/A speed=0.783x \n", + "frame= 1193 fps= 23 q=24.8 size=N/A time=00:00:39.80 bitrate=N/A speed=0.784x \n", + "frame= 1206 fps= 23 q=24.8 size=N/A time=00:00:40.24 bitrate=N/A speed=0.784x \n", + "frame= 1218 fps= 23 q=24.8 size=N/A time=00:00:40.64 bitrate=N/A speed=0.783x \n", + "frame= 1230 fps= 23 q=24.8 size=N/A time=00:00:41.04 bitrate=N/A speed=0.783x \n", + "frame= 1242 fps= 23 q=24.8 size=N/A time=00:00:41.44 bitrate=N/A speed=0.783x \n", + "frame= 1255 fps= 23 q=24.8 size=N/A time=00:00:41.87 bitrate=N/A speed=0.783x \n", + "frame= 1268 fps= 23 q=24.8 size=N/A time=00:00:42.30 bitrate=N/A speed=0.784x \n", + "frame= 1281 fps= 23 q=24.8 size=N/A time=00:00:42.74 bitrate=N/A speed=0.784x \n", + "frame= 1293 fps= 23 q=24.8 size=N/A time=00:00:43.14 bitrate=N/A speed=0.784x \n", + "frame= 1305 fps= 23 q=24.8 size=N/A time=00:00:43.54 bitrate=N/A speed=0.784x \n", + "frame= 1317 fps= 23 q=24.8 size=N/A time=00:00:43.94 bitrate=N/A speed=0.784x \n", + "frame= 1329 fps= 23 q=24.8 size=N/A time=00:00:44.34 bitrate=N/A speed=0.784x \n", + "frame= 1342 fps= 24 q=24.8 size=N/A time=00:00:44.77 bitrate=N/A speed=0.784x \n", + "frame= 1354 fps= 24 q=24.8 size=N/A time=00:00:45.17 bitrate=N/A speed=0.784x \n", + "frame= 1366 fps= 24 q=24.8 size=N/A time=00:00:45.57 bitrate=N/A speed=0.784x \n", + "frame= 1378 fps= 24 q=24.8 size=N/A time=00:00:45.97 bitrate=N/A speed=0.784x \n", + "frame= 1390 fps= 24 q=24.8 size=N/A time=00:00:46.37 bitrate=N/A speed=0.784x \n", + "frame= 1402 fps= 24 q=24.8 size=N/A time=00:00:46.78 bitrate=N/A speed=0.784x \n", + "frame= 1414 fps= 24 q=24.8 size=N/A time=00:00:47.18 bitrate=N/A speed=0.784x \n", + "frame= 1427 fps= 24 q=24.8 size=N/A time=00:00:47.61 bitrate=N/A speed=0.785x \n", + "frame= 1439 fps= 24 q=24.8 size=N/A time=00:00:48.01 bitrate=N/A speed=0.784x \n", + "frame= 1452 fps= 24 q=24.8 size=N/A time=00:00:48.44 bitrate=N/A speed=0.785x \n", + "frame= 1464 fps= 24 q=24.8 size=N/A time=00:00:48.84 bitrate=N/A speed=0.785x \n", + "frame= 1476 fps= 24 q=24.8 size=N/A time=00:00:49.24 bitrate=N/A speed=0.785x \n", + "frame= 1488 fps= 24 q=24.8 size=N/A time=00:00:49.64 bitrate=N/A speed=0.785x \n", + "frame= 1500 fps= 24 q=24.8 size=N/A time=00:00:50.05 bitrate=N/A speed=0.785x \n", + "frame= 1512 fps= 24 q=24.8 size=N/A time=00:00:50.45 bitrate=N/A speed=0.785x \n", + "frame= 1524 fps= 24 q=24.8 size=N/A time=00:00:50.85 bitrate=N/A speed=0.785x \n", + "frame= 1536 fps= 24 q=24.8 size=N/A time=00:00:51.25 bitrate=N/A speed=0.785x \n", + "frame= 1548 fps= 24 q=24.8 size=N/A time=00:00:51.65 bitrate=N/A speed=0.785x \n", + "frame= 1560 fps= 24 q=24.8 size=N/A time=00:00:52.05 bitrate=N/A speed=0.785x \n", + "frame= 1572 fps= 24 q=24.8 size=N/A time=00:00:52.45 bitrate=N/A speed=0.785x \n", + "frame= 1584 fps= 24 q=24.8 size=N/A time=00:00:52.85 bitrate=N/A speed=0.785x \n", + "frame= 1596 fps= 24 q=24.8 size=N/A time=00:00:53.25 bitrate=N/A speed=0.785x \n", + "frame= 1609 fps= 24 q=24.8 size=N/A time=00:00:53.68 bitrate=N/A speed=0.785x \n", + "frame= 1621 fps= 24 q=24.8 size=N/A time=00:00:54.08 bitrate=N/A speed=0.785x \n", + "frame= 1633 fps= 24 q=24.8 size=N/A time=00:00:54.48 bitrate=N/A speed=0.785x \n", + "frame= 1645 fps= 24 q=24.8 size=N/A time=00:00:54.88 bitrate=N/A speed=0.785x \n", + "frame= 1657 fps= 24 q=24.8 size=N/A time=00:00:55.28 bitrate=N/A speed=0.785x \n", + "frame= 1670 fps= 24 q=24.8 size=N/A time=00:00:55.72 bitrate=N/A speed=0.785x \n", + "frame= 1682 fps= 24 q=24.8 size=N/A time=00:00:56.12 bitrate=N/A speed=0.785x \n", + "frame= 1694 fps= 24 q=24.8 size=N/A time=00:00:56.52 bitrate=N/A speed=0.785x \n", + "frame= 1706 fps= 24 q=24.8 size=N/A time=00:00:56.92 bitrate=N/A speed=0.785x \n", + "frame= 1718 fps= 24 q=24.8 size=N/A time=00:00:57.32 bitrate=N/A speed=0.785x \n", + "frame= 1730 fps= 24 q=24.8 size=N/A time=00:00:57.72 bitrate=N/A speed=0.784x \n", + "frame= 1740 fps= 23 q=24.8 size=N/A time=00:00:58.05 bitrate=N/A speed=0.783x \n", + "frame= 1748 fps= 23 q=24.8 size=N/A time=00:00:58.32 bitrate=N/A speed=0.781x \n", + "frame= 1757 fps= 23 q=24.8 size=N/A time=00:00:58.62 bitrate=N/A speed=0.779x \n", + "frame= 1766 fps= 23 q=24.8 size=N/A time=00:00:58.92 bitrate=N/A speed=0.778x \n", + "frame= 1778 fps= 23 q=24.8 size=N/A time=00:00:59.32 bitrate=N/A speed=0.778x \n", + "frame= 1790 fps= 23 q=24.8 size=N/A time=00:00:59.72 bitrate=N/A speed=0.778x \n", + "frame= 1802 fps= 23 q=24.8 size=N/A time=00:01:00.12 bitrate=N/A speed=0.778x \n", + "frame= 1813 fps= 23 q=24.8 size=N/A time=00:01:00.49 bitrate=N/A speed=0.777x \n", + "frame= 1824 fps= 23 q=24.8 size=N/A time=00:01:00.86 bitrate=N/A speed=0.777x \n", + "frame= 1836 fps= 23 q=24.8 size=N/A time=00:01:01.26 bitrate=N/A speed=0.777x \n", + "frame= 1848 fps= 23 q=24.8 size=N/A time=00:01:01.66 bitrate=N/A speed=0.777x \n", + "frame= 1860 fps= 23 q=24.8 size=N/A time=00:01:02.06 bitrate=N/A speed=0.777x \n", + "frame= 1871 fps= 23 q=24.8 size=N/A time=00:01:02.42 bitrate=N/A speed=0.777x \n", + "frame= 1883 fps= 23 q=24.8 size=N/A time=00:01:02.82 bitrate=N/A speed=0.776x \n", + "frame= 1894 fps= 23 q=24.8 size=N/A time=00:01:03.19 bitrate=N/A speed=0.776x \n", + "frame= 1906 fps= 23 q=24.8 size=N/A time=00:01:03.59 bitrate=N/A speed=0.776x \n", + "frame= 1918 fps= 23 q=24.8 size=N/A time=00:01:03.99 bitrate=N/A speed=0.776x \n", + "frame= 1931 fps= 23 q=24.8 size=N/A time=00:01:04.43 bitrate=N/A speed=0.776x \n", + "frame= 1943 fps= 23 q=24.8 size=N/A time=00:01:04.83 bitrate=N/A speed=0.776x \n", + "frame= 1956 fps= 23 q=24.8 size=N/A time=00:01:05.26 bitrate=N/A speed=0.776x \n", + "frame= 1968 fps= 23 q=24.8 size=N/A time=00:01:05.66 bitrate=N/A speed=0.776x \n", + "frame= 1980 fps= 23 q=24.8 size=N/A time=00:01:06.06 bitrate=N/A speed=0.776x \n", + "frame= 1992 fps= 23 q=24.8 size=N/A time=00:01:06.46 bitrate=N/A speed=0.776x \n", + "frame= 2004 fps= 23 q=24.8 size=N/A time=00:01:06.86 bitrate=N/A speed=0.776x \n", + "frame= 2016 fps= 23 q=24.8 size=N/A time=00:01:07.26 bitrate=N/A speed=0.776x \n", + "frame= 2028 fps= 23 q=24.8 size=N/A time=00:01:07.66 bitrate=N/A speed=0.776x \n", + "frame= 2040 fps= 23 q=24.8 size=N/A time=00:01:08.06 bitrate=N/A speed=0.776x \n", + "frame= 2053 fps= 23 q=24.8 size=N/A time=00:01:08.50 bitrate=N/A speed=0.776x \n", + "frame= 2065 fps= 23 q=24.8 size=N/A time=00:01:08.90 bitrate=N/A speed=0.776x \n", + "frame= 2077 fps= 23 q=24.8 size=N/A time=00:01:09.30 bitrate=N/A speed=0.776x \n", + "frame= 2089 fps= 23 q=24.8 size=N/A time=00:01:09.70 bitrate=N/A speed=0.776x \n", + "frame= 2101 fps= 23 q=24.8 size=N/A time=00:01:10.10 bitrate=N/A speed=0.776x \n", + "frame= 2114 fps= 23 q=24.8 size=N/A time=00:01:10.53 bitrate=N/A speed=0.776x \n", + "frame= 2126 fps= 23 q=24.8 size=N/A time=00:01:10.93 bitrate=N/A speed=0.776x \n", + "frame= 2138 fps= 23 q=24.8 size=N/A time=00:01:11.33 bitrate=N/A speed=0.776x \n", + "frame= 2151 fps= 23 q=24.8 size=N/A time=00:01:11.77 bitrate=N/A speed=0.776x \n", + "frame= 2163 fps= 23 q=24.8 size=N/A time=00:01:12.17 bitrate=N/A speed=0.776x \n", + "frame= 2176 fps= 23 q=24.8 size=N/A time=00:01:12.60 bitrate=N/A speed=0.777x \n", + "frame= 2188 fps= 23 q=24.8 size=N/A time=00:01:13.00 bitrate=N/A speed=0.777x \n", + "frame= 2200 fps= 23 q=24.8 size=N/A time=00:01:13.40 bitrate=N/A speed=0.777x \n", + "frame= 2213 fps= 23 q=24.8 size=N/A time=00:01:13.84 bitrate=N/A speed=0.777x \n", + "frame= 2225 fps= 23 q=24.8 size=N/A time=00:01:14.24 bitrate=N/A speed=0.777x \n", + "frame= 2237 fps= 23 q=24.8 size=N/A time=00:01:14.64 bitrate=N/A speed=0.777x \n", + "frame= 2250 fps= 23 q=24.8 size=N/A time=00:01:15.07 bitrate=N/A speed=0.777x \n", + "frame= 2263 fps= 23 q=24.8 size=N/A time=00:01:15.50 bitrate=N/A speed=0.777x \n", + "frame= 2275 fps= 23 q=24.8 size=N/A time=00:01:15.90 bitrate=N/A speed=0.777x \n", + "frame= 2287 fps= 23 q=24.8 size=N/A time=00:01:16.30 bitrate=N/A speed=0.777x \n", + "frame= 2299 fps= 23 q=24.8 size=N/A time=00:01:16.70 bitrate=N/A speed=0.777x \n", + "frame= 2312 fps= 23 q=24.8 size=N/A time=00:01:17.14 bitrate=N/A speed=0.778x \n", + "frame= 2324 fps= 23 q=24.8 size=N/A time=00:01:17.54 bitrate=N/A speed=0.778x \n", + "frame= 2337 fps= 23 q=24.8 size=N/A time=00:01:17.97 bitrate=N/A speed=0.778x \n", + "frame= 2349 fps= 23 q=24.8 size=N/A time=00:01:18.37 bitrate=N/A speed=0.778x \n", + "frame= 2362 fps= 23 q=24.8 size=N/A time=00:01:18.81 bitrate=N/A speed=0.778x \n", + "frame= 2374 fps= 23 q=24.8 size=N/A time=00:01:19.21 bitrate=N/A speed=0.778x \n", + "frame= 2386 fps= 23 q=24.8 size=N/A time=00:01:19.61 bitrate=N/A speed=0.778x \n", + "frame= 2398 fps= 23 q=24.8 size=N/A time=00:01:20.01 bitrate=N/A speed=0.778x \n", + "frame= 2411 fps= 23 q=24.8 size=N/A time=00:01:20.44 bitrate=N/A speed=0.778x \n", + "frame= 2424 fps= 23 q=24.8 size=N/A time=00:01:20.88 bitrate=N/A speed=0.778x \n", + "frame= 2436 fps= 23 q=24.8 size=N/A time=00:01:21.28 bitrate=N/A speed=0.778x \n", + "frame= 2449 fps= 23 q=24.8 size=N/A time=00:01:21.71 bitrate=N/A speed=0.779x \n", + "frame= 2461 fps= 23 q=24.8 size=N/A time=00:01:22.11 bitrate=N/A speed=0.779x \n", + "frame= 2474 fps= 23 q=24.8 size=N/A time=00:01:22.54 bitrate=N/A speed=0.779x \n", + "frame= 2486 fps= 23 q=24.8 size=N/A time=00:01:22.94 bitrate=N/A speed=0.779x \n", + "frame= 2498 fps= 23 q=24.8 size=N/A time=00:01:23.34 bitrate=N/A speed=0.779x \n", + "frame= 2510 fps= 23 q=24.8 size=N/A time=00:01:23.75 bitrate=N/A speed=0.779x \n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "frame= 2523 fps= 23 q=24.8 size=N/A time=00:01:24.18 bitrate=N/A speed=0.779x \n", + "frame= 2536 fps= 23 q=24.8 size=N/A time=00:01:24.61 bitrate=N/A speed=0.779x \n", + "frame= 2548 fps= 23 q=24.8 size=N/A time=00:01:25.01 bitrate=N/A speed=0.779x \n", + "frame= 2560 fps= 23 q=24.8 size=N/A time=00:01:25.41 bitrate=N/A speed=0.779x \n", + "frame= 2572 fps= 23 q=24.8 size=N/A time=00:01:25.81 bitrate=N/A speed=0.779x \n", + "frame= 2585 fps= 23 q=24.8 size=N/A time=00:01:26.25 bitrate=N/A speed=0.779x \n", + "frame= 2598 fps= 23 q=24.8 size=N/A time=00:01:26.68 bitrate=N/A speed=0.78x \n", + "frame= 2610 fps= 23 q=24.8 size=N/A time=00:01:27.08 bitrate=N/A speed=0.78x \n", + "frame= 2623 fps= 23 q=24.8 size=N/A time=00:01:27.52 bitrate=N/A speed=0.78x \n", + "frame= 2635 fps= 23 q=24.8 size=N/A time=00:01:27.92 bitrate=N/A speed=0.78x \n", + "frame= 2648 fps= 23 q=24.8 size=N/A time=00:01:28.35 bitrate=N/A speed=0.78x \n", + "frame= 2660 fps= 23 q=24.8 size=N/A time=00:01:28.75 bitrate=N/A speed=0.78x \n", + "frame= 2673 fps= 23 q=24.8 size=N/A time=00:01:29.18 bitrate=N/A speed=0.78x \n", + "frame= 2685 fps= 23 q=24.8 size=N/A time=00:01:29.58 bitrate=N/A speed=0.78x \n", + "frame= 2697 fps= 23 q=24.8 size=N/A time=00:01:29.98 bitrate=N/A speed=0.78x \n", + "frame= 2709 fps= 23 q=24.8 size=N/A time=00:01:30.39 bitrate=N/A speed=0.78x \n", + "frame= 2721 fps= 23 q=24.8 size=N/A time=00:01:30.79 bitrate=N/A speed=0.78x \n", + "frame= 2733 fps= 23 q=24.8 size=N/A time=00:01:31.19 bitrate=N/A speed=0.78x \n", + "frame= 2745 fps= 23 q=24.8 size=N/A time=00:01:31.59 bitrate=N/A speed=0.78x \n", + "frame= 2757 fps= 23 q=24.8 size=N/A time=00:01:31.99 bitrate=N/A speed=0.78x \n", + "frame= 2770 fps= 23 q=24.8 size=N/A time=00:01:32.42 bitrate=N/A speed=0.78x \n", + "frame= 2783 fps= 23 q=24.8 size=N/A time=00:01:32.85 bitrate=N/A speed=0.78x \n", + "frame= 2795 fps= 23 q=24.8 size=N/A time=00:01:33.25 bitrate=N/A speed=0.78x \n", + "frame= 2808 fps= 23 q=24.8 size=N/A time=00:01:33.69 bitrate=N/A speed=0.781x \n", + "frame= 2821 fps= 23 q=24.8 size=N/A time=00:01:34.12 bitrate=N/A speed=0.781x \n", + "frame= 2834 fps= 23 q=24.8 size=N/A time=00:01:34.56 bitrate=N/A speed=0.781x \n", + "frame= 2847 fps= 23 q=24.8 size=N/A time=00:01:34.99 bitrate=N/A speed=0.781x \n", + "frame= 2859 fps= 23 q=24.8 size=N/A time=00:01:35.39 bitrate=N/A speed=0.781x \n", + "frame= 2871 fps= 23 q=24.8 size=N/A time=00:01:35.79 bitrate=N/A speed=0.781x \n", + "frame= 2884 fps= 23 q=24.8 size=N/A time=00:01:36.22 bitrate=N/A speed=0.781x \n", + "frame= 2897 fps= 23 q=24.8 size=N/A time=00:01:36.66 bitrate=N/A speed=0.781x \n", + "frame= 2909 fps= 23 q=24.8 size=N/A time=00:01:37.06 bitrate=N/A speed=0.781x \n", + "frame= 2922 fps= 23 q=24.8 size=N/A time=00:01:37.49 bitrate=N/A speed=0.781x \n", + "frame= 2934 fps= 23 q=24.8 size=N/A time=00:01:37.89 bitrate=N/A speed=0.781x \n", + "frame= 2947 fps= 23 q=24.8 size=N/A time=00:01:38.33 bitrate=N/A speed=0.782x \n", + "frame= 2960 fps= 23 q=24.8 size=N/A time=00:01:38.76 bitrate=N/A speed=0.782x \n", + "frame= 2972 fps= 23 q=24.8 size=N/A time=00:01:39.16 bitrate=N/A speed=0.782x \n", + "frame= 2985 fps= 23 q=24.8 size=N/A time=00:01:39.59 bitrate=N/A speed=0.782x \n", + "frame= 2998 fps= 23 q=24.8 size=N/A time=00:01:40.03 bitrate=N/A speed=0.782x \n", + "frame= 3011 fps= 23 q=24.8 size=N/A time=00:01:40.46 bitrate=N/A speed=0.782x \n", + "frame= 3023 fps= 23 q=24.8 size=N/A time=00:01:40.86 bitrate=N/A speed=0.782x \n", + "frame= 3035 fps= 23 q=24.8 size=N/A time=00:01:41.26 bitrate=N/A speed=0.782x \n", + "frame= 3047 fps= 23 q=24.8 size=N/A time=00:01:41.66 bitrate=N/A speed=0.782x \n", + "frame= 3060 fps= 23 q=24.8 size=N/A time=00:01:42.10 bitrate=N/A speed=0.782x \n", + "frame= 3073 fps= 23 q=24.8 size=N/A time=00:01:42.53 bitrate=N/A speed=0.782x \n", + "frame= 3086 fps= 23 q=24.8 size=N/A time=00:01:42.96 bitrate=N/A speed=0.782x \n", + "frame= 3098 fps= 23 q=24.8 size=N/A time=00:01:43.36 bitrate=N/A speed=0.782x \n", + "frame= 3110 fps= 23 q=24.8 size=N/A time=00:01:43.77 bitrate=N/A speed=0.782x \n", + "frame= 3122 fps= 23 q=24.8 size=N/A time=00:01:44.17 bitrate=N/A speed=0.782x \n", + "frame= 3134 fps= 23 q=24.8 size=N/A time=00:01:44.57 bitrate=N/A speed=0.782x \n", + "frame= 3146 fps= 23 q=24.8 size=N/A time=00:01:44.97 bitrate=N/A speed=0.782x \n", + "frame= 3157 fps= 23 q=24.8 size=N/A time=00:01:45.33 bitrate=N/A speed=0.782x \n", + "frame= 3169 fps= 23 q=24.8 size=N/A time=00:01:45.73 bitrate=N/A speed=0.782x \n", + "frame= 3181 fps= 23 q=24.8 size=N/A time=00:01:46.13 bitrate=N/A speed=0.782x \n", + "frame= 3193 fps= 23 q=24.8 size=N/A time=00:01:46.53 bitrate=N/A speed=0.782x \n", + "frame= 3206 fps= 23 q=24.8 size=N/A time=00:01:46.97 bitrate=N/A speed=0.782x \n", + "frame= 3218 fps= 23 q=24.8 size=N/A time=00:01:47.37 bitrate=N/A speed=0.782x \n", + "frame= 3230 fps= 23 q=24.8 size=N/A time=00:01:47.77 bitrate=N/A speed=0.782x \n", + "frame= 3242 fps= 23 q=24.8 size=N/A time=00:01:48.17 bitrate=N/A speed=0.782x \n", + "frame= 3254 fps= 23 q=24.8 size=N/A time=00:01:48.57 bitrate=N/A speed=0.782x \n", + "frame= 3267 fps= 23 q=24.8 size=N/A time=00:01:49.00 bitrate=N/A speed=0.782x \n", + "frame= 3279 fps= 23 q=24.8 size=N/A time=00:01:49.40 bitrate=N/A speed=0.782x \n", + "frame= 3291 fps= 23 q=24.8 size=N/A time=00:01:49.80 bitrate=N/A speed=0.782x \n", + "frame= 3304 fps= 23 q=24.8 size=N/A time=00:01:50.24 bitrate=N/A speed=0.782x \n", + "frame= 3316 fps= 23 q=24.8 size=N/A time=00:01:50.64 bitrate=N/A speed=0.782x \n", + "frame= 3328 fps= 23 q=24.8 size=N/A time=00:01:51.04 bitrate=N/A speed=0.782x \n", + "frame= 3340 fps= 23 q=24.8 size=N/A time=00:01:51.44 bitrate=N/A speed=0.782x \n", + "frame= 3353 fps= 23 q=24.8 size=N/A time=00:01:51.87 bitrate=N/A speed=0.783x \n", + "frame= 3365 fps= 23 q=24.8 size=N/A time=00:01:52.27 bitrate=N/A speed=0.783x \n", + "frame= 3377 fps= 23 q=24.8 size=N/A time=00:01:52.67 bitrate=N/A speed=0.783x \n", + "frame= 3389 fps= 23 q=24.8 size=N/A time=00:01:53.07 bitrate=N/A speed=0.783x \n", + "frame= 3401 fps= 23 q=24.8 size=N/A time=00:01:53.48 bitrate=N/A speed=0.783x \n", + "frame= 3413 fps= 23 q=24.8 size=N/A time=00:01:53.88 bitrate=N/A speed=0.783x \n", + "frame= 3425 fps= 23 q=24.8 size=N/A time=00:01:54.28 bitrate=N/A speed=0.783x \n", + "frame= 3438 fps= 23 q=24.8 size=N/A time=00:01:54.71 bitrate=N/A speed=0.783x \n", + "frame= 3451 fps= 23 q=24.8 size=N/A time=00:01:55.14 bitrate=N/A speed=0.783x \n", + "frame= 3463 fps= 23 q=24.8 size=N/A time=00:01:55.54 bitrate=N/A speed=0.783x \n", + "frame= 3476 fps= 23 q=24.8 size=N/A time=00:01:55.98 bitrate=N/A speed=0.783x \n", + "frame= 3488 fps= 23 q=24.8 size=N/A time=00:01:56.38 bitrate=N/A speed=0.783x \n", + "frame= 3500 fps= 23 q=24.8 size=N/A time=00:01:56.78 bitrate=N/A speed=0.783x \n", + "frame= 3512 fps= 23 q=24.8 size=N/A time=00:01:57.18 bitrate=N/A speed=0.783x \n", + "frame= 3525 fps= 23 q=24.8 size=N/A time=00:01:57.61 bitrate=N/A speed=0.783x \n", + "frame= 3537 fps= 23 q=24.8 size=N/A time=00:01:58.01 bitrate=N/A speed=0.783x \n", + "frame= 3549 fps= 23 q=24.8 size=N/A time=00:01:58.41 bitrate=N/A speed=0.783x \n", + "frame= 3561 fps= 23 q=24.8 size=N/A time=00:01:58.81 bitrate=N/A speed=0.783x \n", + "frame= 3574 fps= 23 q=24.8 size=N/A time=00:01:59.25 bitrate=N/A speed=0.783x \n", + "frame= 3587 fps= 23 q=24.8 size=N/A time=00:01:59.68 bitrate=N/A speed=0.783x \n", + "frame= 3599 fps= 23 q=24.8 size=N/A time=00:02:00.08 bitrate=N/A speed=0.783x \n", + "frame= 3611 fps= 23 q=24.8 size=N/A time=00:02:00.48 bitrate=N/A speed=0.783x \n", + "frame= 3623 fps= 23 q=24.8 size=N/A time=00:02:00.88 bitrate=N/A speed=0.783x \n", + "frame= 3635 fps= 23 q=24.8 size=N/A time=00:02:01.28 bitrate=N/A speed=0.783x \n", + "frame= 3647 fps= 23 q=24.8 size=N/A time=00:02:01.68 bitrate=N/A speed=0.783x \n", + "frame= 3660 fps= 23 q=24.8 size=N/A time=00:02:02.12 bitrate=N/A speed=0.783x \n", + "frame= 3673 fps= 23 q=24.8 size=N/A time=00:02:02.55 bitrate=N/A speed=0.783x \n", + "frame= 3685 fps= 23 q=24.8 size=N/A time=00:02:02.95 bitrate=N/A speed=0.783x \n", + "frame= 3697 fps= 23 q=24.8 size=N/A time=00:02:03.35 bitrate=N/A speed=0.783x \n", + "frame= 3709 fps= 23 q=24.8 size=N/A time=00:02:03.75 bitrate=N/A speed=0.783x \n", + "frame= 3722 fps= 23 q=24.8 size=N/A time=00:02:04.19 bitrate=N/A speed=0.783x \n", + "frame= 3734 fps= 23 q=24.8 size=N/A time=00:02:04.59 bitrate=N/A speed=0.783x \n", + "frame= 3746 fps= 23 q=24.8 size=N/A time=00:02:04.99 bitrate=N/A speed=0.783x \n", + "frame= 3758 fps= 23 q=24.8 size=N/A time=00:02:05.39 bitrate=N/A speed=0.783x \n", + "frame= 3770 fps= 23 q=24.8 size=N/A time=00:02:05.79 bitrate=N/A speed=0.783x \n", + "frame= 3782 fps= 23 q=24.8 size=N/A time=00:02:06.19 bitrate=N/A speed=0.783x \n", + "frame= 3794 fps= 23 q=24.8 size=N/A time=00:02:06.59 bitrate=N/A speed=0.783x \n", + "frame= 3806 fps= 23 q=24.8 size=N/A time=00:02:06.99 bitrate=N/A speed=0.783x \n", + "frame= 3819 fps= 23 q=24.8 size=N/A time=00:02:07.42 bitrate=N/A speed=0.784x \n", + "frame= 3832 fps= 23 q=24.8 size=N/A time=00:02:07.86 bitrate=N/A speed=0.784x \n", + "frame= 3844 fps= 23 q=24.8 size=N/A time=00:02:08.26 bitrate=N/A speed=0.784x \n", + "frame= 3856 fps= 23 q=24.8 size=N/A time=00:02:08.66 bitrate=N/A speed=0.784x \n", + "frame= 3868 fps= 23 q=24.8 size=N/A time=00:02:09.06 bitrate=N/A speed=0.784x \n", + "frame= 3881 fps= 23 q=24.8 size=N/A time=00:02:09.49 bitrate=N/A speed=0.784x \n", + "frame= 3893 fps= 23 q=24.8 size=N/A time=00:02:09.89 bitrate=N/A speed=0.784x \n", + "frame= 3905 fps= 23 q=24.8 size=N/A time=00:02:10.29 bitrate=N/A speed=0.784x \n", + "frame= 3918 fps= 23 q=24.8 size=N/A time=00:02:10.73 bitrate=N/A speed=0.784x \n", + "frame= 3931 fps= 23 q=24.8 size=N/A time=00:02:11.16 bitrate=N/A speed=0.784x \n", + "frame= 3943 fps= 23 q=24.8 size=N/A time=00:02:11.56 bitrate=N/A speed=0.784x \n", + "frame= 3955 fps= 23 q=24.8 size=N/A time=00:02:11.96 bitrate=N/A speed=0.784x \n", + "frame= 3968 fps= 23 q=24.8 size=N/A time=00:02:12.39 bitrate=N/A speed=0.784x \n", + "frame= 3980 fps= 23 q=24.8 size=N/A time=00:02:12.79 bitrate=N/A speed=0.784x \n", + "frame= 3992 fps= 23 q=24.8 size=N/A time=00:02:13.19 bitrate=N/A speed=0.784x \n", + "frame= 4004 fps= 23 q=24.8 size=N/A time=00:02:13.60 bitrate=N/A speed=0.784x \n", + "frame= 4016 fps= 23 q=24.8 size=N/A time=00:02:14.00 bitrate=N/A speed=0.784x \n", + "frame= 4029 fps= 23 q=24.8 size=N/A time=00:02:14.43 bitrate=N/A speed=0.784x \n", + "frame= 4041 fps= 23 q=24.8 size=N/A time=00:02:14.83 bitrate=N/A speed=0.784x \n", + "frame= 4053 fps= 23 q=24.8 size=N/A time=00:02:15.23 bitrate=N/A speed=0.784x \n", + "frame= 4065 fps= 23 q=24.8 size=N/A time=00:02:15.63 bitrate=N/A speed=0.784x \n", + "frame= 4077 fps= 23 q=24.8 size=N/A time=00:02:16.03 bitrate=N/A speed=0.784x \n", + "frame= 4089 fps= 23 q=24.8 size=N/A time=00:02:16.43 bitrate=N/A speed=0.784x \n", + "frame= 4102 fps= 23 q=24.8 size=N/A time=00:02:16.87 bitrate=N/A speed=0.784x \n", + "frame= 4115 fps= 23 q=24.8 size=N/A time=00:02:17.30 bitrate=N/A speed=0.784x \n", + "frame= 4128 fps= 24 q=24.8 size=N/A time=00:02:17.73 bitrate=N/A speed=0.784x \n", + "frame= 4141 fps= 24 q=24.8 size=N/A time=00:02:18.17 bitrate=N/A speed=0.784x \n", + "frame= 4154 fps= 24 q=24.8 size=N/A time=00:02:18.60 bitrate=N/A speed=0.784x \n", + "frame= 4167 fps= 24 q=24.8 size=N/A time=00:02:19.03 bitrate=N/A speed=0.784x \n", + "frame= 4179 fps= 24 q=24.8 size=N/A time=00:02:19.43 bitrate=N/A speed=0.784x \n", + "frame= 4191 fps= 24 q=24.8 size=N/A time=00:02:19.83 bitrate=N/A speed=0.784x \n", + "frame= 4204 fps= 24 q=24.8 size=N/A time=00:02:20.27 bitrate=N/A speed=0.784x \n", + "frame= 4216 fps= 24 q=24.8 size=N/A time=00:02:20.67 bitrate=N/A speed=0.784x \n", + "frame= 4228 fps= 24 q=24.8 size=N/A time=00:02:21.07 bitrate=N/A speed=0.784x \n", + "frame= 4240 fps= 24 q=24.8 size=N/A time=00:02:21.47 bitrate=N/A speed=0.784x \n", + "frame= 4252 fps= 24 q=24.8 size=N/A time=00:02:21.87 bitrate=N/A speed=0.784x \n", + "frame= 4264 fps= 24 q=24.8 size=N/A time=00:02:22.27 bitrate=N/A speed=0.784x \n", + "frame= 4276 fps= 24 q=24.8 size=N/A time=00:02:22.67 bitrate=N/A speed=0.784x \n", + "frame= 4289 fps= 24 q=24.8 size=N/A time=00:02:23.10 bitrate=N/A speed=0.784x \n", + "frame= 4302 fps= 24 q=24.8 size=N/A time=00:02:23.54 bitrate=N/A speed=0.785x \n", + "frame= 4314 fps= 24 q=24.8 size=N/A time=00:02:23.94 bitrate=N/A speed=0.785x \n", + "frame= 4326 fps= 24 q=24.8 size=N/A time=00:02:24.34 bitrate=N/A speed=0.785x \n", + "frame= 4338 fps= 24 q=24.8 size=N/A time=00:02:24.74 bitrate=N/A speed=0.785x \n", + "frame= 4350 fps= 24 q=24.8 size=N/A time=00:02:25.14 bitrate=N/A speed=0.785x \n", + "frame= 4362 fps= 24 q=24.8 size=N/A time=00:02:25.54 bitrate=N/A speed=0.785x \n", + "frame= 4375 fps= 24 q=24.8 size=N/A time=00:02:25.97 bitrate=N/A speed=0.785x \n", + "frame= 4387 fps= 24 q=24.8 size=N/A time=00:02:26.37 bitrate=N/A speed=0.785x \n", + "frame= 4399 fps= 24 q=24.8 size=N/A time=00:02:26.77 bitrate=N/A speed=0.785x \n", + "frame= 4411 fps= 24 q=24.8 size=N/A time=00:02:27.18 bitrate=N/A speed=0.784x \n", + "frame= 4423 fps= 24 q=24.8 size=N/A time=00:02:27.58 bitrate=N/A speed=0.785x \n", + "frame= 4436 fps= 24 q=24.8 size=N/A time=00:02:28.01 bitrate=N/A speed=0.785x \n", + "frame= 4448 fps= 24 q=24.8 size=N/A time=00:02:28.41 bitrate=N/A speed=0.785x \n", + "frame= 4460 fps= 24 q=24.8 size=N/A time=00:02:28.81 bitrate=N/A speed=0.785x \n", + "frame= 4472 fps= 24 q=24.8 size=N/A time=00:02:29.21 bitrate=N/A speed=0.785x \n", + "frame= 4484 fps= 24 q=24.8 size=N/A time=00:02:29.61 bitrate=N/A speed=0.785x \n", + "frame= 4496 fps= 24 q=24.8 size=N/A time=00:02:30.01 bitrate=N/A speed=0.784x \n", + "frame= 4508 fps= 24 q=24.8 size=N/A time=00:02:30.41 bitrate=N/A speed=0.784x \n", + "frame= 4520 fps= 24 q=24.8 size=N/A time=00:02:30.81 bitrate=N/A speed=0.784x \n", + "frame= 4532 fps= 24 q=24.8 size=N/A time=00:02:31.21 bitrate=N/A speed=0.784x \n", + "frame= 4545 fps= 24 q=24.8 size=N/A time=00:02:31.65 bitrate=N/A speed=0.784x \n", + "frame= 4557 fps= 24 q=24.8 size=N/A time=00:02:32.05 bitrate=N/A speed=0.784x \n", + "frame= 4569 fps= 24 q=24.8 size=N/A time=00:02:32.45 bitrate=N/A speed=0.784x \n", + "frame= 4582 fps= 24 q=24.8 size=N/A time=00:02:32.88 bitrate=N/A speed=0.784x \n", + "frame= 4594 fps= 24 q=24.8 size=N/A time=00:02:33.28 bitrate=N/A speed=0.784x \n", + "frame= 4606 fps= 24 q=24.8 size=N/A time=00:02:33.68 bitrate=N/A speed=0.784x \n", + "frame= 4619 fps= 24 q=24.8 size=N/A time=00:02:34.12 bitrate=N/A speed=0.784x \n", + "frame= 4632 fps= 24 q=24.8 size=N/A time=00:02:34.55 bitrate=N/A speed=0.784x \n", + "frame= 4644 fps= 24 q=24.8 size=N/A time=00:02:34.95 bitrate=N/A speed=0.784x \n", + "frame= 4656 fps= 24 q=24.8 size=N/A time=00:02:35.35 bitrate=N/A speed=0.784x \n", + "frame= 4668 fps= 24 q=24.8 size=N/A time=00:02:35.75 bitrate=N/A speed=0.784x \n", + "frame= 4680 fps= 24 q=24.8 size=N/A time=00:02:36.15 bitrate=N/A speed=0.784x \n", + "frame= 4692 fps= 24 q=24.8 size=N/A time=00:02:36.55 bitrate=N/A speed=0.784x \n", + "frame= 4704 fps= 24 q=24.8 size=N/A time=00:02:36.95 bitrate=N/A speed=0.784x \n", + "frame= 4716 fps= 24 q=24.8 size=N/A time=00:02:37.35 bitrate=N/A speed=0.784x \n", + "frame= 4728 fps= 24 q=24.8 size=N/A time=00:02:37.75 bitrate=N/A speed=0.784x \n", + "frame= 4741 fps= 24 q=24.8 size=N/A time=00:02:38.19 bitrate=N/A speed=0.784x \n", + "frame= 4753 fps= 24 q=24.8 size=N/A time=00:02:38.59 bitrate=N/A speed=0.784x \n", + "frame= 4765 fps= 24 q=24.8 size=N/A time=00:02:38.99 bitrate=N/A speed=0.784x \n", + "frame= 4777 fps= 24 q=24.8 size=N/A time=00:02:39.39 bitrate=N/A speed=0.784x \n", + "frame= 4789 fps= 24 q=24.8 size=N/A time=00:02:39.79 bitrate=N/A speed=0.784x \n", + "frame= 4802 fps= 24 q=24.8 size=N/A time=00:02:40.22 bitrate=N/A speed=0.784x \n", + "frame= 4814 fps= 24 q=24.8 size=N/A time=00:02:40.62 bitrate=N/A speed=0.784x \n", + "frame= 4826 fps= 24 q=24.8 size=N/A time=00:02:41.02 bitrate=N/A speed=0.784x \n", + "frame= 4838 fps= 24 q=24.8 size=N/A time=00:02:41.42 bitrate=N/A speed=0.784x \n", + "frame= 4851 fps= 24 q=24.8 size=N/A time=00:02:41.86 bitrate=N/A speed=0.784x \n", + "frame= 4863 fps= 24 q=24.8 size=N/A time=00:02:42.26 bitrate=N/A speed=0.784x \n", + "frame= 4875 fps= 24 q=24.8 size=N/A time=00:02:42.66 bitrate=N/A speed=0.784x \n", + "frame= 4887 fps= 24 q=24.8 size=N/A time=00:02:43.06 bitrate=N/A speed=0.784x \n", + "frame= 4899 fps= 24 q=24.8 size=N/A time=00:02:43.46 bitrate=N/A speed=0.785x \n", + "frame= 4912 fps= 24 q=24.8 size=N/A time=00:02:43.89 bitrate=N/A speed=0.785x \n", + "frame= 4925 fps= 24 q=24.8 size=N/A time=00:02:44.33 bitrate=N/A speed=0.785x \n", + "frame= 4938 fps= 24 q=24.8 size=N/A time=00:02:44.76 bitrate=N/A speed=0.785x \n", + "frame= 4951 fps= 24 q=24.8 size=N/A time=00:02:45.19 bitrate=N/A speed=0.785x \n", + "frame= 4963 fps= 24 q=24.8 size=N/A time=00:02:45.59 bitrate=N/A speed=0.785x \n", + "frame= 4975 fps= 24 q=24.8 size=N/A time=00:02:45.99 bitrate=N/A speed=0.785x \n", + "frame= 4987 fps= 24 q=24.8 size=N/A time=00:02:46.39 bitrate=N/A speed=0.785x \n", + "frame= 5000 fps= 24 q=24.8 size=N/A time=00:02:46.83 bitrate=N/A speed=0.785x \n", + "frame= 5013 fps= 24 q=24.8 size=N/A time=00:02:47.26 bitrate=N/A speed=0.785x \n", + "frame= 5025 fps= 24 q=24.8 size=N/A time=00:02:47.66 bitrate=N/A speed=0.785x \n", + "frame= 5038 fps= 24 q=24.8 size=N/A time=00:02:48.10 bitrate=N/A speed=0.785x \n", + "frame= 5050 fps= 24 q=24.8 size=N/A time=00:02:48.50 bitrate=N/A speed=0.785x \n", + "frame= 5063 fps= 24 q=24.8 size=N/A time=00:02:48.93 bitrate=N/A speed=0.785x \n", + "frame= 5075 fps= 24 q=24.8 size=N/A time=00:02:49.33 bitrate=N/A speed=0.785x \n", + "frame= 5087 fps= 24 q=24.8 size=N/A time=00:02:49.73 bitrate=N/A speed=0.785x \n", + "frame= 5099 fps= 24 q=24.8 size=N/A time=00:02:50.13 bitrate=N/A speed=0.785x \n", + "frame= 5112 fps= 24 q=24.8 size=N/A time=00:02:50.57 bitrate=N/A speed=0.785x \n", + "frame= 5124 fps= 24 q=24.8 size=N/A time=00:02:50.97 bitrate=N/A speed=0.785x \n", + "frame= 5137 fps= 24 q=24.8 size=N/A time=00:02:51.40 bitrate=N/A speed=0.785x \n", + "frame= 5149 fps= 24 q=24.8 size=N/A time=00:02:51.80 bitrate=N/A speed=0.785x \n", + "frame= 5161 fps= 24 q=24.8 size=N/A time=00:02:52.20 bitrate=N/A speed=0.785x \n", + "frame= 5173 fps= 24 q=24.8 size=N/A time=00:02:52.60 bitrate=N/A speed=0.785x \n", + "frame= 5185 fps= 24 q=24.8 size=N/A time=00:02:53.00 bitrate=N/A speed=0.785x \n", + "frame= 5197 fps= 24 q=24.8 size=N/A time=00:02:53.40 bitrate=N/A speed=0.785x \n", + "frame= 5210 fps= 24 q=24.8 size=N/A time=00:02:53.84 bitrate=N/A speed=0.785x \n", + "frame= 5222 fps= 24 q=24.8 size=N/A time=00:02:54.24 bitrate=N/A speed=0.785x \n", + "frame= 5234 fps= 24 q=24.8 size=N/A time=00:02:54.64 bitrate=N/A speed=0.785x \n", + "frame= 5247 fps= 24 q=24.8 size=N/A time=00:02:55.07 bitrate=N/A speed=0.785x \n", + "frame= 5259 fps= 24 q=24.8 size=N/A time=00:02:55.47 bitrate=N/A speed=0.785x \n", + "frame= 5271 fps= 24 q=24.8 size=N/A time=00:02:55.87 bitrate=N/A speed=0.785x \n", + "frame= 5283 fps= 24 q=24.8 size=N/A time=00:02:56.27 bitrate=N/A speed=0.785x \n", + "frame= 5296 fps= 24 q=24.8 size=N/A time=00:02:56.70 bitrate=N/A speed=0.785x \n", + "frame= 5308 fps= 24 q=24.8 size=N/A time=00:02:57.11 bitrate=N/A speed=0.785x \n", + "frame= 5320 fps= 24 q=24.8 size=N/A time=00:02:57.51 bitrate=N/A speed=0.785x \n", + "frame= 5333 fps= 24 q=24.8 size=N/A time=00:02:57.94 bitrate=N/A speed=0.785x \n", + "frame= 5345 fps= 24 q=24.8 size=N/A time=00:02:58.34 bitrate=N/A speed=0.785x \n", + "frame= 5357 fps= 24 q=24.8 size=N/A time=00:02:58.74 bitrate=N/A speed=0.785x \n", + "frame= 5369 fps= 24 q=24.8 size=N/A time=00:02:59.14 bitrate=N/A speed=0.785x \n", + "frame= 5382 fps= 24 q=24.8 size=N/A time=00:02:59.57 bitrate=N/A speed=0.785x \n", + "frame= 5394 fps= 24 q=24.8 size=N/A time=00:02:59.97 bitrate=N/A speed=0.785x \n", + "frame= 5407 fps= 24 q=24.8 size=N/A time=00:03:00.41 bitrate=N/A speed=0.785x \n", + "frame= 5419 fps= 24 q=24.8 size=N/A time=00:03:00.81 bitrate=N/A speed=0.785x \n", + "frame= 5431 fps= 24 q=24.8 size=N/A time=00:03:01.21 bitrate=N/A speed=0.785x \n", + "frame= 5444 fps= 24 q=24.8 size=N/A time=00:03:01.64 bitrate=N/A speed=0.785x \n", + "frame= 5457 fps= 24 q=24.8 size=N/A time=00:03:02.08 bitrate=N/A speed=0.785x \n", + "frame= 5469 fps= 24 q=24.8 size=N/A time=00:03:02.48 bitrate=N/A speed=0.785x \n", + "frame= 5482 fps= 24 q=24.8 size=N/A time=00:03:02.91 bitrate=N/A speed=0.785x \n", + "frame= 5494 fps= 24 q=24.8 size=N/A time=00:03:03.31 bitrate=N/A speed=0.785x \n", + "frame= 5506 fps= 24 q=24.8 size=N/A time=00:03:03.71 bitrate=N/A speed=0.785x \n", + "frame= 5519 fps= 24 q=24.8 size=N/A time=00:03:04.15 bitrate=N/A speed=0.785x \n", + "frame= 5531 fps= 24 q=24.8 size=N/A time=00:03:04.55 bitrate=N/A speed=0.785x \n", + "frame= 5543 fps= 24 q=24.8 size=N/A time=00:03:04.95 bitrate=N/A speed=0.785x \n", + "frame= 5555 fps= 24 q=24.8 size=N/A time=00:03:05.35 bitrate=N/A speed=0.785x \n", + "frame= 5567 fps= 24 q=24.8 size=N/A time=00:03:05.75 bitrate=N/A speed=0.785x \n", + "frame= 5580 fps= 24 q=24.8 size=N/A time=00:03:06.18 bitrate=N/A speed=0.786x \n", + "frame= 5593 fps= 24 q=24.8 size=N/A time=00:03:06.61 bitrate=N/A speed=0.786x \n", + "frame= 5605 fps= 24 q=24.8 size=N/A time=00:03:07.02 bitrate=N/A speed=0.786x \n", + "frame= 5618 fps= 24 q=24.8 size=N/A time=00:03:07.45 bitrate=N/A speed=0.786x \n", + "frame= 5630 fps= 24 q=24.8 size=N/A time=00:03:07.85 bitrate=N/A speed=0.786x \n", + "frame= 5642 fps= 24 q=24.8 size=N/A time=00:03:08.25 bitrate=N/A speed=0.786x \n", + "frame= 5654 fps= 24 q=24.8 size=N/A time=00:03:08.65 bitrate=N/A speed=0.786x \n", + "frame= 5666 fps= 24 q=24.8 size=N/A time=00:03:09.05 bitrate=N/A speed=0.786x \n", + "frame= 5678 fps= 24 q=24.8 size=N/A time=00:03:09.45 bitrate=N/A speed=0.786x \n", + "frame= 5690 fps= 24 q=24.8 size=N/A time=00:03:09.85 bitrate=N/A speed=0.786x \n", + "frame= 5703 fps= 24 q=24.8 size=N/A time=00:03:10.29 bitrate=N/A speed=0.786x \n", + "frame= 5715 fps= 24 q=24.8 size=N/A time=00:03:10.69 bitrate=N/A speed=0.786x \n", + "frame= 5728 fps= 24 q=24.8 size=N/A time=00:03:11.12 bitrate=N/A speed=0.786x \n", + "frame= 5740 fps= 24 q=24.8 size=N/A time=00:03:11.52 bitrate=N/A speed=0.786x \n", + "frame= 5752 fps= 24 q=24.8 size=N/A time=00:03:11.92 bitrate=N/A speed=0.786x \n", + "frame= 5765 fps= 24 q=24.8 size=N/A time=00:03:12.35 bitrate=N/A speed=0.786x \n", + "frame= 5778 fps= 24 q=24.8 size=N/A time=00:03:12.79 bitrate=N/A speed=0.786x \n", + "frame= 5790 fps= 24 q=24.8 size=N/A time=00:03:13.19 bitrate=N/A speed=0.786x \n", + "frame= 5803 fps= 24 q=24.8 size=N/A time=00:03:13.62 bitrate=N/A speed=0.786x \n", + "frame= 5816 fps= 24 q=24.8 size=N/A time=00:03:14.06 bitrate=N/A speed=0.786x \n", + "frame= 5828 fps= 24 q=24.8 size=N/A time=00:03:14.46 bitrate=N/A speed=0.786x \n", + "frame= 5840 fps= 24 q=24.8 size=N/A time=00:03:14.86 bitrate=N/A speed=0.786x \n", + "frame= 5852 fps= 24 q=24.8 size=N/A time=00:03:15.26 bitrate=N/A speed=0.786x \n", + "frame= 5865 fps= 24 q=24.8 size=N/A time=00:03:15.69 bitrate=N/A speed=0.786x \n", + "frame= 5877 fps= 24 q=24.8 size=N/A time=00:03:16.09 bitrate=N/A speed=0.786x \n", + "frame= 5889 fps= 24 q=24.8 size=N/A time=00:03:16.49 bitrate=N/A speed=0.786x \n", + "frame= 5901 fps= 24 q=24.8 size=N/A time=00:03:16.89 bitrate=N/A speed=0.786x \n", + "frame= 5913 fps= 24 q=24.8 size=N/A time=00:03:17.29 bitrate=N/A speed=0.786x \n", + "frame= 5925 fps= 24 q=24.8 size=N/A time=00:03:17.69 bitrate=N/A speed=0.786x \n", + "frame= 5937 fps= 24 q=24.8 size=N/A time=00:03:18.09 bitrate=N/A speed=0.786x \n", + "frame= 5949 fps= 24 q=24.8 size=N/A time=00:03:18.49 bitrate=N/A speed=0.786x \n", + "frame= 5961 fps= 24 q=24.8 size=N/A time=00:03:18.89 bitrate=N/A speed=0.786x \n", + "frame= 5973 fps= 24 q=24.8 size=N/A time=00:03:19.29 bitrate=N/A speed=0.786x \n", + "frame= 5986 fps= 24 q=24.8 size=N/A time=00:03:19.73 bitrate=N/A speed=0.786x \n", + "frame= 5998 fps= 24 q=24.8 size=N/A time=00:03:20.13 bitrate=N/A speed=0.786x \n", + "frame= 6011 fps= 24 q=24.8 size=N/A time=00:03:20.56 bitrate=N/A speed=0.786x \n", + "frame= 6024 fps= 24 q=24.8 size=N/A time=00:03:21.00 bitrate=N/A speed=0.786x \n", + "frame= 6037 fps= 24 q=24.8 size=N/A time=00:03:21.43 bitrate=N/A speed=0.786x \n", + "frame= 6050 fps= 24 q=24.8 size=N/A time=00:03:21.86 bitrate=N/A speed=0.786x \n", + "frame= 6063 fps= 24 q=24.8 size=N/A time=00:03:22.30 bitrate=N/A speed=0.786x \n", + "frame= 6075 fps= 24 q=24.8 size=N/A time=00:03:22.70 bitrate=N/A speed=0.786x \n", + "frame= 6087 fps= 24 q=24.8 size=N/A time=00:03:23.10 bitrate=N/A speed=0.786x \n", + "frame= 6100 fps= 24 q=24.8 size=N/A time=00:03:23.53 bitrate=N/A speed=0.786x \n", + "frame= 6112 fps= 24 q=24.8 size=N/A time=00:03:23.93 bitrate=N/A speed=0.786x \n", + "frame= 6125 fps= 24 q=24.8 size=N/A time=00:03:24.37 bitrate=N/A speed=0.786x \n", + "frame= 6135 fps= 24 q=24.8 Lsize=N/A time=00:03:24.70 bitrate=N/A speed=0.786x \n", + "video:1428587kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown\n" + ] + } + ], + "source": [ + "%%time\n", + "path = (\"%s%s_frames/frame\" % (TMP_DIR, VIDEOOUT)) + \"%04d.jpg\"\n", + "print(path)\n", + "!ffmpeg -i $VIDEO $path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run OpenPose on frames and generate Body Movement analysis\n", + "Requirements: \n", + "- POSE_PROTO_FILE = r\"openpose/pose_deploy_linevec.prototxt\"\n", + "- POSE_WEIGHTS_FILE = r\"openpose/pose_iter_440000.caffemodel\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 1%|█▍ | 39/6135 [00:32<14:01, 7.24it/s]" + ] + } + ], + "source": [ + "import process_OpenPose as openpose\n", + "\n", + "openpose.process(VIDEO)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run RT-Gene on video \n", + "Requirements: \n", + "- If you have not done so yet run install_RTGene.py \n", + "- Specify amount of people in video `maxPeople` for sorting algorithm (NOTE: all subjects should be visible in the beginning of the video)\n", + "- [OPTIONAL] provide a calibration file for your camera see e.g. `./calib_insta.pkl`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading networks\n", + "Using device cuda:0 for face detection.\n", + "PyTorch using 8 threads.\n", + "WARNING:tensorflow:From C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\estimate_gaze_tensorflow.py:28: The name tf.keras.backend.set_session is deprecated. Please use tf.compat.v1.keras.backend.set_session instead.\n", + "\n", + "Load model ./../model_nets/Model_allsubjects1.h5\n", + "WARNING:tensorflow:From C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow_core\\python\\ops\\resource_variable_ops.py:1635: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "If using Keras pass *_constraint arguments to layers.\n", + "Loaded 1 model(s)\n", + "Video frame count: 6135.0\n", + "WARNING!!! You should provide the camera calibration file, otherwise you might get bad results. \n", + " Using a crude approximation!\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f849897c814e4f6da7e138a13dbf088e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/6135 [00:00\", line 3, in \n", + " rtgene.process(VIDEO, maxPeople=6)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\process_RTGene.py\", line 259, in process\n", + " lstRet.append(estimate_gaze(image_file_name, image, landmark_estimator, gaze_estimator, _dist_coefficients, _camera_matrix, args))\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\process_RTGene.py\", line 59, in estimate_gaze\n", + " subjects = landmark_estimator.get_subjects_from_faceboxes(color_img, faceboxes)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 126, in get_subjects_from_faceboxes\n", + " initial_pts68_list = self.ddfa_forward_pass(color_img, roi_box_list)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 113, in ddfa_forward_pass\n", + " img_step = [crop_img(color_img, roi_box) for roi_box in roi_box_list]\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 113, in \n", + " img_step = [crop_img(color_img, roi_box) for roi_box in roi_box_list]\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\ThreeDDFA\\inference.py\", line 45, in crop_img\n", + " res = np.zeros((dh, dw, 3), dtype=np.uint8)\n", + "KeyboardInterrupt\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2044, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'KeyboardInterrupt' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1169, in get_records\n", + " return _fixed_getinnerframes(etb, number_of_lines_of_context, tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 316, in wrapped\n", + " return f(*args, **kwargs)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 350, in _fixed_getinnerframes\n", + " records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 1490, in getinnerframes\n", + " frameinfo = (tb.tb_frame,) + getframeinfo(tb, context)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 1448, in getframeinfo\n", + " filename = getsourcefile(frame) or getfile(frame)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 696, in getsourcefile\n", + " if getattr(getmodule(object, filename), '__loader__', None) is not None:\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 733, in getmodule\n", + " if ismodule(module) and hasattr(module, '__file__'):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow\\__init__.py\", line 50, in __getattr__\n", + " module = self._load()\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow\\__init__.py\", line 44, in _load\n", + " module = _importlib.import_module(self.__name__)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\importlib\\__init__.py\", line 126, in import_module\n", + " return _bootstrap._gcd_import(name[level:], package, level)\n", + " File \"\", line 994, in _gcd_import\n", + " File \"\", line 971, in _find_and_load\n", + " File \"\", line 953, in _find_and_load_unlocked\n", + "ModuleNotFoundError: No module named 'tensorflow_core.estimator'\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3343, in run_code\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " File \"\", line 3, in \n", + " rtgene.process(VIDEO, maxPeople=6)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\process_RTGene.py\", line 259, in process\n", + " lstRet.append(estimate_gaze(image_file_name, image, landmark_estimator, gaze_estimator, _dist_coefficients, _camera_matrix, args))\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\process_RTGene.py\", line 59, in estimate_gaze\n", + " subjects = landmark_estimator.get_subjects_from_faceboxes(color_img, faceboxes)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 126, in get_subjects_from_faceboxes\n", + " initial_pts68_list = self.ddfa_forward_pass(color_img, roi_box_list)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 113, in ddfa_forward_pass\n", + " img_step = [crop_img(color_img, roi_box) for roi_box in roi_box_list]\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 113, in \n", + " img_step = [crop_img(color_img, roi_box) for roi_box in roi_box_list]\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\ThreeDDFA\\inference.py\", line 45, in crop_img\n", + " res = np.zeros((dh, dw, 3), dtype=np.uint8)\n", + "KeyboardInterrupt\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2044, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'KeyboardInterrupt' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3263, in run_ast_nodes\n", + " if (await self.run_code(code, result, async_=asy)):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3360, in run_code\n", + " self.showtraceback(running_compiled_code=True)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2047, in showtraceback\n", + " value, tb, tb_offset=tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1436, in structured_traceback\n", + " self, etype, value, tb, tb_offset, number_of_lines_of_context)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1336, in structured_traceback\n", + " self, etype, value, tb, tb_offset, number_of_lines_of_context\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1193, in structured_traceback\n", + " tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1150, in format_exception_as_a_whole\n", + " last_unique, recursion_repeat = find_recursion(orig_etype, evalue, records)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 451, in find_recursion\n", + " return len(records), 0\n", + "TypeError: object of type 'NoneType' has no len()\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2044, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'TypeError' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1169, in get_records\n", + " return _fixed_getinnerframes(etb, number_of_lines_of_context, tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 316, in wrapped\n", + " return f(*args, **kwargs)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 350, in _fixed_getinnerframes\n", + " records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 1490, in getinnerframes\n", + " frameinfo = (tb.tb_frame,) + getframeinfo(tb, context)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 1448, in getframeinfo\n", + " filename = getsourcefile(frame) or getfile(frame)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 696, in getsourcefile\n", + " if getattr(getmodule(object, filename), '__loader__', None) is not None:\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 733, in getmodule\n", + " if ismodule(module) and hasattr(module, '__file__'):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow\\__init__.py\", line 50, in __getattr__\n", + " module = self._load()\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow\\__init__.py\", line 44, in _load\n", + " module = _importlib.import_module(self.__name__)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\importlib\\__init__.py\", line 126, in import_module\n", + " return _bootstrap._gcd_import(name[level:], package, level)\n", + " File \"\", line 994, in _gcd_import\n", + " File \"\", line 971, in _find_and_load\n", + " File \"\", line 953, in _find_and_load_unlocked\n", + "ModuleNotFoundError: No module named 'tensorflow_core.estimator'\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3343, in run_code\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " File \"\", line 3, in \n", + " rtgene.process(VIDEO, maxPeople=6)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\process_RTGene.py\", line 259, in process\n", + " lstRet.append(estimate_gaze(image_file_name, image, landmark_estimator, gaze_estimator, _dist_coefficients, _camera_matrix, args))\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\process_RTGene.py\", line 59, in estimate_gaze\n", + " subjects = landmark_estimator.get_subjects_from_faceboxes(color_img, faceboxes)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 126, in get_subjects_from_faceboxes\n", + " initial_pts68_list = self.ddfa_forward_pass(color_img, roi_box_list)\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 113, in ddfa_forward_pass\n", + " img_step = [crop_img(color_img, roi_box) for roi_box in roi_box_list]\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\extract_landmarks_method_base.py\", line 113, in \n", + " img_step = [crop_img(color_img, roi_box) for roi_box in roi_box_list]\n", + " File \"C:\\Users\\Anna\\PycharmProjects\\conan\\processing\\rt_gene\\ThreeDDFA\\inference.py\", line 45, in crop_img\n", + " res = np.zeros((dh, dw, 3), dtype=np.uint8)\n", + "KeyboardInterrupt\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2044, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'KeyboardInterrupt' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3263, in run_ast_nodes\n", + " if (await self.run_code(code, result, async_=asy)):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3360, in run_code\n", + " self.showtraceback(running_compiled_code=True)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2047, in showtraceback\n", + " value, tb, tb_offset=tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1436, in structured_traceback\n", + " self, etype, value, tb, tb_offset, number_of_lines_of_context)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1336, in structured_traceback\n", + " self, etype, value, tb, tb_offset, number_of_lines_of_context\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1193, in structured_traceback\n", + " tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1150, in format_exception_as_a_whole\n", + " last_unique, recursion_repeat = find_recursion(orig_etype, evalue, records)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 451, in find_recursion\n", + " return len(records), 0\n", + "TypeError: object of type 'NoneType' has no len()\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2044, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'TypeError' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2895, in _run_cell\n", + " return runner(coro)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 68, in _pseudo_sync_runner\n", + " coro.send(None)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3072, in run_cell_async\n", + " interactivity=interactivity, compiler=compiler, result=result)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3282, in run_ast_nodes\n", + " self.showtraceback()\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2047, in showtraceback\n", + " value, tb, tb_offset=tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1436, in structured_traceback\n", + " self, etype, value, tb, tb_offset, number_of_lines_of_context)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1336, in structured_traceback\n", + " self, etype, value, tb, tb_offset, number_of_lines_of_context\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1211, in structured_traceback\n", + " chained_exceptions_tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1150, in format_exception_as_a_whole\n", + " last_unique, recursion_repeat = find_recursion(orig_etype, evalue, records)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 451, in find_recursion\n", + " return len(records), 0\n", + "TypeError: object of type 'NoneType' has no len()\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2044, in showtraceback\n", + " stb = value._render_traceback_()\n", + "AttributeError: 'TypeError' object has no attribute '_render_traceback_'\n", + "\n", + "During handling of the above exception, another exception occurred:\n", + "\n", + "Traceback (most recent call last):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 1169, in get_records\n", + " return _fixed_getinnerframes(etb, number_of_lines_of_context, tb_offset)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 316, in wrapped\n", + " return f(*args, **kwargs)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\IPython\\core\\ultratb.py\", line 350, in _fixed_getinnerframes\n", + " records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 1490, in getinnerframes\n", + " frameinfo = (tb.tb_frame,) + getframeinfo(tb, context)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 1448, in getframeinfo\n", + " filename = getsourcefile(frame) or getfile(frame)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 696, in getsourcefile\n", + " if getattr(getmodule(object, filename), '__loader__', None) is not None:\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\inspect.py\", line 733, in getmodule\n", + " if ismodule(module) and hasattr(module, '__file__'):\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow\\__init__.py\", line 50, in __getattr__\n", + " module = self._load()\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\site-packages\\tensorflow\\__init__.py\", line 44, in _load\n", + " module = _importlib.import_module(self.__name__)\n", + " File \"C:\\Users\\Anna\\miniconda3\\envs\\conan_env\\lib\\importlib\\__init__.py\", line 126, in import_module\n", + " return _bootstrap._gcd_import(name[level:], package, level)\n", + " File \"\", line 994, in _gcd_import\n", + " File \"\", line 971, in _find_and_load\n", + " File \"\", line 953, in _find_and_load_unlocked\n", + "ModuleNotFoundError: No module named 'tensorflow_core.estimator'\n" + ] + } + ], + "source": [ + "import process_RTGene as rtgene\n", + "\n", + "rtgene.process(VIDEO, maxPeople=6)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of frames: 6135\n", + "WARNING: apriltag2 not supported on windows, running with pupil_apriltag...\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Frame 0 found 0 tags\n", + "Frame 1 found 0 tags\n", + "Frame 2 found 0 tags\n", + "Frame 3 found 0 tags\n", + "Frame 4 found 0 tags\n", + "Frame 5 found 0 tags\n", + "Frame 6 found 0 tags\n", + "Frame 7 found 0 tags\n", + "Frame 8 found 0 tags\n", + "Frame 9 found 0 tags\n", + "Frame 10 found 0 tags\n", + "Frame 11 found 0 tags\n", + "Frame 12 found 0 tags\n", + "Frame 13 found 0 tags\n", + "Frame 14 found 0 tags\n", + "Frame 15 found 0 tags\n", + "Frame 16 found 0 tags\n", + "Frame 17 found 0 tags\n", + "Frame 18 found 0 tags\n", + "Frame 19 found 0 tags\n", + "Frame 20 found 0 tags\n", + "Frame 21 found 0 tags\n", + "Frame 22 found 0 tags\n", + "Frame 23 found 0 tags\n", + "Frame 24 found 0 tags\n", + "Frame 25 found 0 tags\n", + "Frame 26 found 0 tags\n", + "Frame 27 found 0 tags\n", + "Frame 28 found 0 tags\n", + "Frame 29 found 0 tags\n", + "Frame 30 found 0 tags\n", + "Frame 31 found 0 tags\n", + "Frame 32 found 0 tags\n", + "Frame 33 found 0 tags\n", + "Frame 34 found 0 tags\n", + "Frame 35 found 0 tags\n", + "Frame 36 found 0 tags\n", + "Frame 37 found 0 tags\n", + "Frame 38 found 0 tags\n", + "Frame 39 found 0 tags\n", + "Frame 40 found 0 tags\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mprocess_AprilTag\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mapriltag\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mapriltag\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprocess\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mVIDEO\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m~\\PycharmProjects\\conan\\processing\\process_AprilTag.py\u001b[0m in \u001b[0;36mprocess\u001b[1;34m(file)\u001b[0m\n\u001b[0;32m 73\u001b[0m \u001b[0mimg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcv2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcvtColor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcv2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mCOLOR_BGR2GRAY\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 74\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 75\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdetector\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdetect\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 76\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 77\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\miniconda3\\envs\\conan_env\\lib\\site-packages\\pupil_apriltags\\bindings.py\u001b[0m in \u001b[0;36mdetect\u001b[1;34m(self, img, estimate_tag_pose, camera_params, tag_size)\u001b[0m\n\u001b[0;32m 412\u001b[0m \u001b[1;31m# detect apriltags in the image\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 413\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlibc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapriltag_detector_detect\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrestype\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mctypes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPOINTER\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_ZArray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 414\u001b[1;33m \u001b[0mdetections\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlibc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapriltag_detector_detect\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtag_detector_ptr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc_img\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 415\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 416\u001b[0m \u001b[0mapriltag\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mctypes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPOINTER\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_ApriltagDetection\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "import process_AprilTag as apriltag\n", + "\n", + "apriltag.process(VIDEO)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "conan_env", + "language": "python", + "name": "conan_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.13" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/processing/README.md b/processing/README.md new file mode 100644 index 0000000..3f4312a --- /dev/null +++ b/processing/README.md @@ -0,0 +1,23 @@ +# Processing Pipeline +## Conda Environment Setup +``` +conda env create -f conan_windows.yml +conda activate conan_windows_env +``` + +### OpenPose +### RT-Gene +- Run [processing/install_RTGene.py](/processing/install_RTGene.py) +- [OPTIONAL] Provide camera calibration file calib.pkl +- Provide maximum number of people in the video +### JAA-Net +### AVA-Active Speaker +### Apriltag + +[https://www.wikihow.com/Install-FFmpeg-on-Windows](https://www.wikihow.com/Install-FFmpeg-on-Windows) +### Training +``` +conda install -c anaconda cupy +conda install -c anaconda chainer +conda install -c anaconda ipykernel +``` \ No newline at end of file diff --git a/processing/conan_windows.yml b/processing/conan_windows.yml new file mode 100644 index 0000000..6f21f46 --- /dev/null +++ b/processing/conan_windows.yml @@ -0,0 +1,192 @@ +name: conan_windows_env +channels: + - pytorch + - anaconda + - defaults +dependencies: + - _tflow_select=2.1.0=gpu + - absl-py=0.10.0=py36_0 + - aiohttp=3.6.3=py36he774522_0 + - argon2-cffi=20.1.0=py36he774522_1 + - astor=0.8.1=py36_0 + - async-timeout=3.0.1=py36_0 + - async_generator=1.10=py36h28b3542_0 + - attrs=20.2.0=py_0 + - backcall=0.2.0=py_0 + - blas=1.0=mkl + - bleach=3.2.1=py_0 + - blinker=1.4=py36_0 + - brotlipy=0.7.0=py36he774522_1000 + - ca-certificates=2021.9.30=haa95532_1 + - cachetools=4.1.1=py_0 + - certifi=2021.5.30=py36haa95532_0 + - cffi=1.14.3=py36h7a1dbc1_0 + - chardet=3.0.4=py36_1003 + - click=7.1.2=py_0 + - colorama=0.4.4=py_0 + - cryptography=3.1.1=py36h7a1dbc1_0 + - cudatoolkit=10.1.243=h74a9793_0 + - cudnn=7.6.5=cuda10.1_0 + - cycler=0.10.0=py36haa95532_0 + - dataclasses=0.8=pyh4f3eec9_6 + - decorator=4.4.2=py_0 + - defusedxml=0.6.0=py_0 + - entrypoints=0.3=py36_0 + - freetype=2.10.4=hd328e21_0 + - gast=0.2.2=py36_0 + - google-auth=1.22.1=py_0 + - google-auth-oauthlib=0.4.1=py_2 + - google-pasta=0.2.0=py_0 + - grpcio=1.31.0=py36he7da953_0 + - h5py=2.10.0=py36h5e291fa_0 + - hdf5=1.10.4=h7ebc959_0 + - icc_rt=2019.0.0=h0cc432a_1 + - icu=58.2=vc14hc45fdbb_0 + - idna=2.10=py_0 + - idna_ssl=1.1.0=py36_0 + - importlib-metadata=2.0.0=py_1 + - importlib_metadata=2.0.0=1 + - intel-openmp=2020.2=254 + - ipykernel=5.3.4=py36h5ca1d4c_0 + - ipython=7.16.1=py36h5ca1d4c_0 + - ipython_genutils=0.2.0=py36h3c5d0ee_0 + - ipywidgets=7.5.1=py_1 + - jedi=0.18.0=py36haa95532_1 + - jinja2=2.11.2=py_0 + - jpeg=9b=hb83a4c4_2 + - jsonschema=3.2.0=py_2 + - jupyter=1.0.0=py36_7 + - jupyter_client=6.1.7=py_0 + - jupyter_console=6.2.0=py_0 + - jupyter_core=4.6.3=py36_0 + - jupyterlab_pygments=0.1.2=py_0 + - keras-applications=1.0.8=py_1 + - keras-preprocessing=1.1.0=py_1 + - kiwisolver=1.3.1=py36hd77b12b_0 + - libpng=1.6.37=h2a8f88b_0 + - libprotobuf=3.13.0.1=h200bbdf_0 + - libsodium=1.0.18=h62dcd97_0 + - libtiff=4.2.0=hd0e1b90_0 + - libuv=1.40.0=he774522_0 + - lz4-c=1.9.3=h2bbff1b_1 + - m2w64-gcc-libgfortran=5.3.0=6 + - m2w64-gcc-libs=5.3.0=7 + - m2w64-gcc-libs-core=5.3.0=7 + - m2w64-gmp=6.1.0=2 + - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 + - markdown=3.3.2=py36_0 + - markupsafe=1.1.1=py36he774522_0 + - matplotlib=3.3.4=py36haa95532_0 + - matplotlib-base=3.3.4=py36h49ac443_0 + - mistune=0.8.4=py36he774522_0 + - mkl=2019.4=245 + - mkl-service=2.3.0=py36hb782905_0 + - mkl_fft=1.2.0=py36h45dec08_0 + - mkl_random=1.0.4=py36h343c172_0 + - msys2-conda-epoch=20160418=1 + - multidict=4.7.6=py36he774522_1 + - nbclient=0.5.1=py_0 + - nbconvert=6.0.7=py36_0 + - nbformat=5.0.8=py_0 + - nest-asyncio=1.4.1=py_0 + - ninja=1.10.2=h6d14046_1 + - notebook=6.1.4=py36_0 + - numpy=1.19.1=py36h5510c5b_0 + - numpy-base=1.19.1=py36ha3acd2a_0 + - oauthlib=3.1.0=py_0 + - olefile=0.46=py36_0 + - openssl=1.1.1l=h2bbff1b_0 + - opt_einsum=3.1.0=py_0 + - packaging=20.4=py_0 + - pandas=1.1.3=py36ha925a31_0 + - pandoc=2.11=h9490d1a_0 + - pandocfilters=1.4.2=py36_1 + - parso=0.8.0=py_0 + - pickleshare=0.7.5=py36_0 + - pillow=8.0.0=py36hca74424_0 + - pip=21.0.1=py36haa95532_0 + - prometheus_client=0.8.0=py_0 + - prompt-toolkit=3.0.8=py_0 + - prompt_toolkit=3.0.8=0 + - protobuf=3.13.0.1=py36ha925a31_1 + - pyasn1=0.4.8=py_0 + - pyasn1-modules=0.2.8=py_0 + - pycparser=2.20=py_2 + - pygments=2.7.1=py_0 + - pyjwt=1.7.1=py36_0 + - pyopengl=3.1.1a1=py36_0 + - pyopenssl=19.1.0=py_1 + - pyparsing=2.4.7=py_0 + - pyqt=5.9.2=py36ha878b3d_0 + - pyreadline=2.1=py36_1 + - pyrsistent=0.17.3=py36he774522_0 + - pysocks=1.7.1=py36_0 + - python=3.6.13=h3758d61_0 + - python-dateutil=2.8.1=py_0 + - pytorch=1.8.1=py3.6_cuda10.1_cudnn7_0 + - pytz=2020.1=py_0 + - pywin32=227=py36he774522_1 + - pywinpty=0.5.7=py36_0 + - pyzmq=19.0.2=py36ha925a31_1 + - qt=5.9.7=vc14h73c81de_0 + - qtconsole=4.7.7=py_0 + - qtpy=1.9.0=py_0 + - requests=2.24.0=py_0 + - requests-oauthlib=1.3.0=py_0 + - rsa=4.6=py_0 + - scipy=1.5.2=py36h9439919_0 + - send2trash=1.5.0=py36_0 + - setuptools=58.0.4=py36haa95532_0 + - sip=4.19.24=py36ha925a31_0 + - six=1.15.0=py_0 + - sqlite=3.36.0=h2bbff1b_0 + - tensorboard=2.2.1=pyh532a8cf_0 + - tensorboard-plugin-wit=1.6.0=py_0 + - tensorflow=2.1.0=gpu_py36h3346743_0 + - tensorflow-base=2.1.0=gpu_py36h55f5790_0 + - tensorflow-estimator=2.6.0=pyh7b7c402_0 + - tensorflow-gpu=2.1.0=h0d30ee6_0 + - termcolor=1.1.0=py36_1 + - terminado=0.9.1=py36_0 + - testpath=0.4.4=py_0 + - tk=8.6.11=h2bbff1b_0 + - torchvision=0.9.1=py36_cu101 + - tornado=6.0.4=py36he774522_1 + - traitlets=4.3.3=py36_0 + - typing_extensions=3.7.4.3=py_0 + - urllib3=1.25.11=py_0 + - vc=14.2=h21ff451_1 + - vs2015_runtime=14.27.29016=h5e58377_2 + - wcwidth=0.2.5=py_0 + - webencodings=0.5.1=py36_1 + - werkzeug=0.14.1=py36_0 + - wheel=0.37.0=pyhd3eb1b0_1 + - widgetsnbextension=3.5.1=py36_0 + - win_inet_pton=1.1.0=py36_0 + - wincertstore=0.2=py36h7fe50ca_0 + - winpty=0.4.3=4 + - wrapt=1.12.1=py36he774522_1 + - xz=5.2.5=h62dcd97_0 + - yarl=1.6.2=py36he774522_0 + - zeromq=4.3.2=ha925a31_3 + - zipp=3.3.1=py_0 + - zlib=1.2.11=vc14h1cdd9ab_1 + - zstd=1.4.9=h19a0ad4_0 + - pip: + - bidict==0.21.3 + - dlib==19.22.1 + - imageio==2.9.0 + - imageio-ffmpeg==0.4.5 + - joblib==1.1.0 + - lru-dict==1.1.7 + - moviepy==1.0.3 + - opencv-python==4.5.3.56 + - overrides==6.1.0 + - proglog==0.1.9 + - pupil-apriltags==1.0.4 + - pupil-pthreads-win==2 + - scikit-learn==0.24.2 + - threadpoolctl==3.0.0 + - tqdm==4.62.3 + - typing-utils==0.1.0 + diff --git a/processing/install_RTGene.py b/processing/install_RTGene.py new file mode 100644 index 0000000..b76027a --- /dev/null +++ b/processing/install_RTGene.py @@ -0,0 +1,19 @@ +import os +import subprocess + +def main(): + + download_cmds = ['git clone https://github.com/Tobias-Fischer/rt_gene.git', + 'mv ./rt_gene ./rt_gene_GIT', + 'mv ./rt_gene_GIT/rt_gene/src/rt_gene/ ./', + 'mv ./rt_gene_GIT/rt_gene/model_nets ./../model_nets'] + + for cmd in download_cmds: + subprocess.call(cmd, shell=True) + from rt_gene.download_tools import download_gaze_tensorflow_models, download_external_landmark_models + download_gaze_tensorflow_models() + download_external_landmark_models() + + +if __name__ == '__main__': + main() diff --git a/processing/process_AprilTag.py b/processing/process_AprilTag.py new file mode 100644 index 0000000..aaff062 --- /dev/null +++ b/processing/process_AprilTag.py @@ -0,0 +1,94 @@ + +import os +from sys import platform +if platform == "linux" or platform == "linux2": + # linux + import apriltag +elif platform == "darwin": + # OS X + import apriltag +elif platform == "win32": + # Windows + import pupil_apriltags as apriltag + +import cv2 +import matplotlib.pyplot as plt +import pandas as pd + +visualize = True + +def process(file): + + VIDEO = file + VIDEOOUT = VIDEO.split("/")[-1].split(".")[0] + ROOT = "/".join(VIDEO.split("/")[:-1]) + "/" + TMP_DIR = "/".join(VIDEO.split("/")[:-2]) + "/temp/" + FRAMES = "%s%s_frames" % (TMP_DIR, VIDEOOUT) + + if not os.path.exists(FRAMES): + print('WARNING: Could not find frame directory') + return + + img_paths = [f for f in os.listdir(FRAMES) if 'jpg' in f] + print('Number of frames: ', len(img_paths)) + + if platform == "linux" or platform == "linux2" or platform == "darwin": + # Circumvent error: too many borders in contour_detect (max of 32767!) + options = apriltag.DetectorOptions(refine_edges=False, quad_contours=False) + detector = apriltag.Detector(options) + elif platform == "win32": + print('WARNING: apriltag2 not supported on windows, running with pupil_apriltags...') + detector = apriltag.Detector(refine_edges=False) + + detections = {} + + if visualize: + fig = plt.Figure(figsize=(15, 10)) + path = os.path.join(FRAMES, img_paths[0]) + + img = cv2.imread(path) + image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + + result = detector.detect(img) + + for i in range(len(result)): + tf = result[i].tag_family + tag_id = result[i].tag_id + cx, cy = result[i].center + # print('Found tag: ', tag_id) + img = cv2.circle(img, (int(cx), int(cy)), 50, (255, 255, 0), thickness=10) + + plt.imshow(image) + plt.axis('off') + #plt.savefig('./AprilTag_Detection_%s.jpg' % VIDEOOUT) + plt.show() + + tags = dict() + for frame, p in enumerate(img_paths): + + path = os.path.join(FRAMES, p) + + img = cv2.imread(path) + img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + + result = detector.detect(img) + + for i in range(len(result)): + tf = result[i].tag_family + cx, cy = result[i].center + tag_id = result[i].tag_id + tags[tag_id] = [cx, cy] + + print('Frame %i found %i tags' % (frame, len(result))) + detections[frame] = tags + + df = pd.DataFrame.from_dict(detections, orient='index') + + path = './AprilTag_%s.pkl' % VIDEOOUT + df.to_pickle(path) + print('Saved AprilTag detections to %s' % path) + + +if __name__ == '__main__': + process('./Data/ShowCase_3.mp4') diff --git a/processing/process_OpenPose.py b/processing/process_OpenPose.py new file mode 100644 index 0000000..324a478 --- /dev/null +++ b/processing/process_OpenPose.py @@ -0,0 +1,412 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # OpenPose pose detection +# 2D real-time multi-person keypoint detection: +# **18**-keypoint body/foot keypoint estimation. Running time invariant to number of detected people +# see https://github.com/CMU-Perceptual-Computing-Lab/openpose +# +# ## Pipeline +# - Run 18-keypoint model on video frames +# - Parse keypoints and PAFs to generate personwise keypoints +# - Save results to OpenPose.pkl + +import os +import numpy as np +import cv2 +import sys +from sys import platform +import time +import pandas as pd +import matplotlib.pyplot as plt + +from tqdm import tqdm, tqdm_pandas + +tqdm.pandas() + +from multiprocessing import cpu_count +from multiprocessing import Pool +import itertools +import os + +os.environ["CUDA_VISIBLE_DEVICES"] = "1" +os.environ["OPENCV_DNN_OPENCL_ALLOW_ALL_DEVICES"] = "1" + +POSE_PAIRS = [[1, 2], [1, 5], [2, 3], [3, 4], [5, 6], [6, 7], [1, 8], [8, 9], [9, 10], [1, 11], [11, 12], [12, 13], + [1, 0], [0, 14], [14, 16], [0, 15], [15, 17], [2, 17], [5, 16]] +keypointsMapping = ['Nose', 'Neck', 'R-Sho', 'R-Elb', 'R-Wr', 'L-Sho', 'L-Elb', 'L-Wr', 'R-Hip', + 'R-Knee', 'R-Ank', 'L-Hip', 'L-Knee', 'L-Ank', 'R-Eye', 'L-Eye', 'R-Ear', 'L-Ear'] +mapIdx = [[31, 32], [39, 40], [33, 34], [35, 36], [41, 42], [43, 44], + [19, 20], [21, 22], [23, 24], [25, 26], [27, 28], [29, 30], + [47, 48], [49, 50], [53, 54], [51, 52], [55, 56], + [37, 38], [45, 46]] + +colors = np.array([(0, 100, 255), (0, 100, 255), (0, 255, 255), (0, 100, 255), (0, 255, 255), (0, 100, 255), + (0, 255, 0), (255, 200, 100), (255, 0, 255), (0, 255, 0), (255, 200, 100), (255, 0, 255), + (0, 0, 255), (255, 0, 0), (200, 200, 0), (255, 0, 0), (200, 200, 0), (0, 0, 0)]) + +my_color = [] +for c in colors: + my_color.append(tuple(c)) + + +# ## Auxiliary Functions +# see https://www.learnopencv.com/deep-learning-based-human-pose-estimation-using-opencv-cpp-python/ +def getKeypoints(probMap, threshold=0.8): + mapSmooth = cv2.GaussianBlur(probMap, (3, 3), 0, 0) + mapMask = np.uint8(mapSmooth > threshold) + keypoints = [] + # find the blobs + contours, _ = cv2.findContours(mapMask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + # for each blob find the maxima + # not enough values to unpack (expected 3, got 2) + # version issue: https://github.com/facebookresearch/maskrcnn-benchmark/issues/339 + for cnt in contours: + blobMask = np.zeros(mapMask.shape) + blobMask = cv2.fillConvexPoly(blobMask, cnt, 1) + maskedProbMap = mapSmooth * blobMask + _, maxVal, _, maxLoc = cv2.minMaxLoc(maskedProbMap) + keypoints.append(maxLoc + (probMap[maxLoc[1], maxLoc[0]],)) + return keypoints + + +# Find valid connections between the different joints of a all persons present +def getValidPairs(output, detected_keypoints, frameWidth, frameHeight): + valid_pairs = [] + invalid_pairs = [] + n_interp_samples = 10 + paf_score_th = 0.1 + conf_th = 0.7 + # loop for every POSE_PAIR + for k in range(len(mapIdx)): + # A->B constitute a limb + pafA = output[mapIdx[k][0], :, :] + pafB = output[mapIdx[k][1], :, :] + pafA = cv2.resize(pafA, (frameWidth, frameHeight)) + pafB = cv2.resize(pafB, (frameWidth, frameHeight)) + # Find the keypoints for the first and second limb + candA = detected_keypoints[POSE_PAIRS[k][0]] + candB = detected_keypoints[POSE_PAIRS[k][1]] + nA = len(candA) + nB = len(candB) + # If keypoints for the joint-pair is detected + # check every joint in candA with every joint in candB + # Calculate the distance vector between the two joints + # Find the PAF values at a set of interpolated points between the joints + # Use the above formula to compute a score to mark the connection valid + if (nA != 0 and nB != 0): + valid_pair = np.zeros((0, 3)) + for i in range(nA): + max_j = -1 + maxScore = -1 + found = 0 + for j in range(nB): + # Find d_ij + d_ij = np.subtract(candB[j][:2], candA[i][:2]) + norm = np.linalg.norm(d_ij) + if norm: + d_ij = d_ij / norm + else: + continue + # Find p(u) + interp_coord = list(zip(np.linspace(candA[i][0], candB[j][0], num=n_interp_samples), + np.linspace(candA[i][1], candB[j][1], num=n_interp_samples))) + # Find L(p(u)) + paf_interp = [] + for k in range(len(interp_coord)): + paf_interp.append([pafA[int(round(interp_coord[k][1])), int(round(interp_coord[k][0]))], + pafB[int(round(interp_coord[k][1])), int(round(interp_coord[k][0]))]]) + # Find E + paf_scores = np.dot(paf_interp, d_ij) + avg_paf_score = sum(paf_scores) / len(paf_scores) + # Check if the connection is valid + # If the fraction of interpolated vectors aligned with PAF is higher then threshold -> Valid Pair + if (len(np.where(paf_scores > paf_score_th)[0]) / n_interp_samples) > conf_th: + if avg_paf_score > maxScore: + max_j = j + maxScore = avg_paf_score + found = 1 + # Append the connection to the list + if found: + valid_pair = np.append(valid_pair, [[candA[i][3], candB[max_j][3], maxScore]], axis=0) + # Append the detected connections to the global list + valid_pairs.append(valid_pair) + else: # If no keypoints are detected + # ATTENTION: Commented this out by Sven + # print("No Connection : k = {}".format(k)) + invalid_pairs.append(k) + valid_pairs.append([]) + return valid_pairs, invalid_pairs + + +# This function creates a list of keypoints belonging to each person +# For each detected valid pair, it assigns the joint(s) to a person +def getPersonwiseKeypoints(valid_pairs, invalid_pairs, keypoints_list): + # the last number in each row is the overall score + personwiseKeypoints = -1 * np.ones((0, 19)) + for k in range(len(mapIdx)): + if k not in invalid_pairs: + partAs = valid_pairs[k][:, 0] + partBs = valid_pairs[k][:, 1] + indexA, indexB = np.array(POSE_PAIRS[k]) + for i in range(len(valid_pairs[k])): + found = 0 + person_idx = -1 + for j in range(len(personwiseKeypoints)): + if personwiseKeypoints[j][indexA] == partAs[i]: + person_idx = j + found = 1 + break + if found: + personwiseKeypoints[person_idx][indexB] = partBs[i] + personwiseKeypoints[person_idx][-1] += keypoints_list[partBs[i].astype(int), 2] + valid_pairs[k][i][ + 2] + # if find no partA in the subset, create a new subset + elif not found and k < 17: + row = -1 * np.ones(19) + row[indexA] = partAs[i] + row[indexB] = partBs[i] + # add the keypoint_scores for the two keypoints and the paf_score + row[-1] = sum(keypoints_list[valid_pairs[k][i, :2].astype(int), 2]) + valid_pairs[k][i][2] + personwiseKeypoints = np.vstack([personwiseKeypoints, row]) + return personwiseKeypoints + + +def f(probMap): + threshold = 0.5 + return getKeypoints(probMap, threshold) + + +def getPose(output): + detected_keypoints = [] + keypoints_list = np.zeros((0, 3)) + keypoint_id = 0 + + threshold = 0.5 + keypointsList = [] + + for part in range(18): + probMap = output[part, :, :] + probMap = cv2.resize(probMap, (frameWidth, frameHeight)) + keypointsList.append(getKeypoints(probMap, threshold)) + + for keypoints in keypointsList: # nPoints = 18 + keypoints_with_id = [] + for i in range(len(keypoints)): + keypoints_with_id.append(keypoints[i] + (keypoint_id,)) + keypoints_list = np.vstack([keypoints_list, keypoints[i]]) + keypoint_id += 1 + detected_keypoints.append(keypoints_with_id) + + valid_pairs, invalid_pairs = getValidPairs(output, detected_keypoints, frameWidth, frameHeight) + personwiseKeypoints = getPersonwiseKeypoints(valid_pairs, invalid_pairs, keypoints_list) + + return detected_keypoints, keypoints_list, personwiseKeypoints + + +"""Forward array of 20 images""" + + +def getPoseFromDNN(net, images, frameWidth, frameHeight): + inHeight = 368 + inWidth = int((inHeight / frameHeight) * frameWidth) + inpBlob = cv2.dnn.blobFromImages(np.array(images), 1.0 / 255, (inWidth, inHeight), (0, 0, 0), swapRB=False, + crop=False) + # Set the prepared object as the input blob of the network + net.setInput(inpBlob) + + output = net.forward() + return output + + +def visualize(image, df, frame): + number_ids = len([col for col in df.columns if 'ID' in col]) + data = df.loc[df['Frame'] == frame] + plt.imshow(image) + plt.axis('off') + for id_no in range(number_ids): + keypoints = df['ID%i_Keypoints' % id_no].iloc[frame] + for i in range(len(POSE_PAIRS)): + index = POSE_PAIRS[i] + A, B = keypoints[index] + # for idx in index: + # print(keypointsMapping[idx]) + if A is not None and B is not None: + plt.plot((A[0], B[0]), (A[1], B[1]), c=colors[i]) + + plt.show() + +def process(file): + global get_keypoints + + POSE_PROTO_FILE = r"openpose/pose_deploy_linevec.prototxt" + POSE_WEIGHTS_FILE = r"openpose/pose_iter_440000.caffemodel" + + if not os.path.exists(POSE_PROTO_FILE): + print('WARNING: Could not find pose file %s' % POSE_PROTO_FILE) + return + if not os.path.exists(POSE_WEIGHTS_FILE): + print('WARNING: Could not find model weights file %s' % POSE_WEIGHTS_FILE) + return + + VIDEO = file + ROOT = "/".join(VIDEO.split("/")[:-1]) + "/" + VIDEOOUT = VIDEO.split("/")[-1].split(".")[0] + TMP_DIR = "/".join(VIDEO.split("/")[:-2]) + "/temp/" + FRAMES = "%s%s_frames" % (TMP_DIR, VIDEOOUT) + + if not os.path.exists(FRAMES): + print('WARNING: Could not find frame directory') + return + + # Load Model # + net = cv2.dnn.readNetFromCaffe(POSE_PROTO_FILE, POSE_WEIGHTS_FILE) + net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) + net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA) + + path_list = [f for f in os.listdir(FRAMES) if '.jpg' in f] + path_list.sort() + + image = cv2.imread(os.path.join(FRAMES, path_list[0])) + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + frameWidth = image.shape[1] + frameHeight = image.shape[0] + + lst = [] + images = [] + for frame, path in enumerate(tqdm(path_list)): + image = cv2.imread(os.path.join(FRAMES, path)) + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + images.append(image) + + if len(images) == 20: + output = getPoseFromDNN(net, images, frameWidth, frameHeight) + lst.extend(output) + images = [] + + if len(images) != 0: + output = getPoseFromDNN(net, images, frameWidth, frameHeight) + lst.extend(output) + images = [] + + print(len(lst)) + df = pd.DataFrame(range(len(lst))) + df.columns = ["Frame"] + df["Pose"] = lst + + path = "%s%s_OpenPose_raw.pkl" % (TMP_DIR, VIDEOOUT) + df.to_pickle(path) + + def get_keypoints(frames): + ret = [] + for f in frames: + output = df[df.Frame == f].Pose.iloc[0] + ret.append(getPose(output)) + return ret + + if platform == "linux" or platform == "linux2" or platform == "darwin": + cores = max(4, cpu_count() - 4) + print('Run sorting on {} cores'.format(cores)) + data_split = np.array_split(df.Frame, cores) + pool = Pool(cores) + data = pool.map(get_keypoints, data_split) + pool.close() + pool.join() + elif platform == "win32": + print('WARNING: Can\'t run multiprocessing on Windows, this might take a while...') + data = get_keypoints(df.Frame) + else: + print('WARNING: platform not supported') + + x = np.vstack(data) + df["DetectedKeypoints"] = x[:, 0] + df["KeypointsList"] = x[:, 1] + df["PersonwiseKeypoints"] = x[:, 2] + df.head() + + path = "%s%s_OpenPose.pkl" % (TMP_DIR, VIDEOOUT) + df.to_pickle(path) + print("Saved OpenPose detections to %s" % path) + + del df["Pose"] + del df['Pic'] + del df['DetectedKeypoints'] + + number_ids = len(df.PersonwiseKeypoints.values.flatten()[0]) + print('Number of detected IDs: ', number_ids) + + """Map personwise keypoints to list of keypoints for each ID""" + def keypoints_fun(x): + # Discard frames where not all ids detected + if len(x.PersonwiseKeypoints) < number_ids: + # print('None') + return None + # index is -1 for no detection >> keypoint = None + lst = list(x.KeypointsList) + lst.append(None) + lst = np.array(lst) + + keypoints = lst[x.PersonwiseKeypoints[id_no].astype(int)[:18]] + return keypoints + + for id_no in range(number_ids): + counter = 0 + print('ID%i' % id_no) + col = 'ID%i_Keypoints' % id_no + + df[col] = df.apply(keypoints_fun, axis=1) + + """Sort IDs to be consistent throughout video""" + lst = [] + columns = [col for col in df.columns if 'ID' in col] + data = df[columns] + + lst.append(data.iloc[0].values) + + for i in range(1, len(df.Frame)): + row = data.iloc[i] + lst2 = [] + for ids in range(number_ids): + keypoints = row['ID%i_Keypoints' % ids] + + if keypoints is not None and keypoints[1] is not None: + for j in range(number_ids): + backtrack = 1 + while lst[i - backtrack][j] == None: + backtrack = backtrack + 1 + keypoints2 = lst[i - backtrack][j] + + lst2.append([ids, j, np.linalg.norm(np.array(keypoints[1]) - np.array(keypoints2[1])), keypoints]) + else: + lst2.append([ids, None, None, None]) + dfX = pd.DataFrame(lst2) + dfX.columns = ["Id", "GtId", "Distance", "Keypoints"] + dfX = dfX.sort_values("Distance") + dfX = dfX.drop_duplicates("GtId").drop_duplicates("Id") + lstRow = [] + for j in range(number_ids): + if (len(dfX[dfX.GtId == j]) > 0): + lstRow.append(dfX[dfX.GtId == j].iloc[0].Keypoints) + else: + lstRow.append(None) + lstRow.append(i) + lst.append(lstRow) + + df_new = pd.DataFrame(lst) + columns = [] + for i in range(number_ids): + columns.append('ID%i_Keypoints' % i) + columns.append("Frame") + df_new.columns = columns + + # First frame number is NaN from sorting + df_new.Frame = df_new.Frame.fillna(0) + df_new = df_new.astype({'Frame': 'int32'}) + + path = "%s%s_BodyMovement.pkl" % (TMP_DIR, VIDEOOUT) + df_new.to_pickle(path) + print('Saved Body Movement to %s' % path) + + visualize(image, df_new, 0) + + diff --git a/processing/process_RTGene.py b/processing/process_RTGene.py new file mode 100644 index 0000000..083948c --- /dev/null +++ b/processing/process_RTGene.py @@ -0,0 +1,363 @@ +import tensorflow as tf + +import sys +import os +import argparse + +import cv2 +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.patches as patches +from tqdm.notebook import tqdm + +from rt_gene.gaze_tools import get_phi_theta_from_euler, limit_yaw +from rt_gene.extract_landmarks_method_base import LandmarkMethodBase +from rt_gene.estimate_gaze_base import GazeEstimatorBase +from rt_gene.estimate_gaze_tensorflow import GazeEstimator +from rt_gene.gaze_tools_standalone import euler_from_matrix + +import itertools +import pandas as pd + +#os.environ["CUDA_VISIBLE_DEVICES"]="1" + +def getCenter(box): + return np.array([box[2]+box[0], box[3]+box[1]])/2 + +def load_camera_calibration(calibration_file): + + fileType = calibration_file.split(".")[-1] + if fileType == "pkl": + import pickle + infile = open(calibration_file,'rb') + data = pickle.load(infile) + return data["distortion_coef"], data["camera_matrix"] + elif fileType == "yaml": + import yaml + with open(calibration_file, 'r') as f: + cal = yaml.safe_load(f) + + dist_coefficients = np.array(cal['distortion_coefficients']['data'], dtype='float32').reshape(1, 5) + camera_matrix = np.array(cal['camera_matrix']['data'], dtype='float32').reshape(3, 3) + + return dist_coefficients, camera_matrix + + +def extract_eye_image_patches(subjects, landmark_estimator): + for subject in subjects: + le_c, re_c, _, _ = subject.get_eye_image_from_landmarks(subject, landmark_estimator.eye_image_size) + subject.left_eye_color = le_c + subject.right_eye_color = re_c + + +def estimate_gaze(base_name, color_img, landmark_estimator, gaze_estimator, dist_coefficients, camera_matrix, args): + faceboxes = landmark_estimator.get_face_bb(color_img) + if len(faceboxes) == 0: + tqdm.write('Could not find faces in the image') + return + + subjects = landmark_estimator.get_subjects_from_faceboxes(color_img, faceboxes) + extract_eye_image_patches(subjects, landmark_estimator) + + input_r_list = [] + input_l_list = [] + input_head_list = [] + valid_subject_list = [] + roll_pitch_yaw_list = [] + + for idx, subject in enumerate(subjects): + if subject.left_eye_color is None or subject.right_eye_color is None: + #tqdm.write('Failed to extract eye image patches') + continue + + success, rotation_vector, _ = cv2.solvePnP(landmark_estimator.model_points, + subject.landmarks.reshape(len(subject.landmarks), 1, 2), + cameraMatrix=camera_matrix, + distCoeffs=dist_coefficients, flags=cv2.SOLVEPNP_DLS) + + if not success: + tqdm.write('Not able to extract head pose for subject {}'.format(idx)) + continue + + _rotation_matrix, _ = cv2.Rodrigues(rotation_vector) + _rotation_matrix = np.matmul(_rotation_matrix, np.array([[0, 1, 0], [0, 0, -1], [-1, 0, 0]])) + _m = np.zeros((4, 4)) + _m[:3, :3] = _rotation_matrix + _m[3, 3] = 1 + # Go from camera space to ROS space + _camera_to_ros = [[0.0, 0.0, 1.0, 0.0], + [-1.0, 0.0, 0.0, 0.0], + [0.0, -1.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1.0]] + roll_pitch_yaw = list(euler_from_matrix(np.dot(_camera_to_ros, _m))) + roll_pitch_yaw = limit_yaw(roll_pitch_yaw) + roll_pitch_yaw_list.append(roll_pitch_yaw) + + phi_head, theta_head = get_phi_theta_from_euler(roll_pitch_yaw) + + face_image_resized = cv2.resize(subject.face_color, dsize=(224, 224), interpolation=cv2.INTER_CUBIC) + head_pose_image = landmark_estimator.visualize_headpose_result(face_image_resized, (phi_head, theta_head)) + + if args['vis_headpose']: + plt.axis("off") + plt.imshow(cv2.cvtColor(head_pose_image, cv2.COLOR_BGR2RGB)) + plt.show() + + if args['save_headpose']: + cv2.imwrite(os.path.join(args['output_path'], os.path.splitext(base_name)[0] + '_headpose.jpg'), head_pose_image) + + input_r_list.append(gaze_estimator.input_from_image(subject.right_eye_color)) + input_l_list.append(gaze_estimator.input_from_image(subject.left_eye_color)) + input_head_list.append([theta_head, phi_head]) + valid_subject_list.append(idx) + + if len(valid_subject_list) == 0: + return + + gaze_est = gaze_estimator.estimate_gaze_twoeyes(inference_input_left_list=input_l_list, + inference_input_right_list=input_r_list, + inference_headpose_list=input_head_list) + + file_base = os.path.splitext(base_name)[0] + file = "_".join(file_base.split("_")[:-1]) + frame = int(file_base.split("_")[-1]) + ret = [] + for subject_id, gaze, headpose, roll_pitch_yaw in zip(valid_subject_list, gaze_est.tolist(), input_head_list, roll_pitch_yaw_list): + subject = subjects[subject_id] + #print(roll_pitch_yaw) + # Build visualizations + r_gaze_img = gaze_estimator.visualize_eye_result(subject.right_eye_color, gaze) + l_gaze_img = gaze_estimator.visualize_eye_result(subject.left_eye_color, gaze) + s_gaze_img = np.concatenate((r_gaze_img, l_gaze_img), axis=1) + + if args['vis_gaze']: + plt.axis("off") + plt.imshow(cv2.cvtColor(s_gaze_img, cv2.COLOR_BGR2RGB)) + plt.show() + + if args['save_gaze']: + cv2.imwrite(os.path.join(args['output_path'], os.path.splitext(base_name)[0] + '_gaze.jpg'), s_gaze_img) + # cv2.imwrite(os.path.join(args.output_path, os.path.splitext(base_name)[0] + '_left.jpg'), subject.left_eye_color) + # cv2.imwrite(os.path.join(args.output_path, os.path.splitext(base_name)[0] + '_right.jpg'), subject.right_eye_color) + + if args['save_estimate']: + with open(os.path.join(args['output_path'], os.path.splitext(base_name)[0] + '_output.txt'), 'w+') as f: + f.write(os.path.splitext(base_name)[0] + ', [' + str(headpose[1]) + ', ' + str(headpose[0]) + ']' + + ', [' + str(gaze[1]) + ', ' + str(gaze[0]) + ']' + '\n') + # Phi: pos - look down, neg - look up + # Theta: pos - rotate left, neg - rotate right + d = {"File":file, "Frame": frame, "SubjectId":subject_id, "HeadBox":subject.box, "Landmarks": subject.landmarks, "GazeTheta":gaze[0], "GazePhi":gaze[1], "HeadPoseTheta":headpose[0], "HeadPosePhi":headpose[1], "HeadPoseRoll":roll_pitch_yaw[0], "HeadPosePitch":roll_pitch_yaw[1], "HeadPoseYaw":roll_pitch_yaw[2]} + ret.append(d) + + return ret + + +def visualize(df, FRAMES): + path_list = [f for f in os.listdir(FRAMES) if '.jpg' in f] + path_list.sort() + + image = cv2.imread(os.path.join(FRAMES, path_list[0])) + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + + fig, ax = plt.subplots(1, figsize=(18,10)) + + for i in range(len(df.SubjectId.unique())): + bbox = df.loc[(df.Frame == 0) & (df.SubjectId == i)]['HeadBox'].values + print(bbox) + if not np.any(pd.isna(bbox)) and len(bbox) > 0: + bbox = np.array(bbox[0]) + rect = patches.Rectangle((bbox[0],bbox[1]),bbox[2]-bbox[0],bbox[3]-bbox[1],linewidth=1,edgecolor='c',facecolor='none') + plt.text(bbox[0], bbox[1], 'ID%i' % i, color='c' ,fontsize=20) + ax.add_patch(rect) + + ax.imshow(image) + plt.show() + + +def visualize_sorting(df_sorted): + subs = sorted(df_sorted[~df_sorted.PId.isna()].PId.unique()) + for sid in subs: + x = df_sorted[df_sorted.PId==sid].HeadCenter.apply(lambda x: x[0]) + y = df_sorted[df_sorted.PId==sid].HeadCenter.apply(lambda x: x[1]) + frames = df_sorted[df_sorted.PId==sid].Frame.to_list() + plt.scatter(frames, x, alpha=.2, label = "Sub %i" % sid) + plt.legend() + plt.show() + + +def process(file, maxPeople, cameraRes = [5760, 2880]): + + VIDEO = file + VIDEOOUT = VIDEO.split("/")[-1].split(".")[0] + ROOT = "/".join(VIDEO.split("/")[:-1]) + "/" + TMP_DIR = "/".join(VIDEO.split("/")[:-2]) + "/temp/" + FRAMES = "%s%s_frames" % (TMP_DIR, VIDEOOUT) + + if not os.path.exists(VIDEO): + print('WARNING: Could not find video file') + return + + script_path = "./" + + args = {} + args["calib_file"] = "./calib_insta.pkl" + args["vis_headpose"] = False # store_false + args["save_headpose"] = False # store_false + args["vis_gaze"] = False # store_false + args["save_gaze"] = False # store_false + args["save_estimate"] = False # store_false + args["device_id_facedetection"] = "cuda:0" # store_false + + args["im_path"] = os.path.join(script_path, './samples_gaze/') + args["output_path"] = os.path.join(script_path, './samples_gaze/') + args["models"] = [os.path.join(script_path, '../model_nets/Model_allsubjects1.h5')] + args['gaze_backend'] = 'tensorflow' + tqdm.write('Loading networks') + landmark_estimator = LandmarkMethodBase(device_id_facedetection=args["device_id_facedetection"], + checkpoint_path_face=os.path.join(script_path, + "../model_nets/SFD/s3fd_facedetector.pth"), + checkpoint_path_landmark=os.path.join(script_path, + "../model_nets/phase1_wpdc_vdc.pth.tar"), + model_points_file=os.path.join(script_path, + "../model_nets/face_model_68.txt")) + + #gaze_estimator = GazeEstimator("/gpu:0", args['models']) + + if args['gaze_backend'] == "tensorflow": + from rt_gene.estimate_gaze_tensorflow import GazeEstimator + gaze_estimator = GazeEstimator("/gpu:0", args['models']) + elif args['gaze_backend'] == "pytorch": + from rt_gene.estimate_gaze_pytorch import GazeEstimator + + gaze_estimator = GazeEstimator("cuda:0", args['models']) + else: + raise ValueError("Incorrect gaze_base backend, choices are: tensorflow or pytorch") + + if not os.path.isdir(args["output_path"]): + os.makedirs(args["output_path"]) + + video = cv2.VideoCapture(VIDEO) + print('Video frame count: ', video.get(cv2.CAP_PROP_FRAME_COUNT)) + + if args["calib_file"] is not None and os.path.exists(args["calib_file"]): + _dist_coefficients, _camera_matrix = load_camera_calibration(args["calib_file"]) + else: + im_width = video.get(cv2.CAP_PROP_FRAME_WIDTH) + im_height = video.get(cv2.CAP_PROP_FRAME_HEIGHT) + print('WARNING!!! You should provide the camera calibration file, otherwise you might get bad results. \n\ + Using a crude approximation!') + _dist_coefficients, _camera_matrix = np.zeros((1, 5)), np.array( + [[im_height, 0.0, im_width / 2.0], [0.0, im_height, im_height / 2.0], [0.0, 0.0, 1.0]]) + + lstRet = [] + for i in tqdm(list(range(int(video.get(cv2.CAP_PROP_FRAME_COUNT))))): + + image_file_name = "%s_%i.XXX" % (os.path.splitext(VIDEO)[0], i) + ret, image = video.read() + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + + lstRet.append(estimate_gaze(image_file_name, image, landmark_estimator, gaze_estimator, _dist_coefficients, _camera_matrix, args)) + + lst = list(itertools.chain.from_iterable(lstRet)) + df = pd.DataFrame(lst) + df["HeadCenter"] = df.HeadBox.apply(lambda x: getCenter(x)) + df["Phi"] = df.GazePhi + df.HeadPosePhi # gaze yaw + df["Theta"] = df.GazeTheta + df.HeadPoseTheta # gaze pitch + df['Yaw'] = df.GazePhi + df.HeadPoseYaw + df['Pitch'] = df.GazeTheta + df.HeadPosePitch + + # path = '%s%s_raw.pkl' % (TMP_DIR, VIDEOOUT) + # df.to_pickle(path) + # print('Saved raw detections to: ', path) + + visualize(df, FRAMES) + + # Sort ID detections + ############################################################################################################### + + # Find first frame where all are detected + for frame in sorted(df.Frame.unique()): + frame_df = df.loc[df.Frame == frame] + if len(frame_df['SubjectId'].unique()) == maxPeople: + first_frame = frame + print('First frame where all are detected: ', first_frame) + break + + empty_rows = pd.DataFrame() + empty_rows['Frame'] = np.zeros(maxPeople).astype(int) + + for col in df.columns: + if not col == 'Frame': + empty_rows[col] = df.loc[df.Frame == first_frame, [col]].values + + df = df.loc[df.Frame != 0] + df = df.append(empty_rows).sort_values(by=['Frame']) + df.head() + + df_sorted = df.copy() + df_sorted["PId"] = None + df_sorted.loc[df_sorted.Frame == 0, "PId"] = list(range(maxPeople)) + df_sorted = df_sorted.sort_values("Frame") + df_sorted.index = list(range(len(df_sorted))) + + for frameId in tqdm(sorted(df_sorted.Frame.unique())[1:]): + pidAssignement = [] + for frameIdBefore in range(frameId - 1, -1, -1): + allFramesBefore = df_sorted[(df_sorted.Frame == frameIdBefore) & (~df_sorted.PId.isna())] + if (np.array_equal(sorted(allFramesBefore.PId.to_list()), np.arange(maxPeople))): + + dfFramesCurrent = df_sorted[df_sorted.Frame == frameId] + for indexCurrentFrame, frameCurrent in dfFramesCurrent.iterrows(): + + lst = [] + for indexBeforeFrame, frameBefore in allFramesBefore.iterrows(): + if (frameBefore.HeadCenter[0] > frameCurrent.HeadCenter[0]): + p1 = np.array(frameCurrent.HeadCenter) + p2 = np.array(frameBefore.HeadCenter) + else: + p1 = np.array(frameBefore.HeadCenter) + p2 = np.array(frameCurrent.HeadCenter) + + v1 = p1 - p2 + dist1 = np.linalg.norm(v1) + + p1[0] = p1[0] + cameraRes[0] + v2 = p1 - p2 + dist2 = np.linalg.norm(v2) + + dist = min([dist1, dist2]) + + lst.append([dist, frameCurrent.name, indexBeforeFrame, frameBefore]) + + lst.sort(key=lambda x: x[0]) + pidAssignement.append([indexCurrentFrame, lst[0][-1].PId]) + + break + for index, pid in pidAssignement: + df_sorted.loc[df_sorted.index == index, "PId"] = pid + + visualize_sorting(df_sorted) + + del df_sorted["SubjectId"] + + # Rearrange DataFrame: each ID has specific columns + ############################################################################################################### + df_sorted = df_sorted[~df_sorted.PId.isna()].drop_duplicates(subset=['Frame', 'PId']) + FACE_COUNT = len(df_sorted[~df_sorted.PId.isna()].PId.unique()) + + df2 = df_sorted.pivot(index='Frame', columns="PId", + values=["Landmarks", "GazeTheta", "GazePhi", "HeadCenter", "HeadPoseTheta", "HeadPosePhi", + "HeadPoseYaw", "HeadPosePitch", "HeadPoseRoll", "Phi", "Theta"]) + lst = [] + for label in ["Landmarks", "GazeTheta", "GazePhi", "Head", "HeadPoseTheta", "HeadPosePhi", "HeadPoseYaw", + "HeadPosePitch", "HeadPoseRoll", "Phi", "Theta"]: + for head_id in range(FACE_COUNT): + lst.append("ID%i_%s" % (head_id, label)) + + df2.columns = lst + df2 = df2.reset_index() + + path = "%s%s_RTGene.pkl" % (TMP_DIR, VIDEOOUT) + df2.to_pickle(path) + print("Saved RT-Gene detections to %s" % path) +