usb32-camera-stream-opencv-8.ino

BIOSSTAR BIWCL-PAT : SBC industrielle 3,5" Intel Wildcat Lake · Fichier : usb32-camera-stream-opencv-8.ino · Langage : Python · Usage : Capturer et afficher un flux vidéo temps réel via une caméra USB 3.2 Gen 2 à faible latence.

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()

← Retour à la fiche