OpenCV ใน Android Studio


141

ฉันต้องการใช้ห้องสมุด OpenCV ในแอพของฉันกับ Android Studio ฉันทำตามคำแนะนำพบที่นี่แต่ฉันได้รับข้อผิดพลาด

ไม่พบการกำหนดค่าด้วยชื่อ 'ค่าเริ่มต้น'

มีอะไรผิดปกติ?

ฉันใช้ Android Studio 1.0 กับ gradle 2.2.1


1
ตอนนี้เราสามารถนำเข้าโมดูลด้วยสตูดิโอ Android และขั้นตอนอาจจะง่ายกว่ามาก คุณลองใช้stackoverflow.com/a/27356635/1180117
Kiran

ขอบคุณมันใช้งานได้ เขียนมันเป็นคำตอบแล้วฉันก็ยอมรับได้
Bartosz Bialecki

@BartoszBialecki @Kiran ฉันได้ทำตามขั้นตอนที่ 4 แล้วฉันไม่สามารถหาnativeไดเรกทอรีภายใต้sdk ไดเรกทอรีของฉันได้หรือไม่
อิเล็กตรอนแสนโรแมนติก

1
@RomanticElectron คุณต้องเพิ่มไดเรกทอรี natvie จาก sdk ของไลบรารี OpenCV ไม่ใช่ Android sdk
Bartosz Bialecki

คำตอบ:


312

ขั้นตอนด้านล่างสำหรับการใช้ Android OpenCV sdk ใน Android Studio นี่เป็นเวอร์ชั่นที่ง่ายของคำตอบ SO ( 1 ) นี้

  1. ดาวน์โหลด OpenCV sdk ล่าสุดสำหรับ Android จากOpenCV.org และคลายไฟล์ zip
  2. นำเข้า OpenCV ไปยัง Android Studio , จากไฟล์ -> ใหม่ -> โมดูลนำเข้า , เลือกโฟลเดอร์sdk / javaในไฟล์ opencv ที่ยังไม่ได้ซิป
  3. อัพเดต build.gradleภายใต้โมดูล OpenCV ที่อิมพอร์ตเพื่ออัพเดต 4 ฟิลด์เพื่อให้ตรงกับโปรเจ็กต์ของคุณ build.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion และ d) targetSdkVersion
  4. เพิ่มการพึ่งพาโมดูลโดยใช้แอปพลิเคชัน -> การตั้งค่าโมดูลและเลือกแท็บการพึ่งพา คลิกที่ไอคอน+ที่ด้านล่างเลือกการพึ่งพาโมดูลและเลือกโมดูล OpenCV ที่นำเข้า
    • สำหรับ Android Studio v1.2.2 เพื่อเข้าถึงการตั้งค่าโมดูล: ในมุมมองโครงการให้คลิกขวาที่โมดูลที่ต้องพึ่งพา -> เปิดการตั้งค่าโมดูล
  5. คัดลอกlibsโฟลเดอร์ภายใต้SDK / พื้นเมืองเพื่อ Android สตูดิโอภายใต้app / src / หลัก
  6. ใน Android Studio ให้เปลี่ยนชื่อไดเรกทอรีlibs ที่คัดลอกมาเป็นjniLibsและเราก็เสร็จแล้ว

ขั้นตอนที่ (6) เนื่องจาก Android studio คาดหวัง libs ดั้งเดิมapp/src/main/jniLibsแทนที่จะเป็นlibsโฟลเดอร์ที่เก่ากว่า สำหรับผู้ที่เพิ่งเริ่มใช้ Android OpenCV อย่าพลาดขั้นตอนด้านล่าง

  • รวมstatic{ System.loadLibrary("opencv_java"); }(หมายเหตุ: สำหรับ OpenCV เวอร์ชัน 3 ในขั้นตอนนี้คุณควรโหลดไลบรารีopencv_java3แทน)
  • สำหรับขั้นตอน (5) ถ้าคุณเพิกเฉยแพลตฟอร์ม libs ใด ๆ เช่น x86 ตรวจสอบให้แน่ใจว่าอุปกรณ์ / ตัวจำลองของคุณไม่ได้อยู่บนแพลตฟอร์มนั้น

OpenCV เขียนเป็น C / C ++ Java wrappers คือ

  1. Android OpenCV SDK - OpenCV.org ดูแล wrapper Android Java ฉันแนะนำอันนี้
  2. OpenCV Java - OpenCV.org ดูแลรักษาจาวาเดสก์ท็อปที่สร้างขึ้นโดยอัตโนมัติ
  3. JavaCV - ตัวห่อ Java ยอดนิยมดูแลโดยนักพัฒนาอิสระ ไม่ใช่เฉพาะ Android ไลบรารีนี้อาจไม่ซิงค์กับ OpenCV เวอร์ชันที่ใหม่กว่า

1
ฉันได้รับข้อผิดพลาดหลังจากขั้นตอนที่สองฉันควรลบjavadocsไดเรกทอรีหรือไม่นอกจากนี้ยังขอให้ฉันติดตั้งandroid sdk 14แม้ว่าฉันจะกำหนดเป้าหมายอุปกรณ์ที่รองรับandroid sdk 15
Romantic Electron

1
@RomanticElectron หวังว่าคุณได้ดาวน์โหลด OpenCV4Android 2.4.10 จากลิงค์sourceforge.net/projects/opencvlibrary/files/opencv-android/และไม่ใช่รุ่นเดสก์ท็อป java ใช่ไหม
Kiran

2
ตกลงฉันเข้าใจแล้วฉันคิดว่าคุณกำลังพูดถึงsdkไดเรกทอรีการติดตั้งในระบบของฉันในขณะที่คุณกำลังพูดถึงไดเรกทอรีที่มาพร้อมกับ. Android Open CV SDKOk ทำตามขั้นตอนที่ 6 ฉันจะรวมไว้static{ System.loadLibrary("opencv_java"); }ที่ไหน
อิเล็กตรอนแสนโรแมนติก

5
@RomanticElectron คุณรวม {System.loadLibrary ("opencv_java") ไว้ที่ใด }? คุณพูดว่า "ขอบคุณฉันเข้าใจแล้ว" แต่ดูเหมือนจะไม่มีข้อความใด ๆ ถ้าอย่างนั้นคุณก็บอกว่ามันไม่จำเป็น คุณช่วยอธิบายอีกเล็กน้อยได้ไหม ขอบคุณ
puntofisso

8
สำหรับทุกคนที่มีandroid-14ข้อผิดพลาดหลังจากการนำเข้าโมดูลในขั้นตอนที่ 2 คุณจะต้องแก้ไขด้วยตนเองbuild.gradleในไดเรกทอรี OpenCV ในโครงการของคุณตามที่แสดงในขั้นตอนที่ 3
paradite

144

การรวม OpenCV v3.1.0 เข้ากับ Android Studio v1.4.1 , คำแนะนำพร้อมรายละเอียดเพิ่มเติมและภาพหน้าจอชนิดนี้คือสิ่งที่คุณควรได้รับ

เครดิตส่วนใหญ่ไปที่ Kiran, Kool, 1 ", และ SteveLiles ที่ opencv.org สำหรับคำอธิบายฉันกำลังเพิ่มคำตอบนี้เพราะฉันเชื่อว่าอินเทอร์เฟซของ Android Studio ตอนนี้มีเสถียรภาพเพียงพอที่จะทำงานกับสิ่งต่างๆ ฉันต้องเขียนคำแนะนำเหล่านี้สำหรับโครงการของเราด้วย

