PRISM / pipeline.py
devranx's picture
Upload 20 files
03e275e verified
from tabulate import tabulate
from modules import visual_checks, text_checks, content_checks
def classify(image_path):
"""Perform complete classification with detailed results."""
# Components to check
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
]
# Collect all results
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}")
# Optionally set default values or log error
pass
# Calculate final classification
# Check if any result value is 1 (or starts with '1' for string results like "1 [Religious]")
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
# Determine Pass or Fail
classification_result = "Fail" if final_classification == 1 else "Pass"
# Prepare the table data
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"
]
# Collect labels responsible for failure
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])
# Format the results as a table
result_table = tabulate(table_data, headers=["LABEL", "RESULT"], tablefmt="fancy_grid")
# Return the final classification, result table, and failure labels (if any)
return classification_result, result_table, failure_labels
# Dummy interface for testing (can be enabled if needed)
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