OpenCV v3.1.0 को एंड्रॉइड स्टूडियो v1.4.1 में समेकित करना , अतिरिक्त विवरण के साथ निर्देश और यह है-क्या-क्या-आप-चाहिए-प्रकार के स्क्रीनशॉट।
अधिकांश श्रेय किरण, कूल, 1 ”और स्टीव लाइल्स को जाता है, क्योंकि वे स्पष्टीकरण के लिए opencv.org पर हैं। मैं इस उत्तर को जोड़ रहा हूं क्योंकि मेरा मानना है कि एंड्रॉइड स्टूडियो का इंटरफ़ेस अब इस प्रकार के एकीकरण सामान पर काम करने के लिए पर्याप्त स्थिर है। इसके अलावा, मुझे इन निर्देशों को हमारी परियोजना के लिए वैसे भी लिखना होगा।
अनुभवी एएस डेवलपर्स को इस पांडित्य में से कुछ मिलेंगे। यह उत्तर एंड्रॉइड स्टूडियो में सीमित अनुभव वाले लोगों पर लक्षित है।
प्रोजेक्ट विज़ार्ड का उपयोग करके एक नया 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 के साथ भरता है (सटीक नाम शायद कोई फर्क नहीं पड़ता, लेकिन हम इसके साथ जाएंगे)।
नेक्स्ट पर क्लिक करें । आपको तीन चेकबॉक्स के साथ एक स्क्रीन मिलती है और जार, लाइब्रेरी और आयात विकल्पों के बारे में प्रश्न पूछे जाते हैं। तीनों की जांच होनी चाहिए। समाप्त पर क्लिक करें।
एंड्रॉइड स्टूडियो मॉड्यूल को आयात करना शुरू कर देता है और आपको एक आयात-सारांश.टैक्स फ़ाइल दिखाई जाती है जिसमें आयात नहीं की गई सूची (ज्यादातर जावदॉक फाइलें) और अन्य जानकारी के टुकड़े होते हैं।
लेकिन क्या आप भी एक त्रुटि संदेश कह मिल हैश स्ट्रिंग 'एंड्रॉयड -14' के साथ लक्ष्य पाने में विफल रहे ... । ऐसा इसलिए होता है क्योंकि आपके द्वारा डाउनलोड की गई OpenCV ज़िप फ़ाइल में build.gradle फ़ाइल Android API संस्करण 14 का उपयोग करके संकलन करने के लिए कहती है, जो डिफ़ॉल्ट रूप से आपके पास Android Studio 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 ।
इस बिंदु पर मॉड्यूल को परियोजना की तरह पदानुक्रम में खुलेआम दिखाई देना चाहिए , जैसे कि ऐप की तरह । (ध्यान दें कि उस छोटे ड्रॉप-डाउन मेनू में मैंने प्रोजेक्ट व्यू से एंड्रॉइड व्यू पर वापस स्विच किया )। आपको " ग्रैडल स्क्रिप्स" के तहत एक अतिरिक्त बिल्ड.ग्रेड फ़ाइल भी देखनी चाहिए, लेकिन मुझे एंड्रॉइड स्टूडियो इंटरफ़ेस थोड़ा गड़बड़ लगता है और कभी-कभी यह तुरंत ऐसा नहीं करता है। इसलिए एंड्रॉइड स्टूडियो को फिर से शुरू करने, सफाई करने की कोशिश करें।
आपको इस स्क्रीनशॉट की तरह java के तहत सभी OpenCV फ़ंक्शन के साथ OpenCVLibrary310 मॉड्यूल देखना चाहिए:
कॉपी {unzip-निर्देशिका} / SDK / देशी / libs , अपने Android परियोजना के लिए निर्देशिका (और यह के अंतर्गत सब कुछ) को cvtest1 / OpenCVLibrary310 / src / मुख्य / , और फिर से अपनी कॉपी का नाम बदलने libs को jniLibs । अब आपके पास 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 फ़ाइल के लिए परिणाम लिखता है।
इस कोड को पिछले चरण से कोड के ठीक नीचे रखें और इसे अपनी फ़ाइलों / निर्देशिकाओं से मिलान करने के लिए बदल दें।
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 डिवाइस मॉनिटर का उपयोग कर सकते हैं।
द गोचच :
- यदि आप किटकैट के नीचे अपना टारगेट प्लेटफ़ॉर्म कम करते हैं, तो OpenCV के कुछ पुस्तकालय अब कार्य नहीं करेंगे, विशेष रूप से org.opencv.android.Camera2Renderer और अन्य संबंधित कक्षाओं से संबंधित कक्षाएं। आप शायद लगभग OpenCV .java फ़ाइलों को हटाकर इसके चारों ओर प्राप्त कर सकते हैं।
- यदि आप अपना टारगेट प्लेटफ़ॉर्म लॉलीपॉप तक बढ़ाते हैं या फ़ाइल लोड करने के मेरे उदाहरण से ऊपर काम नहीं कर सकते हैं क्योंकि निरपेक्ष फ़ाइल रास्तों का उपयोग पर आधारित है। इसलिए आपको गैलरी या कहीं और से फ़ाइल लोड करने के लिए उदाहरण बदलना पड़ सकता है। ऐसे कई उदाहरण हैं जो तैर रहे हैं।