Cámara - RoboticsURJC/tfg-jlopez GitHub Wiki
Parámetros técnicos Documentación Cámara
SOFTWARE
Dependiendo del sistema operativo que se esté usando, se puede usar la cámara de una forma u otra:
SISTEMA OPERATIVO BUSTER
Es necesario habilitarla desde Raspberry Pi Configuration/Interfaces y pulsar en Enable. Seguidamente reinicia la placa.
Un código de ejemplo que permite su funcionamiento:
import numpy as np
import cv2, time
# Crea una ventana
cv2.namedWindow("Image Feed")
# Mueve la ventana a una posición en concreto de la pantalla
cv2.moveWindow("Image Feed", 159, -25)
# Inicializa la cámara
cap = cv2.VideoCapture(0)
# Setup camera: para agilizar el cómputo
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
cap.set(cv2.CAP_PROP_FPS,40)
# Creo una marca de tiempo
prev_frame_time = time.time()
# Inicializan los contadores de las imágenes y los frames
cal_image_count = 0
frame_count = 0
while True:
# Lee un frame de la cámara
ret,frame = cap.read()
# Al haber detectado un frame, se aumenta su contador
frame_count += 1
# Cada 30 frames, se guarda una imagen y se inicializa
# el contador de frames de nuevo a 0 y se incrementa el contador de imágenes
if frame_count == 30:
cv2.imwrite("cal_image_" + str(cal_image_count) + ".jpg", frame)
cal_image_count += 1
frame_count = 0
# Se calculan los FPS y se muestran en la pantalla
new_frame_time = time.time()
fps = 1/(new_frame_time - prev_frame_time)
prev_frame_time = new_frame_time
cv2.putText(frame, "FPS" + str(int(fps)), (10,40), cv2.FONT_HERSHEY_PLAIN, 3, (100, 255, 0), 2, cv2.LINE_AA)
cv2.imshow("Image Feed", frame)
# Se usa la tecla 'q'para finalizar el programa
key = cv2.waitKey(1) & 0xFF
if key == ord("q"): break
# Cuando todo acabe: libera los recursos de la cámara
cap.release()
Este ejemplo es usado para generar imágenes y posteriormente calibrar la cámara.
SISTEMA OPERATIVO BOOKWORM (ÚLTIMA VERSIÓN)
En esta ocasión no es necesario habilitar nada en la interfaz, ya está por defecto. También es necesario instalar PiCamera2 usando:
sudo apt install -y python3-picamera2
Un ejemplo en funcionamiento es:
import numpy as np
import cv2
import time
from picamera2 import Picamera2
# Initialize and configure Picamera2
picam2 = Picamera2()
config = picam2.create_preview_configuration(main={"size": (800, 800), "format": "RGB888"})
picam2.configure(config)
picam2.start()
# Create a window and set its position
cv2.namedWindow("Image Feed")
cv2.moveWindow("Image Feed", 159, -25)
# Initialize frame counters and timestamp
prev_frame_time = time.time()
cal_image_count = 0
frame_count = 0
while True:
# Capture frame
frame = picam2.capture_array()
# Increment frame count
frame_count += 1
# Save image every 30 frames
if frame_count == 30:
cv2.imwrite(f"cal_image_{cal_image_count}.jpg", frame)
cal_image_count += 1
frame_count = 0
# Calculate and display FPS
new_frame_time = time.time()
fps = 1 / (new_frame_time - prev_frame_time)
prev_frame_time = new_frame_time
cv2.putText(frame, f"FPS: {int(fps)}", (10, 40), cv2.FONT_HERSHEY_PLAIN, 3, (100, 255, 0), 2, cv2.LINE_AA)
# Show the frame
cv2.imshow("Image Feed", frame)
# Exit on 'q' key press
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Release resources
cv2.destroyAllWindows()
picam2.stop()
Este ejemplo es igual que el anterior pero modificado para esta versión