{"id":18096596,"url":"https://github.com/pehovorka/street-object-detection","last_synced_at":"2026-04-28T11:03:11.685Z","repository":{"id":117345119,"uuid":"378380271","full_name":"pehovorka/street-object-detection","owner":"pehovorka","description":"Semestral assignment of Practical Applications of Machine Learning module at VŠE","archived":false,"fork":false,"pushed_at":"2021-06-20T21:11:39.000Z","size":518,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T03:27:36.525Z","etag":null,"topics":["cnn","computer-vision","machine-learning","neural-networks","object-detection","tensorflow"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pehovorka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-19T10:04:06.000Z","updated_at":"2021-07-13T09:38:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"596f77c0-91cd-4a6a-b106-71da80194c07","html_url":"https://github.com/pehovorka/street-object-detection","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pehovorka/street-object-detection","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pehovorka%2Fstreet-object-detection","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pehovorka%2Fstreet-object-detection/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pehovorka%2Fstreet-object-detection/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pehovorka%2Fstreet-object-detection/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pehovorka","download_url":"https://codeload.github.com/pehovorka/street-object-detection/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pehovorka%2Fstreet-object-detection/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32377599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T09:24:15.638Z","status":"ssl_error","status_checked_at":"2026-04-28T09:24:15.071Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cnn","computer-vision","machine-learning","neural-networks","object-detection","tensorflow"],"created_at":"2024-10-31T19:14:44.039Z","updated_at":"2026-04-28T11:03:11.664Z","avatar_url":"https://github.com/pehovorka.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Detekce osob a vozidel pomocí TensorFlow Object Detection API\n\n## Definice problému\n\nAnalýza hustoty automobilového provozu a pohybu osob je důležitým prvkem tzv. chytrých měst. Data získaná takovou analýzou se mohou využít pro spoustu účelů, například pro plánování úklidu a oprav ulic, detekci anomálií a podobně. Města mají k dispozici stovky různých kamer, které by k takovému účelu bylo možné využít.\n\nTato práce slouží jako proof of concept, který má za úkol ukázat, že je možné hustotu provozu a pohybu osob poměrně spolehlivě získávat z již existujících kamer a implementace takového řešení ani nemusí být příliš složitá.\n\n## Dataset\n\nNa webu [bezpecnost.praha.eu](https://bezpecnost.praha.eu/mapy/kamery) jsou k dispozici záběry bezpečnostních kamer po celé Praze. Pro účely této semestrální práce jsem si vybral kameru, které se nachází [na křižovatce u Národního divadla](https://mapy.cz/s/cabanukoza). Během jejího výběru se mi zalíbil její záběr, který snímal část křižovatky a přilehlý přechod pro chodce.\n\nVytvořil jsem si proto [jednoduchý program](./images_fetcher/main.py), který jsem následně nasadil do Google Cloudu. Každou minutu se volala metoda `download_national_theatre_image()`, která stáhla snímek z kamery, pojmenovala daný soubor aktuálním časem a uložila ho do Cloud Storage. Takto jsem sbíral snímky od 21. května až do 16. června. Nasbíral jsem více než 36 tisíc obrázků.\n\nNěkolik dní po začátku snímání jsem při kontrole funkčnosti zjistil, že jsem si vybral kameru, která není statická. Její záběr se během období sbírání dat několikrát změnil. Proto nemohu dělat žádnou dlouhodobější analýzu, která by například porovnávala pohyb osob v jednotlivých dnech v týdnu. Dalším problémem, na který jsem narazil, byly výpadky kamery. Někdy vypadla jen na minutu, jindy i na několik hodin.\n\nZip s celým datasetem lze stáhnout [zde](https://vse-my.sharepoint.com/:u:/g/personal/hovp01_vse_cz/EWZGoaK7jbxEsKT12tRn87gBGdICTHcTGryvv2qo-DDXJA?e=6Oy0HR). Stačí ho rozbalit ve složce [`/dataset`](/dataset)\n\n### Vizualizace a prozkoumání datasetu\n\nAbych mohl vybrat nejvhodnější období, ve kterém se neměnil záběr a nedocházelo k častým výpadkům, složil jsem ze snímků časosběrné video. Využil jsem k tomu nástroj FFmpeg. Bash skript, který se o vytvoření videa z jednotlivých snímků stará lze nalézt [zde](./dataset/generate_video.sh). Jeho součástí je i přidání textu s časem pořízení konkrétního snímku přímo do videa. Video bylo upscalováno na vyšší rozlišení než je rozlišení původních snímků. K tomuto kroku bylo přistoupeno kvůli YouTube kompresi, která je u videí s nižším rozlišením příliš agresivní.\n\n**Výsledné časosběrné video (kliknutím se spustí přehrávání na YouTube)**\n\n[![Theatre timelapse](https://i.ytimg.com/vi/043zAO5q1bg/maxresdefault.jpg)](https://youtu.be/043zAO5q1bg \"Theatre timelapse\")\n\nNakonec byly jako nejvhodnější k analýze provozu vybrány dva dny – 23. 5. 2021 a 4. 6. 2021.\n\n## Příprava dat\n\nSnímky nebylo nutné po samotném pořízení nijak upravovat. Mají rozměry 720×576px, což se ukázalo jako dobrý kompromis mezi rychlostí zpracování a zachováním detailů. Snímky byly při pořízení uloženy s názvem ve formátu `yyyy-mm-dd hh:mm:ss`, což umožnilo jejich snadné následné zpracování.\n\n## Výběr modelu a nastavení parametrů\n\nNebylo v mých silách natrénovat vlastní model, který by byl dostatečně kvalitní. Proto jsem vybíral z předtrénovaných modelů z [Model Zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md). Nakonec jsem zvolil model `EfficientDet D5`, který je dostatečně přesný a přitom ještě poměrně rychlý. Zpracování jednoho snímku s rozměry 720×576px trvalo na GPU Nvidia GTX 1060 6GB v průměru 1,7 sekundy, zpracování celého jednoho dne proto trvalo okolo 40 minut.\n\nJako práh minimálního skóre detekce byla zvolena hodnota 40%. To zaručilo minimální chybovost při stále vysoké citlivosti.\n\n## Výsledky\n\n### 23. 5. 2021 (neděle, záběr na přechod a část křižovatky)\n\n```\n    people  cars  bicycles  dogs\n0       60    52         0     0\n1       42    23         0     0\n2        9    18         0     0\n3        9    20         0     0\n4        5     9         0     0\n5        3    13         1     0\n6        9    15         1     0\n7       12    23         4     1\n8       30    26         2     0\n9       64    54         4     1\n10     144    64        14     0\n11     178    80         1     0\n12     236    72        11     1\n13     318    62        20     2\n14     354    86        19     1\n15     215   102        11     0\n16     363    78        18     0\n17     424   101        13     1\n18     467    89        14     3\n19     442    79         7     2\n20     394    90        13     2\n21     236    66         2     0\n22      96    31         1     0\n23      37    22         2     0\n```\n\n**Pohyb lidí, aut, cyklistů a psů**\n\n![2021-05-23](./assets/2021-05-23_chart.png)\n\n**Časosběrné video se všemi detekcemi (kliknutím se spustí přehrávání na YouTube)**\n\n[![Theatre timelapse 2021-05-23](https://i.ytimg.com/vi/C1Z0GIxqxRU/maxresdefault.jpg)](https://youtu.be/C1Z0GIxqxRU \"Theatre timelapse 2021-05-23\")\n\n---\n\n### 4. 6. 2021 (pátek, záběr na střed křižovatky a vzdálený přechod)\n\n```\n    people  cars  bicycles  dogs  buses  trains\n0       44    80         1     0      1       5\n1       15    65         0     0      1       3\n2        5    36         0     0      0       6\n3        6    20         0     0      1       3\n4        4    36         1     0      1       6\n5       18    26         2     0      4       5\n6       21    52         3     0      7      25\n7       50   134         7     1      6      21\n8       59   209         8     0     16      17\n9       88   191        10     0     13      18\n10      79   191         5     1      6      11\n11     127   182         2     0     11      14\n12     121   174         0     0      5      25\n13     205   206         3     0     10      13\n14     216   150        10     0     10      16\n15     231   236         8     1      9      17\n16     243   230        17     0     15      17\n17     302   159        18     0      9      15\n18     330   165         6     0      6      13\n19     349   156        11     1      6      17\n20     357   173         6     1      6      13\n21     292   144         2     0      6      15\n22     316   180         3     0      3       7\n23     151   136         1     0      1       9\n\n```\n\n**Pohyb lidí, aut a cyklistů**\n\n![2021-06-04](./assets/2021-06-04_chart.png)\n\n**Provoz MHD**\n\nProjíždějící tramvaje byly nejčastěji rozpoznány jako instance třídy `train`, v některých případech však byly rozpoznány jako třída `bus`. Na následujícím grafu jsou proto zobrazeny instance obou tříd najednou.\n![2021-06-04 public transport](./assets/2021-06-04_chart_public_transport.png)\n\n**Časosběrné video se všemi detekcemi (kliknutím se spustí přehrávání na YouTube)**\n\n[![Theatre timelapse 2021-06-04](https://i.ytimg.com/vi/DByjZ2WLxfk/maxresdefault.jpg)](https://youtu.be/DByjZ2WLxfk \"Theatre timelapse 2021-06-04\")\n\n## Závěr\n\nTato semestrální práce prokázala, že jsou modely rozpoznávání objektů na velice vysoké úrovni. Z přiložených časosběrných videí lze pozorovat, že je detekce až překvapivě přesná a nedochází při ní k výrazným chybám. Samotné zpracování obrázků je i na průměrné grafické kartě dostatečně rychlé. Z těchto důvodů se domnívám, že by bylo možné podobné řešení použít i v „produkčním prostředí.“\n\nPro dlouhodobé analýzy provozu by ale bylo nutné využít stabilních kamer, které nemění úhel záběru. Taktéž by bylo nutné zajistit, aby nedocházelo k jejich výpadkům.\n\nTím jsem popsal problémy, které se při vypracování této práce vyskytly. Původně bylo mým záměrem porovnávat mezi sebou nejen hodinové intervaly během jednoho dne, ale i jednotlivé dny v týdnu. Jelikož ale kamera měnila každých několik dní svůj úhel záběru a v některých dnech jeho značnou část nefungovala, nebylo toto porovnání možné. Pro dlouhodobý výzkum by bylo nutné najít stabilní kameru se spolehlivým přenosem.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpehovorka%2Fstreet-object-detection","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpehovorka%2Fstreet-object-detection","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpehovorka%2Fstreet-object-detection/lists"}