Spaces:
Sleeping
Sleeping
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 | |
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) | |