"Warum jeder ISP eines Lese-Stifts YUV statt RGB ausgibt, wie sich NV12 und YUY2 unterscheiden und was dies für die OCR-Genauigkeit bei B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 und Y6 bedeutet.

Veröffentlicht am: Okt 27, 2023 - 141 Aufrufe

Lese-Stift YUV vs. RGB und Farbraum: Wie die Bildverarbeitungs-Pipeline ein Pixelformat auswählt

Zielgruppe: Dieser Artikel richtet sich an Firmware-Ingenieure, ISP-Integrationsleiter und OEM-Produktmanager, die verstehen müssen, warum die Bildpipelines B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 und Y6 YUV422 / YUV420 statt Roh-RGB ausgeben, wie die Formatwahl nachgelagerte OCR- und OID-Decodierung beeinflusst und wo eine Farbraumkonvertierung tatsächlich notwendig ist. Wir setzen voraus, dass Sie einen Frame-Dump gelesen haben und wissen, dass „RGB888" nicht „24 Bit pro Pixel auf der Leitung" bedeutet.

Der Farbraum ist eines der meistdiskutierten und zugleich schlecht dokumentierten Themen in der Lesestift-Firmware. Käufer fragen: „Unterstützt Ihre OCR RGB?", und die ehrliche Antwort lautet nein, weil die OCR-Engine keine Farben verarbeitet, sondern nur die Luminanz. Dennoch ist der Farbraum wichtig: Er beeinflusst die Bus-Bandbreite, den DRAM-Footprint, die Latenz und ob der Host-SoC direkt in den Encoder streamen kann, ohne zusätzlichen Kopiervorgang. Dieser Artikel führt durch jedes Pixelformat, das in einem Lesestift vorkommt, mit gemessenen Bus- und Speicherwerten, damit Sie im nächsten OEM-Vertrag das richtige Format spezifizieren können.

1. Warum der ISP des Lesestifts YUV statt RGB ausgibt

Der Sensor eines Lesestifts ist monochrom, wie wir im Kamera-ISP-Artikel behandelt haben. Warum erwähnt die Firmware dann überhaupt YUV? Aus zwei Gründen:

  1. Die Display-Vorschau-Pipeline auf L5, Q8 und T2 nutzt ein kleines LCD-Panel, das YUV422-Eingabe erwartet. Der Weg über RGB würde einen unnötigen Konvertierungslauf kosten.
  2. Die OCR / OID-Decodierung nutzt den Y-Kanal (Luma) und verwirft U und V. Die Daten von Anfang an als YUV zu behandeln spart 33 % bis 50 % DRAM-Bandbreite.

YUV ist eine Familie von Farbräumen, die Helligkeit (Y) von Farbdifferenz (U, V) trennt. Das menschliche visuelle System ist ungefähr 3-mal empfindlicher für Helligkeit als für Farbe, daher können die Chroma-Kanäle ohne sichtbaren Verlust subsampelt werden. Bei einem Lesestift ist dieser Verlust unsichtbar, weil der Benutzer das Bild nie sieht – die OCR-Engine erkennt das Zeichen entweder oder nicht.

Es gibt drei YUV-Layouts, die in unserer Firmware vorkommen: YUV422 (YUY2), YUV420 (NV12 / NV21) sowie einen Graustufen-„Y-only"-Modus, der von B1, B2, P2 und F8 genutzt wird. Das RGB-Layout, dem wir begegnen, ist RGB565 in einigen Legacy-Bootloader-Pfaden, aber die produktive OCR-Firmware verwendet kein RGB.

2. Die drei YUV-Layouts in der Praxis

YUV422 YUY2 packt 4 Byte pro 2 Pixel: Y0 U0 Y1 V0. Jedes Pixelpaar teilt sich eine U- und eine V-Abtastung, während jedes Pixel sein eigenes Y behält. Dieses Layout erhält die volle Luma-Auflösung und 2:1 horizontale Chroma-Auflösung. Die Bitkosten betragen 16 Bit pro Pixel.

YUV420 NV12 verwendet eine einzelne Y-Ebene in voller Auflösung plus eine interleavte UV-Ebene mit halber Auflösung in beide Richtungen. Die UV-Ebene ist interleaved als U0 V0 U1 V1 ... also 6 Byte pro 4 Pixel. Die Bitkosten betragen 12 Bit pro Pixel. NV21 vertauscht U und V in der interleavten Ebene; auf unserer Hardware wird dies über ein Registerbit ausgewählt, und wir nutzen NV12 als Standard für eine einfachere Software-Pipeline.

Y-only Graustufen ist das günstigste Layout: 8 Bit pro Pixel, keine Chroma, eine einzelne Ebene. Dies streamen B1, B2, P2 und F8, wenn sie im reinen OCR-Modus ohne Display laufen.

