Nota
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto 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.
Preestrenos exclusivos: Accede anticipadamente a anuncios de nuevos productos y adelantos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
Promociones festivas y sorteos: 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 Requeridos
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Raphael Kit |
337 |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
Procedimientos Experimentales
Paso 1: Entra en el 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 una terminal y accede a la carpeta del código.
cd ~/raphael-kit/python-pi5
Paso 3: Ejecuta.
sudo python3 3.1.2_VideoModule_zero.py
Ejecuta el código para comenzar a grabar. Presiona Ctrl+C para finalizar la grabación. Nombra el video my_video.h264 y guárdalo en el directorio ~.
Nota
También puedes abrir 3.1.2_PhotographModule_zero.py en la ruta ~/raphael-kit/python-pi5 con un IDE de Python, haz clic en el botón de ejecutar para iniciar y detén el código con el botón de detener.
Si deseas enviar fotos a tu PC, consulta Software FileZilla.
Advertencia
Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.
Código
#!/usr/bin/env python3
import time
from picamera2 import Picamera2, Preview
from picamera2.encoders import H264Encoder
from picamera2.outputs import FfmpegOutput
import os
# Obtener el nombre de usuario actual
user = os.getlogin()
# Obtener la ruta del directorio home del usuario
user_home = os.path.expanduser(f'~{user}')
# Crear una instancia de Picamera2
camera = Picamera2()
# Recuperar la configuración de vista previa predeterminada
preview_config = camera.preview_configuration
try:
# Configurar tamaño y formato de vista previa
preview_config.size = (800, 600)
preview_config.format = 'XRGB8888'
# Iniciar la vista previa de la cámara en modo QTGL
camera.start_preview(Preview.QTGL)
# Definir configuración de video con tamaño, velocidad de fotogramas y recuento de búfer
conf = {'size': (800, 600)}
controls = {'FrameRate': 40}
config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12)
# Crear un codificador de video con una tasa de bits especificada
encoder = H264Encoder(bitrate=10000000)
# Definir el archivo de salida para el video
output = FfmpegOutput(f'{user_home}/my_video.mp4')
# 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()
except KeyboardInterrupt:
# Detener la vista previa de la cámara si ocurre una interrupción de teclado (e.g., Ctrl+C)
camera.stop_preview()
pass
Explicación del Código
Importa las bibliotecas y clases necesarias. La biblioteca
picamera2se usa para el control de 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
Recupera el nombre de usuario actual y la ruta a su directorio home.
# Obtener el nombre de usuario actual user = os.getlogin() # Obtener la ruta del directorio home del usuario user_home = os.path.expanduser(f'~{user}')
Crea una instancia de la clase
Picamera2y recupera la configuración de vista previa predeterminada.# Crear una instancia de Picamera2 camera = Picamera2() # Recuperar la configuración de vista previa predeterminada preview_config = camera.preview_configuration
Establece el tamaño y formato de la vista previa de la cámara. El tamaño se establece en 800x600 píxeles, y el formato se establece en
XRGB8888.try: # Configurar tamaño y formato de vista previa preview_config.size = (800, 600) preview_config.format = 'XRGB8888'
Inicia la vista previa de la cámara en modo QTGL, un modo de vista previa gráfica.
try: ... # Iniciar la vista previa de la cámara en modo QTGL camera.start_preview(Preview.QTGL) ...
Define la configuración del video con un tamaño de cuadro de 800x600 píxeles y una velocidad de fotogramas de 40 cuadros por segundo.
try: ... # Definir configuración de video con tamaño, velocidad de fotogramas y recuento de búfer 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 especificada de 10 Mbps, usando el formato de codificación H.264. Configura la ruta del archivo de salida para el video, guardándolo como
my_video.mp4en el directorio home del usuario.try: ... # Crear un codificador de video con una tasa de bits especificada encoder = H264Encoder(bitrate=10000000) # Definir el archivo de salida para el 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 especificados, 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 declaración
passse usa para manejar la excepción sin hacer nada más.except KeyboardInterrupt: # Detener la vista previa de la cámara si ocurre una interrupción de teclado (e.g., Ctrl+C) camera.stop_preview() pass