{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial 7: Video analysis\n", "\n", "The principles of video analysis and image analysis are similar: instead of images, single video frames are segmented into foreground and background, and the extracted information is processed after all frames have been analyzed (e.g. frame-wise location is converted into trajectories). However, a big advantage is that differences among consecutive frames can be used to train a background model from which the foreground can segmented. This is called foreground-background subtraction.\n", "\n", "Currently the tracking module works standalone and uses only few routines of the phenopype core modules. Future releases may feature a better integration with the different phenopype workflows. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", " \n", "![](_figures/tracking1.gif)\n", " \n", "
\n", "
\n", "\n", "![](_figures/tracking2.png)\n", "\n", "
\n", " \n", "**Fig. 1:** The motion tracker module enables the tracking of multiple objects that can be distinguished by size. For example, it is possible to record and separate the movement of both fish (red) and all 20 isopods (green) in this predator-prey interaction experiment. \n", " \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Further resources related to this tutorial\n", "\n", "\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The motion tracker class\n", "\n", "First, the `motion_tracker` class needs to be initizalized with a video-path to collect basic information about the input video. Specifying video output is optional: the tracking procedure can be run without saving any record of the tracking-results, but only the results (i.e. just a csv with coordinates and no video). Should the `video_ouput` method be called then it will save an output video with similar properties (codec, dimensions, fps.) of the input file. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import phenopype as pp\n", "import os\n", "\n", "os.chdir(r\"D:\\workspace\\git-repos\\phenopype\\phenopype-tutorials\")\n", "\n", "video_path = r\"tutorials/data/isopods_fish.mp4\"\n", "out_dir = r\"_temp/video\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "--------------------------------------------------------------\n", "Input video properties - \"isopods_fish.mp4\":\n", "\n", "Frames per second: 29.97000099996667\n", "N frames: 450\n", "Length: 00:15 (mm:ss)\n", "Dimensions: (960, 540)\n", "Colour video: True\n", "FourCC code: avc1\n", "--------------------------------------------------------------\n" ] } ], "source": [ "mt = pp.motion_tracker(video_path)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "--------------------------------------------------------------\n", "Output video settings - \"isopods_fish.mp4\":\n", "\n", "Save name: isopods_fish_v1.mp4\n", "Save dir: D:\\workspace\\git-repos\\phenopype\\phenopype-tutorials\\_temp\\video\n", "Frames per second: 29.97000099996667\n", "Dimensions: (960, 540)\n", "Colour video: True\n", "Format (FourCC code): avc1\n", "--------------------------------------------------------------\n" ] } ], "source": [ "mt.video_output(save_suffix=\"v1\", \n", " dirpath=out_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tracking settings \n", "Now the settings for the tracking methods need to be set. Depending on the input video the default settings may work. In that case we don't have to do everthing and the the `run_tracking`-method conducts motion tracking with default settings. However, typically adjust some setting will provide cleaner results." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "--------------------------------------------------------------\n", "Motion detection settings - \"isopods_fish.mp4\":\n", "\n", "Background-subtractor: MOG\n", "History: 60 seconds\n", "Sensitivity: 10\n", "Read every nth frame: 5\n", "Detect shadows: True\n", "Start after n seconds: 1\n", "Finish after n seconds: - \n", "--------------------------------------------------------------\n" ] } ], "source": [ "mt.detection_settings(skip=5, # only capture every 5th frame (that's still a lot given 30 fps!)\n", " start_after=1, # skip the first second of the video\n", " threshold=10, # lower values = more sensitive fg-bg subtraction\n", " detect_shadows=True, # attempt to detect shadows\n", " history=60) # how many seconds can a previously moving pixel sit still " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If no specific `tracking_method` [see below](#Tracking-methods) is selected, the output window will just return the results of the foreground-background subtraction: the foreground mas. Everything that is white will be detected and can be recorded, everything that is gray is identified as shadow (and can be removed), and everything else is background. \n", "\n", "
\n", "
\n", " \n", "![Foreground mask](_figures/tracking3.jpg)\n", " \n", "**Fig. 2:** The output of foreground-background subtraction is a binary mask. Overlaying that mask back onto the original video can be used to extract phenotypic information.\n", " \n", "
\n", "
" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:00/00:15 - Frames: 1/450\n", "Time: 00:00/00:15 - Frames: 2/450\n", "Time: 00:00/00:15 - Frames: 3/450\n", "Time: 00:00/00:15 - Frames: 4/450\n", "Time: 00:00/00:15 - Frames: 5/450\n", "Time: 00:00/00:15 - Frames: 6/450\n", "Time: 00:00/00:15 - Frames: 7/450\n", "Time: 00:00/00:15 - Frames: 8/450\n", "Time: 00:00/00:15 - Frames: 9/450\n", "Time: 00:00/00:15 - Frames: 10/450\n", "Time: 00:00/00:15 - Frames: 11/450\n", "Time: 00:00/00:15 - Frames: 12/450\n", "Time: 00:00/00:15 - Frames: 13/450\n", "Time: 00:00/00:15 - Frames: 14/450\n", "Time: 00:00/00:15 - Frames: 15/450\n", "Time: 00:00/00:15 - Frames: 16/450\n", "Time: 00:00/00:15 - Frames: 17/450\n", "Time: 00:00/00:15 - Frames: 18/450\n", "Time: 00:00/00:15 - Frames: 19/450\n", "Time: 00:00/00:15 - Frames: 20/450\n", "Time: 00:00/00:15 - Frames: 21/450\n", "Time: 00:00/00:15 - Frames: 22/450\n", "Time: 00:00/00:15 - Frames: 23/450\n", "Time: 00:00/00:15 - Frames: 24/450\n", "Time: 00:00/00:15 - Frames: 25/450\n", "Time: 00:00/00:15 - Frames: 26/450\n", "Time: 00:00/00:15 - Frames: 27/450\n", "Time: 00:00/00:15 - Frames: 28/450\n", "Time: 00:00/00:15 - Frames: 29/450\n", "Time: 00:01/00:15 - Frames: 30/450 - captured\n", "Time: 00:01/00:15 - Frames: 31/450\n", "Time: 00:01/00:15 - Frames: 32/450\n", "Time: 00:01/00:15 - Frames: 33/450\n", "Time: 00:01/00:15 - Frames: 34/450\n", "Time: 00:01/00:15 - Frames: 35/450 - captured\n", "Time: 00:01/00:15 - Frames: 36/450\n", "Time: 00:01/00:15 - Frames: 37/450\n", "Time: 00:01/00:15 - Frames: 38/450\n", "Time: 00:01/00:15 - Frames: 39/450\n", "Time: 00:01/00:15 - Frames: 40/450 - captured\n", "Time: 00:01/00:15 - Frames: 41/450\n", "Time: 00:01/00:15 - Frames: 42/450\n", "Time: 00:01/00:15 - Frames: 43/450\n", "Time: 00:01/00:15 - Frames: 44/450\n", "Time: 00:01/00:15 - Frames: 45/450 - captured\n", "Time: 00:01/00:15 - Frames: 46/450\n", "Time: 00:01/00:15 - Frames: 47/450\n", "Time: 00:01/00:15 - Frames: 48/450\n", "Time: 00:01/00:15 - Frames: 49/450\n", "Time: 00:01/00:15 - Frames: 50/450 - captured\n", "Time: 00:01/00:15 - Frames: 51/450\n", "Time: 00:01/00:15 - Frames: 52/450\n", "Time: 00:01/00:15 - Frames: 53/450\n", "Time: 00:01/00:15 - Frames: 54/450\n", "Time: 00:01/00:15 - Frames: 55/450 - captured\n", "Time: 00:01/00:15 - Frames: 56/450\n", "Time: 00:01/00:15 - Frames: 57/450\n", "Time: 00:01/00:15 - Frames: 58/450\n", "Time: 00:01/00:15 - Frames: 59/450\n", "Time: 00:02/00:15 - Frames: 60/450 - captured\n", "Time: 00:02/00:15 - Frames: 61/450\n", "Time: 00:02/00:15 - Frames: 62/450\n", "Time: 00:02/00:15 - Frames: 63/450\n", "Time: 00:02/00:15 - Frames: 64/450\n", "Time: 00:02/00:15 - Frames: 65/450 - captured\n", "Time: 00:02/00:15 - Frames: 66/450\n", "Time: 00:02/00:15 - Frames: 67/450\n", "Time: 00:02/00:15 - Frames: 68/450\n", "Time: 00:02/00:15 - Frames: 69/450\n", "Time: 00:02/00:15 - Frames: 70/450 - captured\n", "Time: 00:02/00:15 - Frames: 71/450\n", "Time: 00:02/00:15 - Frames: 72/450\n", "Time: 00:02/00:15 - Frames: 73/450\n", "Time: 00:02/00:15 - Frames: 74/450\n", "Time: 00:02/00:15 - Frames: 75/450 - captured\n", "Time: 00:02/00:15 - Frames: 76/450\n", "Time: 00:02/00:15 - Frames: 77/450\n", "Time: 00:02/00:15 - Frames: 78/450\n", "Time: 00:02/00:15 - Frames: 79/450\n", "Time: 00:02/00:15 - Frames: 80/450 - captured\n", "Time: 00:02/00:15 - Frames: 81/450\n", "Time: 00:02/00:15 - Frames: 82/450\n", "Time: 00:02/00:15 - Frames: 83/450\n", "Time: 00:02/00:15 - Frames: 84/450\n", "Time: 00:02/00:15 - Frames: 85/450 - captured\n", "Time: 00:02/00:15 - Frames: 86/450\n", "Time: 00:02/00:15 - Frames: 87/450\n", "Time: 00:02/00:15 - Frames: 88/450\n", "Time: 00:02/00:15 - Frames: 89/450\n", "Time: 00:03/00:15 - Frames: 90/450 - captured\n", "Time: 00:03/00:15 - Frames: 91/450\n", "Time: 00:03/00:15 - Frames: 92/450\n", "Time: 00:03/00:15 - Frames: 93/450\n", "Time: 00:03/00:15 - Frames: 94/450\n", "Time: 00:03/00:15 - Frames: 95/450 - captured\n", "Time: 00:03/00:15 - Frames: 96/450\n", "Time: 00:03/00:15 - Frames: 97/450\n", "Time: 00:03/00:15 - Frames: 98/450\n", "Time: 00:03/00:15 - Frames: 99/450\n", "Time: 00:03/00:15 - Frames: 100/450 - captured\n", "Time: 00:03/00:15 - Frames: 101/450\n", "Time: 00:03/00:15 - Frames: 102/450\n", "Time: 00:03/00:15 - Frames: 103/450\n", "Time: 00:03/00:15 - Frames: 104/450\n", "Time: 00:03/00:15 - Frames: 105/450 - captured\n", "Time: 00:03/00:15 - Frames: 106/450\n", "Time: 00:03/00:15 - Frames: 107/450\n", "Time: 00:03/00:15 - Frames: 108/450\n", "Time: 00:03/00:15 - Frames: 109/450\n", "Time: 00:03/00:15 - Frames: 110/450 - captured\n", "Time: 00:03/00:15 - Frames: 111/450\n", "Time: 00:03/00:15 - Frames: 112/450\n", "Time: 00:03/00:15 - Frames: 113/450\n", "Time: 00:03/00:15 - Frames: 114/450\n", "Time: 00:03/00:15 - Frames: 115/450 - captured\n", "Time: 00:03/00:15 - Frames: 116/450\n", "Time: 00:03/00:15 - Frames: 117/450\n", "Time: 00:03/00:15 - Frames: 118/450\n", "Time: 00:03/00:15 - Frames: 119/450\n", "Time: 00:04/00:15 - Frames: 120/450 - captured\n", "Time: 00:04/00:15 - Frames: 121/450\n", "Time: 00:04/00:15 - Frames: 122/450\n", "Time: 00:04/00:15 - Frames: 123/450\n", "Time: 00:04/00:15 - Frames: 124/450\n", "Time: 00:04/00:15 - Frames: 125/450 - captured\n", "Time: 00:04/00:15 - Frames: 126/450\n", "Time: 00:04/00:15 - Frames: 127/450\n", "Time: 00:04/00:15 - Frames: 128/450\n", "Time: 00:04/00:15 - Frames: 129/450\n", "Time: 00:04/00:15 - Frames: 130/450 - captured\n", "Time: 00:04/00:15 - Frames: 131/450\n", "Time: 00:04/00:15 - Frames: 132/450\n", "Time: 00:04/00:15 - Frames: 133/450\n", "Time: 00:04/00:15 - Frames: 134/450\n", "Time: 00:04/00:15 - Frames: 135/450 - captured\n", "Time: 00:04/00:15 - Frames: 136/450\n", "Time: 00:04/00:15 - Frames: 137/450\n", "Time: 00:04/00:15 - Frames: 138/450\n", "Time: 00:04/00:15 - Frames: 139/450\n", "Time: 00:04/00:15 - Frames: 140/450 - captured\n", "Time: 00:04/00:15 - Frames: 141/450\n", "Time: 00:04/00:15 - Frames: 142/450\n", "Time: 00:04/00:15 - Frames: 143/450\n", "Time: 00:04/00:15 - Frames: 144/450\n", "Time: 00:04/00:15 - Frames: 145/450 - captured\n", "Time: 00:04/00:15 - Frames: 146/450\n", "Time: 00:04/00:15 - Frames: 147/450\n", "Time: 00:04/00:15 - Frames: 148/450\n", "Time: 00:04/00:15 - Frames: 149/450\n", "Time: 00:05/00:15 - Frames: 150/450 - captured\n", "Time: 00:05/00:15 - Frames: 151/450\n", "Time: 00:05/00:15 - Frames: 152/450\n", "Time: 00:05/00:15 - Frames: 153/450\n", "Time: 00:05/00:15 - Frames: 154/450\n", "Time: 00:05/00:15 - Frames: 155/450 - captured\n", "Time: 00:05/00:15 - Frames: 156/450\n", "Time: 00:05/00:15 - Frames: 157/450\n", "Time: 00:05/00:15 - Frames: 158/450\n", "Time: 00:05/00:15 - Frames: 159/450\n", "Time: 00:05/00:15 - Frames: 160/450 - captured\n", "Time: 00:05/00:15 - Frames: 161/450\n", "Time: 00:05/00:15 - Frames: 162/450\n", "Time: 00:05/00:15 - Frames: 163/450\n", "Time: 00:05/00:15 - Frames: 164/450\n", "Time: 00:05/00:15 - Frames: 165/450 - captured\n", "Time: 00:05/00:15 - Frames: 166/450\n", "Time: 00:05/00:15 - Frames: 167/450\n", "Time: 00:05/00:15 - Frames: 168/450\n", "Time: 00:05/00:15 - Frames: 169/450\n", "Time: 00:05/00:15 - Frames: 170/450 - captured\n", "Time: 00:05/00:15 - Frames: 171/450\n", "Time: 00:05/00:15 - Frames: 172/450\n", "Time: 00:05/00:15 - Frames: 173/450\n", "Time: 00:05/00:15 - Frames: 174/450\n", "Time: 00:05/00:15 - Frames: 175/450 - captured\n", "Time: 00:05/00:15 - Frames: 176/450\n", "Time: 00:05/00:15 - Frames: 177/450\n", "Time: 00:05/00:15 - Frames: 178/450\n", "Time: 00:05/00:15 - Frames: 179/450\n", "Time: 00:06/00:15 - Frames: 180/450 - captured\n", "Time: 00:06/00:15 - Frames: 181/450\n", "Time: 00:06/00:15 - Frames: 182/450\n", "Time: 00:06/00:15 - Frames: 183/450\n", "Time: 00:06/00:15 - Frames: 184/450\n", "Time: 00:06/00:15 - Frames: 185/450 - captured\n", "Time: 00:06/00:15 - Frames: 186/450\n", "Time: 00:06/00:15 - Frames: 187/450\n", "Time: 00:06/00:15 - Frames: 188/450\n", "Time: 00:06/00:15 - Frames: 189/450\n", "Time: 00:06/00:15 - Frames: 190/450 - captured\n", "Time: 00:06/00:15 - Frames: 191/450\n", "Time: 00:06/00:15 - Frames: 192/450\n", "Time: 00:06/00:15 - Frames: 193/450\n", "Time: 00:06/00:15 - Frames: 194/450\n", "Time: 00:06/00:15 - Frames: 195/450 - captured\n", "Time: 00:06/00:15 - Frames: 196/450\n", "Time: 00:06/00:15 - Frames: 197/450\n", "Time: 00:06/00:15 - Frames: 198/450\n", "Time: 00:06/00:15 - Frames: 199/450\n", "Time: 00:06/00:15 - Frames: 200/450 - captured\n", "Time: 00:06/00:15 - Frames: 201/450\n", "Time: 00:06/00:15 - Frames: 202/450\n", "Time: 00:06/00:15 - Frames: 203/450\n", "Time: 00:06/00:15 - Frames: 204/450\n", "Time: 00:06/00:15 - Frames: 205/450 - captured\n", "Time: 00:06/00:15 - Frames: 206/450\n", "Time: 00:06/00:15 - Frames: 207/450\n", "Time: 00:06/00:15 - Frames: 208/450\n", "Time: 00:06/00:15 - Frames: 209/450\n", "Time: 00:07/00:15 - Frames: 210/450 - captured\n", "Time: 00:07/00:15 - Frames: 211/450\n", "Time: 00:07/00:15 - Frames: 212/450\n", "Time: 00:07/00:15 - Frames: 213/450\n", "Time: 00:07/00:15 - Frames: 214/450\n", "Time: 00:07/00:15 - Frames: 215/450 - captured\n", "Time: 00:07/00:15 - Frames: 216/450\n", "Time: 00:07/00:15 - Frames: 217/450\n", "Time: 00:07/00:15 - Frames: 218/450\n", "Time: 00:07/00:15 - Frames: 219/450\n", "Time: 00:07/00:15 - Frames: 220/450 - captured\n", "Time: 00:07/00:15 - Frames: 221/450\n", "Time: 00:07/00:15 - Frames: 222/450\n", "Time: 00:07/00:15 - Frames: 223/450\n", "Time: 00:07/00:15 - Frames: 224/450\n", "Time: 00:07/00:15 - Frames: 225/450 - captured\n", "Time: 00:07/00:15 - Frames: 226/450\n", "Time: 00:07/00:15 - Frames: 227/450\n", "Time: 00:07/00:15 - Frames: 228/450\n", "Time: 00:07/00:15 - Frames: 229/450\n", "Time: 00:07/00:15 - Frames: 230/450 - captured\n", "Time: 00:07/00:15 - Frames: 231/450\n", "Time: 00:07/00:15 - Frames: 232/450\n", "Time: 00:07/00:15 - Frames: 233/450\n", "Time: 00:07/00:15 - Frames: 234/450\n", "Time: 00:07/00:15 - Frames: 235/450 - captured\n", "Time: 00:07/00:15 - Frames: 236/450\n", "Time: 00:07/00:15 - Frames: 237/450\n", "Time: 00:07/00:15 - Frames: 238/450\n", "Time: 00:07/00:15 - Frames: 239/450\n", "Time: 00:08/00:15 - Frames: 240/450 - captured\n", "Time: 00:08/00:15 - Frames: 241/450\n", "Time: 00:08/00:15 - Frames: 242/450\n", "Time: 00:08/00:15 - Frames: 243/450\n", "Time: 00:08/00:15 - Frames: 244/450\n", "Time: 00:08/00:15 - Frames: 245/450 - captured\n", "Time: 00:08/00:15 - Frames: 246/450\n", "Time: 00:08/00:15 - Frames: 247/450\n", "Time: 00:08/00:15 - Frames: 248/450\n", "Time: 00:08/00:15 - Frames: 249/450\n", "Time: 00:08/00:15 - Frames: 250/450 - captured\n", "Time: 00:08/00:15 - Frames: 251/450\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:08/00:15 - Frames: 252/450\n", "Time: 00:08/00:15 - Frames: 253/450\n", "Time: 00:08/00:15 - Frames: 254/450\n", "Time: 00:08/00:15 - Frames: 255/450 - captured\n", "Time: 00:08/00:15 - Frames: 256/450\n", "Time: 00:08/00:15 - Frames: 257/450\n", "Time: 00:08/00:15 - Frames: 258/450\n", "Time: 00:08/00:15 - Frames: 259/450\n", "Time: 00:08/00:15 - Frames: 260/450 - captured\n", "Time: 00:08/00:15 - Frames: 261/450\n", "Time: 00:08/00:15 - Frames: 262/450\n", "Time: 00:08/00:15 - Frames: 263/450\n", "Time: 00:08/00:15 - Frames: 264/450\n", "Time: 00:08/00:15 - Frames: 265/450 - captured\n", "Time: 00:08/00:15 - Frames: 266/450\n", "Time: 00:08/00:15 - Frames: 267/450\n", "Time: 00:08/00:15 - Frames: 268/450\n", "Time: 00:08/00:15 - Frames: 269/450\n", "Time: 00:09/00:15 - Frames: 270/450 - captured\n", "Time: 00:09/00:15 - Frames: 271/450\n", "Time: 00:09/00:15 - Frames: 272/450\n", "Time: 00:09/00:15 - Frames: 273/450\n", "Time: 00:09/00:15 - Frames: 274/450\n", "Time: 00:09/00:15 - Frames: 275/450 - captured\n", "Time: 00:09/00:15 - Frames: 276/450\n", "Time: 00:09/00:15 - Frames: 277/450\n", "Time: 00:09/00:15 - Frames: 278/450\n", "Time: 00:09/00:15 - Frames: 279/450\n", "Time: 00:09/00:15 - Frames: 280/450 - captured\n", "Time: 00:09/00:15 - Frames: 281/450\n", "Time: 00:09/00:15 - Frames: 282/450\n", "Time: 00:09/00:15 - Frames: 283/450\n", "Time: 00:09/00:15 - Frames: 284/450\n", "Time: 00:09/00:15 - Frames: 285/450 - captured\n", "Time: 00:09/00:15 - Frames: 286/450\n", "Time: 00:09/00:15 - Frames: 287/450\n", "Time: 00:09/00:15 - Frames: 288/450\n", "Time: 00:09/00:15 - Frames: 289/450\n", "Time: 00:09/00:15 - Frames: 290/450 - captured\n", "Time: 00:09/00:15 - Frames: 291/450\n", "Time: 00:09/00:15 - Frames: 292/450\n", "Time: 00:09/00:15 - Frames: 293/450\n", "Time: 00:09/00:15 - Frames: 294/450\n", "Time: 00:09/00:15 - Frames: 295/450 - captured\n", "Time: 00:09/00:15 - Frames: 296/450\n", "Time: 00:09/00:15 - Frames: 297/450\n", "Time: 00:09/00:15 - Frames: 298/450\n", "Time: 00:09/00:15 - Frames: 299/450\n", "Time: 00:10/00:15 - Frames: 300/450 - captured\n", "Time: 00:10/00:15 - Frames: 301/450\n", "Time: 00:10/00:15 - Frames: 302/450\n", "Time: 00:10/00:15 - Frames: 303/450\n", "Time: 00:10/00:15 - Frames: 304/450\n", "Time: 00:10/00:15 - Frames: 305/450 - captured\n", "Time: 00:10/00:15 - Frames: 306/450\n", "Time: 00:10/00:15 - Frames: 307/450\n", "Time: 00:10/00:15 - Frames: 308/450\n", "Time: 00:10/00:15 - Frames: 309/450\n", "Time: 00:10/00:15 - Frames: 310/450 - captured\n", "Time: 00:10/00:15 - Frames: 311/450\n", "Time: 00:10/00:15 - Frames: 312/450\n", "Time: 00:10/00:15 - Frames: 313/450\n", "Time: 00:10/00:15 - Frames: 314/450\n", "Time: 00:10/00:15 - Frames: 315/450 - captured\n", "Time: 00:10/00:15 - Frames: 316/450\n", "Time: 00:10/00:15 - Frames: 317/450\n", "Time: 00:10/00:15 - Frames: 318/450\n", "Time: 00:10/00:15 - Frames: 319/450\n", "Time: 00:10/00:15 - Frames: 320/450 - captured\n", "Time: 00:10/00:15 - Frames: 321/450\n", "Time: 00:10/00:15 - Frames: 322/450\n", "Time: 00:10/00:15 - Frames: 323/450\n", "Time: 00:10/00:15 - Frames: 324/450\n", "Time: 00:10/00:15 - Frames: 325/450 - captured\n", "Time: 00:10/00:15 - Frames: 326/450\n", "Time: 00:10/00:15 - Frames: 327/450\n", "Time: 00:10/00:15 - Frames: 328/450\n", "Time: 00:10/00:15 - Frames: 329/450\n", "Time: 00:11/00:15 - Frames: 330/450 - captured\n", "Time: 00:11/00:15 - Frames: 331/450\n", "Time: 00:11/00:15 - Frames: 332/450\n", "Time: 00:11/00:15 - Frames: 333/450\n", "Time: 00:11/00:15 - Frames: 334/450\n", "Time: 00:11/00:15 - Frames: 335/450 - captured\n", "Time: 00:11/00:15 - Frames: 336/450\n", "Time: 00:11/00:15 - Frames: 337/450\n", "Time: 00:11/00:15 - Frames: 338/450\n", "Time: 00:11/00:15 - Frames: 339/450\n", "Time: 00:11/00:15 - Frames: 340/450 - captured\n", "Time: 00:11/00:15 - Frames: 341/450\n", "Time: 00:11/00:15 - Frames: 342/450\n", "Time: 00:11/00:15 - Frames: 343/450\n", "Time: 00:11/00:15 - Frames: 344/450\n", "Time: 00:11/00:15 - Frames: 345/450 - captured\n", "Time: 00:11/00:15 - Frames: 346/450\n", "Time: 00:11/00:15 - Frames: 347/450\n", "Time: 00:11/00:15 - Frames: 348/450\n", "Time: 00:11/00:15 - Frames: 349/450\n", "Time: 00:11/00:15 - Frames: 350/450 - captured\n", "Time: 00:11/00:15 - Frames: 351/450\n", "Time: 00:11/00:15 - Frames: 352/450\n", "Time: 00:11/00:15 - Frames: 353/450\n", "Time: 00:11/00:15 - Frames: 354/450\n", "Time: 00:11/00:15 - Frames: 355/450 - captured\n", "Time: 00:11/00:15 - Frames: 356/450\n", "Time: 00:11/00:15 - Frames: 357/450\n", "Time: 00:11/00:15 - Frames: 358/450\n", "Time: 00:11/00:15 - Frames: 359/450\n", "Time: 00:12/00:15 - Frames: 360/450 - captured\n", "Time: 00:12/00:15 - Frames: 361/450\n", "Time: 00:12/00:15 - Frames: 362/450\n", "Time: 00:12/00:15 - Frames: 363/450\n", "Time: 00:12/00:15 - Frames: 364/450\n", "Time: 00:12/00:15 - Frames: 365/450 - captured\n", "Time: 00:12/00:15 - Frames: 366/450\n", "Time: 00:12/00:15 - Frames: 367/450\n", "Time: 00:12/00:15 - Frames: 368/450\n", "Time: 00:12/00:15 - Frames: 369/450\n", "Time: 00:12/00:15 - Frames: 370/450 - captured\n", "Time: 00:12/00:15 - Frames: 371/450\n", "Time: 00:12/00:15 - Frames: 372/450\n", "Time: 00:12/00:15 - Frames: 373/450\n", "Time: 00:12/00:15 - Frames: 374/450\n", "Time: 00:12/00:15 - Frames: 375/450 - captured\n", "Time: 00:12/00:15 - Frames: 376/450\n", "Time: 00:12/00:15 - Frames: 377/450\n", "Time: 00:12/00:15 - Frames: 378/450\n", "Time: 00:12/00:15 - Frames: 379/450\n", "Time: 00:12/00:15 - Frames: 380/450 - captured\n", "Time: 00:12/00:15 - Frames: 381/450\n", "Time: 00:12/00:15 - Frames: 382/450\n", "Time: 00:12/00:15 - Frames: 383/450\n", "Time: 00:12/00:15 - Frames: 384/450\n", "Time: 00:12/00:15 - Frames: 385/450 - captured\n", "Time: 00:12/00:15 - Frames: 386/450\n", "Time: 00:12/00:15 - Frames: 387/450\n", "Time: 00:12/00:15 - Frames: 388/450\n", "Time: 00:12/00:15 - Frames: 389/450\n", "Time: 00:13/00:15 - Frames: 390/450 - captured\n", "Time: 00:13/00:15 - Frames: 391/450\n", "Time: 00:13/00:15 - Frames: 392/450\n", "Time: 00:13/00:15 - Frames: 393/450\n", "Time: 00:13/00:15 - Frames: 394/450\n", "Time: 00:13/00:15 - Frames: 395/450 - captured\n", "Time: 00:13/00:15 - Frames: 396/450\n", "Time: 00:13/00:15 - Frames: 397/450\n", "Time: 00:13/00:15 - Frames: 398/450\n", "Time: 00:13/00:15 - Frames: 399/450\n", "Time: 00:13/00:15 - Frames: 400/450 - captured\n", "Time: 00:13/00:15 - Frames: 401/450\n", "Time: 00:13/00:15 - Frames: 402/450\n", "Time: 00:13/00:15 - Frames: 403/450\n", "Time: 00:13/00:15 - Frames: 404/450\n", "Time: 00:13/00:15 - Frames: 405/450 - captured\n", "Time: 00:13/00:15 - Frames: 406/450\n", "Time: 00:13/00:15 - Frames: 407/450\n", "Time: 00:13/00:15 - Frames: 408/450\n", "Time: 00:13/00:15 - Frames: 409/450\n", "Time: 00:13/00:15 - Frames: 410/450 - captured\n", "Time: 00:13/00:15 - Frames: 411/450\n", "Time: 00:13/00:15 - Frames: 412/450\n", "Time: 00:13/00:15 - Frames: 413/450\n", "Time: 00:13/00:15 - Frames: 414/450\n", "Time: 00:13/00:15 - Frames: 415/450 - captured\n", "Time: 00:13/00:15 - Frames: 416/450\n", "Time: 00:13/00:15 - Frames: 417/450\n", "Time: 00:13/00:15 - Frames: 418/450\n", "Time: 00:13/00:15 - Frames: 419/450\n", "Time: 00:14/00:15 - Frames: 420/450 - captured\n", "Time: 00:14/00:15 - Frames: 421/450\n", "Time: 00:14/00:15 - Frames: 422/450\n", "Time: 00:14/00:15 - Frames: 423/450\n", "Time: 00:14/00:15 - Frames: 424/450\n", "Time: 00:14/00:15 - Frames: 425/450 - captured\n", "Time: 00:14/00:15 - Frames: 426/450\n", "Time: 00:14/00:15 - Frames: 427/450\n", "Time: 00:14/00:15 - Frames: 428/450\n", "Time: 00:14/00:15 - Frames: 429/450\n", "Time: 00:14/00:15 - Frames: 430/450 - captured\n", "Time: 00:14/00:15 - Frames: 431/450\n", "Time: 00:14/00:15 - Frames: 432/450\n", "Time: 00:14/00:15 - Frames: 433/450\n", "Time: 00:14/00:15 - Frames: 434/450\n", "Time: 00:14/00:15 - Frames: 435/450 - captured\n", "Time: 00:14/00:15 - Frames: 436/450\n", "Time: 00:14/00:15 - Frames: 437/450\n", "Time: 00:14/00:15 - Frames: 438/450\n", "Time: 00:14/00:15 - Frames: 439/450\n", "Time: 00:14/00:15 - Frames: 440/450 - captured\n", "Time: 00:14/00:15 - Frames: 441/450\n", "Time: 00:14/00:15 - Frames: 442/450\n", "Time: 00:14/00:15 - Frames: 443/450\n", "Time: 00:14/00:15 - Frames: 444/450\n", "Time: 00:14/00:15 - Frames: 445/450 - captured\n", "Time: 00:14/00:15 - Frames: 446/450\n", "Time: 00:14/00:15 - Frames: 447/450\n", "Time: 00:14/00:15 - Frames: 448/450\n" ] } ], "source": [ "coordinates = mt.run_tracking()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tracking-methods\n", "So far, the motion tracker has just performed foreground-background subtraction without recording coordinates of objects - the `coordinates` DataFrame is empty. To record something we have to specify a `tracking_method`. This can be as simple as:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# create fish method\n", "mov = pp.tracking_method(label=\"movement\", min_length=5) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we just pass the method to the tracking settings (`detection_settings`). Using that method will also call all default settings. Afterwards we can run the tracking procedure again:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----------------------------\n", "Detection method \"movement\":\n", "\n", "{'blur_kernel': 5,\n", " 'label': 'movement',\n", " 'max_area': inf,\n", " 'max_length': inf,\n", " 'min_area': 0,\n", " 'min_length': 5,\n", " 'mode': 'multiple',\n", " 'overlay_colour': (0, 0,\n", " 255),\n", " 'remove_shadows': True,\n", " 'threshold_value': 127}\n", "-----------------------------\n", "\n", "\n", "\n", "\n", "--------------------------------------------------------------\n", "Motion detection settings - \"isopods_fish.mp4\":\n", "\n", "Background-subtractor: MOG\n", "History: 60 seconds\n", "Sensitivity: 10\n", "Read every nth frame: 5\n", "Detect shadows: True\n", "Start after n seconds: 0\n", "Finish after n seconds: - \n", "--------------------------------------------------------------\n" ] } ], "source": [ "mt.detection_settings(methods=mov)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:00/00:15 - Frames: 1/450\n", "Time: 00:00/00:15 - Frames: 2/450\n", "Time: 00:00/00:15 - Frames: 3/450\n", "Time: 00:00/00:15 - Frames: 4/450\n", "Time: 00:00/00:15 - Frames: 5/450 - captured\n", "Time: 00:00/00:15 - Frames: 6/450\n", "Time: 00:00/00:15 - Frames: 7/450\n", "Time: 00:00/00:15 - Frames: 8/450\n", "Time: 00:00/00:15 - Frames: 9/450\n", "Time: 00:00/00:15 - Frames: 10/450 - captured\n", "Time: 00:00/00:15 - Frames: 11/450\n", "Time: 00:00/00:15 - Frames: 12/450\n", "Time: 00:00/00:15 - Frames: 13/450\n", "Time: 00:00/00:15 - Frames: 14/450\n", "Time: 00:00/00:15 - Frames: 15/450 - captured\n", "Time: 00:00/00:15 - Frames: 16/450\n", "Time: 00:00/00:15 - Frames: 17/450\n", "Time: 00:00/00:15 - Frames: 18/450\n", "Time: 00:00/00:15 - Frames: 19/450\n", "Time: 00:00/00:15 - Frames: 20/450 - captured\n", "Time: 00:00/00:15 - Frames: 21/450\n", "Time: 00:00/00:15 - Frames: 22/450\n", "Time: 00:00/00:15 - Frames: 23/450\n", "Time: 00:00/00:15 - Frames: 24/450\n", "Time: 00:00/00:15 - Frames: 25/450 - captured\n", "Time: 00:00/00:15 - Frames: 26/450\n", "Time: 00:00/00:15 - Frames: 27/450\n", "Time: 00:00/00:15 - Frames: 28/450\n", "Time: 00:00/00:15 - Frames: 29/450\n", "Time: 00:01/00:15 - Frames: 30/450 - captured\n", "Time: 00:01/00:15 - Frames: 31/450\n", "Time: 00:01/00:15 - Frames: 32/450\n", "Time: 00:01/00:15 - Frames: 33/450\n", "Time: 00:01/00:15 - Frames: 34/450\n", "Time: 00:01/00:15 - Frames: 35/450 - captured\n", "Time: 00:01/00:15 - Frames: 36/450\n", "Time: 00:01/00:15 - Frames: 37/450\n", "Time: 00:01/00:15 - Frames: 38/450\n", "Time: 00:01/00:15 - Frames: 39/450\n", "Time: 00:01/00:15 - Frames: 40/450 - captured\n", "Time: 00:01/00:15 - Frames: 41/450\n", "Time: 00:01/00:15 - Frames: 42/450\n", "Time: 00:01/00:15 - Frames: 43/450\n", "Time: 00:01/00:15 - Frames: 44/450\n", "Time: 00:01/00:15 - Frames: 45/450 - captured\n", "Time: 00:01/00:15 - Frames: 46/450\n", "Time: 00:01/00:15 - Frames: 47/450\n", "Time: 00:01/00:15 - Frames: 48/450\n", "Time: 00:01/00:15 - Frames: 49/450\n", "Time: 00:01/00:15 - Frames: 50/450 - captured\n", "Time: 00:01/00:15 - Frames: 51/450\n", "Time: 00:01/00:15 - Frames: 52/450\n", "Time: 00:01/00:15 - Frames: 53/450\n", "Time: 00:01/00:15 - Frames: 54/450\n", "Time: 00:01/00:15 - Frames: 55/450 - captured\n", "Time: 00:01/00:15 - Frames: 56/450\n", "Time: 00:01/00:15 - Frames: 57/450\n", "Time: 00:01/00:15 - Frames: 58/450\n", "Time: 00:01/00:15 - Frames: 59/450\n", "Time: 00:02/00:15 - Frames: 60/450 - captured\n", "Time: 00:02/00:15 - Frames: 61/450\n", "Time: 00:02/00:15 - Frames: 62/450\n", "Time: 00:02/00:15 - Frames: 63/450\n", "Time: 00:02/00:15 - Frames: 64/450\n", "Time: 00:02/00:15 - Frames: 65/450 - captured\n", "Time: 00:02/00:15 - Frames: 66/450\n", "Time: 00:02/00:15 - Frames: 67/450\n", "Time: 00:02/00:15 - Frames: 68/450\n", "Time: 00:02/00:15 - Frames: 69/450\n", "Time: 00:02/00:15 - Frames: 70/450 - captured\n", "Time: 00:02/00:15 - Frames: 71/450\n", "Time: 00:02/00:15 - Frames: 72/450\n", "Time: 00:02/00:15 - Frames: 73/450\n", "Time: 00:02/00:15 - Frames: 74/450\n", "Time: 00:02/00:15 - Frames: 75/450 - captured\n", "Time: 00:02/00:15 - Frames: 76/450\n", "Time: 00:02/00:15 - Frames: 77/450\n", "Time: 00:02/00:15 - Frames: 78/450\n", "Time: 00:02/00:15 - Frames: 79/450\n", "Time: 00:02/00:15 - Frames: 80/450 - captured\n", "Time: 00:02/00:15 - Frames: 81/450\n", "Time: 00:02/00:15 - Frames: 82/450\n", "Time: 00:02/00:15 - Frames: 83/450\n", "Time: 00:02/00:15 - Frames: 84/450\n", "Time: 00:02/00:15 - Frames: 85/450 - captured\n", "Time: 00:02/00:15 - Frames: 86/450\n", "Time: 00:02/00:15 - Frames: 87/450\n", "Time: 00:02/00:15 - Frames: 88/450\n", "Time: 00:02/00:15 - Frames: 89/450\n", "Time: 00:03/00:15 - Frames: 90/450 - captured\n", "Time: 00:03/00:15 - Frames: 91/450\n", "Time: 00:03/00:15 - Frames: 92/450\n", "Time: 00:03/00:15 - Frames: 93/450\n", "Time: 00:03/00:15 - Frames: 94/450\n", "Time: 00:03/00:15 - Frames: 95/450 - captured\n", "Time: 00:03/00:15 - Frames: 96/450\n", "Time: 00:03/00:15 - Frames: 97/450\n", "Time: 00:03/00:15 - Frames: 98/450\n", "Time: 00:03/00:15 - Frames: 99/450\n", "Time: 00:03/00:15 - Frames: 100/450 - captured\n", "Time: 00:03/00:15 - Frames: 101/450\n", "Time: 00:03/00:15 - Frames: 102/450\n", "Time: 00:03/00:15 - Frames: 103/450\n", "Time: 00:03/00:15 - Frames: 104/450\n", "Time: 00:03/00:15 - Frames: 105/450 - captured\n", "Time: 00:03/00:15 - Frames: 106/450\n", "Time: 00:03/00:15 - Frames: 107/450\n", "Time: 00:03/00:15 - Frames: 108/450\n", "Time: 00:03/00:15 - Frames: 109/450\n", "Time: 00:03/00:15 - Frames: 110/450 - captured\n", "Time: 00:03/00:15 - Frames: 111/450\n", "Time: 00:03/00:15 - Frames: 112/450\n", "Time: 00:03/00:15 - Frames: 113/450\n", "Time: 00:03/00:15 - Frames: 114/450\n", "Time: 00:03/00:15 - Frames: 115/450 - captured\n", "Time: 00:03/00:15 - Frames: 116/450\n", "Time: 00:03/00:15 - Frames: 117/450\n", "Time: 00:03/00:15 - Frames: 118/450\n", "Time: 00:03/00:15 - Frames: 119/450\n", "Time: 00:04/00:15 - Frames: 120/450 - captured\n", "Time: 00:04/00:15 - Frames: 121/450\n", "Time: 00:04/00:15 - Frames: 122/450\n", "Time: 00:04/00:15 - Frames: 123/450\n", "Time: 00:04/00:15 - Frames: 124/450\n", "Time: 00:04/00:15 - Frames: 125/450 - captured\n", "Time: 00:04/00:15 - Frames: 126/450\n", "Time: 00:04/00:15 - Frames: 127/450\n", "Time: 00:04/00:15 - Frames: 128/450\n", "Time: 00:04/00:15 - Frames: 129/450\n", "Time: 00:04/00:15 - Frames: 130/450 - captured\n", "Time: 00:04/00:15 - Frames: 131/450\n", "Time: 00:04/00:15 - Frames: 132/450\n", "Time: 00:04/00:15 - Frames: 133/450\n", "Time: 00:04/00:15 - Frames: 134/450\n", "Time: 00:04/00:15 - Frames: 135/450 - captured\n", "Time: 00:04/00:15 - Frames: 136/450\n", "Time: 00:04/00:15 - Frames: 137/450\n", "Time: 00:04/00:15 - Frames: 138/450\n", "Time: 00:04/00:15 - Frames: 139/450\n", "Time: 00:04/00:15 - Frames: 140/450 - captured\n", "Time: 00:04/00:15 - Frames: 141/450\n", "Time: 00:04/00:15 - Frames: 142/450\n", "Time: 00:04/00:15 - Frames: 143/450\n", "Time: 00:04/00:15 - Frames: 144/450\n", "Time: 00:04/00:15 - Frames: 145/450 - captured\n", "Time: 00:04/00:15 - Frames: 146/450\n", "Time: 00:04/00:15 - Frames: 147/450\n", "Time: 00:04/00:15 - Frames: 148/450\n", "Time: 00:04/00:15 - Frames: 149/450\n", "Time: 00:05/00:15 - Frames: 150/450 - captured\n", "Time: 00:05/00:15 - Frames: 151/450\n", "Time: 00:05/00:15 - Frames: 152/450\n", "Time: 00:05/00:15 - Frames: 153/450\n", "Time: 00:05/00:15 - Frames: 154/450\n", "Time: 00:05/00:15 - Frames: 155/450 - captured\n", "Time: 00:05/00:15 - Frames: 156/450\n", "Time: 00:05/00:15 - Frames: 157/450\n", "Time: 00:05/00:15 - Frames: 158/450\n", "Time: 00:05/00:15 - Frames: 159/450\n", "Time: 00:05/00:15 - Frames: 160/450 - captured\n", "Time: 00:05/00:15 - Frames: 161/450\n", "Time: 00:05/00:15 - Frames: 162/450\n", "Time: 00:05/00:15 - Frames: 163/450\n", "Time: 00:05/00:15 - Frames: 164/450\n", "Time: 00:05/00:15 - Frames: 165/450 - captured\n", "Time: 00:05/00:15 - Frames: 166/450\n", "Time: 00:05/00:15 - Frames: 167/450\n", "Time: 00:05/00:15 - Frames: 168/450\n", "Time: 00:05/00:15 - Frames: 169/450\n", "Time: 00:05/00:15 - Frames: 170/450 - captured\n", "Time: 00:05/00:15 - Frames: 171/450\n", "Time: 00:05/00:15 - Frames: 172/450\n", "Time: 00:05/00:15 - Frames: 173/450\n", "Time: 00:05/00:15 - Frames: 174/450\n", "Time: 00:05/00:15 - Frames: 175/450 - captured\n", "Time: 00:05/00:15 - Frames: 176/450\n", "Time: 00:05/00:15 - Frames: 177/450\n", "Time: 00:05/00:15 - Frames: 178/450\n", "Time: 00:05/00:15 - Frames: 179/450\n", "Time: 00:06/00:15 - Frames: 180/450 - captured\n", "Time: 00:06/00:15 - Frames: 181/450\n", "Time: 00:06/00:15 - Frames: 182/450\n", "Time: 00:06/00:15 - Frames: 183/450\n", "Time: 00:06/00:15 - Frames: 184/450\n", "Time: 00:06/00:15 - Frames: 185/450 - captured\n", "Time: 00:06/00:15 - Frames: 186/450\n", "Time: 00:06/00:15 - Frames: 187/450\n", "Time: 00:06/00:15 - Frames: 188/450\n", "Time: 00:06/00:15 - Frames: 189/450\n", "Time: 00:06/00:15 - Frames: 190/450 - captured\n", "Time: 00:06/00:15 - Frames: 191/450\n", "Time: 00:06/00:15 - Frames: 192/450\n", "Time: 00:06/00:15 - Frames: 193/450\n", "Time: 00:06/00:15 - Frames: 194/450\n", "Time: 00:06/00:15 - Frames: 195/450 - captured\n", "Time: 00:06/00:15 - Frames: 196/450\n", "Time: 00:06/00:15 - Frames: 197/450\n", "Time: 00:06/00:15 - Frames: 198/450\n", "Time: 00:06/00:15 - Frames: 199/450\n", "Time: 00:06/00:15 - Frames: 200/450 - captured\n", "Time: 00:06/00:15 - Frames: 201/450\n", "Time: 00:06/00:15 - Frames: 202/450\n", "Time: 00:06/00:15 - Frames: 203/450\n", "Time: 00:06/00:15 - Frames: 204/450\n", "Time: 00:06/00:15 - Frames: 205/450 - captured\n", "Time: 00:06/00:15 - Frames: 206/450\n", "Time: 00:06/00:15 - Frames: 207/450\n", "Time: 00:06/00:15 - Frames: 208/450\n", "Time: 00:06/00:15 - Frames: 209/450\n", "Time: 00:07/00:15 - Frames: 210/450 - captured\n", "Time: 00:07/00:15 - Frames: 211/450\n", "Time: 00:07/00:15 - Frames: 212/450\n", "Time: 00:07/00:15 - Frames: 213/450\n", "Time: 00:07/00:15 - Frames: 214/450\n", "Time: 00:07/00:15 - Frames: 215/450 - captured\n", "Time: 00:07/00:15 - Frames: 216/450\n", "Time: 00:07/00:15 - Frames: 217/450\n", "Time: 00:07/00:15 - Frames: 218/450\n", "Time: 00:07/00:15 - Frames: 219/450\n", "Time: 00:07/00:15 - Frames: 220/450 - captured\n", "Time: 00:07/00:15 - Frames: 221/450\n", "Time: 00:07/00:15 - Frames: 222/450\n", "Time: 00:07/00:15 - Frames: 223/450\n", "Time: 00:07/00:15 - Frames: 224/450\n", "Time: 00:07/00:15 - Frames: 225/450 - captured\n", "Time: 00:07/00:15 - Frames: 226/450\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:07/00:15 - Frames: 227/450\n", "Time: 00:07/00:15 - Frames: 228/450\n", "Time: 00:07/00:15 - Frames: 229/450\n", "Time: 00:07/00:15 - Frames: 230/450 - captured\n", "Time: 00:07/00:15 - Frames: 231/450\n", "Time: 00:07/00:15 - Frames: 232/450\n", "Time: 00:07/00:15 - Frames: 233/450\n", "Time: 00:07/00:15 - Frames: 234/450\n", "Time: 00:07/00:15 - Frames: 235/450 - captured\n", "Time: 00:07/00:15 - Frames: 236/450\n", "Time: 00:07/00:15 - Frames: 237/450\n", "Time: 00:07/00:15 - Frames: 238/450\n", "Time: 00:07/00:15 - Frames: 239/450\n", "Time: 00:08/00:15 - Frames: 240/450 - captured\n", "Time: 00:08/00:15 - Frames: 241/450\n", "Time: 00:08/00:15 - Frames: 242/450\n", "Time: 00:08/00:15 - Frames: 243/450\n", "Time: 00:08/00:15 - Frames: 244/450\n", "Time: 00:08/00:15 - Frames: 245/450 - captured\n", "Time: 00:08/00:15 - Frames: 246/450\n", "Time: 00:08/00:15 - Frames: 247/450\n", "Time: 00:08/00:15 - Frames: 248/450\n", "Time: 00:08/00:15 - Frames: 249/450\n", "Time: 00:08/00:15 - Frames: 250/450 - captured\n", "Time: 00:08/00:15 - Frames: 251/450\n", "Time: 00:08/00:15 - Frames: 252/450\n", "Time: 00:08/00:15 - Frames: 253/450\n", "Time: 00:08/00:15 - Frames: 254/450\n", "Time: 00:08/00:15 - Frames: 255/450 - captured\n", "Time: 00:08/00:15 - Frames: 256/450\n", "Time: 00:08/00:15 - Frames: 257/450\n", "Time: 00:08/00:15 - Frames: 258/450\n", "Time: 00:08/00:15 - Frames: 259/450\n", "Time: 00:08/00:15 - Frames: 260/450 - captured\n", "Time: 00:08/00:15 - Frames: 261/450\n", "Time: 00:08/00:15 - Frames: 262/450\n", "Time: 00:08/00:15 - Frames: 263/450\n", "Time: 00:08/00:15 - Frames: 264/450\n", "Time: 00:08/00:15 - Frames: 265/450 - captured\n", "Time: 00:08/00:15 - Frames: 266/450\n", "Time: 00:08/00:15 - Frames: 267/450\n", "Time: 00:08/00:15 - Frames: 268/450\n", "Time: 00:08/00:15 - Frames: 269/450\n", "Time: 00:09/00:15 - Frames: 270/450 - captured\n", "Time: 00:09/00:15 - Frames: 271/450\n", "Time: 00:09/00:15 - Frames: 272/450\n", "Time: 00:09/00:15 - Frames: 273/450\n", "Time: 00:09/00:15 - Frames: 274/450\n", "Time: 00:09/00:15 - Frames: 275/450 - captured\n", "Time: 00:09/00:15 - Frames: 276/450\n", "Time: 00:09/00:15 - Frames: 277/450\n", "Time: 00:09/00:15 - Frames: 278/450\n", "Time: 00:09/00:15 - Frames: 279/450\n", "Time: 00:09/00:15 - Frames: 280/450 - captured\n", "Time: 00:09/00:15 - Frames: 281/450\n", "Time: 00:09/00:15 - Frames: 282/450\n", "Time: 00:09/00:15 - Frames: 283/450\n", "Time: 00:09/00:15 - Frames: 284/450\n", "Time: 00:09/00:15 - Frames: 285/450 - captured\n", "Time: 00:09/00:15 - Frames: 286/450\n", "Time: 00:09/00:15 - Frames: 287/450\n", "Time: 00:09/00:15 - Frames: 288/450\n", "Time: 00:09/00:15 - Frames: 289/450\n", "Time: 00:09/00:15 - Frames: 290/450 - captured\n", "Time: 00:09/00:15 - Frames: 291/450\n", "Time: 00:09/00:15 - Frames: 292/450\n", "Time: 00:09/00:15 - Frames: 293/450\n", "Time: 00:09/00:15 - Frames: 294/450\n", "Time: 00:09/00:15 - Frames: 295/450 - captured\n", "Time: 00:09/00:15 - Frames: 296/450\n", "Time: 00:09/00:15 - Frames: 297/450\n", "Time: 00:09/00:15 - Frames: 298/450\n", "Time: 00:09/00:15 - Frames: 299/450\n", "Time: 00:10/00:15 - Frames: 300/450 - captured\n", "Time: 00:10/00:15 - Frames: 301/450\n", "Time: 00:10/00:15 - Frames: 302/450\n", "Time: 00:10/00:15 - Frames: 303/450\n", "Time: 00:10/00:15 - Frames: 304/450\n", "Time: 00:10/00:15 - Frames: 305/450 - captured\n", "Time: 00:10/00:15 - Frames: 306/450\n", "Time: 00:10/00:15 - Frames: 307/450\n", "Time: 00:10/00:15 - Frames: 308/450\n", "Time: 00:10/00:15 - Frames: 309/450\n", "Time: 00:10/00:15 - Frames: 310/450 - captured\n", "Time: 00:10/00:15 - Frames: 311/450\n", "Time: 00:10/00:15 - Frames: 312/450\n", "Time: 00:10/00:15 - Frames: 313/450\n", "Time: 00:10/00:15 - Frames: 314/450\n", "Time: 00:10/00:15 - Frames: 315/450 - captured\n", "Time: 00:10/00:15 - Frames: 316/450\n", "Time: 00:10/00:15 - Frames: 317/450\n", "Time: 00:10/00:15 - Frames: 318/450\n", "Time: 00:10/00:15 - Frames: 319/450\n", "Time: 00:10/00:15 - Frames: 320/450 - captured\n", "Time: 00:10/00:15 - Frames: 321/450\n", "Time: 00:10/00:15 - Frames: 322/450\n", "Time: 00:10/00:15 - Frames: 323/450\n", "Time: 00:10/00:15 - Frames: 324/450\n", "Time: 00:10/00:15 - Frames: 325/450 - captured\n", "Time: 00:10/00:15 - Frames: 326/450\n", "Time: 00:10/00:15 - Frames: 327/450\n", "Time: 00:10/00:15 - Frames: 328/450\n", "Time: 00:10/00:15 - Frames: 329/450\n", "Time: 00:11/00:15 - Frames: 330/450 - captured\n", "Time: 00:11/00:15 - Frames: 331/450\n", "Time: 00:11/00:15 - Frames: 332/450\n", "Time: 00:11/00:15 - Frames: 333/450\n", "Time: 00:11/00:15 - Frames: 334/450\n", "Time: 00:11/00:15 - Frames: 335/450 - captured\n", "Time: 00:11/00:15 - Frames: 336/450\n", "Time: 00:11/00:15 - Frames: 337/450\n", "Time: 00:11/00:15 - Frames: 338/450\n", "Time: 00:11/00:15 - Frames: 339/450\n", "Time: 00:11/00:15 - Frames: 340/450 - captured\n", "Time: 00:11/00:15 - Frames: 341/450\n", "Time: 00:11/00:15 - Frames: 342/450\n", "Time: 00:11/00:15 - Frames: 343/450\n", "Time: 00:11/00:15 - Frames: 344/450\n", "Time: 00:11/00:15 - Frames: 345/450 - captured\n", "Time: 00:11/00:15 - Frames: 346/450\n", "Time: 00:11/00:15 - Frames: 347/450\n", "Time: 00:11/00:15 - Frames: 348/450\n", "Time: 00:11/00:15 - Frames: 349/450\n", "Time: 00:11/00:15 - Frames: 350/450 - captured\n", "Time: 00:11/00:15 - Frames: 351/450\n", "Time: 00:11/00:15 - Frames: 352/450\n", "Time: 00:11/00:15 - Frames: 353/450\n", "Time: 00:11/00:15 - Frames: 354/450\n", "Time: 00:11/00:15 - Frames: 355/450 - captured\n", "Time: 00:11/00:15 - Frames: 356/450\n", "Time: 00:11/00:15 - Frames: 357/450\n", "Time: 00:11/00:15 - Frames: 358/450\n", "Time: 00:11/00:15 - Frames: 359/450\n", "Time: 00:12/00:15 - Frames: 360/450 - captured\n", "Time: 00:12/00:15 - Frames: 361/450\n", "Time: 00:12/00:15 - Frames: 362/450\n", "Time: 00:12/00:15 - Frames: 363/450\n", "Time: 00:12/00:15 - Frames: 364/450\n", "Time: 00:12/00:15 - Frames: 365/450 - captured\n", "Time: 00:12/00:15 - Frames: 366/450\n", "Time: 00:12/00:15 - Frames: 367/450\n", "Time: 00:12/00:15 - Frames: 368/450\n", "Time: 00:12/00:15 - Frames: 369/450\n", "Time: 00:12/00:15 - Frames: 370/450 - captured\n", "Time: 00:12/00:15 - Frames: 371/450\n", "Time: 00:12/00:15 - Frames: 372/450\n", "Time: 00:12/00:15 - Frames: 373/450\n", "Time: 00:12/00:15 - Frames: 374/450\n", "Time: 00:12/00:15 - Frames: 375/450 - captured\n", "Time: 00:12/00:15 - Frames: 376/450\n", "Time: 00:12/00:15 - Frames: 377/450\n", "Time: 00:12/00:15 - Frames: 378/450\n", "Time: 00:12/00:15 - Frames: 379/450\n", "Time: 00:12/00:15 - Frames: 380/450 - captured\n", "Time: 00:12/00:15 - Frames: 381/450\n", "Time: 00:12/00:15 - Frames: 382/450\n", "Time: 00:12/00:15 - Frames: 383/450\n", "Time: 00:12/00:15 - Frames: 384/450\n", "Time: 00:12/00:15 - Frames: 385/450 - captured\n", "Time: 00:12/00:15 - Frames: 386/450\n", "Time: 00:12/00:15 - Frames: 387/450\n", "Time: 00:12/00:15 - Frames: 388/450\n", "Time: 00:12/00:15 - Frames: 389/450\n", "Time: 00:13/00:15 - Frames: 390/450 - captured\n", "Time: 00:13/00:15 - Frames: 391/450\n", "Time: 00:13/00:15 - Frames: 392/450\n", "Time: 00:13/00:15 - Frames: 393/450\n", "Time: 00:13/00:15 - Frames: 394/450\n", "Time: 00:13/00:15 - Frames: 395/450 - captured\n", "Time: 00:13/00:15 - Frames: 396/450\n", "Time: 00:13/00:15 - Frames: 397/450\n", "Time: 00:13/00:15 - Frames: 398/450\n", "Time: 00:13/00:15 - Frames: 399/450\n", "Time: 00:13/00:15 - Frames: 400/450 - captured\n", "Time: 00:13/00:15 - Frames: 401/450\n", "Time: 00:13/00:15 - Frames: 402/450\n", "Time: 00:13/00:15 - Frames: 403/450\n", "Time: 00:13/00:15 - Frames: 404/450\n", "Time: 00:13/00:15 - Frames: 405/450 - captured\n", "Time: 00:13/00:15 - Frames: 406/450\n", "Time: 00:13/00:15 - Frames: 407/450\n", "Time: 00:13/00:15 - Frames: 408/450\n", "Time: 00:13/00:15 - Frames: 409/450\n", "Time: 00:13/00:15 - Frames: 410/450 - captured\n", "Time: 00:13/00:15 - Frames: 411/450\n", "Time: 00:13/00:15 - Frames: 412/450\n", "Time: 00:13/00:15 - Frames: 413/450\n", "Time: 00:13/00:15 - Frames: 414/450\n", "Time: 00:13/00:15 - Frames: 415/450 - captured\n", "Time: 00:13/00:15 - Frames: 416/450\n", "Time: 00:13/00:15 - Frames: 417/450\n", "Time: 00:13/00:15 - Frames: 418/450\n", "Time: 00:13/00:15 - Frames: 419/450\n", "Time: 00:14/00:15 - Frames: 420/450 - captured\n", "Time: 00:14/00:15 - Frames: 421/450\n", "Time: 00:14/00:15 - Frames: 422/450\n", "Time: 00:14/00:15 - Frames: 423/450\n", "Time: 00:14/00:15 - Frames: 424/450\n", "Time: 00:14/00:15 - Frames: 425/450 - captured\n", "Time: 00:14/00:15 - Frames: 426/450\n", "Time: 00:14/00:15 - Frames: 427/450\n", "Time: 00:14/00:15 - Frames: 428/450\n", "Time: 00:14/00:15 - Frames: 429/450\n", "Time: 00:14/00:15 - Frames: 430/450 - captured\n", "Time: 00:14/00:15 - Frames: 431/450\n", "Time: 00:14/00:15 - Frames: 432/450\n", "Time: 00:14/00:15 - Frames: 433/450\n", "Time: 00:14/00:15 - Frames: 434/450\n", "Time: 00:14/00:15 - Frames: 435/450 - captured\n", "Time: 00:14/00:15 - Frames: 436/450\n", "Time: 00:14/00:15 - Frames: 437/450\n", "Time: 00:14/00:15 - Frames: 438/450\n", "Time: 00:14/00:15 - Frames: 439/450\n", "Time: 00:14/00:15 - Frames: 440/450 - captured\n", "Time: 00:14/00:15 - Frames: 441/450\n", "Time: 00:14/00:15 - Frames: 442/450\n", "Time: 00:14/00:15 - Frames: 443/450\n", "Time: 00:14/00:15 - Frames: 444/450\n", "Time: 00:14/00:15 - Frames: 445/450 - captured\n", "Time: 00:14/00:15 - Frames: 446/450\n", "Time: 00:14/00:15 - Frames: 447/450\n", "Time: 00:14/00:15 - Frames: 448/450\n" ] } ], "source": [ "coordinates = mt.run_tracking()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now all the movement in the video is being tracked, which is not what we want. Instead, we will construct two tracking methods that will distinguish both animals in the video. `mode` will determine which objects are retrieved: `\"single\"` tracks the single largest objects, `\"multiple\"` tracks all objects." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----------------------------\n", "Detection method \"fish\":\n", "\n", "{'blur_kernel': 5,\n", " 'label': 'fish',\n", " 'max_area': inf,\n", " 'max_length': inf,\n", " 'min_area': 0,\n", " 'min_length': 30,\n", " 'mode': 'single',\n", " 'overlay_colour': (0, 0,\n", " 255),\n", " 'remove_shadows': True,\n", " 'threshold_value': 127}\n", "-----------------------------\n", "\n", "\n", "-----------------------------\n", "Detection method \"isopod\":\n", "\n", "{'blur_kernel': 5,\n", " 'label': 'isopod',\n", " 'max_area': inf,\n", " 'max_length': 30,\n", " 'min_area': 0,\n", " 'min_length': 0,\n", " 'mode': 'multiple',\n", " 'overlay_colour': (0, 128,\n", " 0),\n", " 'remove_shadows': True,\n", " 'threshold_value': 127}\n", "-----------------------------\n", "\n", "\n", "\n", "\n", "--------------------------------------------------------------\n", "Motion detection settings - \"isopods_fish.mp4\":\n", "\n", "Background-subtractor: MOG\n", "History: 60 seconds\n", "Sensitivity: 10\n", "Read every nth frame: 5\n", "Detect shadows: True\n", "Start after n seconds: 0\n", "Finish after n seconds: - \n", "--------------------------------------------------------------\n" ] } ], "source": [ "fish = pp.tracking_method(label=\"fish\", \n", " remove_shadows=True, \n", " min_length=30,\n", " overlay_colour=\"red\",\n", " mode=\"single\") \n", "isopod = pp.tracking_method(label=\"isopod\", \n", " remove_shadows=True, \n", " max_length=30, \n", " overlay_colour=\"green\",\n", " mode=\"multiple\")\n", "mt.detection_settings(methods=[fish, isopod])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:00/00:15 - Frames: 1/450\n", "Time: 00:00/00:15 - Frames: 2/450\n", "Time: 00:00/00:15 - Frames: 3/450\n", "Time: 00:00/00:15 - Frames: 4/450\n", "Time: 00:00/00:15 - Frames: 5/450 - captured\n", "Time: 00:00/00:15 - Frames: 6/450\n", "Time: 00:00/00:15 - Frames: 7/450\n", "Time: 00:00/00:15 - Frames: 8/450\n", "Time: 00:00/00:15 - Frames: 9/450\n", "Time: 00:00/00:15 - Frames: 10/450 - captured\n", "Time: 00:00/00:15 - Frames: 11/450\n", "Time: 00:00/00:15 - Frames: 12/450\n", "Time: 00:00/00:15 - Frames: 13/450\n", "Time: 00:00/00:15 - Frames: 14/450\n", "Time: 00:00/00:15 - Frames: 15/450 - captured\n", "Time: 00:00/00:15 - Frames: 16/450\n", "Time: 00:00/00:15 - Frames: 17/450\n", "Time: 00:00/00:15 - Frames: 18/450\n", "Time: 00:00/00:15 - Frames: 19/450\n", "Time: 00:00/00:15 - Frames: 20/450 - captured\n", "Time: 00:00/00:15 - Frames: 21/450\n", "Time: 00:00/00:15 - Frames: 22/450\n", "Time: 00:00/00:15 - Frames: 23/450\n", "Time: 00:00/00:15 - Frames: 24/450\n", "Time: 00:00/00:15 - Frames: 25/450 - captured\n", "Time: 00:00/00:15 - Frames: 26/450\n", "Time: 00:00/00:15 - Frames: 27/450\n", "Time: 00:00/00:15 - Frames: 28/450\n", "Time: 00:00/00:15 - Frames: 29/450\n", "Time: 00:01/00:15 - Frames: 30/450 - captured\n", "Time: 00:01/00:15 - Frames: 31/450\n", "Time: 00:01/00:15 - Frames: 32/450\n", "Time: 00:01/00:15 - Frames: 33/450\n", "Time: 00:01/00:15 - Frames: 34/450\n", "Time: 00:01/00:15 - Frames: 35/450 - captured\n", "Time: 00:01/00:15 - Frames: 36/450\n", "Time: 00:01/00:15 - Frames: 37/450\n", "Time: 00:01/00:15 - Frames: 38/450\n", "Time: 00:01/00:15 - Frames: 39/450\n", "Time: 00:01/00:15 - Frames: 40/450 - captured\n", "Time: 00:01/00:15 - Frames: 41/450\n", "Time: 00:01/00:15 - Frames: 42/450\n", "Time: 00:01/00:15 - Frames: 43/450\n", "Time: 00:01/00:15 - Frames: 44/450\n", "Time: 00:01/00:15 - Frames: 45/450 - captured\n", "Time: 00:01/00:15 - Frames: 46/450\n", "Time: 00:01/00:15 - Frames: 47/450\n", "Time: 00:01/00:15 - Frames: 48/450\n", "Time: 00:01/00:15 - Frames: 49/450\n", "Time: 00:01/00:15 - Frames: 50/450 - captured\n", "Time: 00:01/00:15 - Frames: 51/450\n", "Time: 00:01/00:15 - Frames: 52/450\n", "Time: 00:01/00:15 - Frames: 53/450\n", "Time: 00:01/00:15 - Frames: 54/450\n", "Time: 00:01/00:15 - Frames: 55/450 - captured\n", "Time: 00:01/00:15 - Frames: 56/450\n", "Time: 00:01/00:15 - Frames: 57/450\n", "Time: 00:01/00:15 - Frames: 58/450\n", "Time: 00:01/00:15 - Frames: 59/450\n", "Time: 00:02/00:15 - Frames: 60/450 - captured\n", "Time: 00:02/00:15 - Frames: 61/450\n", "Time: 00:02/00:15 - Frames: 62/450\n", "Time: 00:02/00:15 - Frames: 63/450\n", "Time: 00:02/00:15 - Frames: 64/450\n", "Time: 00:02/00:15 - Frames: 65/450 - captured\n", "Time: 00:02/00:15 - Frames: 66/450\n", "Time: 00:02/00:15 - Frames: 67/450\n", "Time: 00:02/00:15 - Frames: 68/450\n", "Time: 00:02/00:15 - Frames: 69/450\n", "Time: 00:02/00:15 - Frames: 70/450 - captured\n", "Time: 00:02/00:15 - Frames: 71/450\n", "Time: 00:02/00:15 - Frames: 72/450\n", "Time: 00:02/00:15 - Frames: 73/450\n", "Time: 00:02/00:15 - Frames: 74/450\n", "Time: 00:02/00:15 - Frames: 75/450 - captured\n", "Time: 00:02/00:15 - Frames: 76/450\n", "Time: 00:02/00:15 - Frames: 77/450\n", "Time: 00:02/00:15 - Frames: 78/450\n", "Time: 00:02/00:15 - Frames: 79/450\n", "Time: 00:02/00:15 - Frames: 80/450 - captured\n", "Time: 00:02/00:15 - Frames: 81/450\n", "Time: 00:02/00:15 - Frames: 82/450\n", "Time: 00:02/00:15 - Frames: 83/450\n", "Time: 00:02/00:15 - Frames: 84/450\n", "Time: 00:02/00:15 - Frames: 85/450 - captured\n", "Time: 00:02/00:15 - Frames: 86/450\n", "Time: 00:02/00:15 - Frames: 87/450\n", "Time: 00:02/00:15 - Frames: 88/450\n", "Time: 00:02/00:15 - Frames: 89/450\n", "Time: 00:03/00:15 - Frames: 90/450 - captured\n", "Time: 00:03/00:15 - Frames: 91/450\n", "Time: 00:03/00:15 - Frames: 92/450\n", "Time: 00:03/00:15 - Frames: 93/450\n", "Time: 00:03/00:15 - Frames: 94/450\n", "Time: 00:03/00:15 - Frames: 95/450 - captured\n", "Time: 00:03/00:15 - Frames: 96/450\n", "Time: 00:03/00:15 - Frames: 97/450\n", "Time: 00:03/00:15 - Frames: 98/450\n", "Time: 00:03/00:15 - Frames: 99/450\n", "Time: 00:03/00:15 - Frames: 100/450 - captured\n", "Time: 00:03/00:15 - Frames: 101/450\n", "Time: 00:03/00:15 - Frames: 102/450\n", "Time: 00:03/00:15 - Frames: 103/450\n", "Time: 00:03/00:15 - Frames: 104/450\n", "Time: 00:03/00:15 - Frames: 105/450 - captured\n", "Time: 00:03/00:15 - Frames: 106/450\n", "Time: 00:03/00:15 - Frames: 107/450\n", "Time: 00:03/00:15 - Frames: 108/450\n", "Time: 00:03/00:15 - Frames: 109/450\n", "Time: 00:03/00:15 - Frames: 110/450 - captured\n", "Time: 00:03/00:15 - Frames: 111/450\n", "Time: 00:03/00:15 - Frames: 112/450\n", "Time: 00:03/00:15 - Frames: 113/450\n", "Time: 00:03/00:15 - Frames: 114/450\n", "Time: 00:03/00:15 - Frames: 115/450 - captured\n", "Time: 00:03/00:15 - Frames: 116/450\n", "Time: 00:03/00:15 - Frames: 117/450\n", "Time: 00:03/00:15 - Frames: 118/450\n", "Time: 00:03/00:15 - Frames: 119/450\n", "Time: 00:04/00:15 - Frames: 120/450 - captured\n", "Time: 00:04/00:15 - Frames: 121/450\n", "Time: 00:04/00:15 - Frames: 122/450\n", "Time: 00:04/00:15 - Frames: 123/450\n", "Time: 00:04/00:15 - Frames: 124/450\n", "Time: 00:04/00:15 - Frames: 125/450 - captured\n", "Time: 00:04/00:15 - Frames: 126/450\n", "Time: 00:04/00:15 - Frames: 127/450\n", "Time: 00:04/00:15 - Frames: 128/450\n", "Time: 00:04/00:15 - Frames: 129/450\n", "Time: 00:04/00:15 - Frames: 130/450 - captured\n", "Time: 00:04/00:15 - Frames: 131/450\n", "Time: 00:04/00:15 - Frames: 132/450\n", "Time: 00:04/00:15 - Frames: 133/450\n", "Time: 00:04/00:15 - Frames: 134/450\n", "Time: 00:04/00:15 - Frames: 135/450 - captured\n", "Time: 00:04/00:15 - Frames: 136/450\n", "Time: 00:04/00:15 - Frames: 137/450\n", "Time: 00:04/00:15 - Frames: 138/450\n", "Time: 00:04/00:15 - Frames: 139/450\n", "Time: 00:04/00:15 - Frames: 140/450 - captured\n", "Time: 00:04/00:15 - Frames: 141/450\n", "Time: 00:04/00:15 - Frames: 142/450\n", "Time: 00:04/00:15 - Frames: 143/450\n", "Time: 00:04/00:15 - Frames: 144/450\n", "Time: 00:04/00:15 - Frames: 145/450 - captured\n", "Time: 00:04/00:15 - Frames: 146/450\n", "Time: 00:04/00:15 - Frames: 147/450\n", "Time: 00:04/00:15 - Frames: 148/450\n", "Time: 00:04/00:15 - Frames: 149/450\n", "Time: 00:05/00:15 - Frames: 150/450 - captured\n", "Time: 00:05/00:15 - Frames: 151/450\n", "Time: 00:05/00:15 - Frames: 152/450\n", "Time: 00:05/00:15 - Frames: 153/450\n", "Time: 00:05/00:15 - Frames: 154/450\n", "Time: 00:05/00:15 - Frames: 155/450 - captured\n", "Time: 00:05/00:15 - Frames: 156/450\n", "Time: 00:05/00:15 - Frames: 157/450\n", "Time: 00:05/00:15 - Frames: 158/450\n", "Time: 00:05/00:15 - Frames: 159/450\n", "Time: 00:05/00:15 - Frames: 160/450 - captured\n", "Time: 00:05/00:15 - Frames: 161/450\n", "Time: 00:05/00:15 - Frames: 162/450\n", "Time: 00:05/00:15 - Frames: 163/450\n", "Time: 00:05/00:15 - Frames: 164/450\n", "Time: 00:05/00:15 - Frames: 165/450 - captured\n", "Time: 00:05/00:15 - Frames: 166/450\n", "Time: 00:05/00:15 - Frames: 167/450\n", "Time: 00:05/00:15 - Frames: 168/450\n", "Time: 00:05/00:15 - Frames: 169/450\n", "Time: 00:05/00:15 - Frames: 170/450 - captured\n", "Time: 00:05/00:15 - Frames: 171/450\n", "Time: 00:05/00:15 - Frames: 172/450\n", "Time: 00:05/00:15 - Frames: 173/450\n", "Time: 00:05/00:15 - Frames: 174/450\n", "Time: 00:05/00:15 - Frames: 175/450 - captured\n", "Time: 00:05/00:15 - Frames: 176/450\n", "Time: 00:05/00:15 - Frames: 177/450\n", "Time: 00:05/00:15 - Frames: 178/450\n", "Time: 00:05/00:15 - Frames: 179/450\n", "Time: 00:06/00:15 - Frames: 180/450 - captured\n", "Time: 00:06/00:15 - Frames: 181/450\n", "Time: 00:06/00:15 - Frames: 182/450\n", "Time: 00:06/00:15 - Frames: 183/450\n", "Time: 00:06/00:15 - Frames: 184/450\n", "Time: 00:06/00:15 - Frames: 185/450 - captured\n", "Time: 00:06/00:15 - Frames: 186/450\n", "Time: 00:06/00:15 - Frames: 187/450\n", "Time: 00:06/00:15 - Frames: 188/450\n", "Time: 00:06/00:15 - Frames: 189/450\n", "Time: 00:06/00:15 - Frames: 190/450 - captured\n", "Time: 00:06/00:15 - Frames: 191/450\n", "Time: 00:06/00:15 - Frames: 192/450\n", "Time: 00:06/00:15 - Frames: 193/450\n", "Time: 00:06/00:15 - Frames: 194/450\n", "Time: 00:06/00:15 - Frames: 195/450 - captured\n", "Time: 00:06/00:15 - Frames: 196/450\n", "Time: 00:06/00:15 - Frames: 197/450\n", "Time: 00:06/00:15 - Frames: 198/450\n", "Time: 00:06/00:15 - Frames: 199/450\n", "Time: 00:06/00:15 - Frames: 200/450 - captured\n", "Time: 00:06/00:15 - Frames: 201/450\n", "Time: 00:06/00:15 - Frames: 202/450\n", "Time: 00:06/00:15 - Frames: 203/450\n", "Time: 00:06/00:15 - Frames: 204/450\n", "Time: 00:06/00:15 - Frames: 205/450 - captured\n", "Time: 00:06/00:15 - Frames: 206/450\n", "Time: 00:06/00:15 - Frames: 207/450\n", "Time: 00:06/00:15 - Frames: 208/450\n", "Time: 00:06/00:15 - Frames: 209/450\n", "Time: 00:07/00:15 - Frames: 210/450 - captured\n", "Time: 00:07/00:15 - Frames: 211/450\n", "Time: 00:07/00:15 - Frames: 212/450\n", "Time: 00:07/00:15 - Frames: 213/450\n", "Time: 00:07/00:15 - Frames: 214/450\n", "Time: 00:07/00:15 - Frames: 215/450 - captured\n", "Time: 00:07/00:15 - Frames: 216/450\n", "Time: 00:07/00:15 - Frames: 217/450\n", "Time: 00:07/00:15 - Frames: 218/450\n", "Time: 00:07/00:15 - Frames: 219/450\n", "Time: 00:07/00:15 - Frames: 220/450 - captured\n", "Time: 00:07/00:15 - Frames: 221/450\n", "Time: 00:07/00:15 - Frames: 222/450\n", "Time: 00:07/00:15 - Frames: 223/450\n", "Time: 00:07/00:15 - Frames: 224/450\n", "Time: 00:07/00:15 - Frames: 225/450 - captured\n", "Time: 00:07/00:15 - Frames: 226/450\n", "Time: 00:07/00:15 - Frames: 227/450\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:07/00:15 - Frames: 228/450\n", "Time: 00:07/00:15 - Frames: 229/450\n", "Time: 00:07/00:15 - Frames: 230/450 - captured\n", "Time: 00:07/00:15 - Frames: 231/450\n", "Time: 00:07/00:15 - Frames: 232/450\n", "Time: 00:07/00:15 - Frames: 233/450\n", "Time: 00:07/00:15 - Frames: 234/450\n", "Time: 00:07/00:15 - Frames: 235/450 - captured\n", "Time: 00:07/00:15 - Frames: 236/450\n", "Time: 00:07/00:15 - Frames: 237/450\n", "Time: 00:07/00:15 - Frames: 238/450\n", "Time: 00:07/00:15 - Frames: 239/450\n", "Time: 00:08/00:15 - Frames: 240/450 - captured\n", "Time: 00:08/00:15 - Frames: 241/450\n", "Time: 00:08/00:15 - Frames: 242/450\n", "Time: 00:08/00:15 - Frames: 243/450\n", "Time: 00:08/00:15 - Frames: 244/450\n", "Time: 00:08/00:15 - Frames: 245/450 - captured\n", "Time: 00:08/00:15 - Frames: 246/450\n", "Time: 00:08/00:15 - Frames: 247/450\n", "Time: 00:08/00:15 - Frames: 248/450\n", "Time: 00:08/00:15 - Frames: 249/450\n", "Time: 00:08/00:15 - Frames: 250/450 - captured\n", "Time: 00:08/00:15 - Frames: 251/450\n", "Time: 00:08/00:15 - Frames: 252/450\n", "Time: 00:08/00:15 - Frames: 253/450\n", "Time: 00:08/00:15 - Frames: 254/450\n", "Time: 00:08/00:15 - Frames: 255/450 - captured\n", "Time: 00:08/00:15 - Frames: 256/450\n", "Time: 00:08/00:15 - Frames: 257/450\n", "Time: 00:08/00:15 - Frames: 258/450\n", "Time: 00:08/00:15 - Frames: 259/450\n", "Time: 00:08/00:15 - Frames: 260/450 - captured\n", "Time: 00:08/00:15 - Frames: 261/450\n", "Time: 00:08/00:15 - Frames: 262/450\n", "Time: 00:08/00:15 - Frames: 263/450\n", "Time: 00:08/00:15 - Frames: 264/450\n", "Time: 00:08/00:15 - Frames: 265/450 - captured\n", "Time: 00:08/00:15 - Frames: 266/450\n", "Time: 00:08/00:15 - Frames: 267/450\n", "Time: 00:08/00:15 - Frames: 268/450\n", "Time: 00:08/00:15 - Frames: 269/450\n", "Time: 00:09/00:15 - Frames: 270/450 - captured\n", "Time: 00:09/00:15 - Frames: 271/450\n", "Time: 00:09/00:15 - Frames: 272/450\n", "Time: 00:09/00:15 - Frames: 273/450\n", "Time: 00:09/00:15 - Frames: 274/450\n", "Time: 00:09/00:15 - Frames: 275/450 - captured\n", "Time: 00:09/00:15 - Frames: 276/450\n", "Time: 00:09/00:15 - Frames: 277/450\n", "Time: 00:09/00:15 - Frames: 278/450\n", "Time: 00:09/00:15 - Frames: 279/450\n", "Time: 00:09/00:15 - Frames: 280/450 - captured\n", "Time: 00:09/00:15 - Frames: 281/450\n", "Time: 00:09/00:15 - Frames: 282/450\n", "Time: 00:09/00:15 - Frames: 283/450\n", "Time: 00:09/00:15 - Frames: 284/450\n", "Time: 00:09/00:15 - Frames: 285/450 - captured\n", "Time: 00:09/00:15 - Frames: 286/450\n", "Time: 00:09/00:15 - Frames: 287/450\n", "Time: 00:09/00:15 - Frames: 288/450\n", "Time: 00:09/00:15 - Frames: 289/450\n", "Time: 00:09/00:15 - Frames: 290/450 - captured\n", "Time: 00:09/00:15 - Frames: 291/450\n", "Time: 00:09/00:15 - Frames: 292/450\n", "Time: 00:09/00:15 - Frames: 293/450\n", "Time: 00:09/00:15 - Frames: 294/450\n", "Time: 00:09/00:15 - Frames: 295/450 - captured\n", "Time: 00:09/00:15 - Frames: 296/450\n", "Time: 00:09/00:15 - Frames: 297/450\n", "Time: 00:09/00:15 - Frames: 298/450\n", "Time: 00:09/00:15 - Frames: 299/450\n", "Time: 00:10/00:15 - Frames: 300/450 - captured\n", "Time: 00:10/00:15 - Frames: 301/450\n", "Time: 00:10/00:15 - Frames: 302/450\n", "Time: 00:10/00:15 - Frames: 303/450\n", "Time: 00:10/00:15 - Frames: 304/450\n", "Time: 00:10/00:15 - Frames: 305/450 - captured\n", "Time: 00:10/00:15 - Frames: 306/450\n", "Time: 00:10/00:15 - Frames: 307/450\n", "Time: 00:10/00:15 - Frames: 308/450\n", "Time: 00:10/00:15 - Frames: 309/450\n", "Time: 00:10/00:15 - Frames: 310/450 - captured\n", "Time: 00:10/00:15 - Frames: 311/450\n", "Time: 00:10/00:15 - Frames: 312/450\n", "Time: 00:10/00:15 - Frames: 313/450\n", "Time: 00:10/00:15 - Frames: 314/450\n", "Time: 00:10/00:15 - Frames: 315/450 - captured\n", "Time: 00:10/00:15 - Frames: 316/450\n", "Time: 00:10/00:15 - Frames: 317/450\n", "Time: 00:10/00:15 - Frames: 318/450\n", "Time: 00:10/00:15 - Frames: 319/450\n", "Time: 00:10/00:15 - Frames: 320/450 - captured\n", "Time: 00:10/00:15 - Frames: 321/450\n", "Time: 00:10/00:15 - Frames: 322/450\n", "Time: 00:10/00:15 - Frames: 323/450\n", "Time: 00:10/00:15 - Frames: 324/450\n", "Time: 00:10/00:15 - Frames: 325/450 - captured\n", "Time: 00:10/00:15 - Frames: 326/450\n", "Time: 00:10/00:15 - Frames: 327/450\n", "Time: 00:10/00:15 - Frames: 328/450\n", "Time: 00:10/00:15 - Frames: 329/450\n", "Time: 00:11/00:15 - Frames: 330/450 - captured\n", "Time: 00:11/00:15 - Frames: 331/450\n", "Time: 00:11/00:15 - Frames: 332/450\n", "Time: 00:11/00:15 - Frames: 333/450\n", "Time: 00:11/00:15 - Frames: 334/450\n", "Time: 00:11/00:15 - Frames: 335/450 - captured\n", "Time: 00:11/00:15 - Frames: 336/450\n", "Time: 00:11/00:15 - Frames: 337/450\n", "Time: 00:11/00:15 - Frames: 338/450\n", "Time: 00:11/00:15 - Frames: 339/450\n", "Time: 00:11/00:15 - Frames: 340/450 - captured\n", "Time: 00:11/00:15 - Frames: 341/450\n", "Time: 00:11/00:15 - Frames: 342/450\n", "Time: 00:11/00:15 - Frames: 343/450\n", "Time: 00:11/00:15 - Frames: 344/450\n", "Time: 00:11/00:15 - Frames: 345/450 - captured\n", "Time: 00:11/00:15 - Frames: 346/450\n", "Time: 00:11/00:15 - Frames: 347/450\n", "Time: 00:11/00:15 - Frames: 348/450\n", "Time: 00:11/00:15 - Frames: 349/450\n", "Time: 00:11/00:15 - Frames: 350/450 - captured\n", "Time: 00:11/00:15 - Frames: 351/450\n", "Time: 00:11/00:15 - Frames: 352/450\n", "Time: 00:11/00:15 - Frames: 353/450\n", "Time: 00:11/00:15 - Frames: 354/450\n", "Time: 00:11/00:15 - Frames: 355/450 - captured\n", "Time: 00:11/00:15 - Frames: 356/450\n", "Time: 00:11/00:15 - Frames: 357/450\n", "Time: 00:11/00:15 - Frames: 358/450\n", "Time: 00:11/00:15 - Frames: 359/450\n", "Time: 00:12/00:15 - Frames: 360/450 - captured\n", "Time: 00:12/00:15 - Frames: 361/450\n", "Time: 00:12/00:15 - Frames: 362/450\n", "Time: 00:12/00:15 - Frames: 363/450\n", "Time: 00:12/00:15 - Frames: 364/450\n", "Time: 00:12/00:15 - Frames: 365/450 - captured\n", "Time: 00:12/00:15 - Frames: 366/450\n", "Time: 00:12/00:15 - Frames: 367/450\n", "Time: 00:12/00:15 - Frames: 368/450\n", "Time: 00:12/00:15 - Frames: 369/450\n", "Time: 00:12/00:15 - Frames: 370/450 - captured\n", "Time: 00:12/00:15 - Frames: 371/450\n", "Time: 00:12/00:15 - Frames: 372/450\n", "Time: 00:12/00:15 - Frames: 373/450\n", "Time: 00:12/00:15 - Frames: 374/450\n", "Time: 00:12/00:15 - Frames: 375/450 - captured\n", "Time: 00:12/00:15 - Frames: 376/450\n", "Time: 00:12/00:15 - Frames: 377/450\n", "Time: 00:12/00:15 - Frames: 378/450\n", "Time: 00:12/00:15 - Frames: 379/450\n", "Time: 00:12/00:15 - Frames: 380/450 - captured\n", "Time: 00:12/00:15 - Frames: 381/450\n", "Time: 00:12/00:15 - Frames: 382/450\n", "Time: 00:12/00:15 - Frames: 383/450\n", "Time: 00:12/00:15 - Frames: 384/450\n", "Time: 00:12/00:15 - Frames: 385/450 - captured\n", "Time: 00:12/00:15 - Frames: 386/450\n", "Time: 00:12/00:15 - Frames: 387/450\n", "Time: 00:12/00:15 - Frames: 388/450\n", "Time: 00:12/00:15 - Frames: 389/450\n", "Time: 00:13/00:15 - Frames: 390/450 - captured\n", "Time: 00:13/00:15 - Frames: 391/450\n", "Time: 00:13/00:15 - Frames: 392/450\n", "Time: 00:13/00:15 - Frames: 393/450\n", "Time: 00:13/00:15 - Frames: 394/450\n", "Time: 00:13/00:15 - Frames: 395/450 - captured\n", "Time: 00:13/00:15 - Frames: 396/450\n", "Time: 00:13/00:15 - Frames: 397/450\n", "Time: 00:13/00:15 - Frames: 398/450\n", "Time: 00:13/00:15 - Frames: 399/450\n", "Time: 00:13/00:15 - Frames: 400/450 - captured\n", "Time: 00:13/00:15 - Frames: 401/450\n", "Time: 00:13/00:15 - Frames: 402/450\n", "Time: 00:13/00:15 - Frames: 403/450\n", "Time: 00:13/00:15 - Frames: 404/450\n", "Time: 00:13/00:15 - Frames: 405/450 - captured\n", "Time: 00:13/00:15 - Frames: 406/450\n", "Time: 00:13/00:15 - Frames: 407/450\n", "Time: 00:13/00:15 - Frames: 408/450\n", "Time: 00:13/00:15 - Frames: 409/450\n", "Time: 00:13/00:15 - Frames: 410/450 - captured\n", "Time: 00:13/00:15 - Frames: 411/450\n", "Time: 00:13/00:15 - Frames: 412/450\n", "Time: 00:13/00:15 - Frames: 413/450\n", "Time: 00:13/00:15 - Frames: 414/450\n", "Time: 00:13/00:15 - Frames: 415/450 - captured\n", "Time: 00:13/00:15 - Frames: 416/450\n", "Time: 00:13/00:15 - Frames: 417/450\n", "Time: 00:13/00:15 - Frames: 418/450\n", "Time: 00:13/00:15 - Frames: 419/450\n", "Time: 00:14/00:15 - Frames: 420/450 - captured\n", "Time: 00:14/00:15 - Frames: 421/450\n", "Time: 00:14/00:15 - Frames: 422/450\n", "Time: 00:14/00:15 - Frames: 423/450\n", "Time: 00:14/00:15 - Frames: 424/450\n", "Time: 00:14/00:15 - Frames: 425/450 - captured\n", "Time: 00:14/00:15 - Frames: 426/450\n", "Time: 00:14/00:15 - Frames: 427/450\n", "Time: 00:14/00:15 - Frames: 428/450\n", "Time: 00:14/00:15 - Frames: 429/450\n", "Time: 00:14/00:15 - Frames: 430/450 - captured\n", "Time: 00:14/00:15 - Frames: 431/450\n", "Time: 00:14/00:15 - Frames: 432/450\n", "Time: 00:14/00:15 - Frames: 433/450\n", "Time: 00:14/00:15 - Frames: 434/450\n", "Time: 00:14/00:15 - Frames: 435/450 - captured\n", "Time: 00:14/00:15 - Frames: 436/450\n", "Time: 00:14/00:15 - Frames: 437/450\n", "Time: 00:14/00:15 - Frames: 438/450\n", "Time: 00:14/00:15 - Frames: 439/450\n", "Time: 00:14/00:15 - Frames: 440/450 - captured\n", "Time: 00:14/00:15 - Frames: 441/450\n", "Time: 00:14/00:15 - Frames: 442/450\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:14/00:15 - Frames: 443/450\n", "Time: 00:14/00:15 - Frames: 444/450\n", "Time: 00:14/00:15 - Frames: 445/450 - captured\n", "Time: 00:14/00:15 - Frames: 446/450\n", "Time: 00:14/00:15 - Frames: 447/450\n", "Time: 00:14/00:15 - Frames: 448/450\n" ] } ], "source": [ "coordinates = mt.run_tracking()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The methods work, and clearly separate out the two species. However, we can still improve a few things:\n", "\n", "First, for each method, we can separately increase the sensitivity by using a combination of larger blur-kernels and higher threshold values. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----------------------------\n", "Detection method \"fish\":\n", "\n", "{'blur_kernel': 15,\n", " 'label': 'fish',\n", " 'max_area': inf,\n", " 'max_length': inf,\n", " 'min_area': 0,\n", " 'min_length': 30,\n", " 'mode': 'single',\n", " 'overlay_colour': (0, 0,\n", " 255),\n", " 'remove_shadows': True,\n", " 'threshold_value': 200}\n", "-----------------------------\n", "\n", "\n", "-----------------------------\n", "Detection method \"isopod\":\n", "\n", "{'blur_kernel': 9,\n", " 'label': 'isopod',\n", " 'max_area': inf,\n", " 'max_length': 30,\n", " 'min_area': 0,\n", " 'min_length': 0,\n", " 'mode': 'multiple',\n", " 'overlay_colour': (0, 128,\n", " 0),\n", " 'remove_shadows': True,\n", " 'threshold_value': 180}\n", "-----------------------------\n", "\n", "\n", "\n", "\n", "--------------------------------------------------------------\n", "Motion detection settings - \"isopods_fish.mp4\":\n", "\n", "Background-subtractor: MOG\n", "History: 60 seconds\n", "Sensitivity: 10\n", "Read every nth frame: 5\n", "Detect shadows: True\n", "Start after n seconds: 0\n", "Finish after n seconds: - \n", "--------------------------------------------------------------\n" ] } ], "source": [ "fish = pp.tracking_method(label=\"fish\", remove_shadows=True, min_length=30,\n", " overlay_colour=\"red\", mode=\"single\", \n", " blur=15, threshold=200) \n", "isopod = pp.tracking_method(label=\"isopod\", remove_shadows=True, max_length=30,\n", " overlay_colour=\"green\", mode=\"multiple\",\n", " blur=9, threshold=180)\n", "mt.detection_settings(methods=[fish, isopod])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Canvas masking and consecutive masking\n", "\n", "Second, we also need to exclude some of the particles that are floating around outside the actual arena. We can do this with phenopype's core `create_mask` method, which also accepts `motion_tracker` objects. The masks are automatically applied when running the tracking routine." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", " \n", "![Canvas masking](_figures/tracking4.jpg)\n", " \n", "**Fig. 3:** We can also specify multiple masks, one the one hand, to exclude unwanted areas, on the other hand, to see when which particle or animal stays in which area. \n", " \n", "
\n", "
" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "masks = pp.preprocessing.create_mask(mt.image, label=\"full\", annotation_id=\"a\")\n", "masks = pp.preprocessing.create_mask(mt.image, label=\"center\", annotations=masks, annotation_id=\"b\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consecutive masking needs to be activated in the detection settings (`c_mask=True`). This option will prohibit repeated detection of objects when several tracking methods are applied. For example, inside the detected fish-area sometimes isopod objects are detected, due to artifacts or incomplete subtraction results. Consecutive masking will \"block\" an area after the first method has been applied - the order by which methods are applied matters. The following settings will create a mask around the fish (which is detected first) in the shape of a rectangle + pixels around the detected contour. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-----------------------------\n", "Detection method \"fish\":\n", "\n", "{'blur_kernel': 15,\n", " 'label': 'fish',\n", " 'max_area': inf,\n", " 'max_length': inf,\n", " 'min_area': 0,\n", " 'min_length': 30,\n", " 'mode': 'single',\n", " 'overlay_colour': (0, 0,\n", " 255),\n", " 'remove_shadows': True,\n", " 'threshold_value': 200}\n", "-----------------------------\n", "\n", "\n", "-----------------------------\n", "Detection method \"isopod\":\n", "\n", "{'blur_kernel': 9,\n", " 'label': 'isopod',\n", " 'max_area': inf,\n", " 'max_length': 30,\n", " 'min_area': 0,\n", " 'min_length': 0,\n", " 'mode': 'multiple',\n", " 'overlay_colour': (0, 128,\n", " 0),\n", " 'remove_shadows': True,\n", " 'threshold_value': 180}\n", "-----------------------------\n", "\n", "\n", "\n", "\n", "--------------------------------------------------------------\n", "Motion detection settings - \"isopods_fish.mp4\":\n", "\n", "Background-subtractor: MOG\n", "History: 60 seconds\n", "Sensitivity: 10\n", "Read every nth frame: 5\n", "Detect shadows: True\n", "Start after n seconds: 0\n", "Finish after n seconds: - \n", "--------------------------------------------------------------\n" ] } ], "source": [ "mt.detection_settings(methods=[fish, isopod],\n", " c_mask=True,\n", " c_mask_shape=\"rect\",\n", " c_mask_size=200,\n", " masks=masks)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:00/00:15 - Frames: 1/450\n", "Time: 00:00/00:15 - Frames: 2/450\n", "Time: 00:00/00:15 - Frames: 3/450\n", "Time: 00:00/00:15 - Frames: 4/450\n", "Time: 00:00/00:15 - Frames: 5/450 - captured\n", "Time: 00:00/00:15 - Frames: 6/450\n", "Time: 00:00/00:15 - Frames: 7/450\n", "Time: 00:00/00:15 - Frames: 8/450\n", "Time: 00:00/00:15 - Frames: 9/450\n", "Time: 00:00/00:15 - Frames: 10/450 - captured\n", "Time: 00:00/00:15 - Frames: 11/450\n", "Time: 00:00/00:15 - Frames: 12/450\n", "Time: 00:00/00:15 - Frames: 13/450\n", "Time: 00:00/00:15 - Frames: 14/450\n", "Time: 00:00/00:15 - Frames: 15/450 - captured\n", "Time: 00:00/00:15 - Frames: 16/450\n", "Time: 00:00/00:15 - Frames: 17/450\n", "Time: 00:00/00:15 - Frames: 18/450\n", "Time: 00:00/00:15 - Frames: 19/450\n", "Time: 00:00/00:15 - Frames: 20/450 - captured\n", "Time: 00:00/00:15 - Frames: 21/450\n", "Time: 00:00/00:15 - Frames: 22/450\n", "Time: 00:00/00:15 - Frames: 23/450\n", "Time: 00:00/00:15 - Frames: 24/450\n", "Time: 00:00/00:15 - Frames: 25/450 - captured\n", "Time: 00:00/00:15 - Frames: 26/450\n", "Time: 00:00/00:15 - Frames: 27/450\n", "Time: 00:00/00:15 - Frames: 28/450\n", "Time: 00:00/00:15 - Frames: 29/450\n", "Time: 00:01/00:15 - Frames: 30/450 - captured\n", "Time: 00:01/00:15 - Frames: 31/450\n", "Time: 00:01/00:15 - Frames: 32/450\n", "Time: 00:01/00:15 - Frames: 33/450\n", "Time: 00:01/00:15 - Frames: 34/450\n", "Time: 00:01/00:15 - Frames: 35/450 - captured\n", "Time: 00:01/00:15 - Frames: 36/450\n", "Time: 00:01/00:15 - Frames: 37/450\n", "Time: 00:01/00:15 - Frames: 38/450\n", "Time: 00:01/00:15 - Frames: 39/450\n", "Time: 00:01/00:15 - Frames: 40/450 - captured\n", "Time: 00:01/00:15 - Frames: 41/450\n", "Time: 00:01/00:15 - Frames: 42/450\n", "Time: 00:01/00:15 - Frames: 43/450\n", "Time: 00:01/00:15 - Frames: 44/450\n", "Time: 00:01/00:15 - Frames: 45/450 - captured\n", "Time: 00:01/00:15 - Frames: 46/450\n", "Time: 00:01/00:15 - Frames: 47/450\n", "Time: 00:01/00:15 - Frames: 48/450\n", "Time: 00:01/00:15 - Frames: 49/450\n", "Time: 00:01/00:15 - Frames: 50/450 - captured\n", "Time: 00:01/00:15 - Frames: 51/450\n", "Time: 00:01/00:15 - Frames: 52/450\n", "Time: 00:01/00:15 - Frames: 53/450\n", "Time: 00:01/00:15 - Frames: 54/450\n", "Time: 00:01/00:15 - Frames: 55/450 - captured\n", "Time: 00:01/00:15 - Frames: 56/450\n", "Time: 00:01/00:15 - Frames: 57/450\n", "Time: 00:01/00:15 - Frames: 58/450\n", "Time: 00:01/00:15 - Frames: 59/450\n", "Time: 00:02/00:15 - Frames: 60/450 - captured\n", "Time: 00:02/00:15 - Frames: 61/450\n", "Time: 00:02/00:15 - Frames: 62/450\n", "Time: 00:02/00:15 - Frames: 63/450\n", "Time: 00:02/00:15 - Frames: 64/450\n", "Time: 00:02/00:15 - Frames: 65/450 - captured\n", "Time: 00:02/00:15 - Frames: 66/450\n", "Time: 00:02/00:15 - Frames: 67/450\n", "Time: 00:02/00:15 - Frames: 68/450\n", "Time: 00:02/00:15 - Frames: 69/450\n", "Time: 00:02/00:15 - Frames: 70/450 - captured\n", "Time: 00:02/00:15 - Frames: 71/450\n", "Time: 00:02/00:15 - Frames: 72/450\n", "Time: 00:02/00:15 - Frames: 73/450\n", "Time: 00:02/00:15 - Frames: 74/450\n", "Time: 00:02/00:15 - Frames: 75/450 - captured\n", "Time: 00:02/00:15 - Frames: 76/450\n", "Time: 00:02/00:15 - Frames: 77/450\n", "Time: 00:02/00:15 - Frames: 78/450\n", "Time: 00:02/00:15 - Frames: 79/450\n", "Time: 00:02/00:15 - Frames: 80/450 - captured\n", "Time: 00:02/00:15 - Frames: 81/450\n", "Time: 00:02/00:15 - Frames: 82/450\n", "Time: 00:02/00:15 - Frames: 83/450\n", "Time: 00:02/00:15 - Frames: 84/450\n", "Time: 00:02/00:15 - Frames: 85/450 - captured\n", "Time: 00:02/00:15 - Frames: 86/450\n", "Time: 00:02/00:15 - Frames: 87/450\n", "Time: 00:02/00:15 - Frames: 88/450\n", "Time: 00:02/00:15 - Frames: 89/450\n", "Time: 00:03/00:15 - Frames: 90/450 - captured\n", "Time: 00:03/00:15 - Frames: 91/450\n", "Time: 00:03/00:15 - Frames: 92/450\n", "Time: 00:03/00:15 - Frames: 93/450\n", "Time: 00:03/00:15 - Frames: 94/450\n", "Time: 00:03/00:15 - Frames: 95/450 - captured\n", "Time: 00:03/00:15 - Frames: 96/450\n", "Time: 00:03/00:15 - Frames: 97/450\n", "Time: 00:03/00:15 - Frames: 98/450\n", "Time: 00:03/00:15 - Frames: 99/450\n", "Time: 00:03/00:15 - Frames: 100/450 - captured\n", "Time: 00:03/00:15 - Frames: 101/450\n", "Time: 00:03/00:15 - Frames: 102/450\n", "Time: 00:03/00:15 - Frames: 103/450\n", "Time: 00:03/00:15 - Frames: 104/450\n", "Time: 00:03/00:15 - Frames: 105/450 - captured\n", "Time: 00:03/00:15 - Frames: 106/450\n", "Time: 00:03/00:15 - Frames: 107/450\n", "Time: 00:03/00:15 - Frames: 108/450\n", "Time: 00:03/00:15 - Frames: 109/450\n", "Time: 00:03/00:15 - Frames: 110/450 - captured\n", "Time: 00:03/00:15 - Frames: 111/450\n", "Time: 00:03/00:15 - Frames: 112/450\n", "Time: 00:03/00:15 - Frames: 113/450\n", "Time: 00:03/00:15 - Frames: 114/450\n", "Time: 00:03/00:15 - Frames: 115/450 - captured\n", "Time: 00:03/00:15 - Frames: 116/450\n", "Time: 00:03/00:15 - Frames: 117/450\n", "Time: 00:03/00:15 - Frames: 118/450\n", "Time: 00:03/00:15 - Frames: 119/450\n", "Time: 00:04/00:15 - Frames: 120/450 - captured\n", "Time: 00:04/00:15 - Frames: 121/450\n", "Time: 00:04/00:15 - Frames: 122/450\n", "Time: 00:04/00:15 - Frames: 123/450\n", "Time: 00:04/00:15 - Frames: 124/450\n", "Time: 00:04/00:15 - Frames: 125/450 - captured\n", "Time: 00:04/00:15 - Frames: 126/450\n", "Time: 00:04/00:15 - Frames: 127/450\n", "Time: 00:04/00:15 - Frames: 128/450\n", "Time: 00:04/00:15 - Frames: 129/450\n", "Time: 00:04/00:15 - Frames: 130/450 - captured\n", "Time: 00:04/00:15 - Frames: 131/450\n", "Time: 00:04/00:15 - Frames: 132/450\n", "Time: 00:04/00:15 - Frames: 133/450\n", "Time: 00:04/00:15 - Frames: 134/450\n", "Time: 00:04/00:15 - Frames: 135/450 - captured\n", "Time: 00:04/00:15 - Frames: 136/450\n", "Time: 00:04/00:15 - Frames: 137/450\n", "Time: 00:04/00:15 - Frames: 138/450\n", "Time: 00:04/00:15 - Frames: 139/450\n", "Time: 00:04/00:15 - Frames: 140/450 - captured\n", "Time: 00:04/00:15 - Frames: 141/450\n", "Time: 00:04/00:15 - Frames: 142/450\n", "Time: 00:04/00:15 - Frames: 143/450\n", "Time: 00:04/00:15 - Frames: 144/450\n", "Time: 00:04/00:15 - Frames: 145/450 - captured\n", "Time: 00:04/00:15 - Frames: 146/450\n", "Time: 00:04/00:15 - Frames: 147/450\n", "Time: 00:04/00:15 - Frames: 148/450\n", "Time: 00:04/00:15 - Frames: 149/450\n", "Time: 00:05/00:15 - Frames: 150/450 - captured\n", "Time: 00:05/00:15 - Frames: 151/450\n", "Time: 00:05/00:15 - Frames: 152/450\n", "Time: 00:05/00:15 - Frames: 153/450\n", "Time: 00:05/00:15 - Frames: 154/450\n", "Time: 00:05/00:15 - Frames: 155/450 - captured\n", "Time: 00:05/00:15 - Frames: 156/450\n", "Time: 00:05/00:15 - Frames: 157/450\n", "Time: 00:05/00:15 - Frames: 158/450\n", "Time: 00:05/00:15 - Frames: 159/450\n", "Time: 00:05/00:15 - Frames: 160/450 - captured\n", "Time: 00:05/00:15 - Frames: 161/450\n", "Time: 00:05/00:15 - Frames: 162/450\n", "Time: 00:05/00:15 - Frames: 163/450\n", "Time: 00:05/00:15 - Frames: 164/450\n", "Time: 00:05/00:15 - Frames: 165/450 - captured\n", "Time: 00:05/00:15 - Frames: 166/450\n", "Time: 00:05/00:15 - Frames: 167/450\n", "Time: 00:05/00:15 - Frames: 168/450\n", "Time: 00:05/00:15 - Frames: 169/450\n", "Time: 00:05/00:15 - Frames: 170/450 - captured\n", "Time: 00:05/00:15 - Frames: 171/450\n", "Time: 00:05/00:15 - Frames: 172/450\n", "Time: 00:05/00:15 - Frames: 173/450\n", "Time: 00:05/00:15 - Frames: 174/450\n", "Time: 00:05/00:15 - Frames: 175/450 - captured\n", "Time: 00:05/00:15 - Frames: 176/450\n", "Time: 00:05/00:15 - Frames: 177/450\n", "Time: 00:05/00:15 - Frames: 178/450\n", "Time: 00:05/00:15 - Frames: 179/450\n", "Time: 00:06/00:15 - Frames: 180/450 - captured\n", "Time: 00:06/00:15 - Frames: 181/450\n", "Time: 00:06/00:15 - Frames: 182/450\n", "Time: 00:06/00:15 - Frames: 183/450\n", "Time: 00:06/00:15 - Frames: 184/450\n", "Time: 00:06/00:15 - Frames: 185/450 - captured\n", "Time: 00:06/00:15 - Frames: 186/450\n", "Time: 00:06/00:15 - Frames: 187/450\n", "Time: 00:06/00:15 - Frames: 188/450\n", "Time: 00:06/00:15 - Frames: 189/450\n", "Time: 00:06/00:15 - Frames: 190/450 - captured\n", "Time: 00:06/00:15 - Frames: 191/450\n", "Time: 00:06/00:15 - Frames: 192/450\n", "Time: 00:06/00:15 - Frames: 193/450\n", "Time: 00:06/00:15 - Frames: 194/450\n", "Time: 00:06/00:15 - Frames: 195/450 - captured\n", "Time: 00:06/00:15 - Frames: 196/450\n", "Time: 00:06/00:15 - Frames: 197/450\n", "Time: 00:06/00:15 - Frames: 198/450\n", "Time: 00:06/00:15 - Frames: 199/450\n", "Time: 00:06/00:15 - Frames: 200/450 - captured\n", "Time: 00:06/00:15 - Frames: 201/450\n", "Time: 00:06/00:15 - Frames: 202/450\n", "Time: 00:06/00:15 - Frames: 203/450\n", "Time: 00:06/00:15 - Frames: 204/450\n", "Time: 00:06/00:15 - Frames: 205/450 - captured\n", "Time: 00:06/00:15 - Frames: 206/450\n", "Time: 00:06/00:15 - Frames: 207/450\n", "Time: 00:06/00:15 - Frames: 208/450\n", "Time: 00:06/00:15 - Frames: 209/450\n", "Time: 00:07/00:15 - Frames: 210/450 - captured\n", "Time: 00:07/00:15 - Frames: 211/450\n", "Time: 00:07/00:15 - Frames: 212/450\n", "Time: 00:07/00:15 - Frames: 213/450\n", "Time: 00:07/00:15 - Frames: 214/450\n", "Time: 00:07/00:15 - Frames: 215/450 - captured\n", "Time: 00:07/00:15 - Frames: 216/450\n", "Time: 00:07/00:15 - Frames: 217/450\n", "Time: 00:07/00:15 - Frames: 218/450\n", "Time: 00:07/00:15 - Frames: 219/450\n", "Time: 00:07/00:15 - Frames: 220/450 - captured\n", "Time: 00:07/00:15 - Frames: 221/450\n", "Time: 00:07/00:15 - Frames: 222/450\n", "Time: 00:07/00:15 - Frames: 223/450\n", "Time: 00:07/00:15 - Frames: 224/450\n", "Time: 00:07/00:15 - Frames: 225/450 - captured\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Time: 00:07/00:15 - Frames: 226/450\n", "Time: 00:07/00:15 - Frames: 227/450\n", "Time: 00:07/00:15 - Frames: 228/450\n", "Time: 00:07/00:15 - Frames: 229/450\n", "Time: 00:07/00:15 - Frames: 230/450 - captured\n", "Time: 00:07/00:15 - Frames: 231/450\n", "Time: 00:07/00:15 - Frames: 232/450\n", "Time: 00:07/00:15 - Frames: 233/450\n", "Time: 00:07/00:15 - Frames: 234/450\n", "Time: 00:07/00:15 - Frames: 235/450 - captured\n", "Time: 00:07/00:15 - Frames: 236/450\n", "Time: 00:07/00:15 - Frames: 237/450\n", "Time: 00:07/00:15 - Frames: 238/450\n", "Time: 00:07/00:15 - Frames: 239/450\n", "Time: 00:08/00:15 - Frames: 240/450 - captured\n", "Time: 00:08/00:15 - Frames: 241/450\n", "Time: 00:08/00:15 - Frames: 242/450\n", "Time: 00:08/00:15 - Frames: 243/450\n", "Time: 00:08/00:15 - Frames: 244/450\n", "Time: 00:08/00:15 - Frames: 245/450 - captured\n", "Time: 00:08/00:15 - Frames: 246/450\n", "Time: 00:08/00:15 - Frames: 247/450\n", "Time: 00:08/00:15 - Frames: 248/450\n", "Time: 00:08/00:15 - Frames: 249/450\n", "Time: 00:08/00:15 - Frames: 250/450 - captured\n", "Time: 00:08/00:15 - Frames: 251/450\n", "Time: 00:08/00:15 - Frames: 252/450\n", "Time: 00:08/00:15 - Frames: 253/450\n", "Time: 00:08/00:15 - Frames: 254/450\n", "Time: 00:08/00:15 - Frames: 255/450 - captured\n", "Time: 00:08/00:15 - Frames: 256/450\n", "Time: 00:08/00:15 - Frames: 257/450\n", "Time: 00:08/00:15 - Frames: 258/450\n", "Time: 00:08/00:15 - Frames: 259/450\n", "Time: 00:08/00:15 - Frames: 260/450 - captured\n", "Time: 00:08/00:15 - Frames: 261/450\n", "Time: 00:08/00:15 - Frames: 262/450\n", "Time: 00:08/00:15 - Frames: 263/450\n", "Time: 00:08/00:15 - Frames: 264/450\n", "Time: 00:08/00:15 - Frames: 265/450 - captured\n", "Time: 00:08/00:15 - Frames: 266/450\n", "Time: 00:08/00:15 - Frames: 267/450\n", "Time: 00:08/00:15 - Frames: 268/450\n", "Time: 00:08/00:15 - Frames: 269/450\n", "Time: 00:09/00:15 - Frames: 270/450 - captured\n", "Time: 00:09/00:15 - Frames: 271/450\n", "Time: 00:09/00:15 - Frames: 272/450\n", "Time: 00:09/00:15 - Frames: 273/450\n", "Time: 00:09/00:15 - Frames: 274/450\n", "Time: 00:09/00:15 - Frames: 275/450 - captured\n", "Time: 00:09/00:15 - Frames: 276/450\n", "Time: 00:09/00:15 - Frames: 277/450\n", "Time: 00:09/00:15 - Frames: 278/450\n", "Time: 00:09/00:15 - Frames: 279/450\n", "Time: 00:09/00:15 - Frames: 280/450 - captured\n", "Time: 00:09/00:15 - Frames: 281/450\n", "Time: 00:09/00:15 - Frames: 282/450\n", "Time: 00:09/00:15 - Frames: 283/450\n", "Time: 00:09/00:15 - Frames: 284/450\n", "Time: 00:09/00:15 - Frames: 285/450 - captured\n", "Time: 00:09/00:15 - Frames: 286/450\n", "Time: 00:09/00:15 - Frames: 287/450\n", "Time: 00:09/00:15 - Frames: 288/450\n", "Time: 00:09/00:15 - Frames: 289/450\n", "Time: 00:09/00:15 - Frames: 290/450 - captured\n", "Time: 00:09/00:15 - Frames: 291/450\n", "Time: 00:09/00:15 - Frames: 292/450\n", "Time: 00:09/00:15 - Frames: 293/450\n", "Time: 00:09/00:15 - Frames: 294/450\n", "Time: 00:09/00:15 - Frames: 295/450 - captured\n", "Time: 00:09/00:15 - Frames: 296/450\n", "Time: 00:09/00:15 - Frames: 297/450\n", "Time: 00:09/00:15 - Frames: 298/450\n", "Time: 00:09/00:15 - Frames: 299/450\n", "Time: 00:10/00:15 - Frames: 300/450 - captured\n", "Time: 00:10/00:15 - Frames: 301/450\n", "Time: 00:10/00:15 - Frames: 302/450\n", "Time: 00:10/00:15 - Frames: 303/450\n", "Time: 00:10/00:15 - Frames: 304/450\n", "Time: 00:10/00:15 - Frames: 305/450 - captured\n", "Time: 00:10/00:15 - Frames: 306/450\n", "Time: 00:10/00:15 - Frames: 307/450\n", "Time: 00:10/00:15 - Frames: 308/450\n", "Time: 00:10/00:15 - Frames: 309/450\n", "Time: 00:10/00:15 - Frames: 310/450 - captured\n", "Time: 00:10/00:15 - Frames: 311/450\n", "Time: 00:10/00:15 - Frames: 312/450\n", "Time: 00:10/00:15 - Frames: 313/450\n", "Time: 00:10/00:15 - Frames: 314/450\n", "Time: 00:10/00:15 - Frames: 315/450 - captured\n", "Time: 00:10/00:15 - Frames: 316/450\n", "Time: 00:10/00:15 - Frames: 317/450\n", "Time: 00:10/00:15 - Frames: 318/450\n", "Time: 00:10/00:15 - Frames: 319/450\n", "Time: 00:10/00:15 - Frames: 320/450 - captured\n", "Time: 00:10/00:15 - Frames: 321/450\n", "Time: 00:10/00:15 - Frames: 322/450\n", "Time: 00:10/00:15 - Frames: 323/450\n", "Time: 00:10/00:15 - Frames: 324/450\n", "Time: 00:10/00:15 - Frames: 325/450 - captured\n", "Time: 00:10/00:15 - Frames: 326/450\n", "Time: 00:10/00:15 - Frames: 327/450\n", "Time: 00:10/00:15 - Frames: 328/450\n", "Time: 00:10/00:15 - Frames: 329/450\n", "Time: 00:11/00:15 - Frames: 330/450 - captured\n", "Time: 00:11/00:15 - Frames: 331/450\n", "Time: 00:11/00:15 - Frames: 332/450\n", "Time: 00:11/00:15 - Frames: 333/450\n", "Time: 00:11/00:15 - Frames: 334/450\n", "Time: 00:11/00:15 - Frames: 335/450 - captured\n", "Time: 00:11/00:15 - Frames: 336/450\n", "Time: 00:11/00:15 - Frames: 337/450\n", "Time: 00:11/00:15 - Frames: 338/450\n", "Time: 00:11/00:15 - Frames: 339/450\n", "Time: 00:11/00:15 - Frames: 340/450 - captured\n", "Time: 00:11/00:15 - Frames: 341/450\n", "Time: 00:11/00:15 - Frames: 342/450\n", "Time: 00:11/00:15 - Frames: 343/450\n", "Time: 00:11/00:15 - Frames: 344/450\n", "Time: 00:11/00:15 - Frames: 345/450 - captured\n", "Time: 00:11/00:15 - Frames: 346/450\n", "Time: 00:11/00:15 - Frames: 347/450\n", "Time: 00:11/00:15 - Frames: 348/450\n", "Time: 00:11/00:15 - Frames: 349/450\n", "Time: 00:11/00:15 - Frames: 350/450 - captured\n", "Time: 00:11/00:15 - Frames: 351/450\n", "Time: 00:11/00:15 - Frames: 352/450\n", "Time: 00:11/00:15 - Frames: 353/450\n", "Time: 00:11/00:15 - Frames: 354/450\n", "Time: 00:11/00:15 - Frames: 355/450 - captured\n", "Time: 00:11/00:15 - Frames: 356/450\n", "Time: 00:11/00:15 - Frames: 357/450\n", "Time: 00:11/00:15 - Frames: 358/450\n", "Time: 00:11/00:15 - Frames: 359/450\n", "Time: 00:12/00:15 - Frames: 360/450 - captured\n", "Time: 00:12/00:15 - Frames: 361/450\n", "Time: 00:12/00:15 - Frames: 362/450\n", "Time: 00:12/00:15 - Frames: 363/450\n", "Time: 00:12/00:15 - Frames: 364/450\n", "Time: 00:12/00:15 - Frames: 365/450 - captured\n", "Time: 00:12/00:15 - Frames: 366/450\n", "Time: 00:12/00:15 - Frames: 367/450\n", "Time: 00:12/00:15 - Frames: 368/450\n", "Time: 00:12/00:15 - Frames: 369/450\n", "Time: 00:12/00:15 - Frames: 370/450 - captured\n", "Time: 00:12/00:15 - Frames: 371/450\n", "Time: 00:12/00:15 - Frames: 372/450\n", "Time: 00:12/00:15 - Frames: 373/450\n", "Time: 00:12/00:15 - Frames: 374/450\n", "Time: 00:12/00:15 - Frames: 375/450 - captured\n", "Time: 00:12/00:15 - Frames: 376/450\n", "Time: 00:12/00:15 - Frames: 377/450\n", "Time: 00:12/00:15 - Frames: 378/450\n", "Time: 00:12/00:15 - Frames: 379/450\n", "Time: 00:12/00:15 - Frames: 380/450 - captured\n", "Time: 00:12/00:15 - Frames: 381/450\n", "Time: 00:12/00:15 - Frames: 382/450\n", "Time: 00:12/00:15 - Frames: 383/450\n", "Time: 00:12/00:15 - Frames: 384/450\n", "Time: 00:12/00:15 - Frames: 385/450 - captured\n", "Time: 00:12/00:15 - Frames: 386/450\n", "Time: 00:12/00:15 - Frames: 387/450\n", "Time: 00:12/00:15 - Frames: 388/450\n", "Time: 00:12/00:15 - Frames: 389/450\n", "Time: 00:13/00:15 - Frames: 390/450 - captured\n", "Time: 00:13/00:15 - Frames: 391/450\n", "Time: 00:13/00:15 - Frames: 392/450\n", "Time: 00:13/00:15 - Frames: 393/450\n", "Time: 00:13/00:15 - Frames: 394/450\n", "Time: 00:13/00:15 - Frames: 395/450 - captured\n", "Time: 00:13/00:15 - Frames: 396/450\n", "Time: 00:13/00:15 - Frames: 397/450\n", "Time: 00:13/00:15 - Frames: 398/450\n", "Time: 00:13/00:15 - Frames: 399/450\n", "Time: 00:13/00:15 - Frames: 400/450 - captured\n", "Time: 00:13/00:15 - Frames: 401/450\n", "Time: 00:13/00:15 - Frames: 402/450\n", "Time: 00:13/00:15 - Frames: 403/450\n", "Time: 00:13/00:15 - Frames: 404/450\n", "Time: 00:13/00:15 - Frames: 405/450 - captured\n", "Time: 00:13/00:15 - Frames: 406/450\n", "Time: 00:13/00:15 - Frames: 407/450\n", "Time: 00:13/00:15 - Frames: 408/450\n", "Time: 00:13/00:15 - Frames: 409/450\n", "Time: 00:13/00:15 - Frames: 410/450 - captured\n", "Time: 00:13/00:15 - Frames: 411/450\n", "Time: 00:13/00:15 - Frames: 412/450\n", "Time: 00:13/00:15 - Frames: 413/450\n", "Time: 00:13/00:15 - Frames: 414/450\n", "Time: 00:13/00:15 - Frames: 415/450 - captured\n", "Time: 00:13/00:15 - Frames: 416/450\n", "Time: 00:13/00:15 - Frames: 417/450\n", "Time: 00:13/00:15 - Frames: 418/450\n", "Time: 00:13/00:15 - Frames: 419/450\n", "Time: 00:14/00:15 - Frames: 420/450 - captured\n", "Time: 00:14/00:15 - Frames: 421/450\n", "Time: 00:14/00:15 - Frames: 422/450\n", "Time: 00:14/00:15 - Frames: 423/450\n", "Time: 00:14/00:15 - Frames: 424/450\n", "Time: 00:14/00:15 - Frames: 425/450 - captured\n", "Time: 00:14/00:15 - Frames: 426/450\n", "Time: 00:14/00:15 - Frames: 427/450\n", "Time: 00:14/00:15 - Frames: 428/450\n", "Time: 00:14/00:15 - Frames: 429/450\n", "Time: 00:14/00:15 - Frames: 430/450 - captured\n", "Time: 00:14/00:15 - Frames: 431/450\n", "Time: 00:14/00:15 - Frames: 432/450\n", "Time: 00:14/00:15 - Frames: 433/450\n", "Time: 00:14/00:15 - Frames: 434/450\n", "Time: 00:14/00:15 - Frames: 435/450 - captured\n", "Time: 00:14/00:15 - Frames: 436/450\n", "Time: 00:14/00:15 - Frames: 437/450\n", "Time: 00:14/00:15 - Frames: 438/450\n", "Time: 00:14/00:15 - Frames: 439/450\n", "Time: 00:14/00:15 - Frames: 440/450 - captured\n", "Time: 00:14/00:15 - Frames: 441/450\n", "Time: 00:14/00:15 - Frames: 442/450\n", "Time: 00:14/00:15 - Frames: 443/450\n", "Time: 00:14/00:15 - Frames: 444/450\n", "Time: 00:14/00:15 - Frames: 445/450 - captured\n", "Time: 00:14/00:15 - Frames: 446/450\n", "Time: 00:14/00:15 - Frames: 447/450\n", "Time: 00:14/00:15 - Frames: 448/450\n" ] } ], "source": [ "coordinates = mt.run_tracking()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You probably noticed that the objects outside the masks were still detected and drawn onto the overlay - that is BY DESIGN: if you check the coordinates files you will see that every object will now have a boolean variable that will indicate whether its center of mass wass inside the mask. For example, `center = True` and `full = True` indicates that an object was in the center of the arena, which means that it also *has* to be in the full arena. On the other hand, `center = False` and `full = False` indicates that the object isn't inside any of the specified masks, and you may chose to filter this row out during data analysis." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_absframeminssecsxylabelfullcenter
50110220003263.065.0isopodTrueFalse
51115230003540.0309.0fishTrueTrue
52115230003309.0310.0isopodTrueFalse
53115230003193.0225.0isopodTrueFalse
54115230003192.0156.0isopodTrueFalse
55115230003783.00.0isopodFalseFalse
56120240004535.0314.0fishTrueTrue
57120240004194.0227.0isopodTrueFalse
58120240004191.0156.0isopodTrueFalse
59125250004512.0314.0fishTrueTrue
\n", "
" ], "text/plain": [ " frame_abs frame mins secs x y label full center\n", "50 110 22 00 03 263.0 65.0 isopod True False\n", "51 115 23 00 03 540.0 309.0 fish True True\n", "52 115 23 00 03 309.0 310.0 isopod True False\n", "53 115 23 00 03 193.0 225.0 isopod True False\n", "54 115 23 00 03 192.0 156.0 isopod True False\n", "55 115 23 00 03 783.0 0.0 isopod False False\n", "56 120 24 00 04 535.0 314.0 fish True True\n", "57 120 24 00 04 194.0 227.0 isopod True False\n", "58 120 24 00 04 191.0 156.0 isopod True False\n", "59 125 25 00 04 512.0 314.0 fish True True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coordinates[50:60]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we are happy with the tracking results, we can save and analyze them in Python, R, or elsewhere. Then next step would be to assign particles to a trajectory, so we can investigate the behavior of isopods in the presence of fish. An efficient option in Python is the `trackpy` library, which is good at filtering and calculating trajectories (for an applied example check the phenopype gallery: https://www.phenopype.org/gallery/example_4)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
frame_absframeminssecsxylabelfullcenter
03060001608.0345.0isopodTrueTrue
13060001546.0249.0isopodTrueTrue
23570001575.0306.0isopodTrueTrue
34590001843.0315.0isopodFalseFalse
44590001193.0305.0isopodTrueFalse
..............................
558445890014544.0191.0isopodTrueTrue
559445890014189.0127.0isopodFalseFalse
560445890014208.0129.0isopodTrueFalse
561445890014748.0111.0isopodTrueFalse
562445890014106.088.0isopodFalseFalse
\n", "

563 rows × 9 columns

\n", "
" ], "text/plain": [ " frame_abs frame mins secs x y label full center\n", "0 30 6 00 01 608.0 345.0 isopod True True\n", "1 30 6 00 01 546.0 249.0 isopod True True\n", "2 35 7 00 01 575.0 306.0 isopod True True\n", "3 45 9 00 01 843.0 315.0 isopod False False\n", "4 45 9 00 01 193.0 305.0 isopod True False\n", ".. ... ... ... ... ... ... ... ... ...\n", "558 445 89 00 14 544.0 191.0 isopod True True\n", "559 445 89 00 14 189.0 127.0 isopod False False\n", "560 445 89 00 14 208.0 129.0 isopod True False\n", "561 445 89 00 14 748.0 111.0 isopod True False\n", "562 445 89 00 14 106.0 88.0 isopod False False\n", "\n", "[563 rows x 9 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coordinates.to_csv(os.path.join(out_dir, mt.name + \"coordinates.csv\"), sep=',', index=False)\n", "coordinates" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "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.7.11" } }, "nbformat": 4, "nbformat_minor": 4 }