देवनागरी OCR - मदत हवी आहे
या धाग्यावर OCR - Optical Character Recognition बद्दल थोडी चर्चा झालेली आहेच.
मला देवनागरी OCR सॉफ्टवेअर लिहायचं आहे. पूर्ण सॉफ्टवेरचं काम असं असेल - देवनागरी-मराठी लेखनाची प्रतिमा या सॉफ्टवेरला खायला घातली की ते युनिकोडीत टेक्स्ट परत देईल. हे करण्यामागे माझे बरेच हेतू आहेत -
१. सध्याचं कोणतंही OCR फार चांगलं आहे, असं दिसत नाहीये.
२. मला हा विषय शिकायचा आहे. हा विषय म्हणजे - विदा विज्ञान (Data Science), मशीन लर्निंग, पायथन इत्यादी.
३. ऐसीच्या विशेषांकासाठी कधी आस्की टंकांतले, कधी हातानं लिहिलेले, पण चांगले लेख येतात. ते बहुतेकदा पुन्हा टंकावे लागतात. हे टंकनकष्ट वाचतील.
हे सॉफ्टवेर पूर्णपणे मुक्तस्रोत असावं (अपवाद - कोणी मला पुरेसे पैसे देणार असल्यास अपवाद करावा लागेल.) असा माझा विचार आहे. पण हे काम बरंच मोठं आहे आणि पूर्ण होण्यासाठी किमान काही महिने लागतील असा अंदाज आहे. हे काम बरंच मोठं असल्यामुळे तुकड्या-तुकड्यांत करण्याचा विचार आहे आणि जमेल तसे अपडेट्सही देत राहीन.
त्यात सुरुवातीला मला मदत हवी आहे. ती म्हणजे हातानं लिहिलेला मजकूर हवा आहे. सुरुवात करताना जोडाक्षरांपासून करावी, असा विचित्र विचार आहे. पुढे काही वाक्यं दिलेली आहेत. ती शक्य तेवढ्या लोकांकडून लिहवून, त्याचे फोटो काढून पाठवा, अशी विनंती. दोन पेनांनी अक्षर निराळं येत असेल, दोन्ही हातांनी अक्षर निराळं येत असेल, घरात देवनागरी लिहू शकणारे बरेच लोक असतील तर एका प्रतिमेत वेगवेगळी अक्षरं असलेली वाक्यही पाठवा.
हे फोटो या इमेल पत्त्यावर पाठवा - 314aditi@जीमेल.com
हे वाक्य -
कित्येक तऱ्हेच्या अक्षरांच्या जोड्या बनवण्याचा प्रयत्न
फोटोची प्रत फार सुंदर असली पाहिजे, हस्ताक्षर फार सुंदर असलं पाहिजे, असा काहीही आग्रह नाही. फोटो बघून माणसांना वाचता आलं की झालं, एवढीच अपेक्षा आहे. दोन वाक्यांच्या प्रतिमा तोडून निराळ्या करता येतील इतपत मोकळी जागा मध्ये सोडा, ही विनंती.
उदाहरणार्थ, हा माझ्या डाव्या-उजव्या हातांनी लिहिलेल्या वाक्यांचा फोटो -

