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>
45 lines
2.6 KiB
Python
Executable file
45 lines
2.6 KiB
Python
Executable file
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 face‐visibility‐at‐distance checkpoint
|
||
- Explain why it passes or fails based on the visibility criteria
|
||
- If it fails, provide 1–2 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)
|