ocr / app.py
alonb19's picture
Update app.py
8bef43b verified
from fastapi import FastAPI, UploadFile, File, HTTPException
from fastapi.responses import JSONResponse
import numpy as np
from PIL import Image
import io
import uvicorn
import os
# Configurar variables de entorno para EasyOCR antes de importarlo
os.environ['EASYOCR_MODULE_PATH'] = '/app/model'
os.environ['HOME'] = '/app'
import easyocr
app = FastAPI()
# Inicializar el lector OCR
reader = easyocr.Reader(['es', 'en'])
@app.post("/ocr")
async def extract_text(file: UploadFile = File(...)):
"""
Extrae texto de una imagen usando OCR
"""
try:
# Verificar que el archivo sea una imagen
if not file.content_type.startswith('image/'):
raise HTTPException(status_code=400, detail="El archivo debe ser una imagen")
# Leer el archivo
contents = await file.read()
# Convertir a PIL Image
image = Image.open(io.BytesIO(contents))
# Convertir a RGB si es necesario
if image.mode != 'RGB':
image = image.convert('RGB')
# Convertir a numpy array
image_array = np.array(image)
# Realizar OCR
results = reader.readtext(image_array)
# Formatear resultados
extracted_text = []
for (bbox, text, confidence) in results:
extracted_text.append({
"text": text,
"confidence": float(confidence),
"bbox": bbox
})
# Texto completo concatenado
full_text = " ".join([item["text"] for item in extracted_text])
return JSONResponse(content={
"success": True,
"full_text": full_text,
"detailed_results": extracted_text
})
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error procesando la imagen: {str(e)}")
@app.get("/")
async def root():
return {"message": "OCR API funcionando", "endpoint": "/ocr"}
if __name__ == "__main__":
port = int(os.environ.get("PORT", 7860))
uvicorn.run(app, host="0.0.0.0", port=port)