Aplicativo Android para controle de despesas com leitura de recibos via câmera e OCR.
O controle financeiro pessoal é um desafio recorrente. Muitas pessoas acumulam recibos físicos sem registrar as despesas, perdendo o controle dos gastos. O ExpenseCam resolve isso permitindo que o usuário simplesmente fotografe um recibo e tenha as informações extraídas automaticamente.
- Captura de recibos via câmera — utiliza o sensor de câmera do dispositivo para fotografar recibos e notas fiscais
- OCR (Reconhecimento Óptico de Caracteres) — extrai automaticamente o valor e descrição do recibo usando Google ML Kit Text Recognition
- Seleção de imagem da galeria — alternativa para usar fotos já existentes
- Cadastro manual — permite editar/corrigir os dados extraídos ou cadastrar despesas manualmente
- Categorização — organiza despesas por categorias (Alimentação, Transporte, Saúde, etc.)
- Lista de despesas — exibe todas as despesas registradas com total acumulado
- Detalhes da despesa — visualiza informações completas, imagem do recibo e texto OCR reconhecido
- Exclusão por swipe — remove despesas deslizando o card para a esquerda
- Armazenamento local — persiste dados usando Room Database (SQLite)
- Material Design 3 — interface moderna seguindo as diretrizes do Material Design
O projeto segue o padrão MVVM (Model-View-ViewModel) com as seguintes camadas:
com.example.expensecam/
├── data/ # Camada de dados
│ ├── Expense.kt # Entidade Room (modelo de dados)
│ ├── ExpenseDao.kt # Data Access Object (consultas SQL)
│ ├── ExpenseDatabase.kt # Banco de dados Room (SQLite)
│ └── ExpenseRepository.kt # Repositório (abstração de acesso a dados)
├── navigation/ # Navegação
│ ├── NavRoutes.kt # Definição das rotas
│ └── ExpenseCamNavGraph.kt # Grafo de navegação Compose
├── ocr/ # Processamento OCR
│ └── OcrParser.kt # Parser de texto OCR para extrair valores e descrições
├── ui/
│ ├── screens/ # Telas do aplicativo
│ │ ├── ExpenseListScreen.kt # Lista de despesas (tela principal)
│ │ ├── AddExpenseScreen.kt # Adicionar nova despesa + câmera
│ │ └── ExpenseDetailScreen.kt # Detalhes de uma despesa
│ └── theme/ # Tema Material Design
│ ├── Color.kt
│ ├── Theme.kt
│ └── Type.kt
├── viewmodel/ # ViewModels
│ ├── ExpenseListViewModel.kt
│ ├── AddExpenseViewModel.kt
│ └── ExpenseDetailViewModel.kt
├── ExpenseCamApplication.kt # Application class
└── MainActivity.kt # Activity principal
- O app deve permitir capturar fotos de recibos usando a câmera do dispositivo
- O app deve processar a imagem capturada com OCR para extrair texto
- O app deve identificar automaticamente valores monetários no texto extraído
- O app deve permitir editar os dados extraídos antes de salvar
- O app deve salvar despesas com descrição, valor, categoria, data e imagem
- O app deve exibir a lista de todas as despesas registradas
- O app deve exibir o valor total das despesas
- O app deve permitir excluir despesas
- O app deve permitir visualizar detalhes de cada despesa
- Interface seguindo Material Design 3
- Armazenamento local com Room Database
- Compatível com Android 7.0+ (API 24)
- Tempo de resposta do OCR inferior a 5 segundos
- Suporte a formatos monetários brasileiro (R$ 1.234,56) e americano ($1,234.56)
| Tecnologia | Finalidade |
|---|---|
| Kotlin | Linguagem de programação |
| Jetpack Compose | Framework de UI declarativa |
| Material Design 3 | Sistema de design |
| Room Database | Persistência local (SQLite) |
| CameraX | Acesso à câmera do dispositivo |
| Google ML Kit | Reconhecimento de texto (OCR) |
| Jetpack Navigation | Navegação entre telas |
| Coil | Carregamento de imagens |
| Kotlin Coroutines + Flow | Programação assíncrona e reativa |
Câmera — O app utiliza o sensor de câmera do dispositivo Android através da API CameraX para capturar imagens de recibos. A imagem é então processada localmente pelo Google ML Kit Text Recognition para extrair o texto via OCR.
- Clone o repositório
- Abra o projeto no Android Studio (Ladybug ou superior)
- Conecte um dispositivo Android ou use um emulador (API 24+)
- Execute o app (Run > Run 'app')
- Android Studio Ladybug ou superior
- JDK 11+
- Android SDK 36
- Dispositivo/emulador com Android 7.0+ (API 24)