AIFilterContent / api.py
Mridul2003's picture
Update api.py
f260ed0 verified
raw
history blame
5.05 kB
# from fastapi import FastAPI
# from pydantic import BaseModel
# from model_loader import ModelLoader
# from services.text_filter import TextFilterService
# from services.image_ocr import ImageOCRService
# from typing import Optional
# from fastapi.responses import JSONResponse
# import logging
# logging.basicConfig(
# level=logging.INFO,
# format="%(asctime)s [%(levelname)s] %(message)s",
# handlers=[
# logging.StreamHandler()
# ]
# )
# logger = logging.getLogger(__name__)
# app = FastAPI()
# logger.info("Starting FastAPI app...")
# model_loader = ModelLoader()
# logger.info("ModelLoader initialized.")
# text_filter_service = TextFilterService(model_loader)
# logger.info("TextFilterService initialized.")
# image_ocr_service = ImageOCRService()
# logger.info("Image OCR image initialized")
# class InputData(BaseModel):
# text: Optional[str] = None
# image_url: Optional[str] = None
# @app.post("/filtercomment")
# async def filter_comment(input_data: InputData):
# logger.info("Received request: %s", input_data)
# final_text = ""
# # Case 1: Extract text from image
# if input_data.image_url:
# logger.info("Image URL provided: %s", input_data.image_url)
# try:
# logger.info("Fetching image from URL...")
# final_text = image_ocr_service.extract_text(input_data.image_url)
# logger.info("Generated text: %s", final_text)
# except Exception as e:
# logger.error("Image processing failed: %s", str(e))
# return JSONResponse(status_code=400, content={"error": f"Image processing failed: {str(e)}"})
# # Case 2: Use provided text
# elif input_data.text:
# logger.info("Text input provided.")
# final_text = input_data.text
# else:
# logger.warning("No input provided.")
# return JSONResponse(status_code=400, content={"error": "Either 'text' or 'image_url' must be provided."})
# try:
# logger.info("Processing text through TextFilterService...")
# results = text_filter_service.process_text(final_text)
# results["extracted_text"] = final_text
# logger.info("Text filtering complete. Results: %s", results)
# return results
# except Exception as e:
# logger.exception("Text filtering failed.")
# return JSONResponse(status_code=500, content={"error": f"Text filtering failed: {str(e)}"})
# if __name__ == "__main__":
# import uvicorn
# logger.info("Starting Uvicorn server...")
# uvicorn.run(app, host="0.0.0.0", port=3000)
from flask import Flask, request, jsonify,Response
from flask_cors import CORS
from model_loader import ModelLoader
from services.text_filter import TextFilterService
from services.image_ocr import ImageOCRService
import logging
import os
import json
# Set Hugging Face cache directory
os.environ["HF_HOME"] = "/app/cache"
# Logging setup
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
logger = logging.getLogger(__name__)
app = Flask(__name__)
logger.info("Starting Flask app...")
CORS(app)
# Load model and services
model_loader = ModelLoader()
logger.info("ModelLoader initialized.")
text_filter_service = TextFilterService(model_loader)
logger.info("TextFilterService initialized.")
image_ocr_service = ImageOCRService()
logger.info("ImageOCRService initialized.")
@app.route("/filtercomment", methods=["POST"])
def filter_comment():
data = request.get_json()
logger.info("Received request: %s", data)
text = data.get("text")
image_url = data.get("image_url")
final_text = ""
if image_url:
logger.info("Image URL provided: %s", image_url)
try:
final_text = image_ocr_service.extract_text(image_url)
logger.info("Generated text: %s", final_text)
except Exception as e:
logger.error("Image processing failed: %s", str(e))
return jsonify({"error": f"Image processing failed: {str(e)}"}), 400
elif text:
final_text = text
else:
logger.warning("No input provided.")
return jsonify({"error": "Either 'text' or 'image_url' must be provided."}), 400
try:
results = text_filter_service.process_text(final_text)
results["extracted_text"] = final_text
logger.info("Text filtering complete. Results: %s", results)
# Ensure results dict is JSON serializable
safe_results = {
k: float(v) if isinstance(v, (float, int)) or hasattr(v, "item") else v
for k, v in results.items()
}
safe_results["extracted_text"] = final_text
logger.info("Returning response now...")
return Response(json.dumps(safe_results), mimetype="application/json")
except Exception as e:
logger.exception("Text filtering failed.")
return jsonify({"error": f"Text filtering failed: {str(e)}"}), 500
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)