ผู้พัฒนาที่มีประสบการณ์จะพบกับความรู้เรื่องนี้ คำตอบนี้มีเป้าหมายสำหรับผู้ที่มีประสบการณ์ จำกัด ใน Android Studio

  1. สร้างโครงการ Android Studio ใหม่โดยใช้ตัวช่วยสร้างโครงการ (เมนู: / ไฟล์ / โครงการใหม่):

    • เรียกมันว่า " cvtest1 "
    • ฟอร์มแฟคเตอร์: API 19, Android 4.4 (KitKat)
    • กิจกรรมว่าง ๆชื่อว่าMainActivity

      คุณควรมีไดเรกทอรีcvtest1ที่จัดเก็บโครงการนี้ (แถบชื่อเรื่องของสตูดิโอ Android แสดงให้คุณเห็นว่า cvtest1 คือเมื่อคุณเปิดโครงการ)

  2. ตรวจสอบว่าแอปของคุณทำงานอย่างถูกต้อง ลองเปลี่ยนบางอย่างเช่นข้อความ "Hello World" เพื่อยืนยันว่ารอบการสร้าง / ทดสอบนั้นใช้ได้สำหรับคุณ (ฉันกำลังทดสอบด้วยตัวจำลองอุปกรณ์ API 19)

  3. ดาวน์โหลดแพคเกจ OpenCV สำหรับ Android v3.1.0 และแตกไฟล์ในบางไดเร็กทอรีชั่วคราว (ตรวจสอบให้แน่ใจว่าเป็นแพคเกจเฉพาะสำหรับ Android และไม่ใช่เฉพาะ OpenCV สำหรับ Java package) ฉันจะเรียกไดเรกทอรีนี้ว่า " unzip-dir " ด้านล่างunzip-dirคุณควรมีไดเรกทอรีsdk / native / libs ที่มีไดเรกทอรีย่อยที่ขึ้นต้นด้วย สิ่งต่าง ๆ เช่นแขน ... , mips ... และx86 ... (หนึ่งสำหรับ "สถาปัตยกรรม" Android แต่ละประเภททำงานบน)

  4. จาก Android Studio นำเข้า OpenCV ในโครงการของคุณเป็นโมดูล: เมนู: / ไฟล์ / ใหม่ / Import_Module :

    • ไดเรกทอรีต้นทาง: {unzip-dir} / sdk / java
    • ชื่อโมดูล: สตูดิโอ Android เติมข้อมูลในฟิลด์นี้โดยอัตโนมัติด้วยopenCVLibrary310 (ชื่อที่แน่นอนอาจไม่สำคัญ แต่เราจะไปกับเรื่องนี้)
    • คลิกที่ต่อไป คุณจะได้รับหน้าจอพร้อมช่องทำเครื่องหมายสามช่องและคำถามเกี่ยวกับตัวเลือกตัวเลือกต่างๆ ควรตรวจสอบทั้งสามข้อ คลิกที่เสร็จสิ้น

      Android Studio เริ่มนำเข้าโมดูลและคุณจะเห็นไฟล์import-summary.txtที่มีรายการของสิ่งที่ไม่ได้นำเข้า (ส่วนใหญ่เป็นไฟล์ javadoc) และข้อมูลอื่น ๆ ป้อนคำอธิบายรูปภาพที่นี่

      แต่คุณยังได้รับข้อความผิดพลาดว่าล้มเหลวในการค้นหาเป้าหมายด้วยสตริงกัญชา 'หุ่นยนต์-14' ... สิ่งนี้เกิดขึ้นเพราะไฟล์ build.gradle ในไฟล์ซิป OpenCV ที่คุณดาวน์โหลดบอกว่าจะรวบรวมโดยใช้ Android API เวอร์ชัน 14 ซึ่งโดยค่าเริ่มต้นคุณไม่มีกับ Android Studio v1.4.1 ป้อนคำอธิบายรูปภาพที่นี่

  5. เปิดไดอะล็อกโครงสร้างโครงการ ( เมนู: / ไฟล์ / Project_Struct ) เลือกโมดูล "แอพ" คลิกที่แท็บการอ้างอิงและเพิ่ม: openCVLibrary310เป็นโมดูลการพึ่งพา เมื่อคุณเลือกเพิ่ม / Module_Dependencyมันควรจะปรากฏในรายการของโมดูลที่คุณสามารถเพิ่ม ตอนนี้มันจะแสดงว่าขึ้นอยู่กับการพึ่งพา แต่คุณจะได้รับข้อผิดพลาดที่ไม่สามารถหา - android-14อีกสองสามรายการในบันทึกเหตุการณ์

  6. ค้นหาในไฟล์build.gradleสำหรับโมดูลแอปของคุณ มีไฟล์ build.gradle หลายไฟล์ในโครงการ Android หนึ่งที่คุณต้องการอยู่ในcvtest1 / แอปไดเรกทอรีและจากมุมมองโครงการดูเหมือนbuild.gradle (Module: แอป) บันทึกค่าของสี่ฟิลด์เหล่านี้:

    • compileSDKVersion (ของฉันบอกว่า 23)
    • buildToolsVersion (ของฉันบอกว่า 23.0.2)
    • minSdkVersion (ของฉันบอกว่า 19)
    • targetSdkVersion (ฉันพูดว่า 23)
  7. ตอนนี้โปรเจ็กต์ของคุณมีไดเร็กทอรี cvtest1 / OpenCVLibrary310แต่ไม่สามารถมองเห็นได้จากมุมมองโปรเจ็กต์:

