PDA

View Full Version : کار با emgu cv در اندروید



ziduat
جمعه 31 مرداد 1393, 21:52 عصر
سلام به همه

من دارم با emgu cv روی مونو اندروید کار میکنم. یه چند تا مشکل دارم:
یکی اینکه مثالی که خود emgu داره برای من کار نمیکنه!! طبق این لینک: http://www.emgu.com/wiki/index.php/Emgu_CV_for_Android

حتی یه کد خیلی ساده ای که زدم هم کار نمیکنه برام! یعنی خروجی نشون نمیده. میشه راهنمایی کنین مشکل از کجاست. آیا تنظیماتی رو انجام ندادم یا اینکه dll های اشتباه رو اضافه کردم یا ...

اینم کد:

Image<Bgr, Byte> myimage;
myimage=new Image<Bgr, byte>(Assets, "box.png");
imageview.SetImageBitmap(myimage.ToBitmap());

c0mmander
شنبه 01 شهریور 1393, 00:24 صبح
سورس کد مطابق مثال رو عینا تست کنید . و از وجود عکس ها هم مطمین باشید. نوع Image یک نوعی هست که توسط دی ال ال های emgu تعریف شده پس بهتره که با فضای نامش تعریف بشن. در آخر هم خروجی که در imageView به نمایش در اومده خروجی تابع DrawMatches بوده بررسی کنید که نوع خروجی این تابع که برای مطابقت عکس ها استفاده شده چیه..

ziduat
شنبه 01 شهریور 1393, 12:22 عصر
من دقیقا همون سورس رو استفاده کردم و کدی هم که توی Activity نوشتم عین همون چیزیه که توی مثال خود سایت گفته شده. عکس ها هم، همون عکس هایی که توی فایل خود مثال هست رو استفاده کردم ولی جواب نمیده!!

یه سوالی که برام پیش اومد اینه که برای اندروید باید نسخه جداگانه emgu را استفاده کرد، درسته؟ شما کدوم نسخه رو پیشنهاد میکنین؟!!؟
و یه چیز دیگه اینکه آیا نیاز به نصب open cv manager روی اندروید هست یا نه؟؟

c0mmander
شنبه 01 شهریور 1393, 16:34 عصر
سوال اول : بله این نسخه اندرویدی emgu متفاوته و برای لایسنس استفاده از آن باید پول بدید.(رایگان نیست)

سوال دوم : خیر نیازی نیست.

ziduat
شنبه 01 شهریور 1393, 17:30 عصر
من یه نسخشو از این لینک دانلود کردم http://sourceforge.net/projects/emgucv/files/emgucv/2.4.9-beta/ (و پولی هم پرداخت نکردم)
و dll های اونو اضافه کردم. چون لایسنسش باید خریداری بشه برنامه اجرا نمیشه؟؟؟

