PunimTag Web Application - Major Feature Release #1

Open
tanyar09 wants to merge 106 commits from dev into master
5 changed files with 53 additions and 8 deletions
Showing only changes of commit 364974141d - Show all commits

View File

@ -374,7 +374,9 @@ jobs:
- name: Run backend tests
run: |
export PYTHONPATH=$(pwd)
export SKIP_DEEPFACE_IN_TESTS=1
echo "🧪 Running all backend API tests..."
echo "⚠️ DeepFace/TensorFlow disabled in tests to avoid CPU instruction errors"
python -m pytest tests/ -v --tb=short --cov=backend --cov-report=term-missing --cov-report=xml --junit-xml=test-results.xml || true
continue-on-error: true

View File

@ -14,11 +14,17 @@ from PIL import Image
from sqlalchemy.orm import Session, joinedload
from sqlalchemy import and_, func, case
try:
from deepface import DeepFace
DEEPFACE_AVAILABLE = True
except ImportError:
# Skip DeepFace import during tests to avoid illegal instruction errors
if os.getenv("SKIP_DEEPFACE_IN_TESTS") == "1":
DEEPFACE_AVAILABLE = False
DeepFace = None
else:
try:
from deepface import DeepFace
DEEPFACE_AVAILABLE = True
except ImportError:
DEEPFACE_AVAILABLE = False
DeepFace = None
from backend.config import (
CONFIDENCE_CALIBRATION_METHOD,

27
pytest.ini Normal file
View File

@ -0,0 +1,27 @@
[pytest]
# Pytest configuration for PunimTag backend tests
# Test discovery patterns
python_files = test_*.py
python_classes = Test*
python_functions = test_*
# Test paths
testpaths = tests
# Output options
addopts =
-v
--strict-markers
--tb=short
--disable-warnings
# Markers
markers =
slow: marks tests as slow (dummy marker for future use)
integration: marks tests as integration tests (dummy marker for future use)
# Environment variables set before test collection
# SKIP_DEEPFACE_IN_TESTS is set in conftest.py to prevent DeepFace/TensorFlow
# from loading during tests (avoids illegal instruction errors on some CPUs)

View File

@ -1,15 +1,21 @@
"""Face pose detection (yaw, pitch, roll) using RetinaFace landmarks"""
import os
import numpy as np
from math import atan2, degrees
from typing import Dict, Tuple, Optional, List
try:
from retinaface import RetinaFace
RETINAFACE_AVAILABLE = True
except ImportError:
# Skip RetinaFace import during tests to avoid illegal instruction errors
if os.getenv("SKIP_DEEPFACE_IN_TESTS") == "1":
RETINAFACE_AVAILABLE = False
RetinaFace = None
else:
try:
from retinaface import RetinaFace
RETINAFACE_AVAILABLE = True
except ImportError:
RETINAFACE_AVAILABLE = False
RetinaFace = None
class PoseDetector:

View File

@ -10,6 +10,10 @@ from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
# Prevent DeepFace/TensorFlow from loading during tests (causes illegal instruction on some CPUs)
# Set environment variable BEFORE any backend imports that might trigger DeepFace/TensorFlow
os.environ["SKIP_DEEPFACE_IN_TESTS"] = "1"
from backend.app import create_app
from backend.db.base import Base
from backend.db.session import get_db