บันทึกการตั้งค่าเริ่มต้นของ OpenCV บน Android Studio แบบผู้เริ่มต้น

สวัสดีครับ บทความนี้ผู้เขียนได้รับโจทย์มาว่าจะต้องทำการ Detect รูปภาพจาก Android Box บนตู้ Kiosk ที่จะต้องทำการ Authen ด้วยใบหน้าซึ่งผู้เขียนใหม่สำหรับ OpenCV บน Android ดังนั้นผู้เขียนจึงต้องศึกษาเกี่ยว OpenCV For Android ก็มีหลายๆบทความที่กล่าวถึงวิธีติดตั้งแต่ว่าเนื้อหาไม่ได้อัพเดทเท่าที่ควรผู้เขียนจึงบันทึกและเรียบเรียงใหม่ด้วยภาษาเขียนของผู้เขียนเอง และ ต้องการบันทึกขั้นตอนการติดตั้งของ OpenCV ที่ต้องติดตั้งบน Android เอาไว้ทบทวนในภายหลังอีกด้วย
ซึ่งบทความต่อไปนี้จะเป็น Version ปัจจุบัน ซึ่งอาจจะไม่ตรงตามที่ผู้อ่านได้เข้ามาอ่านเพราะอาจจะนานเกินไป ณ ตอนนั้นแล้ว ดังนั้นแค่นำแนวทางและขั้นตอนในการติดตั้งและ Keyword ต่างๆที่จำเป็น นำไปใช้ก็พอ
สำหรับผู้ที่มีประสบการณ์กับการใช้งาน OpenCV จะต้องจำไว้ว่า บน Native Android ไม่เหมือนกับ OpenCV บน Web หรือ Desktop แต่บน Android เป็น Native ดังนั้น ขั้นตอนต่างๆ จะเป็นการนำ Source code ไป Run บน Android framework
ฝากกดโฆษณา Google Ads สัก click เพื่อเป็นกำลังใจแก่ผู้เขียนด้วยนะครับ
ขั้นตอนที่ 1 ทำการ Download Library Android SDK จาก https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ สามารถเลือกเวอร์ชั่นล่าสุดมาได้เลย ปัจจุบัน อยู่ที่ version 3.4.3
เมื่อ Download เสร็จก็ให้นำไปแตกไฟล์ไว้ที่ /Path/to/OpenCV-android-sdk ตามที่ผู้อ่านต้องการ
folder sdk : เป็น folder ที่บรรจุ api และ library ของ OpenCV สำหรับ Android
folder sdk/etc : เป็น folder ที่บรรจุ Haar and LBP cascades สำหรับ Android
folder sdk/java : เป็น folder ที่บรรจุ Android Library ที่เอาไว้จัดการ OpenCV Java API
folder sdk/native : ไฟล์ของ C++ headers (for JNI code) และ native Android libraries (*.so and *.a) สำหรับ ARM-v5, ARM-v7a และสถาปัตยกรรม x86
ขั้นตอนที่ 2 ให้สร้าง Project บน Android Studio ขึ้นมาโดยใช้ Empty Activity ให้ผู้อ่านอาศัยประสบการณ์ในการทำตรงนี้จัดการขึ้นมาได้เลย
ขั้นตอนที่ 3 ให้ทำการ Import Library ของ OpenCV ที่ Download มา File -> New -> Import -> Module
แล้วก็เลือก ที่ folder ของ sdk/java
เลือก Ok และ Next ไปตามปกติ แล้ว Finish ยกเว้นว่าผู้อ่านบางท่านอาจจะติดตรงที่ gradle ไม่สามารถ build ได้ก็ Fix ไปตามคำแนะนำของ Android studio ได้เลย
ขั้นตอนที่ 4 ให้เปิด build.gradle ที่ Project ของ OpenCV แล้วปร้บเวอร์ชั่นที่ android studio แนะนำ
ขั้นตอนที่. 5 ไปที่ File -> Project Structure เพื่อ Update Dependency
ไปที่ Tab Dependency -> แล้วเลือก app -> เลือก tab + -> เลือก Module dependency
เลือก openCVLibrary343 ตามที่ได้ import เข้ามา แล้วกดตกลง
กด Apply เพื่อ Sync Dependency
ขั้นตอนที่ 6 ให้ไปที่ folder src/native ของ OpenCV ที่เรา Download มา
จากนั้นก็ Copy Folder libs ทั้งหมดไปใส่ใน Project ที่เราสร้างขึ้นแล้วเปลี่ยนชื่อเป็น jniLibs ProjectName/app/src/main/jniLibs
ขั้นตอนที่ 7 ใส่ Permission ลงไป manifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
ก็เป็นเสร็จการติดตั้งทั้งหมด ลอง Run Source code ที่อยู่ด้านล่างเพื่อทดสอบดู
ไฟล์ MainActivity.java
https://gist.github.com/skl-songkiat/7d135515bd8a3a6d0c482ed8873a5985
ไฟล์ ColorBlobDetector.java
https://gist.github.com/skl-songkiat/c89c3150aee74110090b38ac522ebb71
ไฟล์ layout ชื่อ color_blob_detection_surface_view_.xml
https://gist.github.com/skl-songkiat/e079ea6ccc0bd11c549cfea61ace71f4
Source code ด้านบนทั้ง 3 Link นั้นให้นำไปวางที่ Project ที่เราสร้างขึ้นและต้อง Run บน Android ที่ Support กล้องด้วยนะ
ที่สำคัญอย่าลืมติดตั้ง NDK ที่เอาไว้ Compile C++ บน Android ด้วยแต่แม้ว่าจะลืมก็ไม่ใช่ปัญหา Android Studio จะเตือนเราให้ทำการติดตั้งเอง
แอพที่ Run เสร็จก็จะได้ภาพที่ได้จากกล้องมาแสดงผล และสามารถ touch ได้โดยจะเลือกสีที่ได้จากการ touch แล้วทำ contour เพื่อล้อมตามสีที่เลือกเอาไว้
อ้างอิง : https://android.jlelse.eu/a-beginners-guide-to-setting-up-opencv-android-library-on-android-studio-19794e220f3c
