tta-uds-streamer ๐Ÿ“˜ TTA UDS Streamer C ๋ชจ๋“ˆ์ด ์ „์†กํ•˜๋Š” UDS ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„/๋””ํ…์…˜ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Python ๋ชจ๋“ˆ ๐Ÿ“Œ ๊ฐœ์š” ์ด ํ”„๋กœ์ ํŠธ๋Š” C ์ธก์—์„œ Unix Domain Socket(UDS) ์„ ํ†ตํ•ด ์ „์†กํ•˜๋Š” JPEG ํ”„๋ ˆ์ž„(FRA) + ๋””ํ…์…˜(UDSD) ๋ฐ์ดํ„ฐ๋ฅผ Python์—์„œ ์ˆ˜์‹ ํ•˜์—ฌ ํ”„๋ ˆ์ž„ ๋ฒ„ํผ๋ง ๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„ ๋งค์นญ WebSocket ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” Python ์ธก ๋ชจ๋“ˆ๋งŒ ํฌํ•จํ•˜๋ฉฐ, C ์ธก NPU โ†’ Postprocess โ†’ UDS ๋ชจ๋“ˆ(cam_ws_app ๋“ฑ) ๊ณผ ์—ฐ๋™ํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ tta-uds-streamer/ โ”‚ โ”œโ”€โ”€ uds_postprocessing.py # ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ โ”‚ โ”œโ”€โ”€ feat_control/ # ๊ธฐ๋Šฅ ์ œ์–ด ๋ชจ๋“ˆ โ”‚ โ””โ”€โ”€ ctrl_cli.py # ๊ธฐ๋Šฅ ON/OFF ์ œ์–ด CLI (UDS ์ œ์–ด) โ”‚ โ”œโ”€โ”€ ctrl_features.sh # ๊ธฐ๋Šฅ ON/OFF ์ œ์–ด ์Šคํฌ๋ฆฝํŠธ โ”‚ โ”œโ”€โ”€ requirements.txt # ํŒจํ‚ค์ง€ ๋ชฉ๋ก (๋ฒ„์ „ ์ œ๊ฑฐ๋จ) โ”‚ โ””โ”€โ”€ README.md ๐Ÿ”ง ํŒจํ‚ค์ง€ ์„ค์น˜ pip install -r requirements.txt ๐Ÿš€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ python uds_postprocessing.py 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์žฅ ๋ฒ„ํผ๋ง ๋””ํ…์…˜ ํƒ€์ž„์Šคํƒฌํ”„์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”„๋ ˆ์ž„ ์ž๋™ ๋งค์นญ C ์ธก bytesort ๊ธฐ๋ฐ˜ tracking ID ์ ์šฉ ๊ฐ€๋Šฅ WebSocket ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์› C ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ UDS๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ œ์–ด ๊ฐ€๋Šฅ ๐ŸŽฎ 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ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๐Ÿ”ง ctrl_features.sh ์‚ฌ์šฉ๋ฒ• ๊ธฐ๋ณธ ๊ตฌ์กฐ ./ctrl_features.sh FEATURE [FEATURE ...] ์˜ˆ์‹œ ๊ฐ์ฒด ํƒ์ง€๋งŒ ํ™œ์„ฑํ™” ./ctrl_features.sh OBJDET ๊ฐ์ฒด ํƒ์ง€ + ํ™”์žฌ ํƒ์ง€ ./ctrl_features.sh OBJDET FIRE ์ž˜๋ชป๋œ ์‚ฌ์šฉ(์ธ์ž ์—†์Œ) ./ctrl_features.sh # Usage ์ถœ๋ ฅ ๐Ÿ” ctrl_features.sh ๋™์ž‘ ๋ฐฉ์‹ 1) ๋ชจ๋“  ๊ธฐ๋Šฅ OFF $CLI "ALL_OFF" 2) ์ „๋‹ฌ๋ฐ›์€ ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ˆœ์„œ๋Œ€๋กœ ON for f in "$@"; do $CLI "ON $f" done ์˜ˆ์‹œ: ./ctrl_features.sh OBJDET FIRE ์ „์†ก๋˜๋Š” ์‹ค์ œ ๋ช…๋ น: ALL_OFF ON OBJDET ON FIRE ๐Ÿงฉ ctrl_cli.py ๋™์ž‘ ์š”์•ฝ ctrl_cli.py๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ: UDS ์ œ์–ด ์†Œ์ผ“(/tmp/ctrl_feat.sock) ์—ฐ๊ฒฐ ๋ช…๋ น ๋ฌธ์ž์—ด ์ „์†ก OK / FAIL ์‘๋‹ต ์ˆ˜์‹  ํ•˜๋Š” ๋‹จ์ˆœํ•œ CLI๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. C ์ธก์—์„œ๋Š” ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ctrl_flags.h ์— ์ •์˜๋œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.