StreamWare system design and data flow.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STREAMWARE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β RTSP β β FastCapture β β Frame β β
β β Camera βββββΆβ (OpenCV) βββββΆβ Queue β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββΌβββββββββββββββ β
β β β β β
β βΌ βΌ β β
β ββββββββββββββββ ββββββββββββββββ β β
β β DSL Analysis β β LLM Analysis β β β
β β (OpenCV) β β (Ollama) β β β
β ββββββββββββββββ ββββββββββββββββ β β
β β β β β
β βΌ βΌ β β
β ββββββββββββββββ ββββββββββββββββ β β
β β WebSocket β β Response β β β
β β Server β β Filter β β β
β ββββββββββββββββ ββββββββββββββββ β β
β β β β β
β βΌ βΌ β β
β ββββββββββββββββ ββββββββββββββββ β β
β β Browser β β TTS/Webhook β β β
β β Viewer β β Output β β β
β ββββββββββββββββ ββββββββββββββββ β β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
When --realtime is enabled:
βββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β MAIN PROCESS (PID: parent) β β DSL STREAMER (PID: child) β
βββββββββββββββββββββββββββββββββββ€ βββββββββββββββββββββββββββββββββββ€
β β β β
β /dev/shm/streamware/ β β /dev/shm/streamware_dsl/ β
β β β β
β FastCapture (0.5 FPS) β β FastCapture (5-20 FPS) β
β β β β β β
β βΌ β β βΌ β
β LLM Analysis β β DSL Analysis (~10ms) β
β β β β β β
β βΌ β β βΌ β
β Response Filter β β WebSocket Server β
β β β β β β
β βΌ β β βΌ β
β TTS / Webhook β β Browser :8766 β
β β β β
βββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β β
ββββββββββ Completely Isolated ββββββββββ
fast_capture.py)FastCapture(
rtsp_url="rtsp://...",
fps=5.0,
buffer_size=5,
output_dir="/dev/shm/streamware"
)
frame_diff_dsl.py)analyzer = FrameDiffAnalyzer(
motion_threshold=25,
min_blob_area=500,
filter_static=True
)
delta = analyzer.analyze(frame_path)
dsl_streamer_process.py)from dsl_streamer_process import start_dsl_streamer
process = start_dsl_streamer(rtsp_url, fps=10)
realtime_dsl_server.py)async_llm.py)Camera β FastCapture β DSL Analysis β WebSocket β Browser
β
βββ HTML Export
βββ DSL Process β WebSocket β Browser
Camera β FastCaptureβ€
βββ Main Process β LLM β Filter β TTS
streamware/
βββ components/
β βββ live_narrator.py # Main orchestrator
βββ fast_capture.py # RTSP capture
βββ frame_diff_dsl.py # DSL analysis
βββ dsl_streamer_process.py # Separate process
βββ realtime_dsl_server.py # WebSocket server
βββ async_llm.py # Async LLM
βββ dsl_timing_logger.py # Performance logs
βββ response_filter.py # LLM filtering
βββ image_optimizer.py # Image preprocessing
βββ tts.py # Text-to-speech
| Component | Thread/Process | Notes |
|---|---|---|
| FastCapture | Background thread | Continuous capture |
| DSL Analysis | Main thread | Fast (~10ms) |
| DSL Streamer | Separate process | Isolated |
| LLM Inference | ThreadPool | Non-blocking |
| WebSocket | Asyncio | Event loop |
| TTS | Background thread | Non-blocking |
Related: