বেশিরভাগ কৃতিত্ব কিরণ, কুল, 1 "এবং স্টিভাইলসকে ওপেনকভি.আর.গুয়েজে তাদের ব্যাখ্যাগুলির জন্য দিয়ে গেছে I'm আমি এই উত্তরটি যুক্ত করছি কারণ আমার বিশ্বাস যে অ্যান্ড্রয়েড স্টুডিওর ইন্টারফেস এখন এই ধরণের ইন্টিগ্রেশন স্টাফের সাথে কাজ করার পক্ষে যথেষ্ট স্থিতিশীল is এছাড়াও আমাদের প্রকল্পের জন্য আমাকে এই নির্দেশাবলী লিখতে হবে।
অভিজ্ঞ এএস বিকাশকারীরা এই পেডেন্টিকের কিছু খুঁজে পাবেন। এই উত্তরটি অ্যান্ড্রয়েড স্টুডিওতে সীমিত অভিজ্ঞতার সাথে লক্ষ্যযুক্ত targeted
প্রকল্প উইজার্ড ব্যবহার করে একটি নতুন অ্যান্ড্রয়েড স্টুডিও প্রকল্প তৈরি করুন (মেনু: / ফাইল / নতুন প্রকল্প):
- এটিকে " সিভিটেস্ট 1 " বলুন
- ফর্ম ফ্যাক্টর: API 19, Android 4.4 (KitKat)
খালি ক্রিয়াকলাপটির নাম মেইনএকটিভিটি
এই প্রকল্পটি যেখানে সঞ্চিত আছে আপনার একটি সিভেস্টেস্ট 1 ডিরেক্টরি থাকতে হবে। (অ্যান্ড্রয়েড স্টুডিওর শিরোনাম দণ্ডটি আপনাকে দেখায় যে আপনি যখন প্রকল্পটি খুলবেন তখন cvtest1 কোথায় থাকে)
আপনার অ্যাপটি সঠিকভাবে চলেছে তা যাচাই করুন। বিল্ড / পরীক্ষার চক্র আপনার পক্ষে ঠিক আছে কিনা তা নিশ্চিত করতে "হ্যালো ওয়ার্ল্ড" পাঠ্যের মতো কিছু পরিবর্তন করার চেষ্টা করুন। (আমি একটি এপিআই 19 ডিভাইসের এমুলেটর দিয়ে পরীক্ষা করছি)।
অ্যান্ড্রয়েড v3.1.0 এর জন্য ওপেনসিভি প্যাকেজটি ডাউনলোড করুন এবং কোথাও কোনও অস্থায়ী ডিরেক্টরিতে এটি আনজিপ করুন। (নিশ্চিত করুন এটি Android এর জন্য বিশেষভাবে প্যাকেজ এবং মাত্র জাভা প্যাকেজের জন্য OpenCV।) আমি এই ডিরেক্টরির "ডাকবো আনজিপ-Dir " নিচে আনজিপ-Dir আপনি একটি থাকতে হবে SDK / নেটিভ / লিব সাবডিরেক্টরি যে দিয়ে শুরু সঙ্গে ডিরেক্টরি বাহু ..., মিপস ... এবং x86 ... এর মতো জিনিসগুলি (প্রতিটি ধরণের "আর্কিটেকচার" এর জন্য একটি অ্যান্ড্রয়েড চালু রয়েছে)
অ্যান্ড্রয়েড স্টুডিও থেকে আপনার প্রকল্পে মডিউল হিসাবে ওপেনসিভি আমদানি করুন: মেনু: / ফাইল / নতুন / আমদানি_মডুল :
- উত্স-ডিরেক্টরি: z আনজিপ-দির} / এসডিকে / জাভা
- মডিউলটির নাম: অ্যান্ড্রয়েড স্টুডিওগুলি স্বয়ংক্রিয়ভাবে এই ক্ষেত্রটি ওপেনসিভিলিবারিয়ান310 দিয়ে পূর্ণ হয় (সঠিক নামটি সম্ভবত কিছু যায় আসে না তবে আমরা এটি নিয়ে যাব)।
পরবর্তী ক্লিক করুন । আপনি তিনটি চেকবক্স এবং একটি জার, লাইব্রেরি এবং আমদানি বিকল্প সম্পর্কে প্রশ্ন সহ একটি স্ক্রিন পাবেন। তিনটিই চেক করা উচিত। সমাপ্তিতে ক্লিক করুন ।
অ্যান্ড্রয়েড স্টুডিও মডিউলটি আমদানি করতে শুরু করে এবং আপনাকে একটি আমদানি- সারাংশ.টিএসটি ফাইল দেখানো হয় যার মধ্যে কী কী আমদানি করা হয়নি (বেশিরভাগ জাভাদোক ফাইল) এবং অন্যান্য টুকরো তথ্যের একটি তালিকা রয়েছে।
কিন্তু আপনাকে একটি ত্রুটির বার্তা য়ে পেতে হ্যাশ STRING 'অ্যান্ড্রয়েড-14' সঙ্গে লক্ষ্য সন্ধান করতে ব্যর্থ হয়েছে ... । এটি ঘটেছিল কারণ আপনি ডাউনলোড করেছেন ওপেনসিভি জিপ ফাইলের বিল্ড.gradle ফাইলটি অ্যান্ড্রয়েড এপিআই সংস্করণ 14 ব্যবহার করে সংকলন করতে বলে, যা ডিফল্টরূপে আপনার অ্যান্ড্রয়েড স্টুডিও ভি 1.4.1 নেই।
প্রকল্প কাঠামো কথোপকথনটি খুলুন ( মেনু: / ফাইল / প্রজেক্ট_সঠন )। "অ্যাপ" মডিউলটি নির্বাচন করুন, নির্ভরতা ট্যাবে ক্লিক করুন এবং মডিউল নির্ভরতা হিসাবে ওপেনসিভিলিবারিয়ান310 যুক্ত করুন । আপনি যখন যোগ / মডিউল_নির্ভরতা নির্বাচন করেন এটি আপনার যোগ করতে পারে এমন মডিউলগুলির তালিকায় উপস্থিত হওয়া উচিত। এটি এখন নির্ভরতা হিসাবে প্রদর্শিত হবে তবে ইভেন্ট লগে আপনি আরও কিছু খুঁজে পাওয়া যায় না-অ্যান্ড্রয়েড -14 ত্রুটি পাবেন।
অল্পক্ষণের build.gradle আপনার অ্যাপ মডিউলের জন্য ফাইল। একটি অ্যান্ড্রয়েড প্রকল্পে একাধিক বিল্ড.gradle ফাইল রয়েছে। আপনি যেটি চান সেটি সিভিটেস্ট 1 / অ্যাপ ডিরেক্টরিতে এবং প্রকল্পের ভিউ থেকে এটি বিল্ড.gradle (মডিউল: অ্যাপ) এর মতো দেখাচ্ছে । এই চারটি ক্ষেত্রের মানগুলি নোট করুন:
- কম্পাইল এসডি কে ভার্সন (আমার বলছে 23)
- বিল্ডটুলস ভার্সন (আমার বলছে 23.0.2)
- minSdkVersion (আমার বলছে 19)
- টার্গেটএসডিভি ভার্সন (আমার বলছে 23)
আপনার প্রকল্পের এখন একটি সিভিটেস্ট 1 / ওপেনসিভিলিবারিয়ান310 ডিরেক্টরি রয়েছে তবে এটি প্রকল্পের দর্শন থেকে দৃশ্যমান নয়:
অন্য কোনও সরঞ্জাম যেমন কোনও ফাইল ম্যানেজার ব্যবহার করুন এবং এই ডিরেক্টরিতে যান। আপনি প্রকল্পের ভিউটি অ্যানড্রয়েড থেকে প্রজেক্ট ফাইলগুলিতে স্যুইচ করতে পারেন এবং এই স্ক্রিনশটটিতে প্রদর্শিত হিসাবে আপনি এই ডিরেক্টরিটি পেতে পারেন:
আপনার প্রকল্পটি পুনরায় সেট করুন এবং তারপরে এটি পরিষ্কার / পুনর্নির্মাণ করুন। (মেনু: / বিল্ড / ক্লিন_প্রজেক্ট ) এটি ত্রুটি ছাড়াই পরিষ্কার করা উচিত এবং বিল্ড করা উচিত এবং আপনার 0: বার্তা স্ক্রিনে ওপেনসিভিলিবারিয়ান310 এর অনেকগুলি উল্লেখ দেখতে হবে।
এই মুহুর্তে মডিউলটি অ্যাপের মতো ওপেনসিভিলিবারিয়ান310 হিসাবে প্রকল্পের শ্রেণিবিন্যাসে উপস্থিত হওয়া উচিত । (নোট করুন যে সেই ছোট ড্রপ-ডাউন মেনুতে আমি প্রজেক্ট ভিউ থেকে অ্যান্ড্রয়েড ভিউতে ফিরে এসেছি )। "গ্রেডল স্ক্রিপ্টস" এর অধীনে আপনার একটি অতিরিক্ত বিল্ড.gradle ফাইলও দেখতে পাওয়া উচিত তবে আমি অ্যান্ড্রয়েড স্টুডিও ইন্টারফেসটি কিছুটা চটকদার দেখতে পেয়েছি এবং কখনও কখনও এটি এখনই ঠিক এটি করে না। তাই অ্যান্ড্রয়েড স্টুডিও পুনরায় চালু করার পরেও পুনরায় সংশোধন, পরিষ্কার করার চেষ্টা করুন।
এই স্ক্রিনশটের মতো জাভাতে থাকা সমস্ত ওপেনসিভি ফাংশন সহ আপনার ওপেনসিভিএলিব্রি3৩ মডিউলটি দেখতে হবে:
কপি {আনজিপ-Dir} / SDK / নেটিভ / লিব , তখনই আপনার Android প্রকল্পে ডিরেক্টরি (এবং অধীনে সবকিছু) এর cvtest1 / OpenCVLibrary310 / src / প্রধান / , এবং তারপর থেকে আপনার কপি নামান্তর লিব করার jniLibs । আপনার এখন একটি সিভেস্টেস্ট 1 / ওপেনসিভিলিবারিয়ান310 / এসসিআর / মেইন / জনিলিব ডিরেক্টরি থাকা উচিত। আপনার প্রকল্পটি পুনরায় সেট করুন এবং এই ডিরেক্টরিটি এখন ওপেনসিভিলিবারিয়ান310 এর অধীনে প্রকল্পের দৃশ্যে উপস্থিত হওয়া উচিত ।
এর onCreate পদ্ধতি যান MainActivity.java এবং এই কোড যোগ:
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
তারপরে আপনার অ্যাপ্লিকেশনটি চালান। আপনার এন্ড্রয়েড মনিটরে এর মতো লাইনগুলি দেখা উচিত:
(ত্রুটি বার্তার সাথে সেই লাইনটি কেন আছে তা আমি জানি না)
এখন কিছু ওপেনসিভি কোড ব্যবহার করার চেষ্টা করুন। নীচের উদাহরণে আমি অ্যান্ড্রয়েড এমুলেটরটিতে সিভিটেস্ট 1 অ্যাপ্লিকেশনটির ক্যাশে ডিরেক্টরিতে একটি .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);
আপনার অ্যাপ্লিকেশন চালান। আপনার এমুলেটরটি একটি কালো এবং সাদা "প্রান্ত" চিত্র তৈরি করা উচিত। আউটপুটটি পুনরুদ্ধার করতে আপনি অ্যান্ড্রয়েড ডিভাইস মনিটর ব্যবহার করতে পারেন বা এটি দেখানোর জন্য কোনও ক্রিয়াকলাপ লিখতে পারেন।