2012-07-14 12 views
8

प्रदर्शित करने के लिए मैं वर्तमान में एंड्रॉइड पर ओसीआर के साथ खेल रहा हूं। इसलिए मैंने एक कैमरा पूर्वावलोकन के साथ एक छोटा ऐप लिखा और अब मैं अपने ऑनप्रूफ्रेम विधि से टेसरेक्टक्ट टूल्स (टेस-दो) छवियां खिला रहा हूं। अब मैं अपने कैमरा पूर्वावलोकन पर ओसीआर से बाध्यकारी रेक्टिकल प्रदर्शित करना चाहता हूं। टेसबेसैपीआई उन तरीकों को प्रदान करता है जो चरित्र/शब्द बाउडिंग बॉक्स लौटाते हैं। लौटाई गई वस्तु का प्रकार पिक्सा है, जैसा कि लेप्टनिका लाइब्रेरी में टेस-दो प्रदान किया गया है।एंड्रॉइड ओसीआर टेसेरैक्ट: पिक्सा ऑब्जेक्ट्स से डेटा का उपयोग करके बाउंडिंग बॉक्स

तो मेरा प्रश्न है: मैं प्रयोग करने योग्य निर्देशांक जो मैं Pixa वस्तुओं getCharacters() या getWords() TessBaseAPI से द्वारा लौटाए से मेरा कैमरा पूर्वावलोकन पर सीमांकन बॉक्स आकर्षित करने के लिए उपयोग कर सकते हैं कैसे मिलता है?

GetCharacters() and getWords() in the BaseAPI

leptonicas Pixa class

महत्वपूर्ण:

क्योंकि पूर्वावलोकन केवल समर्थित छवि प्रारूप YUV N21 है और जहाँ तक मैं क्या टेस-एपीआई पढ़ा है से ARGB_8888 बिटमैप मैं की आवश्यकता है टेस्पेपी को बिटमैप फ़ीड करने से पहले मेरे ऑनप्रूफ्रेम विधि में निम्नलिखित कार्यवाही करें: (मैं 90 डिग्री घड़ी की दिशा में घूम रहा हूं क्योंकि मैं पोर्ट्रेट अभिविन्यास में कैमरा का उपयोग कर रहा हूं, लेकिन कैमरे previe डब्ल्यू फ्रेम परिदृश्य में आते हैं)

//byte[] bmpdata <- the image in a byte array (NV21 Imageformat) in onPreviewFrame 
YuvImage yuvimage = new YuvImage(bmpdata,ImageFormat.NV21,width,height,null); 

ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
Rect rect = new Rect(0, 0, width, height); 
yuvimage.compressToJpeg(rect, 100, outStream); 

Bitmap bmp = BitmapFactory.decodeByteArray(outStream.toByteArray(),0,outStream.size()); 

Matrix mtx = new Matrix(); 
mtx.preRotate(90); 
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mtx, false); 
bmp = bmp.copy(Bitmap.Config.ARGB_8888, true); 

TessTBaseApi.setImage(bmp); 

तो बुनियादी तौर पर, मैं एक YuvImage में NV21 बाइट [] मैं कैमरे से मिला सेक, तो एक jpeg में, और एक बिटमैप में वहाँ से। मैंने NV21 सरणी से बिटमैप/जेपीईजी कैसे प्राप्त करें इस समाधान के लिए वेब को बहुत खोजा और यह सबसे आसान मुझे मिला। यह बिटमैप टेसरेक्ट टूल्स ओसीआर को खिलाया जाएगा। यह मुझे मेरे दूसरे प्रश्न पर लाता है:

कैसे, इन संपीड़न और 90 डिग्री रोटेशन के बाद, क्या मुझे पता चलता है कि मुझे स्क्रीन पर बॉक्स कहां खींचना है? (संपीड़न और घूर्णन से पहले)

यह लाइव फ्रेम के साथ ओसीआर की आपूर्ति करने का सबसे अच्छा या यहां तक ​​कि एक अच्छा तरीका नहीं हो सकता है, मैं बहुत अधिक टिप्पणियों, अन्य समाधान या अनुकूलन के तरीकों के सुझावों की सराहना करता हूं।

मैंने दो दिन पहले इस परियोजना को शुरू किया था और एंड्रॉइड और ओसीआर के लिए प्रोग्रामिंग में बहुत शुरुआत कर रहा हूं। इन दो दिनों के दौरान इस पृष्ठ ने मुझे बहुत मदद की और उन प्रश्नों का उत्तर दिया जिनके पास अब तक बहुत अच्छा था, इसलिए इसके लिए धन्यवाद और मेरी वर्तमान समस्या के साथ मेरी मदद करने के लिए अग्रिम धन्यवाद। यदि आप अधिक कोड देखना चाहते हैं या आपके पास प्रश्न हैं, तो मैं जो कुछ भी कर सकता हूं उसका उत्तर देने के लिए आपूर्ति और प्रसन्नता होगी।

अभिवादन

आप पूरी एपीआई sourcecode गर्त GitHub Pixa वर्ग और GetCharacters गर्त पर ब्राउज़ कर सकते हैं() लिंक, नहीं कर सकते अधिक हाइपरलिंक सम्मिलित करें।

उत्तर

14

TessTBaseApi.getWords().getBoxRects() आपके bmp बिटमैप के सापेक्ष निर्देशांक के साथ बाउंडिंग बॉक्स Rects की एक ऐरेलिस्ट लौटाएगा।

+0

धन्यवाद, बिल्कुल वही जो मैं खोज रहा था! यह एक पिटी है कि मैं तुम्हें ऊपर नहीं उठा सकता। – Jones

संबंधित मुद्दे