Hopp til hovedinnhold

Oversikt

stellarHD eksponerer to videoformater over sitt standard UVC-grensesnitt (USB Video Class):
  • MJPEG — JPEG-komprimerte bilder. Best for høye bildefrekvenser (opp til 60 FPS) og direkte visning.
  • YUYV — ukomprimert 4:2:2 rå video. Best når du trenger de originale, ubehandlede pikseldataene (maskinsyn, fotogrammetri, vitenskapelig avbildning).
Denne veiledningen fokuserer på YUYV (RAW)-opptak: hvordan du henter ekte råbilder, lagrer dem til disk og konverterer dem for inspeksjon. Den dekker også en detalj som er spesifikk for monokrome stellarHD-modeller, der bare luminanskanalen (Y) inneholder ekte bildedata.
YUYV er ukomprimert, så det bruker langt mer USB-båndbredde enn MJPEG. Som et resultat er rå-modus begrenset til lavere bildefrekvenser ved høyere oppløsninger. Se tekniske spesifikasjoner for stellarHD for de støttede kombinasjonene av oppløsning/bildefrekvens.

Krav

Disse kommandoene krever en Linux-datamaskin med v4l-utils, GStreamer og FFmpeg installert:
sudo apt install v4l-utils ffmpeg \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-tools \
  gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
  gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-plugins-ugly

Forstå YUYV vs MJPEG

YUYV (ukomprimert)MJPEG
KomprimeringIngen (4:2:2 ukomprimert)JPEG-komprimert
BruksområdeRå pikseldata, analyseHøy bildefrekvens, sanntids forhåndsvisning
BildefrekvensLavere ved høy oppløsningOpp til 60 FPS
Filstørrelsebredde × høyde × 2 byte per bildeVariabel (liten)
Direkte visningNei (rå byte)Ja (hvert bilde er en JPEG)
I GStreamer-caps skrives V4L2-formatet YUYV som YUY2.
«YUYV» er ukomprimert, men det er ikke sensor-rått. I kameraterminologi betyr rått den ubehandlede Bayer-mosaikken direkte fra sensoren — én fargeprøve per piksel, før demosaikering, hvitbalansering eller fargekonvertering. YUYV 4:2:2 (YUY2) er noe annet: det er kameraets allerede behandlede utdata — Bayer-dataene er demosaikert i kameraet, konvertert til YUV-fargerommet og krominansundersamplet (4:2:2 lagrer to krominans- prøver for hver andre luminansprøve). Dette gjelder for både fargemodeller og monokrome modeller: utdataene er ukomprimert, men fortsatt behandlet og undersamplet.stellarHD eksponerer ikke de underliggende Bayer-/sensor-rå-dataene over UVC, så du kan ikke hente en rå mosaikk eller kjøre din egen demosaikering. «Rå» i denne veiledningen betyr ukomprimerte pikseldata, ikke sensor-rått.

Trinn 1 — Identifiser enhetsnoden

Når du kobler til en stellarHD, oppretter kjernen flere V4L2-enhetsnoder. Både YUYV og MJPEG eksponeres på den første noden i gruppen.
v4l2-ctl --list-devices
Eksempel på utdata:
stellarHD Leader: stellarHD Lea (usb-0000:00:14.0-6):
	/dev/video4   # <-- this node outputs both YUYV and MJPEG
	/dev/video5
	/dev/media2
I dette eksempelet er /dev/video4 noden som skal brukes. Bytt ut med din egen node i kommandoene nedenfor.
Bekreft formatene, oppløsningene og bildefrekvensene kameraet annonserer før du tar opp:
v4l2-ctl -d /dev/video4 --list-formats-ext
Du bør se både YUYV-oppføringer (ukomprimert 4:2:2) og MJPG-oppføringer (MJPEG-komprimert).

Trinn 2 — Ta opp ett enkelt RAW-bilde

Bruk v4l2-ctl for å ta opp ett ukomprimert YUYV-bilde i full oppløsning:
v4l2-ctl -d /dev/video4 \
  --set-fmt-video=width=1600,height=1200,pixelformat=YUYV \
  --stream-mmap \
  --stream-count=1 \
  --stream-to=frame_1600x1200.yuyv
Dette skriver de rå YUYV-bytene direkte til frame_1600x1200.yuyv.

Bekreft bildestørrelsen

Et komplett råbilde skal være nøyaktig bredde × høyde × 2 byte:
1600 × 1200 × 2 = 3,840,000 bytes (~3.8 MB)
Hvis filstørrelsen stemmer, har du tatt opp et komplett råbilde.

