Mridul2003 commited on
Commit
2256b21
·
verified ·
1 Parent(s): 24a37ee

Update api.py

Browse files
Files changed (1) hide show
  1. api.py +49 -3
api.py CHANGED
@@ -83,6 +83,9 @@ from typing import Optional
83
  from PIL import Image
84
  import logging
85
  import io
 
 
 
86
 
87
  logging.basicConfig(
88
  level=logging.INFO,
@@ -106,6 +109,13 @@ logger.info("TextFilterService initialized.")
106
  image_classifier = ImageClassifier()
107
  logger.info("ImageClassifier initialized.")
108
 
 
 
 
 
 
 
 
109
  @app.route("/filtercomment", methods=["POST"])
110
  def filter_comment():
111
  text = request.form.get("text")
@@ -119,16 +129,52 @@ def filter_comment():
119
  if image_file:
120
  try:
121
  logger.info("Processing uploaded image file: %s", image_file.filename)
122
- image_bytes = image_file.read()
123
  image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
 
124
  result = image_classifier.classify(image)
 
125
  if result.get("text"):
126
  result['toxic_result'] = text_filter_service.process_text(result.get("text"))
 
127
  logger.info("Image classification result: %s", result)
128
- return jsonify({"image_classification": result})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  except Exception as e:
130
  logger.error("Image file processing failed: %s", str(e))
131
- return jsonify({"error": f"Image file processing failed: {str(e)}"}), 400
132
 
133
  # Case 2: Extract text from image URL
134
  if image_url:
 
83
  from PIL import Image
84
  import logging
85
  import io
86
+ import cv2
87
+ import numpy as np
88
+ import base64
89
 
90
  logging.basicConfig(
91
  level=logging.INFO,
 
109
  image_classifier = ImageClassifier()
110
  logger.info("ImageClassifier initialized.")
111
 
112
+ def blur_image(pil_image: Image.Image) -> Image.Image:
113
+ """Convert PIL image to OpenCV, apply Gaussian blur, and return as PIL."""
114
+ cv_image = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
115
+ blurred_cv = cv2.GaussianBlur(cv_image, (25, 25), 0)
116
+ blurred_pil = Image.fromarray(cv2.cvtColor(blurred_cv, cv2.COLOR_BGR2RGB))
117
+ return blurred_pil
118
+
119
  @app.route("/filtercomment", methods=["POST"])
120
  def filter_comment():
121
  text = request.form.get("text")
 
129
  if image_file:
130
  try:
131
  logger.info("Processing uploaded image file: %s", image_file.filename)
132
+ image_bytes = await image_file.read()
133
  image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
134
+
135
  result = image_classifier.classify(image)
136
+
137
  if result.get("text"):
138
  result['toxic_result'] = text_filter_service.process_text(result.get("text"))
139
+
140
  logger.info("Image classification result: %s", result)
141
+
142
+ # Check if content is toxic or unsafe
143
+ is_toxic = result.get("toxic") is True or not result.get("toxic_result", {}).get("safe", True)
144
+
145
+ if is_toxic:
146
+ logger.info("Toxic content detected. Blurring image.")
147
+ blurred_image = blur_image(image)
148
+
149
+ # Compose annotation message
150
+ if not result.get("text"):
151
+ message = "Toxic content is present\nImage is blurred"
152
+ else:
153
+ toxic_result = result.get("toxic_result", {})
154
+ exclude_keys = {"safe", "identity_hate_custom", "not_identity_hate_custom"}
155
+ filtered = {k: v for k, v in toxic_result.items() if k not in exclude_keys}
156
+ if filtered:
157
+ max_label = max(filtered, key=filtered.get)
158
+ message = f"The image contains {max_label} ({filtered[max_label]:.2f}) content"
159
+ else:
160
+ message = "Toxic content is present\nImage is blurred"
161
+
162
+ # Encode blurred image to base64
163
+ buffer = io.BytesIO()
164
+ blurred_image.save(buffer, format="JPEG")
165
+ encoded_image = base64.b64encode(buffer.getvalue()).decode("utf-8")
166
+
167
+ result["blurred_image_base64"] = encoded_image
168
+ result["blurred"] = True
169
+ result["alert_message"] = message
170
+ else:
171
+ result["blurred"] = False
172
+
173
+ return JSONResponse(content={"image_classification": result})
174
+
175
  except Exception as e:
176
  logger.error("Image file processing failed: %s", str(e))
177
+ return JSONResponse(status_code=400, content={"error": f"Image file processing failed: {str(e)}"})
178
 
179
  # Case 2: Extract text from image URL
180
  if image_url: