Update app.py
Browse files
app.py
CHANGED
|
@@ -15,7 +15,10 @@ from surya.settings import settings
|
|
| 15 |
from surya.model.ordering.processor import load_processor as load_order_processor
|
| 16 |
from surya.model.ordering.model import load_model as load_order_model
|
| 17 |
|
| 18 |
-
# Configuração
|
|
|
|
|
|
|
|
|
|
| 19 |
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 20 |
logger = logging.getLogger(__name__)
|
| 21 |
|
|
@@ -74,6 +77,15 @@ except Exception as e:
|
|
| 74 |
logger.error(f"Erro durante a compilação do modelo de reconhecimento: {e}")
|
| 75 |
logger.warning("Continuando sem compilação do modelo")
|
| 76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
def ocr_workflow(image, langs):
|
| 78 |
logger.info(f"Iniciando workflow OCR com idiomas: {langs}")
|
| 79 |
try:
|
|
@@ -81,10 +93,10 @@ def ocr_workflow(image, langs):
|
|
| 81 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 82 |
predictions = run_ocr([image], [langs.split(',')], det_model, det_processor, rec_model, rec_processor)
|
| 83 |
logger.info("Workflow OCR concluído com sucesso")
|
| 84 |
-
return
|
| 85 |
except Exception as e:
|
| 86 |
logger.error(f"Erro durante o workflow OCR: {e}")
|
| 87 |
-
return
|
| 88 |
|
| 89 |
def text_detection_workflow(image):
|
| 90 |
logger.info("Iniciando workflow de detecção de texto")
|
|
@@ -93,10 +105,10 @@ def text_detection_workflow(image):
|
|
| 93 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 94 |
predictions = batch_text_detection([image], det_model, det_processor)
|
| 95 |
logger.info("Workflow de detecção de texto concluído com sucesso")
|
| 96 |
-
return
|
| 97 |
except Exception as e:
|
| 98 |
logger.error(f"Erro durante o workflow de detecção de texto: {e}")
|
| 99 |
-
return
|
| 100 |
|
| 101 |
def layout_analysis_workflow(image):
|
| 102 |
logger.info("Iniciando workflow de análise de layout")
|
|
@@ -104,13 +116,13 @@ def layout_analysis_workflow(image):
|
|
| 104 |
image = Image.open(image.name)
|
| 105 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 106 |
line_predictions = batch_text_detection([image], det_model, det_processor)
|
| 107 |
-
logger.debug(f"Detecção de linhas concluída. Número de linhas detectadas: {len(line_predictions[0]
|
| 108 |
layout_predictions = batch_layout_detection([image], layout_model, layout_processor, line_predictions)
|
| 109 |
logger.info("Workflow de análise de layout concluído com sucesso")
|
| 110 |
-
return
|
| 111 |
except Exception as e:
|
| 112 |
logger.error(f"Erro durante o workflow de análise de layout: {e}")
|
| 113 |
-
return
|
| 114 |
|
| 115 |
def reading_order_workflow(image):
|
| 116 |
logger.info("Iniciando workflow de ordem de leitura")
|
|
@@ -118,16 +130,16 @@ def reading_order_workflow(image):
|
|
| 118 |
image = Image.open(image.name)
|
| 119 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 120 |
line_predictions = batch_text_detection([image], det_model, det_processor)
|
| 121 |
-
logger.debug(f"Detecção de linhas concluída. Número de linhas detectadas: {len(line_predictions[0]
|
| 122 |
layout_predictions = batch_layout_detection([image], layout_model, layout_processor, line_predictions)
|
| 123 |
-
logger.debug(f"Análise de layout concluída. Número de elementos de layout: {len(layout_predictions[0]
|
| 124 |
-
bboxes = [pred
|
| 125 |
order_predictions = batch_ordering([image], [bboxes], order_model, order_processor)
|
| 126 |
logger.info("Workflow de ordem de leitura concluído com sucesso")
|
| 127 |
-
return
|
| 128 |
except Exception as e:
|
| 129 |
logger.error(f"Erro durante o workflow de ordem de leitura: {e}")
|
| 130 |
-
return
|
| 131 |
|
| 132 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 133 |
gr.Markdown("# Análise de Documentos com Surya")
|
|
|
|
| 15 |
from surya.model.ordering.processor import load_processor as load_order_processor
|
| 16 |
from surya.model.ordering.model import load_model as load_order_model
|
| 17 |
|
| 18 |
+
# Configuração do TorchDynamo
|
| 19 |
+
torch._dynamo.config.capture_scalar_outputs = True
|
| 20 |
+
|
| 21 |
+
# Configuração de logging
|
| 22 |
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
|
| 23 |
logger = logging.getLogger(__name__)
|
| 24 |
|
|
|
|
| 77 |
logger.error(f"Erro durante a compilação do modelo de reconhecimento: {e}")
|
| 78 |
logger.warning("Continuando sem compilação do modelo")
|
| 79 |
|
| 80 |
+
class CustomJSONEncoder(json.JSONEncoder):
|
| 81 |
+
def default(self, obj):
|
| 82 |
+
if hasattr(obj, '__dict__'):
|
| 83 |
+
return obj.__dict__
|
| 84 |
+
return super().default(obj)
|
| 85 |
+
|
| 86 |
+
def serialize_result(result):
|
| 87 |
+
return json.dumps(result, cls=CustomJSONEncoder, indent=2)
|
| 88 |
+
|
| 89 |
def ocr_workflow(image, langs):
|
| 90 |
logger.info(f"Iniciando workflow OCR com idiomas: {langs}")
|
| 91 |
try:
|
|
|
|
| 93 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 94 |
predictions = run_ocr([image], [langs.split(',')], det_model, det_processor, rec_model, rec_processor)
|
| 95 |
logger.info("Workflow OCR concluído com sucesso")
|
| 96 |
+
return serialize_result(predictions)
|
| 97 |
except Exception as e:
|
| 98 |
logger.error(f"Erro durante o workflow OCR: {e}")
|
| 99 |
+
return serialize_result({"error": str(e)})
|
| 100 |
|
| 101 |
def text_detection_workflow(image):
|
| 102 |
logger.info("Iniciando workflow de detecção de texto")
|
|
|
|
| 105 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 106 |
predictions = batch_text_detection([image], det_model, det_processor)
|
| 107 |
logger.info("Workflow de detecção de texto concluído com sucesso")
|
| 108 |
+
return serialize_result(predictions)
|
| 109 |
except Exception as e:
|
| 110 |
logger.error(f"Erro durante o workflow de detecção de texto: {e}")
|
| 111 |
+
return serialize_result({"error": str(e)})
|
| 112 |
|
| 113 |
def layout_analysis_workflow(image):
|
| 114 |
logger.info("Iniciando workflow de análise de layout")
|
|
|
|
| 116 |
image = Image.open(image.name)
|
| 117 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 118 |
line_predictions = batch_text_detection([image], det_model, det_processor)
|
| 119 |
+
logger.debug(f"Detecção de linhas concluída. Número de linhas detectadas: {len(line_predictions[0].bboxes)}")
|
| 120 |
layout_predictions = batch_layout_detection([image], layout_model, layout_processor, line_predictions)
|
| 121 |
logger.info("Workflow de análise de layout concluído com sucesso")
|
| 122 |
+
return serialize_result(layout_predictions)
|
| 123 |
except Exception as e:
|
| 124 |
logger.error(f"Erro durante o workflow de análise de layout: {e}")
|
| 125 |
+
return serialize_result({"error": str(e)})
|
| 126 |
|
| 127 |
def reading_order_workflow(image):
|
| 128 |
logger.info("Iniciando workflow de ordem de leitura")
|
|
|
|
| 130 |
image = Image.open(image.name)
|
| 131 |
logger.debug(f"Imagem carregada: {image.size}")
|
| 132 |
line_predictions = batch_text_detection([image], det_model, det_processor)
|
| 133 |
+
logger.debug(f"Detecção de linhas concluída. Número de linhas detectadas: {len(line_predictions[0].bboxes)}")
|
| 134 |
layout_predictions = batch_layout_detection([image], layout_model, layout_processor, line_predictions)
|
| 135 |
+
logger.debug(f"Análise de layout concluída. Número de elementos de layout: {len(layout_predictions[0].bboxes)}")
|
| 136 |
+
bboxes = [pred.bbox for pred in layout_predictions[0].bboxes]
|
| 137 |
order_predictions = batch_ordering([image], [bboxes], order_model, order_processor)
|
| 138 |
logger.info("Workflow de ordem de leitura concluído com sucesso")
|
| 139 |
+
return serialize_result(order_predictions)
|
| 140 |
except Exception as e:
|
| 141 |
logger.error(f"Erro durante o workflow de ordem de leitura: {e}")
|
| 142 |
+
return serialize_result({"error": str(e)})
|
| 143 |
|
| 144 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 145 |
gr.Markdown("# Análise de Documentos com Surya")
|