Sistema inteligente de reconhecimento automático de placas veiculares com interface gráfica moderna, integrado ao Google Sheets para validação de veículos autorizados em tempo real.
Este sistema utiliza Computer Vision e OCR (Optical Character Recognition) para:
- Detectar e extrair automaticamente números de placas de veículos em imagens
- Validar se a placa reconhecida está autorizada através de consulta ao Google Sheets
- Apresentar resultado visual através de interface gráfica moderna e intuitiva
- Processar imagens em diversos formatos (JPG, JPEG, PNG, BMP, WEBP)
- Controle de acesso em condomínios, empresas e estacionamentos
- Monitoramento de frotas autorizadas com controle de status
- Segurança predial com validação automática de veículos ativos
- Gestão de estacionamentos com controle de inadimplência
- Administração condominial com bloqueio automático de inadimplentes
- Python 3.8+ - Linguagem principal
- OpenCV - Processamento de imagens e computer vision
- Pytesseract - OCR para extração de texto das placas
- NumPy - Operações matemáticas e manipulação de arrays
- Tkinter - Interface gráfica nativa do Python
- TTK - Componentes modernos para interface
- Google Sheets API - Armazenamento e consulta de placas autorizadas
- gspread - Cliente Python para Google Sheets
- oauth2client - Autenticação com Google APIs
- Pillow (PIL) - Manipulação adicional de imagens
- Colorama - Formatação colorida de saídas no terminal
plaque-detection-python-computer-vision/
├── README.md # Documentação do projeto
├── requirements.txt # Dependências Python
├── LICENSE # Licença do projeto
├── .gitignore # Arquivos ignorados pelo Git
├── venv/ # Ambiente virtual Python
└── src/ # Código fonte
├── app_gui.py # Aplicação principal com interface gráfica
├── credenciais.json # Credenciais do Google Sheets (não versionado)
└── lib/ # Bibliotecas auxiliares
├── filters.py # Filtros de processamento de imagem
└── format_output.py # Formatação de saídas
git clone https://github.com/felipedpaula/plaque-detection-python-computer-vision.git
cd plaque-detection-python-computer-visionpython3 -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windowspip install -r requirements.txtsudo apt-get update
sudo apt-get install tesseract-ocr
sudo apt-get install libtesseract-devbrew install tesseract- Baixe o instalador em: https://github.com/UB-Mannheim/tesseract/wiki
- Instale e adicione ao PATH do sistema
- Configure a variável de ambiente
TESSERACT_CMD
- Acesse Google Cloud Console
- Crie um novo projeto
- Ative as APIs: Google Sheets API e Google Drive API
- Vá em IAM & Admin > Service Accounts
- Clique em Create Service Account
- Preencha os dados e clique em Create and Continue
- Em Keys, clique em Add Key > Create New Key
- Escolha formato JSON e baixe o arquivo
- Renomeie o arquivo baixado para
credenciais.json - Mova para a pasta
src/do projeto - No Google Sheets, compartilhe sua planilha com o email da conta de serviço
Sua planilha deve ter a seguinte estrutura:
| A (id) | B (placa) | C (marca) | D (modelo) | E (responsavel) | F (status) |
|--------|------------|---------------|------------|------------------|----------------|
| 1 | ABC1A23 | Ford | Fiesta | João Silva | ativo |
| 2 | XYZ9B87 | Chevrolet | Onix | Maria Oliveira | ativo |
| 3 | JKL2C34 | Toyota | Corolla | Pedro Andrade | inadiplente |
| 4 | RST7D56 | Honda | Civic | Ana Souza | ativo |
| 5 | MNO5E67 | Hyundai | HB20 | Lucas Pereira | ativo |
| 6 | FJB4E12 | Nissan | Kicks | Sofia Costa | inadiplente |
| 7 | PLA0000 | Jeep | Compass | Bruno Almeida | ativo |
| 8 | BRAOS17 | Volkswagen | Polo | Carolina Lima | ativo |
| 9 | FUN-0972 | Fiat | Argo | Fernanda Santos | inadiplente |
| 10 | BRA2E19 | Renault | Kwid | Rafael Mendes | ativo |
Importante:
- As placas devem estar na coluna B (segunda coluna)
- O sistema verifica apenas veículos com status "ativo" para autorização
- Placas com status "inadiplente" são automaticamente negadas
cd src/
source ../venv/bin/activate
python app_gui.py- Header com título do sistema
- Card de upload para seleção de imagem
- Área de análise com botão de processamento
- Card de resultado com status da validação
- Selecionar Imagem: Clique em "SELECIONAR IMAGEM" e escolha uma foto da placa
- Analisar: Clique em "ANALISAR PLACA" para iniciar o processamento
- Resultado: Visualize se a placa está AUTORIZADA ou NÃO AUTORIZADA
- ✅ AUTORIZADA: Placa encontrada na lista do Google Sheets com status "ativo"
- ❌ NÃO AUTORIZADA: Placa não encontrada na lista ou com status "inadiplente"
⚠️ ERRO: Problemas na leitura da imagem ou OCR
graph TD
A[Usuário seleciona imagem] --> B[Carregamento com OpenCV]
B --> C[Aplicação de filtros]
C --> D[Conversão para escala de cinza]
D --> E[Aplicação de threshold]
E --> F[OCR com Pytesseract]
F --> G[Limpeza do texto extraído]
G --> H[Consulta ao Google Sheets]
H --> I[Validação da placa]
I --> J[Exibição do resultado]
- Gerencia toda a interface gráfica
- Controla o fluxo de processamento
- Integra com Google Sheets
def get_grayscale(image):
"""Converte imagem para escala de cinza"""
def thresholding(image):
"""Aplica threshold binário para melhorar OCR"""def scan_plate(image):
"""Extrai texto da placa usando Pytesseract"""
def validate_plate(plate_number):
"""Valida placa contra lista do Google Sheets (apenas status 'ativo')"""- Extração: OCR extrai texto da placa da imagem
- Normalização: Remove hífens, espaços e converte para maiúsculas
- Consulta: Busca a placa na planilha do Google Sheets
- Verificação de Status: Aceita apenas veículos com status "ativo"
- Resultado: Retorna AUTORIZADA (ativo) ou NÃO AUTORIZADA (inexistente/inadiplente)
- Blacklist: Remove caracteres minúsculos e símbolos
- PSM 6: Modo de segmentação para bloco de texto uniforme
- Limpeza: Remove tudo exceto letras maiúsculas e números
- Header: Título e subtítulo do sistema
- Upload Card: Área de seleção de imagem com preview
- Analysis Card: Botão de processamento com barra de progresso
- Result Card: Exibição do resultado da análise
opencv-python==4.8.1.78
pytesseract==0.3.10
gspread==5.11.3
oauth2client==4.1.3
numpy==1.24.3
Pillow==10.0.1
colorama==0.4.6credenciais.jsonestá no.gitignore- Não commitar chaves de API
- Usar conta de serviço com permissões mínimas
- Ambiente virtual isolado
- Validação de entrada de dados
- Tratamento de exceções
- Logs de erro estruturados
# Certifique-se de executar da pasta src/
cd src/
python app_gui.py# Ubuntu/Debian
sudo apt-get install tesseract-ocr
# Verificar instalação
tesseract --version- Verifique se
credenciais.jsonestá emsrc/ - Confirme se as APIs estão ativadas
- Verifique se a planilha foi compartilhada com a conta de serviço
# Ativar ambiente virtual
source venv/bin/activate
# Verificar permissões
ls -la src/- Fork o projeto
- Crie uma branch:
git checkout -b feature/nova-funcionalidade - Commit:
git commit -m 'Adiciona nova funcionalidade' - Push:
git push origin feature/nova-funcionalidade - Abra um Pull Request
Felipe Paula
- GitHub: @felipedpaula
- LinkedIn: Felipe Paula