Format Bit/Pixel Anzahl Ebenen Bandbreite vs. RGB888 Verwendet in
RGB888 24 1 100 % (Referenz) In Produktion nicht verwendet
RGB565 16 1 67 % Nur Legacy-Bootloader
YUY2 (YUV422) 16 1 (interleaved) 67 % K7, KF1 Display-Pfad
NV12 (YUV420) 12 2 50 % L5, Q8, T2 Display-Pfad
Y only 8 1 33 % B1, B2, F8, P2 OCR-Modus

3. Bus-Bandbreite: Gemessene Werte

Bandbreite ist wichtig, weil ISP, OID/OCR-Engine und der optionale LCD-Controller alle dieselben DRAM-Buffer lesen oder schreiben. Ist das Format zu breit, sättigt der Bus und Frame-Drops treten auf.

Gemessene DRAM-Bandbreite auf dem L5 bei 60 fps Dauerscan:

Pfad Format MB/s % von 800 MB/s Bus
Sensor → ISP RAW10 720 x 540 23,3 3 %
ISP → DRAM (Write) YUV422 23,3 3 %
OCR-Engine (Read) Nur Y-Ebene 11,7 1 %
LCD-Controller (Lesen) YUV422 23,3 3 %
Gesamte aktive Bandbreite — 81,6 10 %

Derselbe Pfad in RGB888 würde 46,6 MB/s pro Stufe erzeugen, insgesamt etwa 163 MB/s bzw. 20 % des Busses. Das ist der Unterschied zwischen Spielraum und Spielraum mit Sicherheitsreserven.

4. Warum die OCR-Engine nur die Y-Ebene liest

Die OCR-Engine, die den ISP-Ausgang verarbeitet, behandelt das Bild als zweidimensionales Luminanzfeld. Sie berechnet Gradienten, führt eine Connected-Component-Analyse durch und speist Zeichen in einen CNN-Klassifikator (TC-127) ein. Keiner dieser Schritte benötigt Chrominanz. In der Firmware konfigurieren wir daher den OCR-Eingabe-DMA so, dass er nur die Y-Ebene liest und die UV-Ebene überspringt. Das halbiert die DRAM-Lesebandbreite der OCR-Engine.

Auf dem K7 und dem KF1 ist die OCR-Engine sogar noch aggressiver: Sie fordert die Y-Ebene in einem 4:2:0-Kachelungsmuster an, bei dem die Y-Ebene in 16 x 16 Macroblöcke aufgeteilt ist, die am OID-Code-Raster ausgerichtet sind. Dies bringt eine zusätzliche Beschleunigung von 4,8 % bis 6,5 % durch bessere Cache-Lokalität.

Per-Frame DRAM Footprint (640 x 480 image, L5/Q8/T2)

5. YUV → RGB Konvertierung: Wann sie tatsächlich nötig ist

Es gibt genau zwei Fälle, in denen die Firmware YUV in RGB konvertieren muss.

Der erste ist der LCD-Vorschaupfad auf L5, Q8 und T2. Der Panel-Treiber-IC erwartet RGB666 oder RGB888 in einem bestimmten Sync-Modus. Die Konvertierung von NV12 nach RGB wird von einem Hardware-CSC (Color Space Converter) im Display-Controller des SoC durchgeführt. Die Konvertierung verwendet die BT.601-Limited-Range-Matrix für SD-Inhalte und BT.709 für HD-Inhalte; wir verwenden BT.601, da die Quelle sensor-nativ ist und kein Broadcast-Video.

Der zweite Fall tritt auf, wenn eine Android-App eines Drittanbieters ein Vorschaubild über USB anfordert. Einige ältere Schul-Apps erwarten RGB888. Die Konvertierung wird durch einen Software-CSC im USB-Gadget-Treiber durchgeführt und kostet auf der Host-CPU des L5 etwa 4,6 ms pro Bild. Diese Latenz ist akzeptabel, da die Vorschaubildrate auf 15 fps gedrosselt ist.

Für OID und OCR findet keine YUV-zu-RGB-Konvertierung statt. Die Y-Ebene geht direkt zum Binarizer.

6. BT.601 vs BT.709 vs Full-Range vs Limited-Range

Drei Parameter definieren die exakte numerische YUV-zu-RGB-Konvertierung:

  1. Die Koeffizientenmatrix (BT.601 für SD, BT.709 für HD, BT.2020 für UHD).
  2. Der Quantisierungsbereich (Limited 16 bis 235 für Broadcast, Full 0 bis 255 für PC und Sensoren).
  3. Die Chroma-Sample-Lage (cosited oder interspersed, wichtig für MPEG-artige Codecs).

