ai_qc/backend/visual_qc_apps/face_visibility/app.py
nickviljoen 3fec052c12 Create frontend and backend folder structure for deployment
Organized the application into separate frontend and backend directories for cleaner deployment and better separation of concerns.

Frontend Directory (frontend/):
- index.html: Single-page web interface (renamed from web_ui.html)
- README.md: Frontend deployment guide
- Total size: ~113 KB (self-contained)
- Smart base path detection (works at / or /ai_qc/)
- No configuration changes required

Backend Directory (backend/):
- All Python files (api_server.py, llm_config.py, etc.)
- visual_qc_apps/: 33 QC check modules
- profiles/: 6 QC profile configurations
- brand_guidelines/: Reference asset storage
- config/: Environment configurations
- scripts/: Deployment automation
- uploads/, output/: Data directories
- requirements.txt, ai_qc.service, apache_config.conf
- Complete documentation

New Documentation:
- FOLDER_STRUCTURE.md: Comprehensive guide to new structure
- frontend/README.md: Frontend deployment instructions
- backend/BACKEND_README.md: Backend deployment guide

Deployment Mapping:
- frontend/ → /var/www/html/ai_qc/ (web root)
- backend/ → /opt/ai_qc/ (application directory)

Benefits:
- Clear separation of concerns
- Backend code not in web-accessible directory
- Independent frontend/backend updates
- Matches server's existing patterns (/opt/veo3, /opt/voice2text)
- Industry-standard architecture
- Easy to deploy and maintain

Original files preserved in root directory for reference.
Ready for production deployment following MIGRATION_GUIDE.md.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 11:55:53 +02:00

45 lines
2.6 KiB
Python
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import sys
# Add parent directory to path to import shared modules
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from visual_qc_apps.flask_app_template import FlaskAppTemplate
class FaceVisibilityApp(FlaskAppTemplate):
"""
Face Visibility Check
"""
def __init__(self):
# Define the hardcoded prompt
prompt = """You are performing a visual quality-control check on a Point of Sale (POS) advertisement. Your task is to determine whether the face (with eyes) meets these criteria, based on its intended display size:
• For large media (Floor-Standing Display Units, posters, etc.): The face (including eyes) must be clearly visible from about 3 meters away.
• For smaller media (wobblers, shelf talkers, etc.): The face must be clearly visible from about 1 meter away.
STEPS TO EVALUATE:
Examine the advertisement's overall layout. Check whether at least one face is large enough and has sufficient contrast so that its eyes are distinguishable from the stated distance.
Imagine viewing the design at a reduced scale or slightly out of focus—details of the eyes should still be discernible.
If you can identify not just that it's a face but also clearly detect the eye region (i.e., tell where the eyes are) at the appropriate viewing distance, it passes this checkpoint.
A face whose total area (or coverage) is below 8% of the entire ad might not be clearly visible. Consider this a FAIL unless the face's positioning or contrast compensates for the lower coverage.
YOUR OUTPUT:
• First, clearly state whether a face is present at all in the advertisement.
• If NO face is present, state "Fail - No visible face detected in the image to evaluate for visibility at distance."
• If a face IS present:
- Describe the face's size and prominence in the design
- State whether the design "passes" or "fails" the facevisibilityatdistance checkpoint
- Explain why it passes or fails based on the visibility criteria
- If it fails, provide 12 concise recommendations for improving eye/face visibility
• Finally, include a JSON code block with these fields:
{ "face_present": true or false, "face_visibility_at_distance": "Pass" or "Fail" (only if face_present is true), "face_coverage_percentage": (numerical estimate of the fraction of the total ad canvas occupied by the face, only if face_present is true) }"""
# Initialize the Flask app with the prompt
super().__init__(__name__, prompt)
# Run the app if executed directly
if __name__ == "__main__":
app = FaceVisibilityApp()
app.run(debug=True)