Spaces:
Sleeping
Sleeping
import gradio as gr | |
import cv2 | |
import numpy as np | |
import pandas as pd | |
from paddleocr import PaddleOCR | |
# Função OCR com PaddleOCR | |
def ocr_with_paddle(img): | |
ocr = PaddleOCR(lang='en', use_angle_cls=True) | |
result = ocr.ocr(img, cls=True) | |
finaltext = '' | |
for line in result: | |
for word in line: | |
finaltext += ' ' + word[1][0] | |
return finaltext | |
# Função para categorizar despesa (exemplo simples) | |
def categorize_expense(text): | |
if "gas" in text.lower(): | |
return "Combustível" | |
elif "restaurant" in text.lower(): | |
return "Alimentação" | |
elif "shopping" in text.lower(): | |
return "Compras" | |
else: | |
return "Outros" | |
# Função para processar a imagem e salvar as informações | |
def process_image(image, method): | |
if method == "PaddleOCR": | |
text = ocr_with_paddle(image) | |
else: | |
raise ValueError("Método OCR não suportado") | |
category = categorize_expense(text) | |
return f"Texto reconhecido: {text}\nCategoria: {category}" | |
# Função para adicionar projeto | |
def add_project(name, budget, items): | |
project = { | |
"name": name, | |
"budget": budget, | |
"items": items, | |
"spent": 0, | |
"balance": budget | |
} | |
projects.append(project) | |
return f"Projeto {name} adicionado com sucesso." | |
# Função para adicionar item ao projeto | |
def add_item_to_project(project_name, item_name, item_cost): | |
for project in projects: | |
if project["name"] == project_name: | |
project["items"].append({"name": item_name, "cost": item_cost}) | |
project["balance"] -= item_cost | |
return f"Item {item_name} adicionado ao projeto {project_name}. Saldo atual: {project['balance']}" | |
return "Projeto não encontrado." | |
# Inicializando a lista de projetos | |
projects = [] | |
# Interface Gradio | |
with gr.Blocks() as demo: | |
gr.Markdown("# Controle Financeiro com OCR") | |
with gr.Tab("OCR"): | |
img_input = gr.Image(label="Upload da imagem") | |
method_input = gr.Radio(["PaddleOCR"], value="PaddleOCR", label="Método OCR") | |
ocr_output = gr.Textbox(label="Resultado OCR") | |
process_button = gr.Button("Processar Imagem") | |
process_button.click(fn=process_image, inputs=[img_input, method_input], outputs=[ocr_output]) | |
with gr.Tab("Projetos"): | |
project_name_input = gr.Textbox(label="Nome do Projeto") | |
project_budget_input = gr.Number(label="Orçamento do Projeto") | |
project_items_input = gr.Textbox(label="Itens do Projeto (separados por vírgula e espaço)") | |
add_project_button = gr.Button("Adicionar Projeto") | |
add_project_button.click(fn=add_project, inputs=[project_name_input, project_budget_input, project_items_input], outputs=[gr.Textbox(label="Resultado")]) | |
project_select = gr.Dropdown(choices=[], label="Selecione o Projeto") | |
item_name_input = gr.Textbox(label="Nome do Item") | |
item_cost_input = gr.Number(label="Custo do Item") | |
add_item_button = gr.Button("Adicionar Item ao Projeto") | |
add_item_button.click(fn=add_item_to_project, inputs=[project_select, item_name_input, item_cost_input], outputs=[gr.Textbox(label="Resultado")]) | |
project_select.change(lambda: [p["name"] for p in projects], None, project_select) | |
# Iniciar a demo | |
demo.launch() |