File size: 4,621 Bytes
6763770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fc66fa8
 
 
 
6763770
 
 
 
fc66fa8
6763770
fc66fa8
 
6763770
fc66fa8
 
 
6763770
 
fc66fa8
6763770
fc66fa8
 
 
 
 
 
 
6763770
fc66fa8
6763770
 
 
 
fc66fa8
6763770
 
fc66fa8
6763770
 
 
fc66fa8
6763770
fc66fa8
 
 
6763770
fc66fa8
6763770
 
fc66fa8
 
6763770
fc66fa8
 
 
 
 
6763770
fc66fa8
 
6763770
fc66fa8
 
6763770
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# 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
from model_loader import ModelLoader
from services.text_filter import TextFilterService
from services.image_ocr import ImageOCRService
import logging
import os

# 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...")

# 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)
        return jsonify(results)
    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)