Android
Android स्टूडियो में OpenCV को एकीकृत करें
खोज…
टिप्पणियों
खोज इंजन का उपयोग करके वेब पर ओपन सीवी लाइब्रेरी पाई जा सकती है।
द गोचच :
- यदि आप किटकैट के नीचे अपना टारगेट प्लेटफ़ॉर्म कम करते हैं, तो OpenCV के कुछ पुस्तकालय अब कार्य नहीं करेंगे, विशेष रूप से org.opencv.android.Camera2Renderer और अन्य संबंधित कक्षाओं से संबंधित कक्षाएं। आप शायद इसके आस-पास प्राप्त कर सकते हैं बस Apprpriate OpenCV .java फ़ाइलों को हटाकर।
- यदि आप अपना टारगेट प्लेटफ़ॉर्म लॉलीपॉप या इसके बाद के संस्करण में फ़ाइल लोड करने के मेरे उदाहरण के लिए बढ़ाते हैं, तो हो सकता है कि पूर्ण फ़ाइल पथों का उपयोग करने पर कोई समस्या न हो। इसलिए आपको गैलरी या कहीं और से फ़ाइल लोड करने के लिए उदाहरण बदलना पड़ सकता है। वहाँ कई उदाहरण तैर रहे हैं।
अनुदेश
AS.4.4.1 के साथ परीक्षण किया गया, लेकिन नए संस्करणों के साथ भी काम करना चाहिए।
प्रोजेक्ट विज़ार्ड का उपयोग करके एक नया Android स्टूडियो प्रोजेक्ट बनाएं (मेनू: / फ़ाइल / नई परियोजना):
- इसे " cvtest1 " कहें
- फार्म फैक्टर: एपीआई 19, एंड्रॉयड 4.4 (किटकैट)
- ब्लांक एक्टिविटी जिसका नाम मेनऐक्टिविटी है
आपके पास एक cvtest1 निर्देशिका होनी चाहिए जहां यह प्रोजेक्ट संग्रहीत है। (एंड्रॉइड स्टूडियो का टाइटल बार आपको दिखाता है कि प्रोजेक्ट को खोलते समय cvtest1 कहां है)
सत्यापित करें कि आपका ऐप सही तरीके से चलता है। निर्माण / परीक्षण चक्र आपके लिए ठीक है, यह पुष्टि करने के लिए "हैलो वर्ल्ड" टेक्स्ट जैसा कुछ बदलने का प्रयास करें। (मैं एक एपीआई 19 डिवाइस के एक एमुलेटर के साथ परीक्षण कर रहा हूं)।
Android v3.1.0 के लिए OpenCV पैकेज डाउनलोड करें और इसे कहीं अस्थायी निर्देशिका में अनज़िप करें। (सुनिश्चित करें कि यह Android के लिए विशेष रूप से पैकेज है और न सिर्फ जावा पैकेज के लिए OpenCV।) मैं इस निर्देशिका "unzip-निर्देशिका" नीचे unzip-निर्देशिका फोन करता हूँ आप सबडायरेक्टरियों के साथ शुरू के साथ एक एसडीके / देशी / libs निर्देशिका होना चाहिए हाथ जैसी चीजें ..., मिप्स ... और x86 ... (प्रत्येक प्रकार के "आर्किटेक्चर" के लिए एंड्रॉइड चलता है)
एक मॉड्यूल के रूप में अपनी परियोजना में Android स्टूडियो आयात OpenCV से: मेनू: / फ़ाइल / नया / आयात_आवेदन :
- स्रोत-निर्देशिका: {unzip-dir} / sdk / java
- मॉड्यूल का नाम: Android स्टूडियो स्वतः ही इस क्षेत्र में OpenCVLibrary310 से भर जाता है (सटीक नाम शायद कोई फर्क नहीं पड़ता, लेकिन हम इसके साथ जाएंगे)।
- नेक्स्ट पर क्लिक करें। आपको तीन चेकबॉक्स के साथ एक स्क्रीन मिलती है और जार, लाइब्रेरी और आयात विकल्पों के बारे में प्रश्न पूछे जाते हैं। तीनों की जांच होनी चाहिए। समाप्त पर क्लिक करें।
एंड्रॉइड स्टूडियो मॉड्यूल को आयात करना शुरू कर देता है और आपको एक आयात-सारांश.टैक्स फ़ाइल दिखाई जाती है जिसमें एक सूची होती है जो आयात नहीं की गई थी (ज्यादातर javadoc फाइलें) और अन्य जानकारी के टुकड़े।
लेकिन आपको एक त्रुटि संदेश यह कहते हुए भी मिला है कि हैश स्ट्रिंग 'एंड्रॉइड -14' के साथ लक्ष्य खोजने में विफल रहा है ...। ऐसा इसलिए होता है क्योंकि आपके द्वारा डाउनलोड की गई OpenCV ज़िप फ़ाइल में build.gradle फ़ाइल एंड्रॉइड एपीआई संस्करण 14 का उपयोग करके संकलन करने के लिए कहती है, जो कि डिफ़ॉल्ट रूप से आपके पास Android स्टूडियो v1.4.1 के साथ नहीं है।
प्रोजेक्ट संरचना संवाद खोलें ( मेनू: / फ़ाइल / Project_Structure )। "ऐप" मॉड्यूल का चयन करें, डिपेंडेंसी टैब पर क्लिक करें और जोड़ें : OpenCVLibrary310 एक मॉड्यूल डिपेंडेंसी के रूप में। जब आप Add / Module_D निर्भरता का चयन करते हैं तो यह आपके द्वारा जोड़े जा सकने वाले मॉड्यूल की सूची में दिखाई देना चाहिए। यह अब एक निर्भरता के रूप में दिखाई देगा, लेकिन आपको इवेंट लॉग में कुछ और नहीं मिल सकता है-एंड्रॉइड -14 त्रुटियां।
अपने ऐप मॉड्यूल के लिए build.gradle फ़ाइल में देखें। एंड्रॉइड प्रोजेक्ट में कई बिल्ड.ग्रेडल फाइलें हैं। आप जो चाहते हैं वह cvtest1 / app डायरेक्टरी में है और प्रोजेक्ट व्यू से बिल्ड.ग्रेड (मॉड्यूल: ऐप) जैसा दिखता है। इन चार क्षेत्रों के मूल्यों पर ध्यान दें:
- compileSDKVersion (मेरा कहना है कि 23)
- buildToolsVersion (मेरा कहना है कि 23.0.2)
- minSdkVersion (मेरा कहना है कि 19)
- targetSdkVersion (मेरा कहना है कि 23)
आपकी परियोजना में अब cvtest1 / OpenCVLibrary310 निर्देशिका है, लेकिन यह परियोजना दृश्य से दिखाई नहीं देती है:
किसी अन्य उपकरण का उपयोग करें, जैसे कोई फ़ाइल प्रबंधक, और इस निर्देशिका पर जाएं। आप एंड्रॉइड से प्रोजेक्ट फाइलों में प्रोजेक्ट व्यू को भी स्विच कर सकते हैं और इस निर्देशिका को आप इस स्क्रीनशॉट में दिखाए अनुसार पा सकते हैं:
अंदर एक और build.gradle फ़ाइल है (यह ऊपर स्क्रीनशॉट में हाइलाइट किया गया है)। चरण 6 से चार मानों के साथ इस फ़ाइल को अपडेट करें।
अपनी परियोजना को फिर से व्यवस्थित करें और फिर इसे साफ / पुनर्निर्माण करें। ( मेनू: / बिल्ड / Clean_Project ) यह त्रुटियों के बिना साफ और निर्माण करना चाहिए और आपको कई संदर्भों को देखना चाहिए : 0: संदेश स्क्रीन में OpenCVLibrary310 ।
इस बिंदु पर मॉड्यूल को परियोजना की तरह पदानुक्रम में दिखाई देना चाहिए, जैसे कि ऐप की तरह OpenCVLibrary310 । (ध्यान दें कि उस छोटे ड्रॉप-डाउन मेनू में मैंने प्रोजेक्ट व्यू से एंड्रॉइड व्यू पर वापस स्विच किया)। आपको " ग्रैडल स्क्रिप्स" के तहत एक अतिरिक्त बिल्ड.ग्रेड फ़ाइल भी देखनी चाहिए, लेकिन मुझे एंड्रॉइड स्टूडियो इंटरफ़ेस थोड़ा गड़बड़ लगता है और कभी-कभी यह तुरंत ऐसा नहीं करता है। इसलिए एंड्रॉइड स्टूडियो को फिर से शुरू करने, फिर से शुरू करने, साफ करने की कोशिश करें।
आपको इस स्क्रीनशॉट की तरह java के तहत सभी OpenCV फ़ंक्शन के साथ OpenCVLibrary310 मॉड्यूल देखना चाहिए:
, अपने Android परियोजना के लिए {unzip-निर्देशिका} / SDK / देशी / libs निर्देशिका (और यह के अंतर्गत सब कुछ) कॉपी cvtest1 को / OpenCVLibrary310 / src / मुख्य /, और फिर jniLibs को libs से अपनी कॉपी नाम बदलें। अब आपके पास cvtest1 / OpenCVLibrary310 / src / main / jniLibs डायरेक्टरी होनी चाहिए। अपनी परियोजना को पुन: व्यवस्थित करें और यह निर्देशिका अब खुले दृश्य के तहत परियोजना दृश्य 310 में दिखाई देनी चाहिए।
MainActivity.java की onCreate विधि पर जाएं और इस कोड को जोड़ें:
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
फिर अपना एप्लिकेशन रन करें। आपको एंड्रॉइड मॉनिटर में इस तरह की लाइनें देखनी चाहिए:
(मुझे नहीं पता कि त्रुटि संदेश के साथ वह लाइन क्यों है)
- अब वास्तव में कुछ OpenCV कोड का उपयोग करने का प्रयास करें। नीचे दिए गए उदाहरण में मैंने एंड्रॉइड एमुलेटर पर cvtest1 एप्लिकेशन की कैश निर्देशिका में एक .jpg फ़ाइल की प्रतिलिपि बनाई। नीचे दिया गया कोड इस छवि को लोड करता है, कैनी एज डिटेक्शन एल्गोरिथ्म चलाता है और फिर उसी निर्देशिका में वापस .png फ़ाइल के लिए परिणाम लिखता है।
Put this code just below the code from the previous step and alter it to match your own files/directories.
String inputFileName="simm_01";
String inputExtension = "jpg";
String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o
String outputDir = getCacheDir().getAbsolutePath();
String outputExtension = "png";
String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
Mat image = Imgcodecs.imread(inputFilePath);
Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
// if width is 0 then it did not read your image.
// for the canny edge detection algorithm, play with these to see different results
int threshold1 = 70;
int threshold2 = 100;
Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method
Imgproc.Canny(image, im_canny, threshold1, threshold2);
String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
Imgcodecs.imwrite(cannyFilename, im_canny);
- अपना एप्लिकेशन चलाएं। आपके एमुलेटर को एक काली और सफेद "बढ़त" छवि बनानी चाहिए। आप आउटपुट प्राप्त करने या इसे दिखाने के लिए कोई गतिविधि लिखने के लिए Android डिवाइस मॉनिटर का उपयोग कर सकते हैं।