import re import torch from PIL import Image from backend import config from backend.utils import find_similar_substring, destroy_text_roi from backend.model_handler import model_handler def is_risky(body_text): body_text = re.sub(r'[^a-zA-Z0-9\u0966-\u096F\s]', '', body_text) for keyword in config.RISKY_KEYWORDS: if find_similar_substring(body_text, keyword): return True return False def is_prom_illegal_activity(body_text): for phrase in config.ILLEGAL_PHRASES: for activity in config.ILLEGAL_ACTIVITIES: pattern = rf"{re.escape(phrase)}.*?{re.escape(activity)}" if re.search(pattern, body_text): return True return False def is_competitor(body_text): for brand in config.COMPETITOR_BRANDS: if re.search(r'\b' + re.escape(brand) + r'\b', body_text): return True return False def body(image_path): results = {} image = Image.open(image_path).convert('RGB') bd = model_handler.intern(image, config.PTAG, 500).lower() ocr_substitutions = {'0': 'o', '1': 'l', '!': 'l', '@': 'a', '5': 's', '8': 'b'} for char, substitute in ocr_substitutions.items(): bd = bd.replace(char, substitute) bd = ' '.join(bd.split()) results["High Risk Content"] = 1 if is_risky(bd) else 0 results["Illegal Content"] = 1 if is_prom_illegal_activity(bd) else 0 results["Competitor References"] = 1 if is_competitor(bd) else 0 return results def offensive(image): image = destroy_text_roi(image, *config.TAG) probs = model_handler.get_clip_probs(image, config.APPROPRIATE_LABELS) if probs is None: return False inappropriate_prob = probs[0][0].item() appropriate_prob = probs[0][1].item() if inappropriate_prob > appropriate_prob: return True return False def religious(image): probs = model_handler.get_clip_probs(image, config.RELIGIOUS_LABELS) if probs is None: return False, None highest_score_index = torch.argmax(probs, dim=1).item() if highest_score_index != 0: return True, config.RELIGIOUS_LABELS[highest_score_index] return False, None def theme(image_path): results = {} image = Image.open(image_path).convert('RGB') results["Inappropriate Content"] = 1 if offensive(image) else 0 is_religious, religious_label = religious(image) results["Religious Content"] = f"1 [{religious_label}]" if is_religious else "0" return results