|
|
|
@ -1,25 +1,32 @@
|
|
|
|
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 측 모듈만 포함하며,
|
|
|
|
본 저장소는 **Python 측 모듈만 포함**하며
|
|
|
|
C 측 NPU → Postprocess → UDS 모듈(cam_ws_app 등) 과 연동하여 동작합니다.
|
|
|
|
C 측 **NPU → Postprocess → UDS 모듈(cam_ws_app 등)** 과 연동하여 동작합니다.
|
|
|
|
|
|
|
|
|
|
|
|
📁 디렉토리 구조
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 📁 디렉토리 구조
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
tta-uds-streamer/
|
|
|
|
tta-uds-streamer/
|
|
|
|
│
|
|
|
|
│
|
|
|
|
├── uds_postprocessing.py # 전체 파이프라인 처리 모듈
|
|
|
|
├── uds_postprocessing.py # 전체 파이프라인 처리 모듈
|
|
|
|
@ -27,106 +34,117 @@ tta-uds-streamer/
|
|
|
|
├── feat_control/ # 기능 제어 모듈
|
|
|
|
├── feat_control/ # 기능 제어 모듈
|
|
|
|
│ └── ctrl_cli.py # 기능 ON/OFF 제어 CLI (UDS 제어)
|
|
|
|
│ └── ctrl_cli.py # 기능 ON/OFF 제어 CLI (UDS 제어)
|
|
|
|
│
|
|
|
|
│
|
|
|
|
├── ctrl_features.sh # 기능 ON/OFF 제어 스크립트
|
|
|
|
├── requirements.txt # 패키지 목록
|
|
|
|
│
|
|
|
|
|
|
|
|
├── requirements.txt # 패키지 목록 (버전 제거됨)
|
|
|
|
|
|
|
|
│
|
|
|
|
│
|
|
|
|
└── README.md
|
|
|
|
└── README.md
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
🔧 패키지 설치
|
|
|
|
## 🔧 패키지 설치
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
pip install -r requirements.txt
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 전체 파이프라인 실행
|
|
|
|
|
|
|
|
|
|
|
|
🚀 전체 파이프라인 실행
|
|
|
|
```bash
|
|
|
|
python uds_postprocessing.py
|
|
|
|
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할 수 있습니다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
📁 관련 파일
|
|
|
|
- 최근 프레임 N장 버퍼링
|
|
|
|
feat_control/
|
|
|
|
- 디텍션 타임스탬프와 가장 가까운 프레임 자동 매칭
|
|
|
|
└── ctrl_cli.py # 기능 제어 메시지를 UDS로 전송하는 Python CLI
|
|
|
|
- WebSocket 실시간 스트리밍 지원
|
|
|
|
ctrl_features.sh # 여러 기능을 한 번에 ON/OFF하는 스크립트
|
|
|
|
- C 모듈 기능 플래그를 UDS로 실시간 제어 가능
|
|
|
|
|
|
|
|
|
|
|
|
🔧 ctrl_features.sh 사용법
|
|
|
|
---
|
|
|
|
기본 구조
|
|
|
|
|
|
|
|
./ctrl_features.sh FEATURE [FEATURE ...]
|
|
|
|
# 🎮 Feature Control 사용법
|
|
|
|
|
|
|
|
|
|
|
|
예시
|
|
|
|
`ctrl_cli.py` 와 `ctrl_features.sh` 를 사용하여
|
|
|
|
객체 탐지만 활성화
|
|
|
|
C 스트리머 기능(OBJDET, FIRE, FACE 등)을 ON/OFF 할 수 있습니다.
|
|
|
|
./ctrl_features.sh OBJDET
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
객체 탐지 + 화재 탐지
|
|
|
|
---
|
|
|
|
./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
|
|
|
|
```bash
|
|
|
|
ON FIRE
|
|
|
|
./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 에 정의된 기능 플래그를 실시간 변경합니다.
|
|
|
|
|
|
|
|
|