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