
Guía Paso a Paso: Configurar Raspberry Pi Camera v2.1 y Streaming con Flask
Aprende a conectar y configurar la Raspberry Pi Camera Module v2.1 (sensor IMX219) en una Raspberry Pi 4 Model B para transmitir vídeo en tiempo real a través de un servidor web en Flask.
Paso 1: Conexión Física del Hardware
Importante: Realiza este proceso siempre con la Raspberry Pi totalmente apagada y desconectada de la corriente.
- Localiza el puerto CSI: Se encuentra entre el puerto micro-HDMI y la salida de audio de 3.5 mm.
- Abre el conector: Tira con cuidado del conector de plástico negro hacia arriba para desbloquearlo.
- Inserta el cable flex: Orienta los contactos metálicos del cable hacia el puerto micro-HDMI.
- Fija el cable: Presiona el conector de plástico hacia abajo hasta que quede bien sujeto.
Paso 2: Preparación del Entorno en la Raspberry Pi
Abre la terminal de tu Raspberry Pi (con Raspberry Pi OS Bullseye o Bookworm) y actualiza los paquetes del sistema e instala la librería oficial picamera2 junto a Flask:
Bash
# Actualizar el sistema
sudo apt update && sudo apt upgrade -y
# Instalar Python, Flask y Picamera2
sudo apt install -y python3-pip python3-flask python3-picamera2
Paso 3: Código del Servidor Web (app.py)
Crea un archivo llamado app.py en tu Raspberry Pi. Este script inicia un servidor Flask que transmite el vídeo en streaming MJPEG.
Solución al problema del tinte rosa: El sensor IMX219 (v2.1) cuenta con perfiles de calibración nativos en
libcamera. Incluimos untime.sleep(2)tras iniciar el sensor para darle tiempo al algoritmo de Auto White Balance (AWB) a calibrar el color antes de comenzar la transmisión.
Python
import io
import time
from flask import Flask, Response
from picamera2 import Picamera2
app = Flask(__name__)
# 1. Inicializar la cámara
picam = Picamera2()
# Configuración de previsualización (HD 720p)
config = picam.create_preview_configuration(main={"size": (1280, 720)})
picam.configure(config)
# 2. Iniciar la cámara
picam.start()
# 3. FIX COLOR ROSA: Pausa esencial para que el AWB (balance de blancos)
# y la exposición automática se calibren antes de transmitir
time.sleep(2)
def generate_frames():
while True:
stream = io.BytesIO()
picam.capture_file(stream, format='jpeg')
stream.seek(0)
frame = stream.read()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/')
def index():
return """
<html>
<head>
<title>Streaming IMX219 - MonteSteam</title>
<style>
body { background: #121212; color: white; text-align: center; font-family: sans-serif; }
img { width: 80%; max-width: 960px; height: auto; border-radius: 8px; margin-top: 20px; }
</style>
</head>
<body>
<h1>Cámara Raspberry Pi - En Vivo</h1>
<img src="/video_feed" />
</body>
</html>
"""
@app.route('/video_feed')
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
try:
app.run(host='0.0.0.0', port=5000, threaded=True)
finally:
# Libera la cámara correctamente al cerrar con Ctrl+C para evitar "Device or resource busy"
picam.stop()
picam.close()
Paso 4: Ejecutar y Probar el Streaming
- Ejecuta la aplicación ejecutando en la terminal:Bash
python3 app.py - Obtén la dirección IP de tu Raspberry Pi abriendo otra ventana de terminal y escribiendo:Bash
hostname -I - Accede desde tu navegador: Abre el navegador en cualquier ordenador, móvil o tablet conectado a la misma red e introduce:
http://<IP_DE_TU_RASPBERRY>:5000
¡Y listo! Ya deberías ver la imagen de la cámara v2.1 fluida y con los colores calibrados correctamente.
Guía Paso a Paso: Configurar Raspberry Pi Camera v2.1 y Streaming con Flask
Aprende a conectar y configurar la Raspberry Pi Camera Module v2.1 (sensor IMX219) en una Raspberry Pi 4 Model B para transmitir vídeo en tiempo real a través de un servidor web en Flask.
Paso 1: Conexión Física del Hardware
Importante: Realiza este proceso siempre con la Raspberry Pi totalmente apagada y desconectada de la corriente.
- Localiza el puerto CSI: Se encuentra entre el puerto micro-HDMI y la salida de audio de 3.5 mm.
- Abre el conector: Tira con cuidado del conector de plástico negro hacia arriba para desbloquearlo.
- Inserta el cable flex: Orienta los contactos metálicos del cable hacia el puerto micro-HDMI.
- Fija el cable: Presiona el conector de plástico hacia abajo hasta que quede bien sujeto.
Paso 2: Preparación del Entorno en la Raspberry Pi
Abre la terminal de tu Raspberry Pi (con Raspberry Pi OS Bullseye o Bookworm) y actualiza los paquetes del sistema e instala la librería oficial picamera2 junto a Flask:
Bash
# Actualizar el sistema
sudo apt update && sudo apt upgrade -y
# Instalar Python, Flask y Picamera2
sudo apt install -y python3-pip python3-flask python3-picamera2
Paso 3: Código del Servidor Web (app.py)
Crea un archivo llamado app.py en tu Raspberry Pi. Este script inicia un servidor Flask que transmite el vídeo en streaming MJPEG.
Solución al problema del tinte rosa: El sensor IMX219 (v2.1) cuenta con perfiles de calibración nativos en
libcamera. Incluimos untime.sleep(2)tras iniciar el sensor para darle tiempo al algoritmo de Auto White Balance (AWB) a calibrar el color antes de comenzar la transmisión.
Python
import io
import time
from flask import Flask, Response
from picamera2 import Picamera2
app = Flask(__name__)
# 1. Inicializar la cámara
picam = Picamera2()
# Configuración de previsualización (HD 720p)
config = picam.create_preview_configuration(main={"size": (1280, 720)})
picam.configure(config)
# 2. Iniciar la cámara
picam.start()
# 3. FIX COLOR ROSA: Pausa esencial para que el AWB (balance de blancos)
# y la exposición automática se calibren antes de transmitir
time.sleep(2)
def generate_frames():
while True:
stream = io.BytesIO()
picam.capture_file(stream, format='jpeg')
stream.seek(0)
frame = stream.read()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/')
def index():
return """
<html>
<head>
<title>Streaming IMX219 - MonteSteam</title>
<style>
body { background: #121212; color: white; text-align: center; font-family: sans-serif; }
img { width: 80%; max-width: 960px; height: auto; border-radius: 8px; margin-top: 20px; }
</style>
</head>
<body>
<h1>Cámara Raspberry Pi - En Vivo</h1>
<img src="/video_feed" />
</body>
</html>
"""
@app.route('/video_feed')
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
try:
app.run(host='0.0.0.0', port=5000, threaded=True)
finally:
# Libera la cámara correctamente al cerrar con Ctrl+C para evitar "Device or resource busy"
picam.stop()
picam.close()
Paso 4: Ejecutar y Probar el Streaming
- Ejecuta la aplicación ejecutando en la terminal:Bash
python3 app.py - Obtén la dirección IP de tu Raspberry Pi abriendo otra ventana de terminal y escribiendo:Bash
hostname -I - Accede desde tu navegador: Abre el navegador en cualquier ordenador, móvil o tablet conectado a la misma red e introduce:
http://<IP_DE_TU_RASPBERRY>:5000
¡Y listo! Ya deberías ver la imagen de la cámara v2.1 fluida y con los colores calibrados correctamente.


Importante: Realiza este proceso siempre con la Raspberry Pi totalmente apagada y desconectada de la corriente.
Solución al problema del tinte rosa: El sensor IMX219 (v2.1) cuenta con perfiles de calibración nativos en 