ป้อนคำอธิบายรูปภาพที่นี่

ใช้เครื่องมืออื่นเช่นเครื่องมือจัดการไฟล์และไปที่ไดเรกทอรีนี้ คุณยังสามารถสลับมุมมองโครงการจากAndroidเป็นไฟล์โครงการและคุณสามารถค้นหาไดเรกทอรีนี้ตามที่แสดงในภาพหน้าจอนี้: ป้อนคำอธิบายรูปภาพที่นี่

ข้างในมีไฟล์build.gradleอีกอัน (มันถูกไฮไลต์ในภาพหน้าจอด้านบน) อัปเดตไฟล์นี้ด้วยค่าสี่ค่าจากขั้นตอนที่ 6

  1. Resynch โครงการของคุณแล้วทำความสะอาด / สร้างใหม่ (เมนู: / สร้าง / Clean_Project ) มันควรทำความสะอาดและสร้างโดยไม่มีข้อผิดพลาดและคุณควรเห็นการอ้างอิงหลายอย่างไปที่: openCVLibrary310ในหน้าจอ0: ข้อความ

    ป้อนคำอธิบายรูปภาพที่นี่

    ณ จุดนี้โมดูลควรปรากฏในลำดับชั้นของโครงการเป็นopenCVLibrary310เหมือนแอพ (หมายเหตุว่าในเมนูแบบเลื่อนลงที่เล็ก ๆ น้อย ๆ ผมเปลี่ยนกลับมาจากโครงการดูเพื่อAndroid ดู ) คุณควรเห็นไฟล์build.gradleเพิ่มเติมภายใต้ "Gradle Scripts" แต่ฉันพบว่าอินเทอร์เฟซของ Android Studio นั้นมีความผิดพลาดเล็กน้อยและบางครั้งมันก็ไม่ได้ทำแบบนี้ทันที ดังนั้นลอง resynching ทำความสะอาดหรือแม้แต่เริ่ม Android Studio ใหม่

    คุณควรเห็นโมดูล openCVLibrary310 พร้อมกับฟังก์ชั่น OpenCV ทั้งหมดภายใต้ java เช่นในภาพหน้าจอนี้:

    ป้อนคำอธิบายรูปภาพที่นี่

  2. คัดลอก{เครื่องรูด-dir} / SDK / / พื้นเมือง libsไดเรกทอรี (และทุกอย่างภายใต้มัน) กับโครงการ Android ของคุณเพื่อcvtest1 / OpenCVLibrary310 / src / main /แล้วเปลี่ยนชื่อสำเนาของคุณจากlibsจะjniLibs ตอนนี้คุณควรจะมีcvtest1 / OpenCVLibrary310 / src / main / jniLibsไดเรกทอรี resynch โครงการของคุณและไดเรกทอรีนี้ควรจะปรากฏขึ้นในมุมมองของโครงการภายใต้openCVLibrary310

    ป้อนคำอธิบายรูปภาพที่นี่

  3. ไปที่เมธอด onCreate ของMainActivity.javaและต่อท้ายโค้ดนี้:

    if (!OpenCVLoader.initDebug()) {
        Log.e(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), not working.");
    } else {
        Log.d(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), working.");
    }
    

    จากนั้นเรียกใช้แอปพลิเคชันของคุณ คุณควรเห็นบรรทัดเช่นนี้ใน Android Monitor: ป้อนคำอธิบายรูปภาพที่นี่ (ฉันไม่รู้ว่าทำไมบรรทัดนั้นพร้อมกับข้อความแสดงข้อผิดพลาดอยู่ที่นั่น)

  4. ตอนนี้ลองใช้รหัส openCV จริง ๆ ในตัวอย่างด้านล่างฉันคัดลอกไฟล์. jpg ไปยังไดเรกทอรีแคชของแอปพลิเคชัน cvtest1 ในโปรแกรมจำลอง android โค้ดด้านล่างโหลดอิมเมจนี้รันอัลกอริธึมการตรวจจับขอบแสนรู้แล้วเขียนผลลัพธ์กลับไปยังไฟล์. 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);
    
  5. เรียกใช้แอปพลิเคชันของคุณ ตัวจำลองของคุณควรสร้างภาพ "ขอบ" สีดำและสีขาว คุณสามารถใช้การตรวจสอบอุปกรณ์ Android เพื่อดึงเอาท์พุทหรือเขียนกิจกรรมเพื่อแสดง

