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 |
|---|
| Komprimering | Ingen (4:2:2 ukomprimert) | JPEG-komprimert |
| Bruksområde | Rå pikseldata, analyse | Høy bildefrekvens, sanntids forhåndsvisning |
| Bildefrekvens | Lavere ved høy oppløsning | Opp til 60 FPS |
| Filstørrelse | bredde × høyde × 2 byte per bilde | Variabel (liten) |
| Direkte visning | Nei (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.
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)
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.