# ControlPatente AI - Sistema de Reconocimiento de Patentes (ALPR)

Sistema de seguridad y control de acceso vehicular basado en Inteligencia Artificial. Utiliza reconocimiento de patentes (ALPR/LPR) en tiempo real mediante cámaras web, procesando la información con Docker, Node.js, Python y React.

## 🚀 Características

- **Detección en Tiempo Real:** Identificación instantánea de patentes vehiculares usando EasyOCR/OpenCV.
- **Validación de Acceso:** Comparación automática con base de datos de vehículos registrados (Permitidos/Denegados).
- **Video Streaming:** Visualización en vivo de la cámara en el dashboard.
- **Dashboard Interactivo:** Interfaz web moderna para monitoreo y gestión de patentes.
- **Filtro Inteligente:** Optimizado para patentes chilenas (Formatos: AABB12 y BBBB12).

## 🛠 Arquitectura

El proyecto utiliza una arquitectura de microservicios con Docker:

- **Frontend:** React + Vite + TailwindCSS (Puerto 5173)
- **Backend:** Node.js + Express + Socket.IO (Puerto 3000)
- **Database:** PostgreSQL (Puerto 5432)
- **ALPR Service:** Python + Flask + OpenCV + EasyOCR (Puerto 5001)

## 📋 Prerrequisitos

- [Docker Desktop](https://www.docker.com/products/docker-desktop/) instalado y corriendo.
- (Solo para macOS/Desarrollo Local) Python 3.9+ instalado en tu máquina.

## 🔧 Instalación y Puesta en Marcha

### 1. Clonar el Repositorio

```bash
git clone https://gitea.v1ru5.cl/raven/ControlPatente.git
cd ControlPatente
```

### 2. Ejecutar con Docker Compose

Para levantar la base de datos, el backend y el frontend:

```bash
docker compose up -d
```

> **Nota:** La primera vez puede tardar unos minutos en construir las imágenes.

### 3. Configuración de la Cámara (Importante)

Debido a restricciones de seguridad en Docker (especialmente en macOS), el acceso directo a la webcam USB desde el contenedor suele fallar. Se recomienda ejecutar el servicio de reconocimiento (**ALPR**) localmente.

#### Opción A: Ejecución Híbrida (Recomendada para macOS)

Mantén los contenedores de Docker corriendo (Backend, DB, Frontend) y ejecuta el script de Python en tu terminal local:

1.  Ve a la carpeta del servicio ALPR:
    ```bash
    cd alpr-service
    ```
2.  Instala las dependencias:
    ```bash
    pip3 install -r requirements.txt
    pip3 install flask flask-cors
    ```
3.  Ejecuta el servicio:
    ```bash
    # Asegura que el backend sea alcanzable en localhost
    export BACKEND_URL="http://localhost:3000"
    python3 main.py
    ```

El script pedirá permisos de cámara. Una vez otorgados, verás el video en el Dashboard.

#### Opción B: Ejecución Full Docker (Linux / Raspberry Pi)

En sistemas Linux nativos donde se pueden mapear dispositivos (ej. `/dev/video0`), simplemente descomenta la sección `devices` en `docker-compose.yml` y todo correrá dentro de Docker.

## 🖥 Uso del Sistema

1.  **Dashboard:** Abre tu navegador en [http://localhost:5173](http://localhost:5173).
2.  **Registro:** Haz clic en **"+ Register New Plate"** para agregar vehículos autorizados.
3.  **Monitoreo:** Apunta tu cámara a una patente.
    *   Si está registrada: Verás estado **GRANTED** (Verde).
    *   Si no existe: Verás estado **UNKNOWN/DENIED** (Rojo/Gris).

## 🐛 Solución de Problemas Comunes

**1. Error "Table public.Plate does not exist" (Error 500)**
Si al agregar una patente da error 500, significa que la base de datos no se inicializó. Ejecuta:
```bash
docker compose exec backend npx prisma migrate dev --name init
```

**2. La cámara no abre en macOS**
Asegúrate de ejecutar `main.py` desde una terminal con permisos (VS Code o Terminal.app). Revisa en *Preferencias del Sistema > Privacidad y Seguridad > Cámara*.

**3. "Network Error" en el Dashboard**
Verifica que el Backend esté corriendo (`docker compose ps`) y que no haya errores en los logs (`docker compose logs backend`).
