Upload 5 files
Browse files- .dockerignore +34 -0
- .gitignore +37 -0
- Dockerfile +32 -0
- app.py +34 -0
- check_models.py +15 -0
.dockerignore
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.pyc
|
| 4 |
+
*.pyo
|
| 5 |
+
*.pyd
|
| 6 |
+
*.so
|
| 7 |
+
.Python
|
| 8 |
+
|
| 9 |
+
# Virtual environments
|
| 10 |
+
venv/
|
| 11 |
+
env/
|
| 12 |
+
ENV/
|
| 13 |
+
.venv
|
| 14 |
+
|
| 15 |
+
# IDE
|
| 16 |
+
.vscode/
|
| 17 |
+
.idea/
|
| 18 |
+
*.swp
|
| 19 |
+
*.swo
|
| 20 |
+
|
| 21 |
+
# Git
|
| 22 |
+
.git/
|
| 23 |
+
.gitignore
|
| 24 |
+
.gitattributes
|
| 25 |
+
|
| 26 |
+
# Local cache
|
| 27 |
+
.huggingface/
|
| 28 |
+
instance/
|
| 29 |
+
uploads/
|
| 30 |
+
ai_models/
|
| 31 |
+
|
| 32 |
+
# OS
|
| 33 |
+
.DS_Store
|
| 34 |
+
Thumbs.db
|
.gitignore
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.pyc
|
| 4 |
+
*.pyo
|
| 5 |
+
|
| 6 |
+
# Virtual environments
|
| 7 |
+
cctv_env_311/
|
| 8 |
+
venv/
|
| 9 |
+
env/
|
| 10 |
+
.env/
|
| 11 |
+
|
| 12 |
+
# AI Models (stored on Hugging Face Hub - downloaded automatically)
|
| 13 |
+
ai_models/
|
| 14 |
+
*.h5
|
| 15 |
+
*.pt
|
| 16 |
+
*.keras
|
| 17 |
+
*.bin
|
| 18 |
+
*.pickle
|
| 19 |
+
NETRA/model/
|
| 20 |
+
|
| 21 |
+
# Uploads & Cache
|
| 22 |
+
uploads/
|
| 23 |
+
instance/
|
| 24 |
+
.huggingface/
|
| 25 |
+
__pycache__/
|
| 26 |
+
|
| 27 |
+
# IDE
|
| 28 |
+
.vscode/
|
| 29 |
+
|
| 30 |
+
# Diagnostic/debug artifacts
|
| 31 |
+
NETRA/2.15.0
|
| 32 |
+
NETRA/diag_output.txt
|
| 33 |
+
NETRA/pip_list.txt
|
| 34 |
+
|
| 35 |
+
# OS
|
| 36 |
+
Thumbs.db
|
| 37 |
+
.DS_Store
|
Dockerfile
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.10-slim
|
| 2 |
+
|
| 3 |
+
WORKDIR /app
|
| 4 |
+
|
| 5 |
+
# Install system dependencies for OpenCV
|
| 6 |
+
RUN apt-get update && apt-get install -y \
|
| 7 |
+
libsm6 libxext6 libxrender-dev \
|
| 8 |
+
libglib2.0-0 \
|
| 9 |
+
ffmpeg \
|
| 10 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 11 |
+
|
| 12 |
+
# Copy requirements first (for better caching)
|
| 13 |
+
COPY requirements.txt .
|
| 14 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 15 |
+
|
| 16 |
+
# Copy entire project
|
| 17 |
+
COPY . .
|
| 18 |
+
|
| 19 |
+
# Create necessary directories
|
| 20 |
+
RUN mkdir -p /app/instance /app/uploads /app/ai_models
|
| 21 |
+
|
| 22 |
+
# Expose port 7860 (Hugging Face Spaces default)
|
| 23 |
+
EXPOSE 7860
|
| 24 |
+
|
| 25 |
+
# Set environment variables
|
| 26 |
+
ENV FLASK_APP=webapp/app.py
|
| 27 |
+
ENV FLASK_ENV=production
|
| 28 |
+
ENV PYTHONUNBUFFERED=1
|
| 29 |
+
ENV PORT=7860
|
| 30 |
+
|
| 31 |
+
# Run the Flask app
|
| 32 |
+
CMD ["python", "app.py"]
|
app.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
NETRA - Entry Point
|
| 3 |
+
Bootstraps the full application from webapp/app.py.
|
| 4 |
+
Run this file from the project root: python app.py
|
| 5 |
+
NETRA
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import sys
|
| 9 |
+
import runpy
|
| 10 |
+
from pathlib import Path
|
| 11 |
+
|
| 12 |
+
PROJECT_ROOT = Path(__file__).parent
|
| 13 |
+
sys.path.insert(0, str(PROJECT_ROOT))
|
| 14 |
+
if __name__ == '__main__':
|
| 15 |
+
import os
|
| 16 |
+
|
| 17 |
+
# Detect environment and set ports
|
| 18 |
+
is_hf_spaces = os.getenv('SYSTEM') == 'spaces' or os.path.exists('/.dockerenv')
|
| 19 |
+
|
| 20 |
+
if is_hf_spaces:
|
| 21 |
+
os.environ['PORT'] = '7860'
|
| 22 |
+
os.environ['FLASK_ENV'] = 'production'
|
| 23 |
+
os.environ['FLASK_DEBUG'] = '0'
|
| 24 |
+
else:
|
| 25 |
+
os.environ['PORT'] = os.getenv('PORT', '5001')
|
| 26 |
+
os.environ['FLASK_ENV'] = os.getenv('FLASK_ENV', 'development')
|
| 27 |
+
os.environ['FLASK_DEBUG'] = os.getenv('FLASK_DEBUG', '1')
|
| 28 |
+
|
| 29 |
+
os.environ['PYTHONUNBUFFERED'] = '1'
|
| 30 |
+
|
| 31 |
+
runpy.run_path(
|
| 32 |
+
str(PROJECT_ROOT / 'webapp' / 'app.py'),
|
| 33 |
+
run_name='__main__',
|
| 34 |
+
)
|
check_models.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Quick check of all models"""
|
| 2 |
+
from config import get_model_path
|
| 3 |
+
|
| 4 |
+
print("=== MODEL STATUS ===\n")
|
| 5 |
+
models = {
|
| 6 |
+
'violence': get_model_path('violence'),
|
| 7 |
+
'yolo': get_model_path('yolo'),
|
| 8 |
+
'weapon (gun)': get_model_path('weapon', 'gun'),
|
| 9 |
+
'pose': get_model_path('pose'),
|
| 10 |
+
'anomaly': get_model_path('anomaly'),
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
for model_name, path in models.items():
|
| 14 |
+
status = "✓ FOUND" if path and path.exists() else "✗ MISSING"
|
| 15 |
+
print(f"{status:12} {model_name:15} {path}")
|