The Gotchas :

  • หากคุณลดแพลตฟอร์มเป้าหมายของคุณลงด้านล่าง KitKat บางไลบรารี OpenCV จะไม่ทำงานอีกต่อไปโดยเฉพาะคลาสที่เกี่ยวข้องกับorg.opencv.android.Camera2Rendererและคลาสอื่น ๆ ที่เกี่ยวข้อง คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยเพียงแค่ลบไฟล์ OpenCV .java apprpriate
  • หากคุณยกแพลตฟอร์มเป้าหมายของคุณเป็น Lollipop หรือสูงกว่าตัวอย่างของฉันในการโหลดไฟล์อาจใช้งานไม่ได้เนื่องจากการใช้พา ธ ของไฟล์แบบสัมบูรณ์ ดังนั้นคุณอาจต้องเปลี่ยนตัวอย่างเพื่อโหลดไฟล์จากแกลเลอรี่หรือที่อื่น มีตัวอย่างมากมายลอยอยู่รอบ ๆ

2
16 กุมภาพันธ์แก้ไข: jniLibs ตอนนี้ในไดเรกทอรี openCVLibrary310 ไม่ใช่ไดเรกทอรีแอปหลัก ใช้ได้ทั้งคู่ แต่ดูเหมือนว่าฉันจะเก็บไว้ในส่วนของ opencv พร้อมภาพหน้าจอเพิ่มเติมและส่วน "Gotchas"
ssimm

ฉันคิดว่าคำสั่งการนำเข้าบางส่วนขาดหายไปไม่อย่างนั้นก็ดีมาก! +1
Allan Nørgaard

1
ฉันทำตามคำตอบของคุณแล้ว แต่ล้มเหลว 1ฉันได้รับข้อผิดพลาดOpenCV error: Cannot load info library for OpenCV 2 ข้อผิดพลาดjava.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.soเหล่านี้เกี่ยวกับฉันทำทีละขั้นตอนตามที่คุณเขียน
Devendra Singh

2
@DevendraSingh ฉันได้รับข้อผิดพลาดเช่นเดียวกับที่คุณได้รับ แต่ฉันรู้ว่าฉันพลาดขั้นตอนที่ 9
aasu