Trinn 3 — Konverter RAW-bildet til PNG

Rå YUYV-byte er ikke direkte synlige. Bruk FFmpeg for å konvertere bildet til en PNG for inspeksjon:
ffmpeg \
  -f rawvideo \
  -pixel_format yuyv422 \
  -video_size 1600x1200 \
  -i frame_1600x1200.yuyv \
  frame.png
Du må oppgi til FFmpeg det nøyaktige pikselformatet (yuyv422) og oppløsningen (-video_size) for rå-filen. Rå video har ingen header, så hvis disse verdiene ikke samsvarer med opptaket, vil bildet se skjevt eller korrupt ut.

Monokrome stellarHD-modeller

På grunn av en særegenhet i UVC annonserer den monokrome stellarHD-en utdataene sine som YUYV 4:2:2 selv om sensoren ikke har fargeinformasjon.
  • Kun Y (luminans)-kanalen inneholder det ekte bildet.
  • U- og V (krominans)-kanalene er dummy-/faste verdier og kan ignoreres.
Hvis du konverterer et monokromt bilde som fullfarge, kan du se falske fargestikk fra de meningsløse krominansdataene. Hent kun ut gråskala:
ffmpeg \
  -f rawvideo \
  -pixel_format yuyv422 \
  -video_size 1600x1200 \
  -i frame_1600x1200.yuyv \
  -vf format=gray \
  mono.png
Dette bruker kun luminanskanalen og unngår falsk krominanstolkning.

Bekreft at kameraet faktisk er monokromt

Spill av rå-filen direkte med ffplay. Hvis bildet ser gråskala ut naturlig, er krominanskanalene konstante:
ffplay \
  -f rawvideo \
  -pixel_format yuyv422 \
  -video_size 1600x1200 \
  frame_1600x1200.yuyv

GStreamer-pipelines

Vis den direkte råstrømmen

gst-launch-1.0 \
  v4l2src device=/dev/video4 ! \
  video/x-raw,format=YUY2,width=1600,height=1200,framerate=5/1 ! \
  videoconvert ! \
  autovideosink

Lagre ett råbilde til disk

gst-launch-1.0 -e \
  v4l2src device=/dev/video4 num-buffers=1 ! \
  video/x-raw,format=YUY2,width=1600,height=1200,framerate=5/1 ! \
  filesink location=frame.yuyv

Raskere forhåndsvisning med MJPEG

Siden YUYV er begrenset til lave bildefrekvenser ved høy oppløsning, bruk MJPEG når du kun trenger en jevn sanntids forhåndsvisning:
gst-launch-1.0 \
  v4l2src device=/dev/video4 ! \
  image/jpeg,width=1600,height=1200,framerate=30/1 ! \
  jpegdec ! \
  videoconvert ! \
  autovideosink

Henting av luminans i OpenCV / Python

Hvis du behandler råbilder nedstrøms og sensoren din er monokrom, hent ut luminanskanalen i stedet for å behandle bildet som farge.
# YUYV frame loaded as a 3-channel array — the Y channel is the real image
gray = frame[:, :, 0]
Eller konverter eksplisitt fra YUY2:
import cv2

gray = cv2.cvtColor(frame, cv2.COLOR_YUV2GRAY_YUY2)
https://github.com/opencv/opencv/wiki/logo/OpenCV_logo_no_text.png

OpenCV-guide

Se vår fullstendige guide for bruk av stellarHD med OpenCV.

Feilsøking

Utdatafilen har feil størrelse

Et komplett råbilde er nøyaktig bredde × høyde × 2 byte. En mindre fil betyr vanligvis at opptaket ble avbrutt, eller at den forespurte oppløsningen ikke støttes i YUYV-modus — sjekk v4l2-ctl -d /dev/video4 --list-formats-ext.

Det konverterte bildet er skjevt eller forvrengt

-pixel_format og -video_size som sendes til FFmpeg må samsvare nøyaktig med opptaket. Rå video har ingen header, så et hvilket som helst avvik vil korrumpere oppsettet.

Bildet ser tonet ut på et monokromt kamera

Krominanskanalene bærer ingen reelle data på en monokrom sensor. Konverter på nytt med -vf format=gray (FFmpeg) eller hent ut Y-kanalen (OpenCV) som vist ovenfor.

YUYV-bildefrekvensen er for lav

Dette er forventet — ukomprimert video krever mye båndbredde. Reduser oppløsningen, senk bildefrekvensen, eller bytt til MJPEG for sanntidsvisning.