शब्दशः हजारोंच्या संख्येनं सामील व्हा. किमान काही हजार लोकांचं हस्ताक्षर आलं की त्यातून उपयुक्त मॉडेल बनवता येईल. त्यामुळे घरातले, ओळखीपाळखीचे, शेजारीपाजारी, नातेवाईक, सोबत काम करणारे, सगळ्यांनाच या उपक्रमासाठी मदत करायला सांगा, अशी विनंती.
हे सॉफ्टवेर लिहिण्यात इतर कोणाला रस असेल तर एकत्र काम करण्यात मला अडचण नाही. यात मदत लागेल ती फक्त सॉफ्टवेर लिहिण्यात हवी आहे असं नाही. सध्या या अशा प्रतिमा येतील, त्या कापून, एकेक वाक्य सुटं करण्यासाठीही मदत करायला कोणी तयार असल्यास उत्तम.
धाग्याचा प्रकार निवडा:
माहितीमधल्या टर्म्स
पहिली आणि शेवटची पायरी.
जुन्या पेपरांचे गठ्ठे
ही बहुदा शेवटची पायरी असेल.
सध्या रूपरेखा डोक्यात आहे ती अशी -
१. एक प्रतिमा एका न्यूरल नेटवर्कला द्यायची. त्यातून शब्द बाहेर पडतील.
२. मग एकेक शब्द पुढच्या न्यूरल नेटवर्कला द्यायचा, त्यातून सुटी अक्षरं बाहेर पडतील.
३. मग तिसरं अल्गोरिदम ही अक्षरं वाचून त्यांचे युनिकोड परत देईल.
सुरुवातीला पहिल्या पायरीवरच काम करायचा विचार आहे. अंदाज असा की एकच वाक्य असलं तरीही शब्द कुठे तोडायचे, हे अल्गोरिदमला शिकवता येईल. आणि कोणत्याही वाक्यासाठी ते चालेल. कारण मराठीत शब्दांवर आडव्या रेघांच्या टोप्याही असतात. शब्द योग्य प्रकारे तोडणं आणि अक्षरांना योग्य खोक्यात टाकणं, हे काम करणं कठीण असेल. कठीण काम सध्या मोजक्याच अक्षरांवर करून बघायचा विचार आहे.
४. ते सगळं झालं की चौथी पायरी, हे सगळं एकत्र करून पुन्हा वाक्य जोडून बाहेर पाठवायची. हे कामही आता पहिल्या पायरीत करून पुरेल.
पण छोटी सुरुवात करून हे काम किती सोपं वा कठीण आहे आणि मला झेपेल का, या दोन्ही गोष्टींचा अंदाज येईल.
माझे २ पैसे
सॉफ्टवेअर क्षेत्रात माझी गति शून्य आहे तरी एक प्रश्न मला सुचतो. तुम्हाला पायापासून उभारणी करायची असेल तर हस्तलिखित लेखन सुरुवातीलाच का घेता? हस्तलिखितात लिहिणाऱ्यानुसार हजारो पर्याय निघतील. त्यापेक्षा छापलेल्या मजकुरापासून सुरुवात करणे सोपे नाही का? तेहि सध्या उपलब्ध नाही. दोनांपैकी सोपा प्रश्न आधी सोडवून मग हस्तलिखिताकडे का जात नाही?
मी माझ्यासाठी जे रोमन लिपीचे OCR वापरतो त्याचा उपयोग जवळजवळ १०० टक्के छापील मजकुरावरच होतो. हस्तलिखित मजकूर OCR करण्याची वेळ कधीच येत नाही.
वैविध्य
छापील मजकूर सोपा हे मान्य आहे. पण अडचण अशी आहे की छापील मजकुरातून वैविध्य मिळणार नाही. वेगवेगळ्या लोकांनी लिहिलं की हस्ताक्षरातलं वैविध्य आपसूक मिळेल. म्हणून एकच वाक्य, मर्यादित अक्षरं अशी सुरुवात केली. त्यातल्या अडचणी बघून पुढे नक्की काय करायचं, याचा अंदाज येईल.
मराठीतही हस्तलिखित मजकूर OCR करण्याची वेळ बहुदा येणार नाही. पण न जाणो, कुणाला स्क्रीनवर लिहून त्याची अक्षरं बनवायची हौस असेल, तरीही यातलं मॉडेल वापरता येईल. (अशी एक यूज-केस सुचते.)
HPlabs has a sample dataset,
HPlabs has a sample dataset, you can try building a sample model from there.
Note: It is in no way representative of all symbols used in Devanagari. And it has isolated character as well as word level data. Building a predictive model like neural network from that data is rather easy with some preprocessing (i.e. transformation of pixel matrix into rows, then principal components etc. etc.) .
What is equally or more important is how the programme is able to split the text from a raw image. That would be more difficult.
HPlabs dataset link.
http://lipitk.sourceforge.net/hpl-datasets.htm
For printed text etc., you can try using Google's Tesseract and see what are its limitations.
वा वा! पाठविनार.
वा वा! पाठविनार.
चार्वी बहुदा प्राध्यापिका आहेत. त्यांच्याकडून जुन्या पेपरांचे गठ्ठे मागवले तर त्यात अक्षरश: शेकडो नमुने सापडतील. किंवा अन्य कुठल्या प्राध्यापकाला / महाविद्यालयाला गाठल्यास मिळेल.