From a0e204e3d337b7a98f7d3c5e4574c59177fd0400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=A1=ED=98=84=EC=88=98?= Date: Fri, 28 Nov 2025 11:06:37 +0900 Subject: [PATCH] =?UTF-8?q?readme=20=ED=8C=8C=EC=9D=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 182 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 100 insertions(+), 82 deletions(-) diff --git a/README.md b/README.md index 175f784..56a7a51 100644 --- a/README.md +++ b/README.md @@ -1,132 +1,150 @@ -tta-uds-streamer -๐Ÿ“˜ TTA UDS Streamer +# tta-uds-streamer -C ๋ชจ๋“ˆ์ด ์ „์†กํ•˜๋Š” UDS ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„/๋””ํ…์…˜ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Python ๋ชจ๋“ˆ +## ๐Ÿ“˜ TTA UDS Streamer +C ๋ชจ๋“ˆ์ด ์ „์†กํ•˜๋Š” **UDS ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„/๋””ํ…์…˜ ์ŠคํŠธ๋ฆผ**์„ ์ฒ˜๋ฆฌํ•˜๋Š” Python ๋ชจ๋“ˆ -๐Ÿ“Œ ๊ฐœ์š” +--- -์ด ํ”„๋กœ์ ํŠธ๋Š” C ์ธก์—์„œ Unix Domain Socket(UDS) ์„ ํ†ตํ•ด ์ „์†กํ•˜๋Š” -JPEG ํ”„๋ ˆ์ž„(FRA) + ๋””ํ…์…˜(UDSD) ๋ฐ์ดํ„ฐ๋ฅผ Python์—์„œ ์ˆ˜์‹ ํ•˜์—ฌ +## ๐Ÿ“Œ ๊ฐœ์š” +์ด ํ”„๋กœ์ ํŠธ๋Š” C ์ธก์—์„œ **Unix Domain Socket(UDS)** ์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š” -ํ”„๋ ˆ์ž„ ๋ฒ„ํผ๋ง +- JPEG ํ”„๋ ˆ์ž„(FRA) +- ๋””ํ…์…˜(UDSD) -๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„ ๋งค์นญ +๋ฐ์ดํ„ฐ๋ฅผ Python์—์„œ ์ˆ˜์‹ ํ•˜์—ฌ -WebSocket ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ +- ํ”„๋ ˆ์ž„ ๋ฒ„ํผ๋ง +- ๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„ ๋งค์นญ +- WebSocket ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. -๋ณธ ์ €์žฅ์†Œ๋Š” Python ์ธก ๋ชจ๋“ˆ๋งŒ ํฌํ•จํ•˜๋ฉฐ, -C ์ธก NPU โ†’ Postprocess โ†’ UDS ๋ชจ๋“ˆ(cam_ws_app ๋“ฑ) ๊ณผ ์—ฐ๋™ํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. +๋ณธ ์ €์žฅ์†Œ๋Š” **Python ์ธก ๋ชจ๋“ˆ๋งŒ ํฌํ•จ**ํ•˜๋ฉฐ +C ์ธก **NPU โ†’ Postprocess โ†’ UDS ๋ชจ๋“ˆ(cam_ws_app ๋“ฑ)** ๊ณผ ์—ฐ๋™ํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. -๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ +--- + +## ๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ + +```text tta-uds-streamer/ โ”‚ -โ”œโ”€โ”€ uds_postprocessing.py # ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ +โ”œโ”€โ”€ uds_postprocessing.py # ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ โ”‚ -โ”œโ”€โ”€ feat_control/ # ๊ธฐ๋Šฅ ์ œ์–ด ๋ชจ๋“ˆ -โ”‚ โ””โ”€โ”€ ctrl_cli.py # ๊ธฐ๋Šฅ ON/OFF ์ œ์–ด CLI (UDS ์ œ์–ด) +โ”œโ”€โ”€ feat_control/ # ๊ธฐ๋Šฅ ์ œ์–ด ๋ชจ๋“ˆ +โ”‚ โ””โ”€โ”€ ctrl_cli.py # ๊ธฐ๋Šฅ ON/OFF ์ œ์–ด CLI (UDS ์ œ์–ด) โ”‚ -โ”œโ”€โ”€ ctrl_features.sh # ๊ธฐ๋Šฅ ON/OFF ์ œ์–ด ์Šคํฌ๋ฆฝํŠธ -โ”‚ -โ”œโ”€โ”€ requirements.txt # ํŒจํ‚ค์ง€ ๋ชฉ๋ก (๋ฒ„์ „ ์ œ๊ฑฐ๋จ) +โ”œโ”€โ”€ requirements.txt # ํŒจํ‚ค์ง€ ๋ชฉ๋ก โ”‚ โ””โ”€โ”€ README.md +``` + +--- -๐Ÿ”ง ํŒจํ‚ค์ง€ ์„ค์น˜ +## ๐Ÿ”ง ํŒจํ‚ค์ง€ ์„ค์น˜ + +```bash pip install -r requirements.txt +``` + +--- + +## ๐Ÿš€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ -๐Ÿš€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ +```bash python uds_postprocessing.py +``` +C ํ”„๋กœ๊ทธ๋žจ์ด `/tmp/cam.sock` UDS ์†Œ์ผ“์œผ๋กœ ์•„๋ž˜ ํฌ๋งท์„ ์ „์†กํ•˜๋ฉด +Python์€ ํ”„๋ ˆ์ž„ ๋ฐ ๋””ํ…์…˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. -C ํ”„๋กœ๊ทธ๋žจ์ด /tmp/cam.sock UDS ์†Œ์ผ“์— -์•„๋ž˜ ํฌ๋งท ๊ทธ๋Œ€๋กœ ์ „์†กํ•˜๋ฉด Python์ด ์ž๋™์œผ๋กœ ํ”„๋ ˆ์ž„ ๋ฐ ๋””ํ…์…˜์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +--- -๐Ÿ“ก ๋ฐ์ดํ„ฐ ํฌ๋งท ์š”์•ฝ -FRA (Frame) -ํ•„๋“œ ์„ค๋ช… -magic "FRA\0" -width / height JPEG ์ด๋ฏธ์ง€ ํฌ๊ธฐ -stride JPEG ๋ฐ”์ดํŠธ ๊ธธ์ด -pixfmt WS_PIXFMT_JPEG -ts_us ํ”„๋ ˆ์ž„ ํƒ€์ž„์Šคํƒฌํ”„(ฮผs) -payload JPEG binary -UDSD (Detection) -ํ•„๋“œ ์„ค๋ช… -magic "UDSD" -count ๋””ํ…์…˜ ์ˆ˜ -ENTRY prob, x, y, w, h, cls, ... -ts_us ๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„(ฮผs) -๐Ÿงฉ ๊ธฐ๋Šฅ ์š”์•ฝ +## ๐Ÿ“ก ๋ฐ์ดํ„ฐ ํฌ๋งท ์š”์•ฝ -์ตœ๊ทผ ํ”„๋ ˆ์ž„ N์žฅ ๋ฒ„ํผ๋ง +### ๐Ÿ“Œ FRA (Frame) -๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”„๋ ˆ์ž„ ์ž๋™ ๋งค์นญ +| ํ•„๋“œ | ์„ค๋ช… | +|------|------| +| magic | "FRA\0" | +| width / height | JPEG ์ด๋ฏธ์ง€ ํฌ๊ธฐ | +| stride | JPEG ๋ฐ”์ดํŠธ ๊ธธ์ด | +| pixfmt | WS_PIXFMT_JPEG | +| ts_us | ํ”„๋ ˆ์ž„ ํƒ€์ž„์Šคํƒฌํ”„(ฮผs) | +| payload | JPEG binary | -C ์ธก bytesort ๊ธฐ๋ฐ˜ tracking ID ์ ์šฉ ๊ฐ€๋Šฅ +--- -WebSocket ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์› +### ๐Ÿ“Œ UDSD (Detection) -C ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ UDS๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ œ์–ด ๊ฐ€๋Šฅ +| ํ•„๋“œ | ์„ค๋ช… | +|------|------| +| magic | "UDSD" | +| count | ๋””ํ…์…˜ ์ˆ˜ | +| ENTRY | prob, x, y, w, h, cls, ... | +| ts_us | ๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„(ฮผs) | -๐ŸŽฎ Feature Control ์‚ฌ์šฉ๋ฒ• +--- -Python์˜ ctrl_cli.py์™€ Shell ์Šคํฌ๋ฆฝํŠธ ctrl_features.sh๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ -C ์ŠคํŠธ๋ฆฌ๋จธ์˜ ๊ธฐ๋Šฅ(OBJDET, FIRE, FACE ๋“ฑ)์„ ON/OFFํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +## ๐Ÿงฉ ๊ธฐ๋Šฅ ์š”์•ฝ -๐Ÿ“ ๊ด€๋ จ ํŒŒ์ผ -feat_control/ -โ””โ”€โ”€ ctrl_cli.py # ๊ธฐ๋Šฅ ์ œ์–ด ๋ฉ”์‹œ์ง€๋ฅผ UDS๋กœ ์ „์†กํ•˜๋Š” Python CLI -ctrl_features.sh # ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํ•œ ๋ฒˆ์— ON/OFFํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ +- ์ตœ๊ทผ ํ”„๋ ˆ์ž„ N์žฅ ๋ฒ„ํผ๋ง +- ๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”„๋ ˆ์ž„ ์ž๋™ ๋งค์นญ +- WebSocket ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์› +- C ๋ชจ๋“ˆ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ UDS๋กœ ์‹ค์‹œ๊ฐ„ ์ œ์–ด ๊ฐ€๋Šฅ -๐Ÿ”ง ctrl_features.sh ์‚ฌ์šฉ๋ฒ• -๊ธฐ๋ณธ ๊ตฌ์กฐ -./ctrl_features.sh FEATURE [FEATURE ...] +--- + +# ๐ŸŽฎ Feature Control ์‚ฌ์šฉ๋ฒ• -์˜ˆ์‹œ -๊ฐ์ฒด ํƒ์ง€๋งŒ ํ™œ์„ฑํ™” -./ctrl_features.sh OBJDET +`ctrl_cli.py` ์™€ `ctrl_features.sh` ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ +C ์ŠคํŠธ๋ฆฌ๋จธ ๊ธฐ๋Šฅ(OBJDET, FIRE, FACE ๋“ฑ)์„ ON/OFF ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -๊ฐ์ฒด ํƒ์ง€ + ํ™”์žฌ ํƒ์ง€ -./ctrl_features.sh OBJDET FIRE +--- -์ž˜๋ชป๋œ ์‚ฌ์šฉ(์ธ์ž ์—†์Œ) -./ctrl_features.sh -# Usage ์ถœ๋ ฅ +## ๐Ÿ“ ๊ด€๋ จ ํŒŒ์ผ + +```text +feat_control/ +โ”œโ”€โ”€ ctrl_cli.py # ๊ธฐ๋Šฅ ์ œ์–ด ๋ฉ”์‹œ์ง€๋ฅผ UDS๋กœ ์ „์†กํ•˜๋Š” Python CLI +โ””โ”€โ”€ feat_on.sh # ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํ•œ ๋ฒˆ์— ON/OFF ์ œ์–ดํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ -๐Ÿ” ctrl_features.sh ๋™์ž‘ ๋ฐฉ์‹ -1) ๋ชจ๋“  ๊ธฐ๋Šฅ OFF -$CLI "ALL_OFF" -2) ์ „๋‹ฌ๋ฐ›์€ ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ˆœ์„œ๋Œ€๋กœ ON -for f in "$@"; do - $CLI "ON $f" -done +``` +--- -์˜ˆ์‹œ: +## ๐Ÿ”ง ctrl_features.sh ์‚ฌ์šฉ๋ฒ• -./ctrl_features.sh OBJDET FIRE +### ๊ธฐ๋ณธ ๊ตฌ์กฐ +```bash +./ctrl_features.sh FEATURE [FEATURE ...] +``` -์ „์†ก๋˜๋Š” ์‹ค์ œ ๋ช…๋ น: +### ์˜ˆ์‹œ -ALL_OFF -ON OBJDET -ON FIRE +#### ๊ฐ์ฒด ํƒ์ง€ ํ™œ์„ฑํ™” +```bash +./feat_on.sh OBJDET +``` -๐Ÿงฉ ctrl_cli.py ๋™์ž‘ ์š”์•ฝ +#### ๊ฐ์ฒด ํƒ์ง€ + ํ™”์žฌ ํƒ์ง€ +```bash +./feat_on.sh OBJDET FIRE +``` -ctrl_cli.py๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ: +--- -UDS ์ œ์–ด ์†Œ์ผ“(/tmp/ctrl_feat.sock) ์—ฐ๊ฒฐ +## ๐Ÿงฉ ctrl_cli.py ๋™์ž‘ ์š”์•ฝ -๋ช…๋ น ๋ฌธ์ž์—ด ์ „์†ก +`ctrl_cli.py`๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค: -OK / FAIL ์‘๋‹ต ์ˆ˜์‹  +1. UDS ์ œ์–ด ์†Œ์ผ“(`/tmp/ctrl_feat.sock`) ์—ฐ๊ฒฐ +2. ๋ช…๋ น ๋ฌธ์ž์—ด ์ „์†ก +3. OK / FAIL ์‘๋‹ต ์ˆ˜์‹  -ํ•˜๋Š” ๋‹จ์ˆœํ•œ CLI๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. +C ์ธก์—์„œ๋Š” ์ด ๋ช…๋ น์„ ๊ธฐ๋ฐ˜์œผ๋กœ +`ctrl_flags.h` ์— ์ •์˜๋œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. -C ์ธก์—์„œ๋Š” ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ -ctrl_flags.h ์— ์ •์˜๋œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. \ No newline at end of file +---