opencv
Android में OpenCV आरंभीकरण
खोज…
Async प्रारंभ
Async आरंभीकरण का उपयोग अनुप्रयोग विकास के लिए एक अनुशंसित तरीका है। यह OpenCV प्रबंधक का उपयोग OpenCV पुस्तकालयों को लक्ष्य प्रणाली में बाहरी रूप से स्थापित करने के लिए करता है।
कोड स्निपेट एस्किंक इनिशियलाइज़ेशन को लागू करता है:
public class MainActivity extends Activity implements CvCameraViewListener2 {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch(status) {
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG,"OpenCV Manager Connected");
//from now onwards, you can use OpenCV API
Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
break;
case LoaderCallbackInterface.INIT_FAILED:
Log.i(TAG,"Init Failed");
break;
case LoaderCallbackInterface.INSTALL_CANCELED:
Log.i(TAG,"Install Cancelled");
break;
case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
Log.i(TAG,"Incompatible Version");
break;
case LoaderCallbackInterface.MARKET_ERROR:
Log.i(TAG,"Market Error");
break;
default:
Log.i(TAG,"OpenCV Manager Install");
super.onManagerConnected(status);
break;
}
}
};
@Override
public void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallback);
}
...
}
इस मामले में, हमारा आवेदन अतुल्यकालिक फैशन में OpenCV प्रबंधक के साथ काम करता है। प्रारंभ में समाप्त होने पर OnManagerConnected
कॉलबैक को UI थ्रेड में कहा जाएगा।
कृपया ध्यान दें, कि इस कॉलबैक को लागू करने से पहले OpenCV कॉल का उपयोग करने या OpenCV पर निर्भर देशी कामों को लोड करने की अनुमति नहीं है। अपने स्वयं के देशी पुस्तकालयों को लोड करें जो सफल ओपनसीवी के प्रारंभ के बाद ओपनसीवी पर निर्भर करते हैं।
डिफ़ॉल्ट BaseLoaderCallback
कार्यान्वयन अनुप्रयोग संदर्भ को Activity
रूप में BaseLoaderCallback
और प्रारंभ विफलता के मामले में बाहर निकलने के लिए Activity.finish()
कॉल Activity.finish()
विधि कहता है। इस व्यवहार को ओवरराइड finish()
लिए आपको BaseLoaderCallback
क्लास की finish()
विधि को ओवरराइड करना होगा और अपनी खुद की अंतिम पद्धति को लागू करना होगा।
OpenCV प्रबंधक
OpenCV प्रबंधक एक एंड्रॉइड सेवा है, जो अंतिम उपयोगकर्ताओं के उपकरणों पर OpenCV लाइब्रेरी बायनेरिज़ को प्रबंधित करने के लिए लक्षित है। यह एक ही डिवाइस पर अनुप्रयोगों के बीच ओपनसीवी गतिशील पुस्तकालयों को साझा करने की अनुमति देता है।
प्रबंधक निम्नलिखित लाभ प्रदान करता है:
- कम मेमोरी उपयोग (लगभग 40 एमबी)। सभी ऐप सेवा से एक ही बायनेरिज़ का उपयोग करते हैं और अपने भीतर मूल देयताएं नहीं रखते हैं।
- सभी समर्थित प्लेटफार्मों के लिए हार्डवेयर विशिष्ट अनुकूलन।
- विश्वसनीय OpenCV पुस्तकालय स्रोत। OpenCV के साथ सभी पैकेज Google Play बाजार पर प्रकाशित किए जाते हैं।
- नियमित अपडेट और बग फिक्स।
एकमात्र नुकसान यह है कि उपयोगकर्ता को डाउनलोड करने और अतिरिक्त ऐप के लिए प्रेरित किया जाता है, इसलिए उपयोगकर्ता का अनुभव थोड़ा कम हो जाता है।
अधिक जानकारी: Android OpenCV प्रबंधक
अपडेट किया गया 18/10/16:
वहाँ पर वितरित OpenCV प्रबंधक संस्करण में एक बग है प्ले स्टोर (21/09/15 अद्यतन)।
यह केवल OpenCV 3.1.0 संस्करण को प्रभावित करता है। जब आप कुछ OpenCV फ़ंक्शंस चलाते हैं तो आपकोSIGSEGV
त्रुटि मिलती है। Android SDK के साथ वितरित संस्करण ठीक काम करता है (OpenCV-android-sdk/apk/OpenCV_3.1.0_Manager_3.10_{platform}.apk
)। इसे OpenCV वेबसाइट से डाउनलोड किया जा सकता है।
अधिक जानकारी: अंक # 6247
स्थैतिक प्रारंभ
इस दृष्टिकोण के अनुसार सभी OpenCV बायनेरी आपके एप्लिकेशन पैकेज में शामिल हैं। यह ज्यादातर विकास और डीबगिंग उद्देश्यों के लिए डिज़ाइन किया गया है। इस दृष्टिकोण को उत्पादन कोड के लिए पदावनत किया जाता है, async आरंभीकरण की सिफारिश की जाती है।
यदि आपके एप्लिकेशन प्रोजेक्ट में JNI हिस्सा नहीं है, तो OpenCV-3.1.0-android-sdk/sdk/native/libs
app/src/main/jniLibs
को अपने प्रोजेक्ट डायरेक्टरी में फ़ोल्डर app/src/main/jniLibs
।
JNI भाग के साथ अनुप्रयोग प्रोजेक्ट के मामले में, मैन्युअल पुस्तकालयों की प्रतिलिपि बनाने के बजाय आपको अपनी Android.mk
फ़ाइल को संशोधित करने की आवश्यकता है: "include $(CLEAR_VARS)"
और "include path_to_OpenCV-3.1.0-android-sdk/sdk/native/jni/OpenCV.mk"
से पहले "include path_to_OpenCV-3.1.0-android-sdk/sdk/native/jni/OpenCV.mk"
बाद निम्नलिखित दो कोड लाइनें जोड़ें। "include path_to_OpenCV-3.1.0-android-sdk/sdk/native/jni/OpenCV.mk"
:
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
परिणाम निम्नलिखित की तरह दिखना चाहिए:
include $(CLEAR_VARS)
# OpenCV
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include ../../sdk/native/jni/OpenCV.mk
उसके बाद jniLibs
लाइब्रेरी को JNI बिल्ड के दौरान आपके एप्लिकेशन jniLibs
फ़ोल्डर में कॉपी किया जाएगा।
आपके एप्लिकेशन में OpenCV को सक्षम करने का अंतिम चरण OpenCV API को कॉल करने से पहले जावा इनिशियलाइज़ेशन कोड है। यह किया जा सकता है, उदाहरण के लिए, गतिविधि वर्ग के स्थिर खंड में:
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
यदि आप अन्य OpenCV पर निर्भर देशी पुस्तकालयों को शामिल करते हैं, तो आपको OpenCV आरंभीकरण के बाद उन्हें लोड करना चाहिए:
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
} else {
System.loadLibrary("my_jni_lib1");
System.loadLibrary("my_jni_lib2");
}
}
नोट:
initDebug()
विधि उत्पादन कोड के लिए पदावनत है। यह केवल प्रयोगात्मक और स्थानीय विकास उद्देश्यों के लिए डिज़ाइन किया गया है। यदि आप अपने ऐप उपयोग दृष्टिकोण को async initialization के साथ प्रकाशित करना चाहते हैं।