usb32-camera-stream-opencv-8.ino
Configure une caméra USB haute résolution pour une vision industrielle en temps réel en exploitant la bande passante USB 3.2 Gen 2.
Installez opencv-python et ensurez que les pilotes USB 3.2 sont actifs (lsusb montre 'SuperSpeed'). Le SoC Intel Core série 3 utilise le décodage matériel partiel, mais OpenCV gère l'encodage CPU. La latence est critique en industrie ; le buffer est réduit à 1 image. Cette configuration est idéale pour le contrôle qualité sur ligne d'assemblance. Exécutez avec sudo si l'accès au périphérique /dev/video0 est restreint. Les trois sorties vidéo indépendantes permettent d'afficher ce flux sur HDMI ou DP tandis que la LVDS sert de monitoring.
usb32-camera-stream-opencv-8.ino
import cv2
import sys
import time
# Index 0 pour la première caméra USB 3.2 Gen 2
# Les contrôleurs USB 3.2 Gen 2 offrent une bande passante suffisante pour 1080p/4K
CAPTURE_INDEX = 0
FRAME_WIDTH = 1920
FRAME_HEIGHT = 1080
FPS_TARGET = 30
def main():
cap = cv2.VideoCapture(CAPTURE_INDEX)
if not cap.isOpened():
print("Error: Could not open camera")
sys.exit(1)
# Configuration de la résolution haute définition
cap.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT)
cap.set(cv2.CAP_PROP_FPS, FPS_TARGET)
# Réduire le buffer pour minimiser la latence industrielle
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
print(f"Streaming from {FRAME_WIDTH}x{FRAME_HEIGHT}@{FPS_TARGET}FPS via USB 3.2 Gen 2...")
while True:
start_time = time.time()
ret, frame = cap.read()
if not ret:
print("Failed to grab frame")
break
# Traitement léger ici (ex: détection de mouvement simple)
cv2.putText(frame, 'BIWCL-PAT Edge Vision', (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow('Edge Vision', frame)
elapsed = time.time() - start_time
if elapsed < 1.0/FPS_TARGET:
time.sleep(1.0/FPS_TARGET - elapsed)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()