AIFilterContent / api.py
Mridul2003's picture
Copied all files from local
fc66fa8
raw
history blame
2.48 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)