{ "cells": [ { "cell_type": "markdown", "id": "265833e1-2fd8-4699-b2e4-6ca0a311365e", "metadata": {}, "source": [ "# ZDO 2022 - Pig Leg Surgery\n", "\n", "Navrhněte a naprogramujte aplikaci pro detekci chirurgických nástrojů v čase\n", "Vstupem jsou cesty k videím z pohledu shora během šití prasečí nožičky\n", "Cílem je určit `[x, y]` pozice obarvených hrotů chirurgických nástrojů pro každý snímek\n", "Výstup (bude sloužit pro vyhodnocení na našich datech):\n", "json pro každou sekvenci obrázků bude ve formátu: \n", "\n", "```python\n", "annotation={\n", " \"filename\": [\"vid1.mp4\", \"vid1.mp4\", \"vid1.mp4\"...], # pth.parts[-1]\n", " \"frame_id\": [0,1,1,...],\n", " \"object_id\": [0,0,1],\n", " \"x_px\": [110, 110, 300], # x pozice obarvených hrotů v pixelech\n", " \"y_px\": [50, 50, 400], # y pozice obarvených hrotů v pixelech\n", " \"annotation_timestamp\": [],\n", "}\n", "```\n", "\n", "\n", "vykreslení výstupů do videa:\n", "\n", "centry hrotů vykreslit buď viditelným bodem nebo ohraničujícím boxem rozumné velikostí (např. 100x100 px)\n", "* každý objekt označen jinou barvou\n", "* Primární úloha: tracking needle holderu\n", "* Bonusová úloha: tracking ostatních nástrojů\n", " " ] }, { "cell_type": "markdown", "id": "a2245442-6d2d-4458-add0-e2812e7e8ddc", "metadata": {}, "source": [ "# Annotation tool CVAT\n", "\n", "\n", "http://147.228.124.52:8080/\n", "\n", "Popis práce s CVAT naleznete na [stránkách loňského zadání](https://nbviewer.org/github/mjirik/ZDO/blob/master/ZDOsem2021.ipynb)\n", "\n", "Z něj si stáhnete anotce ve formátu CVAT for videos" ] }, { "cell_type": "markdown", "id": "fe8a594e-5c0c-41fe-ac46-f3c63618ca77", "metadata": {}, "source": [ "# Práce s videem a anotacemi\n", "\n", "Základy práce s videem lze načerpat [zde](https://nbviewer.org/github/mjirik/ZDO/blob/master/ZDOsem2020.ipynb)\n", "\n", "Převod anotací z formátu CVAT for videos " ] }, { "cell_type": "code", "execution_count": 35, "id": "0cc64cba-95e7-4636-bd93-6b76a4db39de", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "import lxml\n", "from lxml import etree\n", "\n", "pth = Path(\"sem/2022/annotations.xml\")\n", "# root = etree.fromstring(xml, base_url=pth)\n", "\n", "annotation={\n", " \"filename\": [], # pth.parts[-1]\n", " \"frame_id\": [],\n", " \"object_id\": [],\n", " \"x_px\": [], # x pozice obarvených hrotů v pixelech\n", " \"y_px\": [], # y pozice obarvených hrotů v pixelech\n", " \"annotation_timestamp\": [],\n", "}\n", "\n", "\n", "tree = etree.parse(pth)\n", "\n", "updated = tree.xpath(\"//updated\")[0].text # date of last change in CVAT\n", "\n", "for track in tree.xpath('track'):\n", " for point in track.xpath(\"points\"):\n", " pts = point.get(\"points\").split(\",\")\n", " x, y = pts\n", " annotation[\"filename\"].append(str(pth))\n", " annotation[\"object_id\"].append(track.get(\"id\"))\n", " annotation[\"x_px\"].append(x)\n", " annotation[\"y_px\"].append(y)\n", " annotation[\"frame_id\"].append(point.get(\"frame\"))\n", " annotation[\"annotation_timestamp\"].append(updated)\n", " \n", " # print(track.find('./@id'))\n", " \n" ] }, { "cell_type": "code", "execution_count": 37, "id": "089c1d58-d5a1-4987-8d12-487deabb98ba", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | filename | \n", "frame_id | \n", "object_id | \n", "x_px | \n", "y_px | \n", "annotation_timestamp | \n", "
---|---|---|---|---|---|---|
0 | \n", "sem\\2022\\annotations.xml | \n", "47 | \n", "0 | \n", "3814.91 | \n", "1522.37 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
1 | \n", "sem\\2022\\annotations.xml | \n", "48 | \n", "0 | \n", "3757.17 | \n", "1485.89 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
2 | \n", "sem\\2022\\annotations.xml | \n", "49 | \n", "0 | \n", "3699.43 | \n", "1449.41 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
3 | \n", "sem\\2022\\annotations.xml | \n", "50 | \n", "0 | \n", "3641.68 | \n", "1412.94 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
4 | \n", "sem\\2022\\annotations.xml | \n", "51 | \n", "0 | \n", "3583.94 | \n", "1376.46 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
950 | \n", "sem\\2022\\annotations.xml | \n", "496 | \n", "1 | \n", "1389.90 | \n", "204.80 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
951 | \n", "sem\\2022\\annotations.xml | \n", "497 | \n", "1 | \n", "1389.90 | \n", "204.80 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
952 | \n", "sem\\2022\\annotations.xml | \n", "498 | \n", "1 | \n", "1389.90 | \n", "204.80 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
953 | \n", "sem\\2022\\annotations.xml | \n", "499 | \n", "1 | \n", "1389.90 | \n", "204.80 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
954 | \n", "sem\\2022\\annotations.xml | \n", "500 | \n", "1 | \n", "1389.90 | \n", "204.80 | \n", "2022-03-11 07:39:11.353911+00:00 | \n", "
955 rows × 6 columns
\n", "