<<<<<<< HEAD
Modern Kamera Kontrol Sistemi
Modern, modüler ve genişletilebilir kamera kontrol sistemi. Çoklu transport protokolü (TCP, UDP, Serial, UART, VISCA) ve dinamik UI konfigürasyonu desteği.
💡 Not: Bu proje generic bir template'tir. İsimleri ve branding'i kendi ihtiyaçlarınıza göre özelleştirebilirsiniz.
- ✅ Çoklu Kamera Desteği - Sınırsız sayıda kamera
- ✅ Canlı İzleme - HLS streaming ile düşük gecikme
- ✅ PTZ Kontrolü - Pan/Tilt/Zoom kontrolü
- ✅ Kayıt - Sürekli, hareket algılama, manuel kayıt
- ✅ Hareket Algılama - OpenCV tabanlı hareket algılama
- ✅ Kullanıcı Yönetimi - Rol tabanlı yetkilendirme
- ✅ Dinamik UI - YAML ile yapılandırılabilir arayüz
- TCP - Ethernet kameralar için güvenilir bağlantı
- UDP - Düşük gecikme gerektiren uygulamalar
- Serial (RS-232/RS-485) - Seri port iletişimi
- UART - Gömülü sistemler için
- VISCA - Sony profesyonel kameralar
- Dark/Light Theme - Tema desteği
- Responsive Design - Mobil uyumlu
- Grid Layouts - 1x1, 2x2, 3x3, 4x4, özel düzenler
- Real-time Updates - WebSocket ile anlık güncellemeler
┌─────────────────────────────────────────────────────────────┐
│ Frontend (React) │
│ • Vite + TypeScript + Tailwind CSS │
│ • Dynamic UI from YAML configuration │
└────────────────────────┬────────────────────────────────────┘
│ REST API / WebSocket
┌────────────────────────▼────────────────────────────────────┐
│ Backend (FastAPI) │
│ • JWT Authentication │
│ • Camera Manager (Singleton) │
│ • Dynamic configuration loading │
└────────┬──────────────────────────────┬─────────────────────┘
│ │
┌────────▼──────────┐ ┌─────────▼──────────┐
│ Protocol Layer │ │ Transport Layer │
│ • BinaryProtocol │ │ • TCPTransport │
│ • VISCAProtocol │ │ • UDPTransport │
│ • ONVIFProtocol │ │ • SerialTransport │
│ │ │ • VISCATransport │
└───────────────────┘ └─────────────────────┘
Design Patterns:
- Strategy Pattern (Transport seçimi)
- Factory Pattern (Transport oluşturma)
- Bridge Pattern (Transport/Protocol ayrımı)
- Facade Pattern (CameraClient)
- Singleton Pattern (CameraManager)
Detaylı mimari için: ARCHITECTURE.md
- Docker & Docker Compose
- (Opsiyonel) Node.js 20+ (frontend geliştirme için)
- (Opsiyonel) Python 3.11+ (backend geliştirme için)
# 1. Repository'yi klonla
git clone <repo-url>
cd VKI
# 2. Docker ile başlat
docker compose up -d
# 3. Tarayıcıda aç
# Frontend: http://localhost:3000
# Backend API: http://localhost:8000
# API Docs: http://localhost:8000/docscd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000cd frontend
npm install
npm run devVarsayılan Kullanıcılar:
- Admin:
admin/admin123(Tam yetki) - Operator:
operator/operator123(Kamera kontrolü) - Viewer:
viewer/viewer123(Sadece izleme)
cameras.yaml dosyasını düzenleyin:
cameras:
- id: "cam-1"
name: "Front Door"
type: "daylight"
enabled: true
stream:
protocol: "rtsp"
url: "rtsp://192.168.1.100:554/stream1"
username: "admin"
password: "password"
capabilities:
ptz: true
zoom: true
audio: true
ptz:
protocol: "tcp" # tcp, udp, serial, visca
host: "192.168.1.100"
port: 4000# Python API örneği
from backend.app.camera import CameraClient, CameraConfig
config = CameraConfig(
camera_id="cam-1",
name="Front Door",
transport_type="tcp",
protocol_type="binary",
host="192.168.1.100",
port=4000
)
async with CameraClient(config) as client:
# Brightness ayarla
await client.execute_command("set_brightness", {
"brightness": 5,
"region": "C1"
})
# Zoom
await client.execute_command("set_digital_zoom", {
"zoom_level": "2x"
})# Login
TOKEN=$(curl -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}' \
| jq -r '.access_token')
# Kamera listesi
curl http://localhost:8000/api/cameras \
-H "Authorization: Bearer $TOKEN"
# PTZ komutu gönder
curl -X POST http://localhost:8000/api/cameras/cam-1/ptz \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"command":"set_brightness","params":{"brightness":5}}'VKI/
├── config.yaml # Sistem ayarları
├── cameras.yaml # Kamera tanımlamaları
└── ui_layout.yaml # UI düzeni
Ana sistem konfigürasyonu:
system:
name: "Universal Camera Control"
version: "2.0.0"
server:
host: "0.0.0.0"
port: 8000
users:
- username: "admin"
password: "admin123"
role: "admin"
streaming:
hls:
enabled: true
segment_duration: 2
recording:
enabled: true
path: "/data/recordings"
retention_days: 7Kamera tanımlamaları:
cameras:
- id: "cam-front"
name: "Front Camera"
type: "daylight"
enabled: true
stream:
url: "rtsp://192.168.1.100:554/stream1"
ptz:
protocol: "tcp"
host: "192.168.1.100"
port: 4000UI düzeni ve tema:
branding:
app_name: "COMPANY A"
theme_color: "#f59e0b"
theme:
mode: "dark"
primary_color: "amber"
navigation:
- id: "live"
label: "Live View"
icon: "📹"API dokümantasyonuna erişim: http://localhost:8000/docs
POST /auth/login # Login
GET /auth/me # Kullanıcı bilgisi
GET /api/cameras # Kamera listesi
GET /api/cameras/{id} # Kamera detayı
POST /api/cameras/{id}/ptz # PTZ komutu
POST /api/cameras/{id}/snapshot # Snapshot al
GET /api/stream/{id}/hls/playlist.m3u8 # HLS playlist
GET /api/system/health # Health check
GET /api/system/stats # Sistem istatistikleri
GET /api/config # Sistem konfigürasyonu
GET /api/config/ui # UI konfigürasyonu
GET /api/config/cameras # Kamera konfigürasyonu
Camera-Control-System/
├── backend/ # Backend (FastAPI)
├── frontend/ # Frontend (React)
├── config/ # Konfigürasyon dosyaları
├── data/ # Runtime data (git ignore)
├── docs/ # Dokümantasyon
├── scripts/ # Yardımcı script'ler
├── docker-compose.yml
├── Makefile
├── README.md
└── PROJECT_STRUCTURE.md # Detaylı proje yapısı
Detaylı yapı için: PROJECT_STRUCTURE.md
from backend.app.transport.base import NetworkTransport
class WebSocketTransport(NetworkTransport):
async def connect(self):
# WebSocket connection logic
pass
async def send(self, data: bytes):
# Send implementation
pass
async def receive(self, size: int):
# Receive implementation
pass
# Factory'ye kaydet
from backend.app.transport import TransportFactory, TransportType
TransportFactory.register_transport(
TransportType.WEBSOCKET,
WebSocketTransport
)# Transport testleri
python3 test_transport.py
# Backend testleri (gelecek)
cd backend
pytest
# Frontend testleri (gelecek)
cd frontend
npm test# Backend build
docker compose build backend
# Frontend build
docker compose build frontend
# Tümü
docker compose build
# No-cache build
docker compose build --no-cachemake up # Start containers
make down # Stop containers
make restart # Restart containers
make logs # View logs
make build # Build images
make clean # Clean everything
make health # Health check-
config.yaml'daki JWT secret'ı değiştir - Tüm kullanıcı şifrelerini değiştir
- HTTPS/SSL aktif et
- CORS origin'leri güncelle
- Rate limiting aktif et
- IP whitelist/blacklist yapılandır
- Firewall kurallarını ayarla
- Log seviyesini WARNING'e çek
Minimum:
- CPU: 2 core
- RAM: 2 GB
- Disk: 20 GB
Önerilen:
- CPU: 4+ core
- RAM: 4+ GB
- Disk: 100+ GB (kayıt için)
- Hardware Acceleration - FFmpeg için GPU kullan
- Stream Buffer - Buffer boyutunu ayarla
- Worker Threads - CPU core sayısına göre ayarla
- Cache - Redis cache kullan (gelecek)
- Database - PostgreSQL kullan (gelecek)
# Logları kontrol et
docker compose logs backend
# Config dosyalarını kontrol et
python3 -c "import yaml; yaml.safe_load(open('config.yaml'))"# CORS ayarlarını kontrol et
# config.yaml -> server.cors_origins
# Backend health check
curl http://localhost:8000/api/system/health# RTSP URL'i test et
ffmpeg -i rtsp://camera-ip:554/stream1 -frames:v 1 test.jpg
# Kamera konfigürasyonunu kontrol et
curl http://localhost:8000/api/cameras/cam-id \
-H "Authorization: Bearer $TOKEN"Bu proje open source olarak geliştirilmiştir.
- Mimari & Backend: Modüler transport/protocol sistemi
- Frontend: React + Vite + Tailwind
- Dokümantasyon: Kapsamlı mimari ve kullanım kılavuzları
- Dokümantasyon: ARCHITECTURE.md, USAGE_EXAMPLES.md
- API Docs: http://localhost:8000/docs
- Issues: GitHub Issues
- WebRTC desteği
- ONVIF protokolü
- Gelişmiş hareket algılama
- Yüz tanıma
- Mobile app
- AI tabanlı nesne algılama
- Cloud backup
- Multi-site yönetimi
- Advanced analytics
- Email/SMS bildirimleri
4b4a57f (🎉 Initial commit: Professional Camera Control System)