Für Lesestift-Kameras ist die Quelle immer BT.601 Full Range, da der Sensor 0 bis 255 Luma ausgibt und wir dies als Full-Range behandeln. Der Anzeigepfad verwendet BT.601 Limited Range, wenn das LCD-Panel entsprechend konfiguriert ist, was bei den meisten Panels in dieser Preisklasse der Fall ist. Diese Nichtübereinstimmung ist einer der häufigsten Integrationsfehler, die wir in OEM-Builds sehen: Ein Integrator setzt Limited Range am LCD und Full Range am ISP, und das Bild sieht ausgewaschen aus. Die Lösung ist eine Registeränderung im Panel-Treiber, kein erneutes ISP-Tuning.

YUV Sample Positions in a 4 x 2 Pixel Block (NV12 vs YUY2)

7. So spezifizieren Sie das richtige Format in einem OEM-Vertrag

Ein OEM-Vertrag sollte das exakte Pixelformat, Layout, den Bereich und die Sample-Lage benennen. Eine belastbare Spezifikation lautet:

  • ISP-Ausgangsformat: NV12 (YUV420), 8-Bit Luma, 8-Bit interleaved Chroma.
  • Quantisierungsbereich: Full Range (Y 0 bis 255, UV 0 bis 255 mit 128 = Neutral).
  • Farbmatrix: BT.601.
  • Sample-Lage: cosited (Chroma-Sample sitzt jeden zweiten Spalte auf einem Luma-Sample).
  • DRAM-Layout: Y-Ebene an Basisadresse, UV-Ebene an Basis + Breite x Höhe.
  • Stride: muss gleich Breite sein (kein Padding), sofern nicht ausdrücklich vereinbart.

Wenn der Vertrag stattdessen „RGB-Ausgang" sagt, wird der Lieferant höhere BOM-Kosten und längere Latenz anbieten, da er eine CSC-Stufe hinzufügen muss. In 11 Jahren Auslieferung von Lesestiften haben wir nie eine Kundenanwendung gesehen, die tatsächlich RGB vom ISP benötigt hätte.

8. End-to-End-Latenzkosten der Formatentscheidung

Die Formatwahl beeinflusst die Latenz um 1,5 ms bis 4,0 ms in der gesamten Pipeline. Gemessen auf L5 bei 60 fps:

Schritt Nur Y NV12 RGB888
Sensor → ISP 6,0 ms 6,0 ms 6,0 ms
ISP-Pipeline 16,0 ms 22,0 ms 28,0 ms
DRAM-Schreiben 4,0 ms 6,0 ms 12,0 ms
OCR-Lesen 3,0 ms 5,0 ms 9,0 ms
Gesamt 29,0 ms 39,0 ms 55,0 ms

Der OCR-Engine-Pfad auf B1, B2, F8 und P2 verwendet Nur-Y und liegt bei 29 ms. RGB888 würde denselben Stift auf 55 ms treiben, was über der menschlich wahrnehmbaren 50-ms-Schwelle für interaktive Erkennung liegt. Dies ist das stärkste Argument, bei YUV zu bleiben.

9. Randfälle: Wenn die Farbraumkonvertierung schadet

Drei reale OEM-Projekte in den letzten 24 Monaten hatten Probleme mit dem Farbraum:

  1. Ein Distributor im Nahen Osten wünschte RGB-Ausgabe, um sich in ein OCR-SDK eines Drittanbieters zu integrieren, das RGB erwartete. Wir fügten einen Software-CSC hinzu, wodurch die Latenz pro Frame von 39 ms auf 52 ms stieg. Die Entscheidung wurde rückgängig gemacht, nachdem der Endkunde eine Erkennungsverzögerung meldete.
  2. Ein Integrator für Schultablets konfigurierte das LCD auf Limited Range, während der ISP auf Full Range eingestellt war. Die LCD-Vorschau sah ausgewaschen aus (Luma 0 bis 80 wurde auf 16 bis 80 abgebildet). Wir lieferten einen Patch für den Panel-Treiber.
  3. Ein Verlag, der ein benutzerdefiniertes Wörterbuch integrierte, nutzte einen RGB565-Bootloader-Pfad und versuchte anschließend, eine OCR-Engine anzubinden, die YUV420 erwartete. Die Diskrepanz wurde im Integrationstest erkannt; wir passten die OCR-Engine an einen gepackten RGB565-Eingang an und lieferten sie innerhalb von 6 Tagen aus.

Tipp für Einkäufer: Fordern Sie immer einen Frame-Dump in genau dem Format an, das Ihre nachgelagerte Engine verarbeitet. Ein YUV-Dump ist 33 % so groß wie ein RGB-Dump und ist die einzige Möglichkeit, die ISP-Konfiguration für Ihre Pipeline zuverlässig zu prüfen.

10. Das richtige Format für Ihr Projekt spezifizieren

