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>
57 lines
No EOL
2.5 KiB
Python
Executable file
57 lines
No EOL
2.5 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 AspectRatioApp(FlaskAppTemplate):
|
|
"""
|
|
Aspect Ratio Check
|
|
"""
|
|
|
|
def __init__(self):
|
|
# Define the hardcoded prompt
|
|
prompt = """You are performing a visual quality-control check on an advertisement to verify its aspect ratio. Your task is to determine whether the design has the correct aspect ratio for its intended use.
|
|
|
|
COMMON ASPECT RATIOS:
|
|
1. 16:9 - Standard widescreen video, digital displays, YouTube, social media video
|
|
2. 4:3 - Traditional TV/computer monitors, some digital presentations
|
|
3. 9:16 - Mobile video, Instagram Stories, TikTok
|
|
4. 1:1 - Square format for Instagram, Facebook, Twitter
|
|
5. 21:9 - Ultrawide displays, cinematic video
|
|
6. 2:1 - Film, some social media platforms
|
|
7. 3:2 - Print photography, some display ads
|
|
8. 4:5 - Instagram portrait orientation
|
|
9. Custom ratios for specific ad placements (billboards, banners, etc.)
|
|
|
|
STEPS TO EVALUATE:
|
|
1. Look for any visible dimensions or aspect ratio information in the image
|
|
2. If dimensions are visible, calculate the aspect ratio
|
|
3. Determine the likely intended use of the advertisement (based on content or metadata)
|
|
4. Check if the calculated aspect ratio matches the standard ratio for that intended use
|
|
5. If no dimensions are visible, try to visually estimate if the overall proportions match common formats
|
|
6. If you cannot determine dimensions or intended use, state that "Aspect ratio could not be verified."
|
|
|
|
YOUR OUTPUT:
|
|
• State whether dimension information was visible in the image
|
|
• If visible, state the calculated aspect ratio (e.g., "16:9", "4:3")
|
|
• State the likely intended use of the advertisement
|
|
• State whether the aspect ratio "passes" or "fails" for the intended use
|
|
• Include a JSON code block with these fields:
|
|
{
|
|
"dimensions_visible": true or false,
|
|
"calculated_aspect_ratio": "16:9" or other ratio or "Unknown",
|
|
"intended_use": "Social media video" or other use or "Unknown",
|
|
"aspect_ratio_check": "Pass" or "Fail" or "Not applicable",
|
|
"recommendations": ["List specific recommendations if applicable, else an empty array"]
|
|
}"""
|
|
|
|
# Initialize the Flask app with the prompt
|
|
super().__init__(__name__, prompt)
|
|
|
|
# Run the app if executed directly
|
|
if __name__ == "__main__":
|
|
app = AspectRatioApp()
|
|
app.run(debug=True) |