alonb19 commited on
Commit
d956b78
verified
1 Parent(s): 85fae97

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +31 -0
  2. app.py +68 -0
  3. requirements.txt +6 -0
Dockerfile ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9-slim
2
+
3
+ # Instalar dependencias del sistema para OpenCV y easyocr
4
+ RUN apt-get update && apt-get install -y \
5
+ libglib2.0-0 \
6
+ libsm6 \
7
+ libxext6 \
8
+ libxrender-dev \
9
+ libgomp1 \
10
+ libglib2.0-0 \
11
+ libgtk-3-0 \
12
+ libgl1-mesa-glx \
13
+ libglib2.0-0 \
14
+ libgthread-2.0-0 \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ # Establecer directorio de trabajo
18
+ WORKDIR /app
19
+
20
+ # Copiar requirements y instalar dependencias Python
21
+ COPY requirements.txt .
22
+ RUN pip install --no-cache-dir -r requirements.txt
23
+
24
+ # Copiar el c贸digo de la aplicaci贸n
25
+ COPY app.py .
26
+
27
+ # Exponer el puerto
28
+ EXPOSE 7860
29
+
30
+ # Comando para ejecutar la aplicaci贸n
31
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, UploadFile, File, HTTPException
2
+ from fastapi.responses import JSONResponse
3
+ import easyocr
4
+ import numpy as np
5
+ from PIL import Image
6
+ import io
7
+ import uvicorn
8
+ import os
9
+
10
+ app = FastAPI()
11
+
12
+ # Inicializar el lector OCR
13
+ reader = easyocr.Reader(['es', 'en'])
14
+
15
+ @app.post("/ocr")
16
+ async def extract_text(file: UploadFile = File(...)):
17
+ """
18
+ Extrae texto de una imagen usando OCR
19
+ """
20
+ try:
21
+ # Verificar que el archivo sea una imagen
22
+ if not file.content_type.startswith('image/'):
23
+ raise HTTPException(status_code=400, detail="El archivo debe ser una imagen")
24
+
25
+ # Leer el archivo
26
+ contents = await file.read()
27
+
28
+ # Convertir a PIL Image
29
+ image = Image.open(io.BytesIO(contents))
30
+
31
+ # Convertir a RGB si es necesario
32
+ if image.mode != 'RGB':
33
+ image = image.convert('RGB')
34
+
35
+ # Convertir a numpy array
36
+ image_array = np.array(image)
37
+
38
+ # Realizar OCR
39
+ results = reader.readtext(image_array)
40
+
41
+ # Formatear resultados
42
+ extracted_text = []
43
+ for (bbox, text, confidence) in results:
44
+ extracted_text.append({
45
+ "text": text,
46
+ "confidence": float(confidence),
47
+ "bbox": bbox
48
+ })
49
+
50
+ # Texto completo concatenado
51
+ full_text = " ".join([item["text"] for item in extracted_text])
52
+
53
+ return JSONResponse(content={
54
+ "success": True,
55
+ "full_text": full_text,
56
+ "detailed_results": extracted_text
57
+ })
58
+
59
+ except Exception as e:
60
+ raise HTTPException(status_code=500, detail=f"Error procesando la imagen: {str(e)}")
61
+
62
+ @app.get("/")
63
+ async def root():
64
+ return {"message": "OCR API funcionando", "endpoint": "/ocr"}
65
+
66
+ if __name__ == "__main__":
67
+ port = int(os.environ.get("PORT", 7860))
68
+ uvicorn.run(app, host="0.0.0.0", port=port)
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ fastapi==0.104.1
2
+ uvicorn==0.24.0
3
+ easyocr==1.7.0
4
+ pillow==10.0.1
5
+ numpy==1.24.3
6
+ python-multipart==0.0.6