दर्शक वर्ग: यह लेख उन फर्मवेयर इंजीनियरों, ISP इंटीग्रेशन लीड्स और OEM प्रोडक्ट मैनेजरों के लिए है, जिन्हें यह समझना है कि B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 और Y6 इमेज पाइपलाइनें raw RGB की बजाय YUV422 / YUV420 क्यों आउटपुट करती हैं, फॉर्मेट का चुनाव डाउनस्ट्रीम OCR और OID डिकोडिंग को कैसे प्रभावित करता है, और कलर स्पेस कन्वर्जन वास्तव में कहाँ ज़रूरी है। हम मानकर चलते हैं कि आप एक फ्रेम डंप पढ़ चुके हैं और आप जानते हैं कि "RGB888" का मतलब "वायर पर 24 बिट प्रति पिक्सेल" नहीं है।
कलर स्पेस रीडिंग पेन फर्मवेयर में सबसे अधिक चर्चित और कम दस्तावेज़ी विषयों में से एक है। खरीदार पूछते हैं "क्या आपका OCR RGB सपोर्ट करता है?" और ईमानदार जवाब है नहीं, क्योंकि OCR इंजन कलर नहीं, केवल ल्यूमिनेंस (luminance) खपत करता है। लेकिन कलर स्पेस फिर भी मायने रखता है: यह बस बैंडविड्थ, DRAM फ़ुटप्रिंट, लेटेंसी, और यह प्रभावित करता है कि होस्ट SoC बिना अतिरिक्त कॉपी के सीधे एनकोडर में स्ट्रीम कर सकता है या नहीं। यह लेख रीडिंग पेन को छूने वाले हर पिक्सेल फॉर्मेट को मापी गई बस और मेमोरी संख्याओं के साथ रेखांकित करता है, ताकि आप अपने अगले OEM कॉन्ट्रैक्ट में सही फॉर्मेट निर्दिष्ट कर सकें।
1. रीडिंग पेन ISP RGB की बजाय YUV क्यों आउटपुट करता है
रीडिंग पेन सेंसर मोनोक्रोम है, जैसा कि हमने कैमरा ISP लेख में बताया था। तो फर्मवेयर YUV का ज़िक्र क्यों करता है? दो कारण:
- L5, Q8 और T2 पर डिस्प्ले प्रीव्यू पाइपलाइन एक छोटे LCD पैनल का उपयोग करती है जो YUV422 इनपुट की अपेक्षा करता है। RGB से होकर जाने पर एक अनावश्यक कन्वर्जन पास लगता।
- OCR / OID डिकोडर Y (ल्यूमा) चैनल का उपयोग करता है और U तथा V को हटा देता है। डेटा को शुरू से ही YUV मानकर चलने पर 33% से 50% तक DRAM बैंडविड्थ बचती है।
YUV कलर स्पेस का एक परिवार है जो ब्राइटनेस (Y) को कलर डिफरेंस (U, V) से अलग करता है। मानव विज़ुअल सिस्टम ब्राइटनेस के प्रति कलर की तुलना में लगभग 3 गुना अधिक संवेदनशील होता है, इसलिए क्रोमा चैनलों को घटाकर सैंपल किया जा सकता है बिना दृश्य हानि के। रीडिंग पेन में यह हानि अदृश्य होती है क्योंकि उपयोगकर्ता छवि को कभी देखता ही नहीं — OCR इंजन या तो कैरेक्टर को पहचान लेता है या नहीं।
हमारे फर्मवेयर में तीन YUV लेआउट आते हैं: YUV422 (YUY2), YUV420 (NV12 / NV21), और B1, B2, P2 तथा F8 में उपयोग होने वाला एक ग्रेस्केल "केवल Y" मोड। RGB लेआउट के रूप में हमें कुछ लेगसी बूट-लोडर पाथ पर RGB565 मिलता है, लेकिन प्रोडक्शन OCR फर्मवेयर RGB का उपयोग नहीं करता।
2. व्यवहार में तीन YUV लेआउट
YUV422 YUY2 में 2 पिक्सेल के लिए 4 बाइट होते हैं: Y0 U0 Y1 V0। प्रत्येक पिक्सेल जोड़ी एक U और एक V सैंपल साझा करती है, जबकि प्रत्येक पिक्सेल का अपना Y रहता है। यह लेआउट पूर्ण ल्यूमा रिज़ॉल्यूशन और 2:1 हॉरिज़ॉन्टल क्रोमा रिज़ॉल्यूशन बनाए रखता है। बिट लागत 16 बिट प्रति पिक्सेल है।
YUV420 NV12 में पूर्ण रिज़ॉल्यूशन का एकल Y प्लेन और दोनों दिशाओं में आधी रिज़ॉल्यूशन का एक इंटरलीव्ड UV प्लेन होता है। UV प्लेन U0 V0 U1 V1 ... के रूप में इंटरलीव्ड रहता है, अतः 4 पिक्सेल के लिए 6 बाइट। बिट लागत 12 बिट प्रति पिक्सेल है। NV21 इंटरलीव्ड प्लेन में U और V को आपस में बदल देता है; हमारे हार्डवेयर पर यह एक रजिस्टर बिट से चुना जाता है, और हम सॉफ़्टवेयर पाइपलाइन सरलता के लिए NV12 को डिफ़ॉल्ट रखते हैं।
केवल-Y ग्रेस्केल सबसे सस्ता लेआउट है: 8 बिट प्रति पिक्सेल, कोई क्रोमा नहीं, एकल प्लेन। B1, B2, P2 और F8 यही स्ट्रीम करते हैं जब बिना डिस्प्ले के OCR-ओनली मोड में चलते हैं।
| फॉर्मेट | बिट/पिक्सेल | प्लेन संख्या | RGB888 के सापेक्ष बैंडविड्थ | कहाँ उपयोग |
|---|---|---|---|---|
| Low | 24 | 1 | 100% (संदर्भ) | प्रोडक्शन में कभी उपयोग नहीं |
| Low | 16 | 1 | 67% | केवल लेगसी बूटलोडर |
| Low | 16 | 1 (इंटरलीव्ड) | 67% | K7, KF1 डिस्प्ले पाथ |
| Low | 12 | 2 | 50% | L5, Q8, T2 डिस्प्ले पाथ |
| केवल Y | 8 | 1 | 33% | Low |
3. बस बैंडविड्थ: मापी गई संख्याएँ
बैंडविड्थ इसलिए मायने रखती है क्योंकि ISP, OID/OCR इंजन, और वैकल्पिक LCD कंट्रोलर सभी एक ही DRAM बफ़र को पढ़ते या लिखते हैं। यदि फॉर्मेट बहुत चौड़ा है तो बस संतृप्त हो जाती है और फ्रेम ड्रॉप्स दिखाई देने लगते हैं।
L5 पर 60 fps निरंतर स्कैन पर मापी गई DRAM बैंडविड्थ:
| पाथ | फॉर्मेट | Low | 800 MB/s बस का % |
|---|---|---|---|
| सेंसर → ISP | Low | 23.3 | 3% |
| Low | Low | 23.3 | 3% |
| OCR इंजन (रीड) | केवल Y प्लेन | 11.7 | 1% |
| LCD कंट्रोलर (रीड) | Low | 23.3 | 3% |
| कुल सक्रिय बैंडविड्थ | — | 81.6 | 10% |
RGB888 में वही पाथ प्रति चरण 46.6 MB/s धकेलेगा, कुल मिलाकर लगभग 163 MB/s या बस का 20%। यही अंतर है हेडरूम और हेडरूम-विथ-मार्जिन के बीच।
4. OCR इंजन केवल Y प्लेन क्यों पढ़ता है
जो OCR इंजन ISP आउटपुट को कंज़्यूम करता है, वह इमेज को 2D ल्यूमिनेंस फ़ील्ड के रूप में लेता है। यह ग्रेडिएंट कंप्यूट करता है, कनेक्टेड-कंपोनेंट एनालिसिस चलाता है, और कैरेक्टर्स को CNN क्लासिफ़ायर (TC-127) को फ़ीड करता है। इनमें से किसी भी स्टेप को क्रोमा की ज़रूरत नहीं। तो फ़र्मवेयर में हम OCR इनपुट DMA को केवल Y प्लेन पढ़ने के लिए कॉन्फ़िगर करते हैं, UV प्लेन को पूरी तरह स्किप कर देते हैं। इससे OCR इंजन की DRAM रीड बैंडविड्थ आधी हो जाती है।
K7 और KF1 पर OCR इंजन और भी ज़्यादा एग्रेसिव है: यह Y प्लेन को 4:2:0 टाइलिंग पैटर्न में रिक्वेस्ट करता है, जहाँ Y प्लेन 16 x 16 मैक्रोब्लॉक्स में स्प्लिट रहता है जो OID कोड ग्रिड से एलाइन होते हैं। यह कैश लोकैलिटी बेहतर करके 4.8% से 6.5% अतिरिक्त स्पीडअप देता है।
5. YUV → RGB कन्वर्ज़न: जब आपको वाकई इसकी ज़रूरत होती है
ऐसे बिल्कुल दो ही केस हैं जहाँ फ़र्मवेयर को YUV से RGB में कन्वर्ट करना पड़ता है।
पहला L5, Q8 और T2 पर LCD प्रीव्यू पाथ है। पैनल ड्राइवर IC एक खास सिंक मोड में RGB666 या RGB888 एक्सपेक्ट करता है। NV12 से RGB में कन्वर्ज़न SoC के डिस्प्ले कंट्रोलर के अंदर मौजूद हार्डवेयर CSC (कलर स्पेस कन्वर्टर) द्वारा किया जाता है। यह कन्वर्ज़न SD कंटेंट के लिए BT.601 लिमिटेड-रेंज मैट्रिक्स और HD कंटेंट के लिए BT.709 इस्तेमाल करता है; हम BT.601 इस्तेमाल करते हैं क्योंकि स्रोत सेंसर-नेटिव है, ब्रॉडकास्ट वीडियो नहीं।
दूसरा केस तब होता है जब कोई थर्ड-पार्टी Android ऐप USB पर प्रीव्यू फ़्रेम पुल करता है। कुछ लेगसी स्कूल ऐप्स RGB888 एक्सपेक्ट करते हैं। यह कन्वर्ज़न USB गैजेट ड्राइवर में सॉफ़्टवेयर CSC द्वारा किया जाता है, जिसकी L5 के होस्ट CPU पर लागत लगभग 4.6 ms प्रति फ़्रेम है। यह लेटेंसी स्वीकार्य है क्योंकि प्रीव्यू फ़्रेम रेट को 15 fps तक थ्रॉटल किया गया है।
OID और OCR के लिए कोई YUV-से-RGB कन्वर्ज़न नहीं होता। Y प्लेन सीधे बिनराइज़र में जाता है।
6. BT.601 बनाम BT.709 बनाम फ़ुल-रेंज बनाम लिमिटेड-रेंज
तीन पैरामीटर्स सटीक संख्यात्मक YUV-से-RGB कन्वर्ज़न को डिफ़ाइन करते हैं:
- कोएफ़िशिएंट मैट्रिक्स (SD के लिए BT.601, HD के लिए BT.709, UHD के लिए BT.2020)।
- क्वांटाइज़ेशन रेंज (ब्रॉडकास्ट के लिए लिमिटेड 16 से 235, PC और सेंसर्स के लिए फ़ुल 0 से 255)।
- क्रोमा सैंपल लोकेशन (कोसाइटेड या इंटरस्पर्स्ड, MPEG-स्टाइल कोडेक्स के लिए मायने रखती है)।
रीडिंग पेन कैमरों के लिए स्रोत हमेशा BT.601 फ़ुल रेंज होता है, क्योंकि सेंसर 0 से 255 ल्यूमा आउटपुट करता है और हम इसे फ़ुल-रेंज मानते हैं। डिस्प्ले पाथ BT.601 लिमिटेड रेंज इस्तेमाल करता है अगर LCD पैनल उसके लिए कॉन्फ़िगर हो, और इस प्राइस क्लास के ज़्यादातर पैनल ऐसे ही होते हैं। यह मिसमैच OEM बिल्ड्स में हमें दिखने वाले सबसे सामान्य इंटीग्रेशन बग्स में से एक है: एक इंटीग्रेटर LCD पर लिमिटेड रेंज और ISP पर फ़ुल रेंज सेट कर देता है, और इमेज वॉश्ड-आउट दिखती है। फ़िक्स पैनल ड्राइवर में एक रजिस्टर बदलना है, ISP री-ट्यूनिंग नहीं।
7. OEM कॉन्ट्रैक्ट में सही फ़ॉर्मेट कैसे स्पेसिफ़ाई करें
OEM कॉन्ट्रैक्ट में सटीक पिक्सेल फ़ॉर्मेट, लेआउट, रेंज और सैंपल लोकेशन का नाम होना चाहिए। एक डिफ़ेंसिबल स्पेसिफ़िकेशन इस तरह पढ़ा जाएगा:
- ISP आउटपुट फ़ॉर्मेट: NV12 (YUV420), 8-bit ल्यूमा, 8-bit इंटरलीव्ड क्रोमा।
- क्वांटाइज़ेशन रेंज: फ़ुल रेंज (Y 0 से 255, UV 0 से 255 जहाँ 128 = न्यूट्रल)।
- कलर मैट्रिक्स: BT.601।
- सैंपल लोकेशन: कोसाइटेड (क्रोमा सैंपल हर दूसरे कॉलम पर एक ल्यूमा सैंपल पर बैठता है)।
- DRAM लेआउट: Y प्लेन बेस एड्रेस पर, UV प्लेन बेस + चौड़ाई x ऊँचाई पर।
- स्ट्राइड: चौड़ाई के बराबर होना चाहिए (कोई पैडिंग नहीं), जब तक कि स्पष्ट रूप से नेगोशिएट न किया गया हो।
अगर कॉन्ट्रैक्ट की जगह "RGB आउटपुट" लिखा हो, तो सप्लायर ज़्यादा BOM कॉस्ट और लंबी लेटेंसी कोट करेगा क्योंकि उन्हें एक CSC स्टेज जोड़नी होगी। 11 साल की रीडिंग पेन शिपिंग में हमने कभी कोई कस्टमर ऐप्लिकेशन नहीं देखा जिसे वाकई ISP से RGB की ज़रूरत हो।
8. फ़ॉर्मेट चॉइस की एंड-टू-एंड लेटेंसी लागत
फ़ॉर्मेट चॉइस पूरी पाइपलाइन में 1.5 ms से 4.0 ms तक लेटेंसी प्रभावित करता है। L5 पर 60 fps पर मापा गया:
| स्टेप | केवल Y | NV12 | Low |
|---|---|---|---|
| सेंसर → ISP | 6.0 ms | 6.0 ms | 6.0 ms |
| ISP पाइपलाइन | 16.0 ms | 22.0 ms | 28.0 ms |
| DRAM राइट | 4.0 ms | 6.0 ms | 12.0 ms |
| OCR रीड | 3.0 ms | 5.0 ms | 9.0 ms |
| कुल | 29.0 ms | 39.0 ms | 55.0 ms |
B1, B2, F8 और P2 पर OCR इंजन पाथ केवल Y इस्तेमाल करता है और 29 ms क्लॉक करता है। RGB888 उसी पेन को 55 ms पर धकेल देगा, जो इंटरऐक्टिव रिकॉग्निशन के लिए मानव-अनुभवयोग्य 50 ms थ्रेशहोल्ड से ऊपर है। YUV में बने रहने का यही सबसे मज़बूत तर्क है।
9. एज केस: जब कलर स्पेस कन्वर्ज़न नुकसान पहुँचाता है
पिछले 24 महीनों में तीन असली OEM प्रोजेक्ट कलर स्पेस बग्स से जूझे:
- एक मिडिल ईस्ट डिस्ट्रिब्यूटर ने RGB आउटपुट का अनुरोध किया ताकि वे थर्ड-पार्टी OCR SDK के साथ इंटीग्रेट कर सकें जो RGB की अपेक्षा रखता था। हमने एक सॉफ़्टवेयर CSC जोड़ा, जिससे प्रति-फ़्रेम विलंबता 39 ms से बढ़कर 52 ms हो गई। उनके एंड-कस्टमर ने रिकग्निशन में अंतराल की शिकायत की, इसलिए उन्होंने निर्णय वापस ले लिया।
- एक स्कूल टैबलेट इंटीग्रेटर ने LCD को लिमिटेड रेंज के लिए कॉन्फ़िगर किया जबकि ISP को फ़ुल रेंज पर रखा गया। LCD प्रीव्य फीका दिखा (ल्यूमा 0 से 80 को 16 से 80 पर मैप किया गया)। हमने पैनल ड्राइवर पैच भेजा।
- एक प्रकाशक जो कस्टम डिक्शनरी इंटीग्रेट कर रहा था, उसने RGB565 बूट लोडर पाथ का उपयोग किया और फिर YUV420 की अपेक्षा रखने वाला OCR इंजन जोड़ने का प्रयास किया। इंटीग्रेशन टेस्टिंग में यह बेमेल पकड़ा गया; हमने OCR इंजन को पैक्ड RGB565 इनपुट पर पोर्ट किया और 6 दिनों में भेज दिया।
खरीदार सुझाव: हमेशा सप्लायर से ठीक उसी फ़ॉर्मेट में फ़्रेम डंप का अनुरोध करें जो आपका डाउनस्ट्रीम इंजन उपभोग करता है। YUV डंप, RGB डंप से 33% छोटा होता है और यही एकमात्र तरीका है यह सत्यापित करने का कि ISP आपकी पाइपलाइन के लिए सही से कॉन्फ़िगर है या नहीं।
10. अपने प्रोजेक्ट के लिए सही फ़ॉर्मेट निर्दिष्ट करना
केवल-OCR वाले पेन (B1, B2, F8, P2, K7, KF1, Q6, Y6) के लिए, Y-ओन्ली ग्रेस्केल आउटपुट निर्दिष्ट करें। यह सबसे कम विलंबता और सबसे कम DRAM फ़ुटप्रिंट देता है।
डिस्प्ले-युक्त पेन (L5, Q8, T2) के लिए, प्रीव्य पाइपलाइन के लिए NV12 और OCR पाइपलाइन के लिए Y-ओन्ली निर्दिष्ट करें। दोनों पाथ Y प्लेन साझा करते हैं और ISP के DRAM में लिखने के बाद अलग हो जाते हैं।
Android USB प्रीव्य पाथ के लिए, NV12 इनपुट निर्दिष्ट करें और USB गैजेट ड्राइवर को माँग-पर-आधारित RGB कन्वर्ज़न करने दें। यह कन्वर्ज़न 15 fps प्रीव्य पर चलता है और OCR क्रिटिकल पाथ पर नहीं होता।
ISP शुरू में Y प्लेन कैसे उत्पन्न करता है, इस पर अधिक जानकारी के लिए देखें रीडिंग पेन कैमरा ISP और इमेज सिग्नल प्रोसेसर. Y प्लेन को OCR इंजन कैसे उपभोग करता है, इसके लिए देखें रीडिंग पेन OCR इंजन बनाम डीप लर्निंग OCR. बिनराइज़्ड Y का उपयोग करने वाले OID डिकोडर के लिए देखें OID रीडिंग पेन तकनीक कैसे काम करती है. आपके निर्दिष्ट स्ट्राइड में NV12 आउटपुट करने वाले सैंपल फ़र्मवेयर का अनुरोध करने के लिए, देखें /request-a-quote.