ببخشید یه سوال دیگه:
توی توضیحی که توی سایت اصلی emgu cv نوشته شده(http://www.emgu.com/wiki/index.php/Main_Page) و طبق این جمله :

.Emgu CV (http://www.emgu.com/wiki/index.php/Emgu_CV) is written entirely in C#‎‎‎. The benefit is that it can be compiled in Mono (http://www.emgu.com/wiki/index.php/Compiling_with_Monodevelop) and therefore is able to run on any platform Mono supports, including Linux, Mac OS X, iOS and Android


از اونجایی که نوشته توی مونو میشه کامپایلش کرد، آیا باز هم نیازه که نسخه مخصوص اندروید باشه!؟!؟

ziduat
شنبه 01 شهریور 1393, 18:08 عصر
وقتی میگین لایسنسش رایگان نیست یعنی میشه دانلودش کرد ولی برای استفاده از dll هاش باید پول پرداخت بشه؟!؟! یا اصلا دانلود هم نمیشه کرد؟؟

c0mmander
شنبه 01 شهریور 1393, 19:13 عصر
Emgu CV (http://www.emgu.com/wiki/index.php/Emgu_CV) is written entirely in C#‎‎‎‎‎‎. The benefit is that it can be compiled in Mono (http://www.emgu.com/wiki/index.php/Compiling_with_Monodevelop) and therefore is able to run on any platform Mono supports, including Linux, Mac OS X, iOS and Android

این جمله به این معنی نیست که شما میتونید مستقیما DLL کامپایل شده رو روی سایر دستگاهها استفاده کنید بلکه منظور از این جمله مولتی پلتفرم بودن(با کامپایل مجدد) و قابلیت هماهنگ سازی با سایر سیستم عامل هاست.(دلیل به وجود آمدن مونو هم همین بوده که برای تقریبا یک چیزی مانند جاوا از آب در بیاد: یک بار نوشتن و همه جا استفاده کردن!)

برای خرید لایسنس میتونید از این لینک استفاده کنید:
http://www.emgu.com/wiki/index.php/Commercial_License_Purchase#Commercial_License_for _Android

تفاوت های نسخه دسکتاپ با نسخه اندروید:


Differences between Emgu CV for Android and Desktop version

The System.Drawing namespace is provided by Mono.Android package.
Mono for Android use "Android.Graphic.Bitmap" instead of "System.Drawing.Bitmap".
The Emgu.CV.GPU namespace is only provided for compilation against shared code developed for desktop system that optionally use GPU computation. The

function GpuInvoke.HasCuda will always return false on Android. If you are doing a fresh development for Android you can skip this reference


در اگر شما قدرت استفاده و تغییر سورس کدی که بصورت open source قرار داده شده برای استفاده از مونواندروید و یا مونوتاچ دارید دیگه نیازی به خرید لایسنس نیست. حتی میتونید با اختصاصی کردن سورس ها اون رو به فروش برسونید و مشکلی از نظر قانونی و مالیکتی برای شما نیست.

ziduat
شنبه 01 شهریور 1393, 19:20 عصر
خب پس من چه جوری می تونم با کتابخانه های megucv(یا همون opencv)یه برنامه بنویسم که روی اندروید اجرا بشه؟؟ باید از جاوا استفاده کنم؟؟؟

فعلا که در ایران نمیشه لایسنس خریداری کرد!!

dasssnj
یک شنبه 02 شهریور 1393, 07:45 صبح
این جمله به این معنی نیست که شما میتونید مستقیما DLL کامپایل شده رو روی سایر دستگاهها استفاده کنید بلکه منظور از این جمله مولتی پلتفرم بودن و قابلیت هماهنگ سازی با سایر سیستم عامل هاست.(دلیل به وجود آمدن مونو هم همین بوده که برای تقریبا یک چیزی مانند جاوا از آب در بیاد: یک بار نوشتن و همه جا استفاده کردن!)



یعنی dll های سی شارپ روی همه ی ساختار های سی پی یو کار می کنن و احتیاجی به کامپایل دوباره ندارند ؟ x86 x64 ARM Mips ؟

c0mmander
یک شنبه 02 شهریور 1393, 10:27 صبح
یعنی dll های سی شارپ روی همه ی ساختار های سی پی یو کار می کنن و احتیاجی به کامپایل دوباره ندارند ؟ x86 x64 ARM Mips ؟

[Happy new grade !!]
ببین دقیقا منظرو از کامپاین همینه (ولزوم کامپایل مجدد) برای همین نمیشه مستقما از DLL های ساخته شده با مونو در سایر سیستم عامل هاس استفاده کرد.

x86 x64 arm arm7 mips .. این ها ساختار پردازنده ها هستن که برنامه های اجرایی در بستر سیستم عامل های خودشون رو اجرا میکنند(کرنل سیستم عامل ها برای هر پردازنده یک قسمتی رو داره که این ساختار پردازشی رو تعیین میکنه)

مثلا برای اندروید شما میتوانید از سه ساختار x86 arm-a4v , arm برنامه های تون رو کامپایل کنید و اجرا کنید (داخل ویژوال استدویو گزینه داره که میشه بعضی از این ساختار ها رو حذف کرد. اگر دقت کرده باشید. دوستانی که با مونودریود کار میکننن همیشه از حجم بالای برنامه هاشون شکایت میکنن اما یکی از دلایل این ججم بالا همین استفاده از این ساختار هاست که بسته به نیاز میشه بعضی از این ساختار ها رو حذف کرد)
اما برای ساختار پردازشی سایر سیستم عامل های باید سورس کد ها سورس منبع ها فرق داشته باشه. برای همین برای برنامه نویسی مونو در آپل زامارین یک محصول دیگه رو عرضه کرده به عنوان مونوتاچ.(البته به نظر من عجله بود که زامارین انجام داده بود که خود اپل هم در حال آماده سازی به پردازنده های ارم هست)

اما خلاصه تمام حرف های بالای من اینکه هرگر این حرف درست نیست که DLL (تکنولوژی ماکروسافت) بدون کامپایل بر روی سایر سیستم عامل ها (با صرفه نظر کردن از ساختار پردازندهها یعنی در بهتریش حالت) استفاده بشه و این حرف به کل غلطه و اشتباست.
اما مولیتی پلت فرم بودن به این معنی هست که بایک تغییر در برنامه(عموما در رابط کاربری) و کامپایلر بدون تغییر هسته برنامه برنامه ها (هسته تنها یک بار نوشت) میتوان خروجی گرفت.
برای اطلاعات بیشتر درباره مونو میتونید از این لینک ها استفاده کنید:
http://www.mono-project.com/docs/about-mono/
-------------------------------------------------------------------------------------------------------------


خب پس من چه جوری می تونم با کتابخانه های megucv(یا همون opencv)یه برنامه بنویسم که روی اندروید اجرا بشه؟؟ باید از جاوا استفاده کنم؟؟؟

فعلا که در ایران نمیشه لایسنس خریداری کرد!!

بصورت کلی یک روش ساده و قابل استفاده در چند ساعتی به ذهنم نمیرسه. حالا شاید دوستان و استادید نظر دیگه داشته باشن و پیشنهاداتی به شما بدن. بهتره که منتظر باشید. در ضمن داخل انجمن سی شارپ و دات نت هم سوالتون رو مطرح کنید. حتما به نتایج بیشتر بهتر و دقیق تری میرسید.

dasssnj
یک شنبه 02 شهریور 1393, 11:18 صبح
خب پس خیالم راحت شد . فایل های jar از این لحاظ خیلی کاربردی هسند و نیازی به کامپایل دوباره ندارند و روی همه ی سی پی یو ها اجرا میشن. :تشویق:
حجم برنامه هم کمتر میشه

c0mmander
یک شنبه 02 شهریور 1393, 18:19 عصر
خب پس خیالم راحت شد . فایل های jar از این لحاظ خیلی کاربردی هسند و نیازی به کامپایل دوباره ندارند و روی همه ی سی پی یو ها اجرا میشن. :تشویق:
حجم برنامه هم کمتر میشه
زیاد خوشحال نباش.. من گفتم DLL های ساخته شده!!! خوب خود بگو DLL به جز داخل ماکروسافت به چه کاری میاد؟!؟!
یک مثال میزنم تا این خوشحالی تو زیاد دوامی نداشته باشه:لبخند:
یک برنامه اندروید (مثلا جدول ضرب) رو در نظر بگیر این برنامه رو نوشتی و جروجی گرفتی. خروجی یک فایل APK هست که داخل گوشی با پردازنده های x86 arm armv7a و سیستم عامل اندروید سازگاره. مهم ترین نکته اینکه اگر سیستم عامل اندروید با پردازنده مثلا x86 باشه(جینیموشن یک نمونشه!) و برنامه تو ساختار پردازنده ای x86 رو نداشته باشه اجرا نخواهد شد. اما این طور نیست! چون خروجی فایل تو بصورت پیشفرض برای همه معماری ها با ساپورت اندروید محیاست!
حالا تو میخوای این کد رو یعنی جدول ضرب رو برای نسخه PC بدی ایا این فایل شما قابل اجراست؟!؟!؟ خیر نیست نیاز به کامپایل مجدد و طراحی رابط کاربری مجددی رو داره اما هسته برنامه یعنی کلاس یا تابع یا هرچیزی دیگه که ضرب رو حساب میکنه و خروجی میده یکی هست!
مونو هم دقیقا همون صورته!
اما حالا فرض کن همون جدول ضرب رو شما برای نسخه PC نوشتید آیا بصورت مستقیم روی لینوکس مثلا اوبونتو قابل اجراست؟!؟! خیر امکانش نیست و باید ملزومات اجرا بر روی اون لینوکس قبلا نصب بشه.. نکته ای که هست دقیقا نسخه لینوکس این ملزومات با نسخه وندوزی اون ها فرق میکنه اما این برای شما مهم نیست چون برنامه شما رو اجرا میکنه
باز هم در مونو به همین صورته! نه اینکه برنامه دوباره کامپایل بشه و نه اینکه تغییری ایجاد بشه..
-----------------------------------------------------------------------------------------------------------
اونی که گفته بود اون سایت فلک زده اینه که با سی شارپ نوشته شده و میتونید با مونو کامپایلش کنید و دیگه مولی پلتفرم بشه یک نگاهی به جدول زیر بندازید:
122630
همه چیز گویاست ... وقتی گفته میشه مشکلی با معماری ها نداره نه اینکه نسخه PC بروری پردازنده A6 اپل اجرا میشه! بلکه باید DLL اصلی برای استفاده از اون داخل بستر مونو اون پلتفرم که در ایجا مونو تاچ و مونو دروید هاستند تغییر کنه و دوباره کامپایل بشه.. کسی نمیتونه میتونه بخره! کسی هم که نمیتونه بخره و نمیتونه بسازه بره کرک کنه کسی که هیچ کدوم از این کارا رو نمیتونه انجام بده بره با توابع پردازشی برای خودش بسازه و از توابع موجود استفاده کنه!

بازم اگر خوشحالیت ادامه داشت بگو :لبخند:
البته اگر از ته دل نظرم رو درباره ماکروسافت و محصولاتش بپرسی میگم اشغال و بی خاصیت و پر از باگ بخصوص این ASP.net که ایرانی جیگرشون رو براش پاره پاره میکنن!!