2
ถ้าเราต้องการโค้ดใน c ++ สำหรับ opencv บน android studio?
user8663682

38

สำหรับทุกคนที่รู้สึกว่าต้องการหลบหนีด้วยทุกขั้นตอนและภาพหน้าจอบน (ยอดเยี่ยม!) เหนือคำตอบสิ่งนี้ใช้ได้กับฉันด้วยandroid studio 2.2.1:

  1. สร้างโครงการใหม่ตั้งชื่อตามที่คุณต้องการและรับค่าเริ่มต้น (minSdkVersion 15 ใช้ได้)
  2. ดาวน์โหลดไฟล์ zip ได้จากที่นี่: https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ (ฉันดาวน์โหลดเวอร์ชั่น 3.1.0 แต่อาจมีเวอร์ชั่นใหม่กว่า)
  3. เปิดเครื่องรูดไฟล์ zip ที่ดีที่สุดคือในโฟลเดอร์เวิร์กสเปซของคุณ แต่มันก็ไม่สำคัญ
  4. ข้างในAndroid StudioคลิกFile->New-> Import Moduleและไปที่\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\javaและกดตกลงจากนั้นยอมรับกล่องโต้ตอบเริ่มต้นทั้งหมด
  5. ในgradleไฟล์ของapp โมดูลของคุณเพิ่มสิ่งนี้ในบล็อกการพึ่งพา:

    dependencies {
        compile project(':openCVLibraryXYZ')
        //rest of code
    }
    

โดยที่ XYZ เป็นรุ่นที่แน่นอนที่คุณดาวน์โหลดเช่นในกรณีของฉัน:

    dependencies {
        compile project(':openCVLibrary320')
        //rest of code
    }

1
ดีและเรียบง่ายขอบคุณ ;-) ใช้ได้กับรุ่น 3.2.0 ด้วย
blacharnia

2
ขอบคุณมันเป็นทางออกที่ง่ายกว่า จุดหนึ่งจากฉัน โมดูล OpenCV ใหม่ไม่สามารถรวบรวมได้ คำตอบที่นี่ช่วยฉันในการแก้ไขปัญหาstackoverflow.com/a/40302788/408780
Tima

เพียงเพิ่มสิ่งที่ @blacharnia พูดเพียงให้แน่ใจว่าคุณใช้ 'โครงการคอมไพล์ (': openCVLibrary320 ')' ในส่วนการอ้างอิงของเปลแทนที่จะเป็น 310
Abraham Philip

โดยทั่วไปแล้วหากต้องการเพิ่มความคิดเห็นข้างต้นให้ใช้ "โครงการคอมไพล์ (': openCVLibraryXYZ')" โดยที่ XYZ เป็นหมายเลขเวอร์ชันของ openCV Android SDK โดยไม่ต้องใช้ 'จุด' - ตอนนี้สามารถใช้งานได้กับเวอร์ชัน 3.4.0 -> เช่น ใช้ "โครงการคอมไพล์ (': openCVLibrary340')"
Mick

@Mick ขอบคุณฉันแก้ไขคำตอบตามที่คุณแนะนำ
yshahak

9

