μ€μκ° μμ λΉμλ³ν(μΌκ΅΄/λ²νΈν λͺ¨μμ΄ν¬)μ μλ λ Ήν/μ λ‘λλ₯Ό μ 곡νλ FastAPI κΈ°λ° μλ²μ λλ€. WebSocketμΌλ‘ μμμ λ°μ λͺ¨μμ΄ν¬ μ²λ¦¬ ν μ€νΈλ¦¬λ°νκ³ , 쑰건μ λ°λΌ μ²λ¦¬λ³Έ/μλ³Έμ λμμ λ Ήνν©λλ€. κ²°κ³Όλ S3μ μ λ‘λλλ©° μλ£ μ Spring μλ²μ μ½λ°±μ 보λ λλ€. μ€νλΌμΈ μμμ λν΄ νΉμ μκ° κ΅¬κ°μ μΌκ΅΄μ μΆμΆνλ APIλ ν¬ν¨λ©λλ€.
μμΈν ꡬ쑰μ λμ νλ¦μ docs/ARCHITECTURE.md μ°Έκ³ .
- WebSocket μ€μκ° μ λ ₯ + λͺ¨μμ΄ν¬ μ€νΈλ¦¬λ° (JPEG μ μ‘, FPS μ ν, μ½μΌλ μ±)
- μλͺ¨μ΅ μ§μ λͺ¨μμ΄ν¬: 머리 μΆμ (IoU+TTL) + HOG 보쑰
- μλ λ Ήν: μ²λ¦¬λ³Έ/μλ³Έ μ΄μ€ μ μ₯, presence ννΈ & λΆμ¬ νμμμ κΈ°λ° μμ/μ€λ¨
- S3 μ λ‘λ λ° λ‘컬 ν΄λ°±, Spring μ½λ°±μΌλ‘ URL μ λ¬
- μκ° κΈ°λ° μΌκ΅΄ κ²μΆ API: νμΌ μ λ‘λ, blob/data URL, http(s), S3 μ§μ
git clone https://github.com/SafeView/Python_AI.git
cd Python_AI
curl -LsSf https://astral.sh/uv/install.sh | sh # λλ brew install uv
uv sync
uv run uvicorn server.app:app --host 0.0.0.0 --port 8000
# λλ
uv run python http_video_server.pyserver.app:app μ§μ μ€ν νΉμ http_video_server.py λ‘ μ§μ .
- Python 3.10 ~ < 3.13
- FastAPI / Uvicorn
- OpenCV, MediaPipe, YOLO(ultralytics)
- aiohttp, boto3
- uv ν¨ν€μ§/μ€ν κ΄λ¦¬
- Python λ²μ νμΈ (
python --version) - uv μ€μΉ (μλ€λ©΄ μ μμ½ μ°Έμ‘°)
- (μ ν)
.venv/μλ μμ± (uv sync μ)
uv syncν¨ν€μ§ μΆκ°: uv add ν¨ν€μ§λͺ
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtuv run python http_video_server.py
# λλ
uv run uvicorn http_video_server:app --host 0.0.0.0 --port 8000λ€μ€ μ컀 μ¬μ© μ μ μ μν 곡μ λΆκ°.
ws://{host}:{port}/ws/videoμ°κ²°- JPEG νλ μ μ μ‘
- λͺ¨μμ΄ν¬ μ²λ¦¬ ν JPEG μμ
- μλ λ Ήν μ΄λ²€νΈ λ©μμ§ μμ
| 쑰건 | μ€λͺ |
|---|---|
| μμ | pcnt >= AUTO_RECORD_THRESHOLD AND presence ννΈ μΆ©μ‘± |
| μ€λ¨ | μ°μ λΆμ¬ μκ° β₯ AUTO_ZERO_TIMEOUT_SEC |
| λ©ν | μ΅λ μΈμ _recording_max_persons κΈ°λ‘ |
| λ©μλ | κ²½λ‘ | μ€λͺ |
|---|---|---|
| GET | /health | ν¬μ€ μ²΄ν¬ |
| WS | /ws/video | μ€μκ° μ€νΈλ¦Ό |
| POST | /start_recording | μλ λ Ήν μμ² |
| POST | /stop_recording | λ Ήν μ€λ¨ |
| GET | /recording_status | λ Ήν μν |
| GET | /recordings | λ Ήν λͺ©λ‘ |
| POST | /face-detection/upload-video | μ€νλΌμΈ μ λ‘λ |
| POST | /face-detection/detect-faces | νΉμ μμ μΌκ΅΄ μΆμΆ |
server/
app.py
websocket_stream.py
recording.py
verification.py
face_time_api.py
core/state.py
analytics/person_count.py
AI_processor.py
http_video_server.py
docs/ARCHITECTURE.md
uv add some-package
uv run python -c "import requests;print(requests.get('http://localhost:8000/health').json())"| μ¦μ | μ‘°μΉ |
|---|---|
| μλ λ Ήν μμ μ λ¨ | μκ³/ννΈ μ‘°μ , DETECT_EVERY_N=1 ν μ€νΈ |
| VideoWriter μ€ν¨ | μ½λ± μ§μ νμΈ, MJPG ν΄λ°± λ‘κ·Έ νμΈ |
| S3 μ λ‘λ μ€ν¨ | μ격/κΆν λ° κ΅¬μ± μ κ² |
| μ¬λ μ 0 μ§μ | μ‘°λͺ /ν΄μλ/λͺ¨λΈ μ€μ μ‘°μ |
(λ΄λΆ μ μ± μ λ°λΌ μ§μ μμ )
μ΄μλ κ°μ μμ² νμ.