File size: 3,351 Bytes
d639a63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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()