Für einen reinen OCR-Stift (B1, B2, F8, P2, K7, KF1, Q6, Y6) spezifizieren Sie Y-only Graustufenausgabe. Dies bietet die niedrigste Latenz und den geringsten DRAM-Footprint.

Für einen Stift mit Display (L5, Q8, T2) spezifizieren Sie NV12 für die Vorschau-Pipeline und Y-only für die OCR-Pipeline. Die beiden Pfade teilen sich die Y-Ebene und werden aufgeteilt, nachdem der ISP in den DRAM geschrieben hat.

Für einen Android-USB-Vorschaupfad spezifizieren Sie NV12 als Eingabe und lassen den USB-Gadget-Treiber eine bedarfsgesteuerte RGB-Konvertierung durchführen. Die Konvertierung läuft mit 15 fps für die Vorschau und liegt nicht auf dem OCR-Kritischen Pfad.

Weitere Informationen, wie der ISP die Y-Ebene überhaupt erzeugt, finden Sie unter Reading Pen Camera ISP and Image Signal Processor. Wie die Y-Ebene von der OCR-Engine genutzt wird, erfahren Sie unter Reading Pen OCR Engine vs Deep Learning OCR. Den OID-Decoder, der binarisiertes Y verwendet, finden Sie unter How OID Reading Pen Technology Works. Um Beispiel-Firmware anzufordern, die NV12 in Ihrer spezifizierten Stride ausgibt, siehe /request-a-quote.

Weiterführende Lektüre

Angebot anfordern — schnelle Antwort ab Werk

Frequently Asked Questions

Warum gibt der ISP des Lesestifts YUV statt RGB aus?
YUV trennt Luma von Chroma und ermöglicht es der OCR-Engine, nur die Y-Ebene zu nutzen, wodurch die DRAM-Bandbreite im Vergleich zu RGB888 um 33 % bis 67 % sinkt. Beim L5 mit 60 fps benötigt YUV422 23,3 MB/s, RGB888 dagegen 46,6 MB/s. Die geringere Bandbreite führt zu 12 bis 26 ms weniger End-to-End-Latenz, sodass die interaktive OCR unter der menschlichen Wahrnehmungsschwelle von 50 ms bleibt.
Was ist der Unterschied zwischen NV12 und YUY2 bei einem Lesestift?
YUY2 (YUV422) verschachtelt Luma und Chroma pro Scanlinie mit 16 Bit pro Pixel und behält volle vertikale Chroma bei halbierter horizontaler Chroma. NV12 (YUV420) nutzt 12 Bit pro Pixel mit einer separaten UV-Ebene in halber Auflösung in beiden Achsen. L5, Q8 und T2 verwenden NV12 für den Display-Vorschau-Pfad, da es 25 % Bandbreite gegenüber YUY2 spart, ohne sichtbaren Qualitätsverlust auf den 2,4- bis 3,5-Zoll-LCD-Panels.
Benötigt die OCR-Engine jemals die U- und V-Kanäle?
Nein. In der Produktionsfirmware von B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 und Y6 liest die OCR-Engine ausschließlich die Y-Ebene. Die Farbinformationen werden verworfen, nachdem der ISP in den DRAM geschrieben hat. Dies ist so vorgesehen, da der gedruckte Text monochrom ist und das Erkennungsnetzwerk auf Graustufenbildern trainiert wurde.
Welchen Quantisierungsbereich sollte die LCD-Vorschau verwenden?
Verwenden Sie BT.601 Full Range am ISP-Ausgang und BT.601 Limited Range am LCD-Eingang, wenn das Panel auf Limited Range konfiguriert ist. Eine Mischung aus Full-Range-ISP mit Limited-Range-Panel führt zu ausgewaschenen Bildern; eine Mischung aus Limited-Range-ISP mit Full-Range-Panel verursacht Clipping. Unser Panel-Treiber ist standardmäßig auf Limited Range eingestellt, der ISP standardmäßig auf Full Range – dies ist die Kombination, die unsere Firmware erwartet.
Wie viel Latenz verursacht eine YUV-zu-RGB-Konvertierung, wenn sie nötig ist?
Beim L5 kostet eine softwarebasierte NV12-zu-RGB888-Konvertierung im USB-Gadget-Treiber etwa 4,6 ms pro Frame bei einer Auflösung von 720 x 540. Bei der gedrosselten Vorschau-Rate von 15 fps erhöht dies die Latenz um 69 ms pro Sekunde Wandzeit, was nicht wahrnehmbar ist. Ein Hardware-CSC auf dem Display-Controller fügt weniger als 0,3 ms hinzu und wird für die geräteinterne LCD-Vorschau verwendet.
Ihr Warenkorb
Ihre Erfahrung auf dieser Website wird durch das Akzeptieren von Cookies verbessert. Cookie-Richtlinie
Chat on WhatsApp