| from tabulate import tabulate |
| from modules import visual_checks, text_checks, content_checks |
|
|
| def classify(image_path): |
| """Perform complete classification with detailed results.""" |
| |
| components = [ |
| visual_checks.image_quality, |
| visual_checks.ribbon, |
| text_checks.tagline, |
| text_checks.tooMuchText, |
| content_checks.theme, |
| content_checks.body, |
| text_checks.cta, |
| text_checks.tnc, |
| visual_checks.gnc |
| ] |
|
|
| |
| all_results = {} |
| for component in components: |
| try: |
| results = component(image_path) |
| all_results.update(results) |
| except Exception as e: |
| print(f"Error in component {component.__name__}: {e}") |
| |
| pass |
|
|
| |
| |
| final_classification = 0 |
| for result in all_results.values(): |
| if isinstance(result, int): |
| if result == 1: |
| final_classification = 1 |
| break |
| elif isinstance(result, str): |
| if result.startswith('1'): |
| final_classification = 1 |
| break |
|
|
| |
| classification_result = "Fail" if final_classification == 1 else "Pass" |
|
|
| |
| table_data = [] |
| labels = [ |
| "Bad Image Quality", "No Ribbon", "Empty/Illegible/Black Tagline", "Multiple Taglines", |
| "Incomplete Tagline", "Hyperlink", "Price Tag", "Excessive Emojis", "Too Much Text", |
| "Inappropriate Content", "Religious Content", "High Risk Content", |
| "Illegal Content", "Competitor References", "Bad CTA", "Terms & Conditions", |
| "Visual Gesture or Icon" |
| ] |
|
|
| |
| failure_labels = [] |
| for label in labels: |
| result = all_results.get(label, 0) |
| |
| is_fail = False |
| if isinstance(result, int) and result == 1: |
| is_fail = True |
| elif isinstance(result, str) and result.startswith('1'): |
| is_fail = True |
| |
| if is_fail: |
| failure_labels.append(label) |
|
|
| table_data.append([label, result]) |
|
|
| |
| result_table = tabulate(table_data, headers=["LABEL", "RESULT"], tablefmt="fancy_grid") |
|
|
| |
| return classification_result, result_table, failure_labels |
|
|
| |
| def classify_dummy(image_path): |
| import random |
| all_results = { |
| "Bad Image Quality": 0, |
| "No Ribbon": random.choice([0, 1]), |
| "Empty/Illegible/Black Tagline": 0, |
| "Multiple Taglines": 0, |
| "Incomplete Tagline": 0, |
| "Hyperlink": 0, |
| "Price Tag": 0, |
| "Excessive Emojis": 0, |
| "Too Much Text": 0, |
| "Inappropriate Content": 0, |
| "Religious Content": 0, |
| "High Risk Content": 0, |
| "Illegal Content": 0, |
| "Competitor References": 0, |
| "Bad CTA": 0, |
| "Terms & Conditions": 0, |
| "Visual Gesture or Icon": 0 |
| } |
| |
| final_classification = 1 if any(result == 1 for result in all_results.values()) else 0 |
| classification_result = "Fail" if final_classification == 1 else "Pass" |
| |
| table_data = [] |
| labels = list(all_results.keys()) |
| failure_labels = [label for label in labels if all_results[label] == 1] |
| |
| for label in labels: |
| table_data.append([label, all_results[label]]) |
| |
| result_table = tabulate(table_data, headers=["LABEL", "RESULT"], tablefmt="fancy_grid") |
| return classification_result, result_table, failure_labels |