
Proyecto ATKINS: distinguir imágenes reales de generadas por IA
🚀 Parte 1: Guía de Instalación (Nivel 1º Bachillerato)
Esta guía explica paso a paso cómo preparar tu ordenador, instalar las librerías necesarias y poner en marcha el experimento interactivo en tu navegador.
📋 Requisitos Previos
Antes de empezar, asegúrate de tener instalado:
- Python (Versión 3.10 o superior): Disponible en python.org. (Durante la instalación en Windows, marca la casilla “Add Python to PATH”).
- Visual Studio Code (o cualquier editor de código utilizado en clase).
🛠️ Paso 1: Crear la estructura de carpetas
Abre la terminal (o símbolo del sistema) y crea la carpeta para el proyecto. La estructura debe quedar exactamente así para que el programa encuentre las imágenes:
Plaintext
proyecto-atkins/
│
├── dataset_base/
│ ├── reales/ <-- Fotos de cámaras reales (.jpg o .png)
│ ├── ia_local/ <-- Imágenes de IA básica/local (SD-Turbo)
│ └── ia_nube/ <-- Imágenes de IA avanzada (Midjourney, FLUX, etc.)
│
└── app_atkins.py <-- Código principal de Python
💡 Nota: Guarda al menos 10 o 15 imágenes en cada una de las tres carpetas dentro de
dataset_basepara que el detector tenga suficientes datos.
📦 Paso 2: Crear el entorno virtual e instalar librerías
Abre la terminal dentro de la carpeta proyecto-atkins:
- Crear y activar un entorno virtual:
- En Windows:
Bashpython -m venv venv venv\Scripts\activate - En Mac / Linux:
Bashpython3 -m venv venv source venv/bin/activate
(venv)al principio de la línea de comandos, indicando que el entorno está activo). - En Windows:
- Instalar las librerías necesarias:
Ejecuta el siguiente comando:
Bashpip install fastapi uvicorn opencv-python scikit-learn numpy pillow python-multipart¿Qué hace cada librería?fastapiyuvicorn: Crean la página web y el servidor local.opencv-pythonypillow: Analizan y miden los píxeles de las imágenes.scikit-learnynumpy: Ejecutan el algoritmo de Inteligencia Artificial (Random Forest) y los cálculos matemáticos.python-multipart: Permite subir fotos a la web desde tu ordenador.
📝 Paso 3: Guardar el código
Crea el archivo app_atkins.py dentro de la carpeta proyecto-atkins, pega el código corregido de la aplicación y guarda los cambios (Ctrl + S / Cmd + S).
⚡ Paso 4: Arrancar la aplicación
Con el entorno virtual activo, ejecuta en la terminal:
Bash
python app_atkins.py
La terminal mostrará un mensaje confirmando que el servidor está en ejecución:
Plaintext
INFO: Started server process
INFO: Uvicorn running on http://0.0.0.0:8079 (Press CTRL+C to quit)
🌐 Paso 5: Abrir la experiencia interactiva
- Abre tu navegador web (Chrome, Firefox, Edge, Safari).
- Entra en la dirección:
http://localhost:8079 - Realiza el Paso 1 (Entrenar), el Paso 2 (Probar la trampa con la IA Nube) y prueba subir tus propias imágenes en la Fase 3.
⚠️ Resolución de errores comunes
- Error:
ModuleNotFoundError: No module named 'multipart'- Solución: Falta la librería de subida de archivos. Ejecuta
pip install python-multipart.
- Solución: Falta la librería de subida de archivos. Ejecuta
- Error:
No hay imágenes en dataset_base/...- Solución: Comprueba que las carpetas
reales,ia_localeia_nubecontengan fotos en formato.jpgo.png.
- Solución: Comprueba que las carpetas
- Detener el servidor: Presiona
Ctrl + Cen la terminal.

