Nota
¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirse?
Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Previews exclusivos: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones y sorteos festivos: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
3.1.2 Módulo de Video
Introducción
Además de tomar fotos, el módulo de cámara también puede usarse para grabar videos.
Componentes necesarios
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
Procedimientos experimentales
Paso 1: Accede al escritorio de Raspberry Pi. Puede que necesites una pantalla para una mejor experiencia, consulta: Conecta tu Raspberry Pi. O accede al escritorio de Raspberry Pi de forma remota, para un tutorial detallado, consulta Escritorio Remoto.
Paso 2: Abre un terminal y accede a la carpeta del código.
cd ~/raphael-kit/python/
Paso 3: Ejecuta el código.
sudo python3 3.1.2_VideoModule.py
Ejecuta el código para comenzar la grabación. Presiona Ctrl+C para terminar la grabación. Nombra el video my_video.h264 y almacénalo en el directorio ~.
Nota
También puedes abrir 3.1.2_VideoModule.py en la ruta ~/raphael-kit/python/ con un IDE de Python, hacer clic en el botón de Ejecutar para ejecutar el código y detenerlo con el botón de Detener.
Si deseas enviar fotos a tu PC, consulta Software FileZilla.
#!/usr/bin/env python3
import time
from picamera2 import Picamera2, Preview
from picamera2.encoders import H264Encoder
from picamera2.outputs import FfmpegOutput
import os
# Get the current user's login name
user = os.getlogin()
# Get the path to the user's home directory
user_home = os.path.expanduser(f'~{user}')
# Create a Picamera2 instance
camera = Picamera2()
# Retrieve the default preview configuration
preview_config = camera.preview_configuration
try:
# Configure preview size and format
preview_config.size = (800, 600)
preview_config.format = 'XRGB8888'
# Start the camera preview in QTGL mode
camera.start_preview(Preview.QTGL)
# Define video configuration with size, frame rate, and buffer count
conf = {'size': (800, 600)}
controls = {'FrameRate': 40}
config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12)
# Create a video encoder with a specified bitrate
encoder = H264Encoder(bitrate=10000000)
# Define output file for the video
output = FfmpegOutput(f'{user_home}/my_video.mp4')
# Configure and start recording
camera.configure(config)
camera.start_recording(encoder, output)
# Record for 10 seconds
time.sleep(10)
# Stop the recording
camera.stop_recording()
except KeyboardInterrupt:
# Stop the camera preview if a KeyboardInterrupt (e.g., Ctrl+C) occurs
camera.stop_preview()
pass
Explicación del código
Importa las bibliotecas y clases necesarias. La biblioteca
picamera2se utiliza para controlar la cámara,H264Encoderpara la codificación de video yFfmpegOutputpara definir el archivo de salida del video.#!/usr/bin/env python3 import time from picamera2 import Picamera2, Preview from picamera2.encoders import H264Encoder from picamera2.outputs import FfmpegOutput import os
Obtiene el nombre de inicio de sesión del usuario actual y la ruta a su directorio personal.
# Obtener el nombre de usuario actual user = os.getlogin() # Obtener la ruta al directorio personal del usuario user_home = os.path.expanduser(f'~{user}')
Crea una instancia de la clase
Picamera2y recupera la configuración predeterminada de vista previa.# Crear una instancia de Picamera2 camera = Picamera2() # Recuperar la configuración predeterminada de la vista previa preview_config = camera.preview_configuration
Establece el tamaño y el formato de la vista previa de la cámara. El tamaño se establece en 800x600 píxeles y el formato en
XRGB8888.try: # Configurar tamaño y formato de la vista previa preview_config.size = (800, 600) preview_config.format = 'XRGB8888'
Inicia la vista previa de la cámara en modo QTGL, un modo gráfico de visualización.
try: ... # Iniciar la vista previa en modo QTGL camera.start_preview(Preview.QTGL) ...
Define la configuración de video con un tamaño de cuadro de 800x600 píxeles y una tasa de 40 fotogramas por segundo.
try: ... # Definir configuración de video con tamaño, tasa de fotogramas y número de búferes conf = {'size': (800, 600)} controls = {'FrameRate': 40} config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12) ...
Crea un codificador de video con una tasa de bits de 10 Mbps usando el formato H.264. Define la ruta del archivo de salida, guardándolo como
my_video.mp4en el directorio personal del usuario.try: ... # Crear un codificador de video con una tasa de bits específica encoder = H264Encoder(bitrate=10000000) # Definir archivo de salida del video output = FfmpegOutput(f'{user_home}/my_video.mp4') ...
Configura la cámara con los ajustes de video definidos, inicia la grabación usando el codificador y el archivo de salida, graba durante 10 segundos y luego detiene la grabación.
try: ... # Configurar e iniciar la grabación camera.configure(config) camera.start_recording(encoder, output) # Grabar durante 10 segundos time.sleep(10) # Detener la grabación camera.stop_recording()
Este bloque de código maneja una interrupción de teclado (como Ctrl+C) deteniendo la vista previa de la cámara. La instrucción
passse utiliza para manejar la excepción sin realizar acciones adicionales.except KeyboardInterrupt: # Detener la vista previa si ocurre un KeyboardInterrupt (ej., Ctrl+C) camera.stop_preview() pass