|
|
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 |