🧠 Parte 2: Explicación y Fundamentos Teóricos del Proyecto ATKINS
¿Cómo “ve” una Inteligencia Artificial y por qué es tan fácil engañarla?
En la era del contenido sintético, surge una pregunta clave: ¿Es posible construir un detector infalible de imágenes generadas por IA?
El Proyecto ATKINS demuestra de forma práctica un fenómeno crucial en el aprendizaje automático: el Desplazamiento de Dominio (Domain Shift). A través de este experimento, se pone al descubierto que la visión por computador no “entiende” conceptos visuales como un ser humano, sino que clasifica patrones estadísticos numéricos.
📁 Estructura del Experimento: Los 3 Paquetes de Imágenes
Para evaluar el modelo, el dataset se divide en tres categorías:
- Paquete 1: Fotos Reales (15 imágenes): Fotografías capturadas con cámaras físicas. Tienen ruido térmico, imperfecciones ópticas, iluminación natural y grano del sensor.
- Paquete 2: IA Local (15 imágenes): Imágenes generadas en entorno local con modelos veloces (como Stable Diffusion Turbo). Contienen patrones matemáticos repetitivos en sus bordes y frecuencias de color.
- Paquete 3: IA de la Nube (15 imágenes): Imágenes hiperrealistas producidas por modelos de frontera avanzados (FLUX.1, Midjourney v6). Sus texturas y detalles ópticos son indistinguibles de una foto real para el ojo humano.
🧪 El Experimento Guiado Paso a Paso
El recorrido interactivo demuestra el proceso de aprendizaje a través de tres fases:
Paso 1: Entrenamiento en Entorno Controlado
El sistema analiza únicamente el Paquete 1 (Reales) y el Paquete 2 (IA Local). Un modelo de Random Forest (Bosque Aleatorio) memoriza sus diferencias numéricas.
- Resultado: El modelo alcanza cerca del 100% de precisión distinguiendo estas dos carpetas.
Paso 2: La Trampa del Desplazamiento de Dominio
Se le presenta al detector el Paquete 3 (IA de la Nube), imágenes de alta calidad que nunca ha visto.
- El fallo: El detector clasifica la gran mayoría de estas imágenes generadas por IA como “REALES”.
- Causa: El detector no reconoce qué es un objeto o una persona; solo detectó las imprecisiones de compresión de la IA local (Paquete 2). Al evaluar las imágenes de la Nube —con mayor definición y sin dichos defectos— concluye matemáticamente que pertenecen al mundo real.
Paso 3: Prueba Libre (Sandbox)
Permite subir cualquier archivo desde el navegador para recibir un diagnóstico en tiempo real con el porcentaje de confianza del algoritmo.
🛠️ Arquitectura Técnica
El sistema combina procesamiento de visión artificial con un servidor web asíncrono:
- Extracción de Características Visuales (
OpenCV):Cada imagen se convierte en un vector numérico de métricas clave:- Varianza del Laplaciano: Mide la nitidez y el enfoque global.
- Estadísticos RGB: Media y desviación estándar de los canales de color.
- Densidad de Bordes (Canny): Mide la densidad de la textura y la presencia de bordes duros.
laplacian_var = cv2.Laplacian(gray, cv2.CV_64F).var() canny_density = np.sum(cv2.Canny(gray, 100, 200) > 0) / (512 * 512) - Clasificación y Servidor (
FastAPI+Scikit-Learn):- Backend:
FastAPIgestiona los endpoints asíncronos (/v1/train,/v1/evaluate_nube,/v1/predict). - Pipeline de ML: Se utiliza un
StandardScalerjunto a unRandomForestClassifierde 50 árboles. - Frontend: Interfaz estática (HTML5/CSS3/JavaScript) que realiza peticiones asíncronas y renderiza los resultados en pantalla.
- Backend:
Los detectores basados en características superficiales no identifican la autenticidad real de una imagen, sino las huellas específicas del modelo concreto con el que fueron entrenados. A medida que los generadores de IA evolucionan y corrigen sus artefactos visuales, los clasificadores entrenados con modelos anteriores pierden efectividad.