Android Studio 3.4 + OpenCV 4.1

  1. ดาวน์โหลดไฟล์ zip OpenCV ล่าสุดจากที่นี่ (เวอร์ชั่นใหม่ล่าสุดปัจจุบันคือ 4.1.0) และแตกไฟล์ในพื้นที่ทำงานของคุณหรือในโฟลเดอร์อื่น

  2. สร้างโครงการ Android Studio ใหม่ตามปกติ คลิกFile->New->Import Moduleนำทางไปที่/path_to_unzipped_files/OpenCV-android-sdk/sdk/javaตั้งชื่อโมดูลเป็นopencvคลิกNextและยกเลิกการเลือกตัวเลือกทั้งหมดในหน้าจอ

  3. เปิดใช้งานProjectโหมดมุมมองไฟล์ (โหมดเริ่มต้นคือAndroid) ในการopencv/build.gradleเปลี่ยนไฟล์apply plugin: 'com.android.application'เป็นapply plugin: 'com.android.library'และแทนที่application ID "org.opencv"ด้วย

    minSdkVersion 21
    targetSdkVersion 28

    (ตามค่าในapp/build.gradle) ซิงค์โครงการกับไฟล์ Gradle

  4. เพิ่มสายนี้ไปยังบล็อกการอ้างอิงในapp/build.gradleไฟล์

    dependencies {
        ...
        implementation project(path: ':opencv')
        ...
    }
  5. เลือกAndroidโหมดดูไฟล์อีกครั้ง คลิกขวาที่appโมดูลและข้ามNew->Folder->JNI Folderไป src/main/jniLibs/เลือกเปลี่ยนสถานที่โฟลเดอร์และการตั้งค่า

  6. เลือกอีกครั้งProjectยื่นโหมดมุมมองและคัดลอกโฟลเดอร์ทั้งหมดจากการ/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libsapp/src/main/jniLibs

  7. อีกครั้งในAndroidโหมดดูไฟล์คลิกขวาบนโมดูลและเลือกapp Link C++ Project with Gradleเลือกสร้างระบบndk-buildและเส้นทางไปยังแฟ้มOpenCV.mk/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk

    path_to_unzipped_files ต้องไม่มีช่องว่างใด ๆ หรือคุณจะได้รับข้อผิดพลาด!

ในการตรวจสอบการเริ่มต้น OpenCV ให้เพิ่มข้อความ Toast ในonCreate()วิธีMainActivity

Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();

ถ้าเริ่มต้นประสบความสำเร็จคุณจะเห็นtrueในข้อความ Toast อื่น ๆ falseที่คุณจะเห็น


ข้างต้นคุณพูดว่า "replace application ID" org.opencv "ด้วย ..... " แต่ไม่มีสิ่งใดตาม "ด้วย" คุณช่วยอธิบายได้ไหม? คุณหมายถึงพูดว่า "ลบรายการ applicationId และเพิ่มสองรายการดังนี้:"
Dale

@ Dale ใช่คุณควรแทนที่application ID "org.opencv"สตริงด้วยสองสตริง: minSdkVersion 21และtargetSdkVersion 28(ตามค่าในไฟล์ app / build.gradle)
23919

ฉันทำตามทุกขั้นตอนตามที่คุณอธิบาย แต่ได้รับข้อผิดพลาด E / art: dlopen ("/ data / app / com.example.objectsegmentation-1 / lib / arm64 / libopencv_java4.so", RTLD_LAZY) ล้มเหลว: dlopen ล้มเหลว: ไลบรารี "libc ++ _ shared.so" ไม่พบ
Masthan


0

สิ่งนี้ใช้ได้สำหรับฉันและเป็นเรื่องง่ายเหมือนกับการเพิ่มการพึ่งพาแบบไล่ระดับ:

https://bintray.com/seesaa/maven/opencv#

https://github.com/seesaa/opencv-android

ข้อแม้หนึ่งที่ฉันต้องใช้อุปกรณ์แก้ไขข้อบกพร่องฮาร์ดแวร์เนื่องจากตัวจำลองแขนทำงานช้าเกินไปสำหรับฉัน (ตามที่ผู้จัดการ AVD บอกว่าต้องการ) และตามที่อธิบายไว้ที่ repo README เวอร์ชันนี้ไม่รวมการสนับสนุน x86 หรือ x86_64

ดูเหมือนว่าจะสร้างและการทดสอบที่แนะนำ:

static {
    OpenCVLoader.initDebug();
}

คายเอาท์พุทที่ดูเหมือนจะถูกต้องสำหรับฉัน


นี่เป็นโครงการใหม่ใน android studio ฉันไม่ได้นำเข้าอะไรไม่ดาวน์โหลดอะไร ฯลฯ เพียงเพิ่มการพึ่งพา gradle และการซิงค์
Naumdev

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.