سالک: مقاله زیر که از یک سایت فارسی کپی شده ۳ لینک داشت که دو تا را من منتقل کردم ولی سومی لینک به یک نرم افزار در گوگل استور است که موجود نیست.
شروع OpenCv اندروید
در ادامه سری آموزش های برنامه نویسی اندروید, به مبحث
OpenCv میپردازیم. در این سری آموزش ها قصد داریم تا با استفاده از openCv در اندروید پردازش تصویر انجام دهیم. در این مقاله به مقدمات و مفاهیم مورد نیاز میپردازیم.
در ابتدا نیاز است تا از
NDK استفاده شود. وقتی از کد های
++C در اندروید استفاده می کنیم, به
NDK نیاز داریم. علت استفاده از
NDK در پردازش تصویر نیز به این دلیل است که توابع و
library های
openCv به زبان
++C نوشته شده اند. برای دانلود
NDK به
اینجا مراجعه کنید.
اینجا:
developer.android.com
نیاز است تا یک توضیح اجمالی پیرامون
NDK ارائه دهیم. اگر بخواهید بخش های
native در کد خود را
Compile کنید, نیاز است تا از
ndk-build tool استفاده کنید. در واقع
ndk-build tool یک
script است که متناسب با شرایط ذیل
script ها دیگری را اجرا میکند :
- به صورت خودکار پروژه را جستجو میکند تا مشخص کند کدام قسمت ها را باید build کند
- بعد از اتمام جستجو به پردازش و مدیریت dependency ها میپردازد
- library های ایجاد شده را به پروژه اضافه میکند
علاوه بر
ndk-build tool نیاز است تا با یکسری
component های دیگر آشنا شوید :
- Java and Native Calls : برنامه های اندروید به زبان جاوا نوشته میشوند و کد ها بعد از compile به byteCode ها تبدیل می شود. این کد های تبدیل شده در سیستم عامل اندروید با استفاده از Dalvik یا Android Runtime (ART) اجرا میشوند. برنامه های که با استفاده از کد های native نوشته میشوند, تنها بر روی Dalvik آزمایش میشوند. وقتی یک متد native میخواهید تعریف کنید نیاز است تا واژه کلیدی “native” را در تعریف آن ذکر کنید. مانند :
public native zeroToHero(String username)
- Native Shared Libraries : این فایل ها با استفاده از NDK و با فرمت so. ایجاد میشوند. این library ها در زمان اجرا به اشتراک گذاشته میشوند و به برنامه متصل میشوند
- Native Static Libraries : این فایل ها با استفاده از NDK و با فرمت a. ایجاد میشوند. این library ها در زمان compile به برنامه اضافه میشوند
- Java Native Interface : وقتی برنامه ها را در زبان جاوا مینویسیم و نیاز داریم تا از طریق یک کانال ارتباطی library های نوشته شده به زبان ++C را فراخوانی کنیم, از Java Native Interface و یا به اختصار JNI استفاده میشود
- Application Binary Interface : با استفاده از این interface مشخص میشود که کد ها باید به چه صورتی باشند تا در معماری های مختلف اجرا شوند. به صورت پیش فرض NDK کد ها را برای معماری ARM EABI ایجاد میکند. اما میتوان طوری تعیین کرد تا برای معماری هایی مانند MIPS و یا X86 نیز ایجاد شود
- Android.mk : کارکرد آن را میتوان مشابه Maven دانست. در حقیقت یک make file است که module ها و نام آنها, source file های مورد نیاز برای compile و library هایی که نیاز است تا به پروژه متصل شوند را برای ndk-build tools script تعیین میکند. شیوه استفاده از این فایل بسیار حائز اهمیت است و در راستای این مقالات با نحوه استفاده از آن اشنا میشوید
- Application.mk : استفاده از این فایل اختیاری است. در این فایل module های مورد نیاز برنامه لیست میشوند. این اطلاعات میتواند شامل Application Binary Interface ها که به machine code تبدیل میشوند, toolchain ها و library های استاندارد باشد
با استفاده از این
component ها میتوان خلاصه توسعه یک برنامه
native در اندروید را به این صورت بیان کرد :
- مشخص میشود که کدام قسمت به زبان جاوا نوشته شود و کدام قسمت به زبان ++C
- یک برنامه در android studio ایجاد میشود
- با استفاده از Android.mk لیست native code هایی که باید compile شوند, module ها و library هایی که باید به پروژه متصل شوند مشخص میشود
- فایل Android.mk در پوشه jni قرار میگیرد.
- NDK با استفاده از ndk-build tool فایل ها با فرمت so. , کد های جاوا و a. فایل ها را به فایل dex تبدیل میکند و تمام فایل ها در کنار هم تشکیل یک فایل APK را میدهند.
برای استفاده از توابع و
library ها نیاز داریم تا
OpenCvSDK را نیز دریافت کرده و به پروژه اضافه کنیم. برای دانلود
OpenCvSDK به
اینجا مراجعه کنید.
OpenCV Releases Are Brought To You By Intel Intel is a multinational corporation known for its semiconductor products, including processors that power a wide range of computing devices, from personal computers to servers and embedded systems. Read More Qualcomm Qualcomm is a global leader in...
opencv.org
سپس باید از قسمت
sdk موجود در
OpenCvSDK, پوشه
java را به عنوان یک
module به پروژه اضافه کنید. بعد از افزودن
module یک
import-summary.txt برای شما نمایش داده میشود که فایل هایی افزوده شده را لیست میکند. سپس نیاز است تا نام
module را که در موقع اضافه کردن به پروژه مشخص کرده اید (ما در اینجا
ZeroToHeroOpenCV انتخاب کرده ایم ), را به
buid.gradle اضافه کنید :
compile project(':ZeroToHeroOpenCV')
در مسیر مشخص شده در تصویر پوشه
jniLibs را ایجاد کنید و محتویات پوشه
libs در پوشه
native در مسیر
sdk موجود در
OpenCvSDK را در آن قرار دهید.
سپس پوشه افزوده شده را به
build.gradle اضافه میکنیم :
android {
....
sourceSets { main { jni.srcDirs = [] } }
}
بر روی دستگاه اندرویدی شما حتما باید
openCV Manager نصب باشد. برای نصب میتوانید به
اینجا مراجعه کنید.
سالک: در گوگل استور خطا می دهد ، گویا چنین نرم افزاری در گوگل استور وجود ندارد.
سپس با استفاده از کد زیر صحت افزوده شدن
openCv را بررسی میکنیم :
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (OpenCVLoader.initDebug()) {
Log.d("Zero to hero", "OpenCV Lib Founded");
} else {
Log.d("Zero to hero", "Not found");
}
}
@Override
public void onCameraViewStarted(int width, int height) {
}
@Override
public void onCameraViewStopped() {
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
return null;
}
}
اگر تمام مراحل فوق را درست انجام داده باشید در
Android Monitor این خروجی نمایش داده میشود :
vhdrjb.zerotohero.simpleopencv D/Zero to hero: OpenCV Lib Founded
در این مقاله سعی بر این شد تا مفاهیم اولیه و نصب
openCv را بررسی کنیم.
کپی از :