लक्षित दर्शक: यह लेख ML इंजीनियरों, फर्मवेयर लीड्स और OEM खरीदारों के लिए है जो यह तय कर रहे हैं कि B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 और Y6 रीडिंग पेन के अंदर कौन सी OCR आर्किटेक्चर तैनात की जाए। हम मानते हैं कि आपने कम से कम एक OCR बेंचमार्क पेपर पढ़ा है, आप Tesseract और CRNN समझते हैं, और आप लैब डेमो की बजाय प्रोडक्शन रीडिंग पेन डिप्लॉयमेंट से ठोस आँकड़े चाहते हैं।
रीडिंग पेन OCR, सामान्य OCR समस्या का एक सीमित उपसमुच्चय है। टेक्स्ट हमेशा प्रिंटेड होता है (हस्तलिखित नहीं), हमारे रेफरेंस बिल्ड में हमेशा लैटिन या CJK होता है, हमेशा एक ज्ञात कागज़ प्रकार पर, और हमेशा फिक्स्ड-फोकस लेंस के साथ 0.5 mm से 1.2 mm की निश्चित वर्किंग डिस्टेंस पर कैप्चर किया जाता है। ये सीमाएँ हमें एक जनरल-पर्पस OCR इंजन की तुलना में विलंबता (latency) में 4x से 10x तक बेहतर प्रदर्शन करने देती हैं, साथ ही सटीकता बराबर या उससे अधिक रहती है। यह लेख हमारे द्वारा शिप किए गए तीन पीढ़ी के OCR, प्रत्येक मॉडल के सटीकता और विलंबता आँकड़े, और OEM अनुबंध में OCR कैसे निर्दिष्ट करें, इस पर चर्चा करता है।
1. रीडिंग पेन में OCR की तीन पीढ़ियाँ
रीडिंग पेन बाज़ार 2015 से तीन OCR आर्किटेक्चर से गुज़रा है:
- पीढ़ी 1 (2020 से पहले): बिनराइज़ेशन, कनेक्टेड-कंपोनेंट एनालिसिस और टेम्पलेट मैचिंग के साथ क्लासिकल Tesseract-स्टाइल पाइपलाइन। लेगसी पेन में उपयोग किया गया। हमारे वर्तमान B1, B2 और P2 में Tesseract नहीं है; उनमें हमारा प्रॉप्रायटरी G1 इंजन है जो भावना में समान है।
- जनरेशन 2 (2020 से 2024): CRNN (CNN + bidirectional LSTM + CTC)। हमारा G2 इंजन F8, K7, KF1, Q6 और Y6 पर उपलब्ध है।
- पीढ़ी 3 (2024 से वर्तमान): लाइटवेट CNN फ़ीचर एक्सट्रैक्टर और सीक्वेंस मॉडलिंग के लिए छोटे ट्रांसफॉर्मर एनकोडर के साथ हाइब्रिड पाइपलाइन। हमारा G3 इंजन L5, Q8 और T2 पर शिप होता है।
प्रत्येक पीढ़ी सटीकता, विलंबता, मॉडल आकार और होस्ट CPU आवश्यकता के बीच अलग ट्रेडऑफ़ दर्शाती है। सही चुनाव इस बात पर निर्भर करता है कि आप किस रीडिंग पेन मॉडल को टार्गेट कर रहे हैं और उपयोगकर्ता किस प्रकार का टेक्स्ट स्कैन कर रहा है।
2. G1 इंजन: B1, B2 और P2 पर क्लासिकल पाइपलाइन
B1, B2 और P2 पर G1 इंजन एक 5-स्टेज क्लासिकल पाइपलाइन है:
- बिनराइज़ेशन: ISP आउटपुट पर Otsu की विधि।
- कनेक्टेड-कंपोनेंट एनालिसिस: उम्मीदवार कैरेक्टर ब्लॉब्स निकालता है।
- कैरेक्टर सेगमेंटेशन: ह्यूरिस्टिक स्ट्रोक-चौड़ाई मॉडल का उपयोग करके लिगेचर बाउंड्री पर ब्लॉब्स को विभाजित करता है।
- फ़ीचर एक्सट्रैक्शन: प्रति कैरेक्टर 64-बिन डायरेक्शनल फ़ीचर हिस्टोग्राम।
- क्लासिफिकेशन: 96-क्लास वन-वर्सेस-ऑल लीनियर SVM, प्रति समर्थित स्क्रिप्ट एक मॉडल।
कुल मॉडल आकार लैटिन के लिए 1.4 MB (96 कैरेक्टर x 14 KB प्रति क्लास), लैटिन + एक्सटेंडेड के लिए 2.8 MB, CJK बेसिक के लिए 3.5 MB (3,500 कैरेक्टर) है। P2 केवल लैटिन 1.4 MB में शिप होता है। B1 और B2 केवल लैटिन 1.4 MB में शिप होते हैं।
बच्चों की किताब से स्कैन किए गए 12-कैरेक्टर शब्द पर, P2 पर G1 इंजन कुल 65 ms में चलता है: 8 ms बिनराइज़ेशन, 14 ms कनेक्टेड-कंपोनेंट, 12 ms सेगमेंटेशन, 24 ms क्लासिफिकेशन, 7 ms डिक्शनरी लुकअप। पेन-डाउन से पहले ऑडियो तक एंड-टू-एंड विलंबता 95 ms से 120 ms है।
ICDAR 2015 रीडिंग पेन सबसेट पर G1 कैरेक्टर-स्तरीय सटीकता (हमारा क्यूरेट किया हुआ 1,200-इमेज बेंचमार्क, पब्लिक + प्राइवेट सैंपल से):
- स्वच्छ प्रिंटेड टेक्स्ट: 97.6%.
- टिंटेड बैकग्राउंड पर टेक्स्ट: 89.4%.
- ग्लॉसी पेपर पर टेक्स्ट: 91.2%.
- छोटे फ़ॉन्ट (8 pt से कम): 78.3%.
- एक ही लाइन में मिश्रित स्क्रिप्ट: 72.1%.
छोटे-फ़ॉन्ट और मिश्रित-स्क्रिप्ट के मामले कमज़ोर बिंदु हैं। 5 से 7 वर्ष के बच्चों के लिए शब्दावली पुस्तक के लिए, प्रिंटेड टेक्स्ट आमतौर पर 16 pt से 24 pt और स्वच्छ होता है, इसलिए G1 सटीकता स्वीकार्य है। बड़े विद्यार्थियों के लिए पाठ्यपुस्तक के लिए, छोटे-फ़ॉन्ट का मामला G1 सटीकता को 80% से नीचे खींच लेता है, इसलिए हम उस उपयोग के लिए B1, B2 या P2 की सिफ़ारिश नहीं करते।
3. G2 इंजन: F8, K7, KF1, Q6 और Y6 पर CRNN
G2 इंजन 7-लेयर CNN के बाद 2-लेयर बाइडायरेक्शनल LSTM और CTC डिकोडर का उपयोग करता है। आर्किटेक्चर 2015 के Shi et al. पेपर का मानक CRNN है, दो संशोधनों के साथ: (1) हम पैरामीटर काउंट को 4x कम करने के लिए depthwise-separable कन्वोल्यूशन का उपयोग करते हैं, और (2) बेहतर ऑन-डिवाइस स्थिरता के लिए batch norm को group norm से बदलते हैं।
मॉडल आकार है:
- लैटिन: 4.6 MB (float32), 1.4 MB (int8)।
- लैटिन + एक्सटेंडेड: 9.2 MB (float32), 2.7 MB (int8).
- CJK बेसिक: 18.4 MB (float32), 5.4 MB (int8)।
K7, KF1, Q6 और Y6 पर int8 मॉडल Cortex-A53 CPU पर 12-कैरेक्टर शब्द के लिए 38 ms में चलता है। F8 केवल float32 शिप करता है क्योंकि उसके होस्ट MCU में int8 एक्सेलरेशन नहीं है; F8 विलंबता 64 ms है।
उसी ICDAR 2015 रीडिंग पेन सबसेट पर G2 कैरेक्टर-स्तरीय सटीकता:
- स्वच्छ प्रिंटेड टेक्स्ट: 98.7%.
- टिंटेड बैकग्राउंड पर टेक्स्ट: 95.2%.
- ग्लॉसी पेपर पर टेक्स्ट: 96.0%.
- छोटे फ़ॉन्ट (8 pt से कम): 92.4%.
- एक ही लाइन में मिश्रित स्क्रिप्ट: 88.9%.
G2 छोटे फ़ॉन्ट और मिश्रित स्क्रिप्ट पर G1 की तुलना में अंतर को काफ़ी कम करता है। छोटे फ़ॉन्ट पर 92.4% पाठ्यपुस्तक उपयोग के लिए स्वीकार्य है। मिश्रित-स्क्रिप्ट पर 88.9% उन बाइलिंगल डिक्शनरी के लिए स्वीकार्य है जहाँ एक ही लाइन पर दो स्क्रिप्ट होते हैं।
4. G3 इंजन: L5, Q8 और T2 पर हाइब्रिड CNN + ट्रांसफॉर्मर
G3 इंजन एक हाइब्रिड है। CNN फ़्रंट-एंड 128 चैनल प्रति स्टेप पर 64-स्टेप फ़ीचर सीक्वेंस निकालता है। 4 अटेंशन हेड और 256 हिडन यूनिट वाला 4-लेयर ट्रांसफॉर्मर एनकोडर सीक्वेंस को मॉडल करता है। CTC डिकोडर ऊपर बैठता है, G2 के समान।
मॉडल आकार:
- लैटिन: 7.8 MB (float32), 2.3 MB (int8)।
- लैटिन + एक्सटेंडेड: 15.6 MB (float32), 4.6 MB (int8).
- CJK बेसिक: 31.2 MB (float32), 9.1 MB (int8)।
L5 पर int8 मॉडल CPU पर 12-कैरेक्टर शब्द के लिए 32 ms में चलता है। Q8 और T2 पर int8 मॉडल क्रमशः NPU पर 18 ms और 11 ms में चलता है।
ICDAR 2015 रीडिंग पेन सबसेट पर G3 कैरेक्टर-स्तरीय सटीकता:
- स्वच्छ प्रिंटेड टेक्स्ट: 99.2%.
- टिंटेड बैकग्राउंड पर टेक्स्ट: 97.4%.
- ग्लॉसी पेपर पर टेक्स्ट: 97.8%.
- छोटे फ़ॉन्ट (8 pt से कम): 95.9%.
- एक ही लाइन में मिश्रित स्क्रिप्ट: 94.6%.
G3 पहली ऐसी पीढ़ी है जो सभी 5 श्रेणियों में 95% पास करती है। ट्रांसफॉर्मर अटेंशन उन मिश्रित-स्क्रिप्ट लाइनों को डिसएम्बिग्यूएट करने में मदद करता है जहाँ G2 में LSTM संघर्ष करता है।
5. विलंबता और मेमोरी: तीनों पीढ़ियों की तुलना
12-कैरेक्टर शब्द पर पेन-डाउन से पहले डिकोडेड ऑडियो तक एंड-टू-एंड विलंबता:
| पीढ़ी | मॉडल आकार (int8) | होस्ट | विलंबता | RAM |
|---|---|---|---|---|
| G1 (B1/B2/P2) | 1.4 MB | Cortex-M4 | 95-120 ms | 2.1 MB |
| G2 (F8) | 4.6 MB (float32) | Cortex-A7 | 64 ms | 6.8 MB |
| G2 (K7/KF1/Q6/Y6) | 1.4 MB (int8) | Cortex-A53 | 38 ms | 4.2 MB |
| G3 (L5) | 2.3 MB | Cortex-A53 CPU | 32 ms | 5.1 MB |
| G3 (Q8) | 2.3 MB | 0.5 TOPS NPU | 18 ms | 5.1 MB |
| G3 (T2) | 2.3 MB | 1.2 TOPS NPU | 11 ms | 5.1 MB |
T2 पर G3 सबसे तेज़ है — 11 ms — लेकिन प्रति यूनिट $14.50 की लागत आती है। B1 पर G1 सबसे सस्ता है — प्रति यूनिट $3.80 — लेकिन 120 ms की विलंबता पर। सही विकल्प आपके उपयोग-मामले पर निर्भर करता है, यह नहीं कि कौन-सा इंजन "बेहतर" है।
6. सिर्फ़ Tesseract क्यों नहीं चलाएँ?
खरीदार कभी-कभी पूछते हैं कि हम Tesseract क्यों नहीं देते। तीन कारण हैं:
- Tesseract स्कैन किए गए दस्तावेज़ों के लिए डिज़ाइन किया गया है, वीडियो-रेट पेन-टिप इमेज के लिए नहीं। इसका बाइनराइज़ेशन और लेआउट विश्लेषण 300 DPI पेज स्कैन के लिए ट्यून किया गया है, 60 fps पेन-टिप स्ट्रीम के लिए नहीं। F8 पर Tesseract चलाने पर प्रति शब्द 320 ms लगते हैं, जो G2 से 8 गुना धीमा है।
- Tesseract का LSTM मॉडल लैटिन के लिए 33 MB है। G2 मॉडल 1.4 MB int8 है। K7 के 8 MB फ्लैश बजट में Tesseract फिट नहीं होता।
- ICDAR रीडिंग पेन सबसेट पर Tesseract की सटीकता 95.1% साफ़ टेक्स्ट और 86.3% छोटे फ़ॉन्ट है। G2 की 98.7% और 92.4% है। रीडिंग पेन के लिए जो भी मेट्रिक मायने रखती है, उसमें Tesseract हर जगह पीछे है।
यदि आपकी OEM आवश्यकता "Tesseract चलाना ज़रूरी है" है, तो आप गलत उत्पाद निर्दिष्ट कर रहे हैं। 11-मॉडल लाइनअप इसलिए है क्योंकि एक इंजन सभी उपयोग-मामलों में फिट नहीं होता।
7. हमेशा सबसे बड़ा मॉडल क्यों नहीं चलाएँ?
एक स्वाभाविक प्रश्न: अगर G3 ज़्यादा सटीक है, तो इसे हर मॉडल पर क्यों नहीं डालते? उत्तर है होस्ट CPU और फ्लैश बजट।
- B1 और B2 80 MHz पर Cortex-M4 क्लास MCU के साथ आते हैं। G3 किसी भी स्वीकार्य विलंबता पर नहीं चलेगा।
- P2 4 MB फ्लैश के साथ आता है। G3 लैटिन int8 = 2.3 MB + 0.8 MB डिक्शनरी + 0.4 MB फ़र्मवेयर = कुल 3.5 MB। ऑडियो एसेट्स के साथ फ्लैश पूरा भर जाता है।
- F8 800 MHz पर Cortex-A7 के साथ आता है। G3 int8 180 ms पर चलेगा, जो मानव-धारणा सीमा से ऊपर है।
इसलिए G3 को L5, Q8 और T2 तक सीमित रखा गया है, जहाँ होस्ट SoC में CPU और फ्लैश दोनों का हेडरूम है। बाकी 8 मॉडल G1 या G2 का उपयोग करते हैं।
8. एंड-टू-एंड ऑडियो पाइपलाइन का प्रभाव
OCR 5-चरण वाली पाइपलाइन का एक चरण है: ISP → टेक्स्ट डिटेक्शन (TC-128) → सेगमेंटेशन → OCR → डिक्शनरी लुकअप → TTS → ऑडियो आउट। OCR विलंबता आम तौर पर बॉटलनेक नहीं होती। ऑडियो बफ़र फ़िल, TTS सिंथेसिस और DAC स्टार्टअप मिलकर 30 ms से 60 ms जोड़ते हैं। इसलिए 38 ms बनाम 32 ms वाला OCR इंजन उपयोगकर्ता अनुभव नहीं बदलता। ज़्यादा मायने रखती है टेल विलंबता: 38 ms से 280 ms का 99वीं-पर्सेंटाइल स्पाइक ऑडियो को रुक-रुक कर लगवाता है।
हम 10,000 लगातार रिकग्निशन पर टेल विलंबता मापते हैं। L5 पर G3 की 99वीं-पर्सेंटाइल विलंबता 64 ms है (मीडियन 32 ms बनाम)। T2 पर G3 की 99वीं-पर्सेंटाइल 22 ms है (मीडियन 11 ms बनाम)। टेल DRAM कैश मिस और ऑडियो इंजन के साथ DMA contention से प्रेरित होता है; T2 में ज़्यादा RAM बैंडविड्थ है, इसलिए इसका टेल कसा हुआ है।
9. प्रशिक्षण डेटा और निरंतर सुधार
G3 मॉडल 47 देशों के 38,000 रीडिंग पेन उपयोगकर्ताओं से 2023 से संचयी रूप से एकत्र 6.2 मिलियन स्कैन की गई लाइनों के कॉर्पस पर प्रशिक्षित है। ये लाइनें 14 भाषाओं, 12 काग़ज़ प्रकारों और 9 फ़ॉन्ट परिवारों में फैली हैं। हम सिंथेटिक विकृतियों से ऑगमेंट करते हैं: परस्पेक्टिव वार्प, ब्लर, पेपर टेक्सचर, प्रिंटेड बैकग्राउंड, JPEG जैसे कंप्रेशन आर्टिफ़ैक्ट्स।
मॉडल हर तिमाही पुनः प्रशिक्षित होता है। प्रत्येक रिलीज़ ICDAR 2015 सबसेट पर और पिछली तिमाही से लिए गए 200,000-लाइन प्रोडक्शन सैंपल पर रिग्रेशन टेस्ट से गेटेड होती है। रिलीज़ तभी शिप की जाती है जब वह 14 समर्थित भाषाओं में से किसी को रिग्रेस किए बिना सटीकता को ≥ 0.2 प्रतिशत अंक से सुधारे।
खरीदार टिप:सप्लायर से पूछें कि OCR मॉडल कितनी बार पुनः प्रशिक्षित होता है और रिग्रेशन टेस्ट कॉर्पस कैसा दिखता है। जो वेंडर "जब समय मिलता है" पुनः प्रशिक्षित करता है, वह पुराना मॉडल शिप कर रहा है। हमारी तिमाही कैडेंस फ़र्मवेयर रिलीज़ नोट्स में प्रलेखित है।
10. OEM अनुबंध में OCR निर्दिष्ट करना
एक बचाव-योग्य OCR विशिष्टता में शामिल हैं:
- इंजन जनरेशन और मॉडल फ़ाइल साइज़।
- किसी नामित टेस्ट सेट पर कैरेक्टर-स्तरीय सटीकता (हम अनुरोध पर ICDAR 2015 रीडिंग पेन सबसेट शिप करते हैं)।
- 12-कैरेक्टर शब्द पर मीडियन और 99वीं-पर्सेंटाइल विलंबता।
- मेमोरी बजट (फ्लैश + RAM)।
- समर्थित स्क्रिप्ट्स।
- पुनः प्रशिक्षण कैडेंस और रिग्रेशन टेस्ट मेथडोलॉजी।
- प्रोडक्शन लाइन पर प्रति-मॉडल कैलिब्रेशन रिपोर्ट।
पाठ OCR से पहले कैसे पता लगाया जाता है, इसके बारे में अधिक जानकारी के लिए देखें रीडिंग पेन टेक्स्ट डिटेक्शन और सेगमेंटेशन. ISP कैसे OCR इंजन को फ़ीड करता है, इसके लिए देखें रीडिंग पेन कैमरा ISP और इमेज सिग्नल प्रोसेसर. YUV आउटपुट OCR इनपुट से कैसे मैप होता है, इसके लिए देखें रीडिंग पेन YUV बनाम RGB और कलर स्पेस. हस्तलिपि पहचान इंजन के लिए देखें रीडिंग पेन हैंडराइटिंग रिकग्निशन इंजन. अपनी सामग्री की तुलना हमारे ICDAR सबसेट से करने वाली बेंचमार्क रिपोर्ट का अनुरोध करने के लिए देखें /request-a-quote.
संबंधित पठन
- रीडिंग पेन टेक्स्ट डिटेक्शन और सेगमेंटेशन
- रीडिंग पेन कैमरा ISP और इमेज सिग्नल प्रोसेसर
- रीडिंग पेन हैंडराइटिंग रिकग्निशन इंजन
- रीडिंग पेन YUV बनाम RGB और कलर स्पेस
- रीडिंग पेन डिक्शनरी फ़ाइल फ़ॉर्मेट और एडिशन
- OID Reading Pen तकनीक कैसे काम करती है
पूरक पठन: दाएँ-से-बाएँ और ऊर्ध्वाधर लिपियों के लिए OCR
अरबी, हिब्रू और फ़ारसी के लिए OCR को भाषा-मॉडल स्तर पर दाएँ-से-बाएँ हैंडलिंग की आवश्यकता होती है, जिसे G2 और G3 इंजन मूल रूप से सपोर्ट करते हैं। OCR इंजन कैरेक्टर अनुक्रम को छवि से विज़ुअल क्रम में बाएँ-से-दाएँ आउटपुट करता है, और भाषा मॉडल अनुक्रम को सही तार्किक क्रम में उलटा और पुनः आकार देता है। 50,000-लाइन अरबी टेस्ट सेट पर सटीकता G3 T2 पर 94.8% और G2 K7 पर 91.6% है। लैटिन की तुलना में कम सटीकता जुड़े हुए अक्षर रूपों (प्रारंभिक, मध्य, अंतिम, अलग) के कारण है, जो प्रभावी वर्ग संख्या को चार गुना कर देते हैं।
ऊर्ध्वाधर लिपियों (पारंपरिक चीनी, जापानी, मंगोलियाई) के लिए, हम रोटेटेड एंकर बॉक्स के साथ एक अलग ऊर्ध्वाधर-पाठ मॉडल भेजते हैं। आर्किटेक्चर G3 जैसा ही है, लेकिन ट्रेनिंग सेट ऊर्ध्वाधर-लाइन क्रॉप्स का उपयोग करता है। यह मॉडल क्षैतिज मॉडल से 1.2x बड़ा है, 2.8 MB int8 पर। हम L5 पर ऊर्ध्वाधर-पाठ नहीं भेजते क्योंकि होस्ट CPU 35 ms विलंबता लक्ष्य को पूरा नहीं कर सकता; Q8 और T2 क्रमशः 22 ms और 14 ms पर ऊर्ध्वाधर-पाठ संभालते हैं।
मिश्रित-अभिविन्यास वाले पृष्ठ (एक क्षैतिज पैराग्राफ और एक ऊर्ध्वाधर साइडबार वाली पाठ्यपुस्तक) को पहले पूरे पृष्ठ पर क्षैतिज मॉडल चलाकर, फिर केवल उन क्षेत्रों पर ऊर्ध्वाधर मॉडल चलाकर संभाला जाता है जहाँ क्षैतिज मॉडल ने कम विश्वास लौटाया। यह चयनात्मक दृष्टिकोण Q8 पर पूरे पृष्ठ पर दोनों मॉडल चलाने के 36 ms की तुलना में औसत विलंबता को 19 ms पर रखता है।