File size: 2,404 Bytes
1858a28
 
 
 
 
 
 
 
9f6f81d
 
 
 
1858a28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
## App: Escrito-Claro
## Por: Ruben Durango

# Importaciones
import gradio as gr
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM
import numpy as np
import spaces

import subprocess
subprocess.run('pip install flash-attn --no-build-isolation', env={'FLASH_ATTENTION_SKIP_CUDA_BUILD': "TRUE"}, shell=True)

# Cargar modelo y procesador
ocr_model = AutoModelForCausalLM.from_pretrained("microsoft/Florence-2-large", trust_remote_code=True)
ocr_processor = AutoProcessor.from_pretrained("microsoft/Florence-2-large", trust_remote_code=True)

# Función para ejecutar el OCR
def run_ocr(task_prompt, image):
    # Asegurarse de que la imagen es un objeto PIL
    if isinstance(image, np.ndarray):
        image = Image.fromarray(image)
    
    prompt = task_prompt
    inputs = ocr_processor(text=prompt, images=image, return_tensors="pt")
    generated_ids = ocr_model.generate(
        input_ids=inputs["input_ids"],
        pixel_values=inputs["pixel_values"],
        max_new_tokens=1024,
        num_beams=3
    )
    generated_text = ocr_processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
    parsed_answer = ocr_processor.post_process_generation(generated_text, task=task_prompt, image_size=(image.width, image.height))
    return parsed_answer['<OCR>']

# Función para ser llamada en Gradio
def process_image(image):
    ocr_text = run_ocr("<OCR>", image)
    return ocr_text

# Interfaz princital
with gr.Blocks(theme='bethecloud/storj_theme') as demo:
    gr.Markdown("<center><h1>🤓 Escrito-Claro</h1><br><h3>OCR con Florence-2</h3></center>")
    gr.Markdown("Con **EscritoClaro**, convierte tus notas manuscritas en texto digital de forma rápida y precisa, utilizando el modelo Florence-2 de Microsoft.Esta aplicación extrae el texto de tus documentos con buena precisión. Simplemente sube una imagen y deja que EscritoClaro haga el resto.")
    
    # Botón de Procesado
    submit_btn = gr.Button(value="Procesar ⚙️")
    
    with gr.Row():
        # Entradas 
        with gr.Column():
            image = gr.Image(label="Imagen de entrada")
        
        # Salidas
        with gr.Column():
            ocr_text = gr.Textbox(label="Texto OCR", placeholder="Texto extraído")
    
    submit_btn.click(fn=process_image, inputs=image, outputs=ocr_text)  
demo.launch()