آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

شناسایی چهره ، مقایسه تصویر نمای بسته ی دو شخص- حل شد + نمونه کد

مجتبی یگانه  10 سال پیش  10 سال پیش
+28 0

سلام

فرض کنید بخوایم کاری شبیه به باز کردن قفل صفحه با شناسایی چهره انجام بدیم ، اما کارم خیلی حساس نیست و در حد یه پروژه ی تست هست ، من 2 تا تصویر دارم A.jpg و B.jpg میخوام این 2 تا تصویر رو بدم به یه لایبرری بگه یه نفر هستن یا نه !

چون فعلا نه دانش شروع پردازش تصویر رو دارم ، نه وقت اش رو ، بیشتر دنبال کتابخانه میگردم و کتابخانه ای که معمولا توصیه میشه openCV هست ، کسی باهاش کار کرده ، یا کلا در این زمینه اطلاعاتی داره که باعث بشه حتی 1 دقیقه کمتر وقت صرف کنم !

تا الان تونستم با FaceDetector چهره ها رو تشخیص بدم ، بگم چند نفر تو عکس هستن و..  ، اما واقعا واسه مقایسه شون هیچ ایده ای ندارم :|

+6 0
خودم هیچ کدومشو نو امتحان نکردم ولی یه سری اطلاعات میدم. حالا که وقتشو نداری ، openCV رو بی خیال شو چون باید به Android NDK سوییچ کنی و قبلا هم باهاش کار نکردی. پس وقتتو زیاد میگیره. با javacv فکر کنم بشه این کاری که میگی رو انجام داد و احتمالا نیاز نیست به Android NDK سوییچ کنی. همچنین چون میخوای چهره رو تشخیص بدی (Recognize کنی) نه این که چهره رو توی تصویر پیدا کنی (Detect کنی) باید دنبال face recognition باشی نه FaceDetector .حتی اگه دنبال Face Detector هم میبودی خود Android Sdk داره android.media.FaceDetector.Face لینک نیازی به استفاده از لایبراری javaCV یا openCV هم نداشتی.با این حال لینک هم هست که بر پایه ی openCV نوشته شده. لینک دانلود سورس کد هم توی لینک موجوده، نگاه کن ببین بدردت میخوره یا نه. (10 سال پیش)
+4 0
اینم لینک دانلود sdk و مثال لینک برای لینک آخر. (10 سال پیش)
+1 0
مرسی حمید جان ، اینا رو تست نکردم ، اما فعلا رو جاوا به جاهای خوبی رسیدم ! ، تموم شد خبرش رو میدم ، مرسی (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  10 سال پیش
+27 0

بالاخــــــــــــــــــــــــــــــــــــره به نتیجه رسیدم ، اصلا اشتباه ام این بود از اولش خودم رو دست کم گرفتم  رفتم دنبال کتابخونه :|

این از اون سورس کدهای با ارزشه ! ، درج میکنم تا یادمون باشه کار نشد نداره D:

مقایسه ی تصاویر در 50 خط کد :

 public static StructResult FileToFileCompare(File file1, File file2) {
	Bitmap img1 = null;
	Bitmap img2 = null;
	try {
		Options option1 = new Options();
		Options option2 = new Options();

		img1 = BitmapFactory.decodeFile(file1.toString(), option1);
		img2 = BitmapFactory.decodeFile(file2.toString(), option2);

		int width1 = option1.outWidth;
		int width2 = option2.outWidth;
		int height1 = option1.outHeight;
		int height2 = option2.outHeight;
		if ((width1 != width2) || (height1 != height2)) {
			System.err.println("size not Matches");
			return null;
		}
		long diff = 0;
		for (int y = 0; y < height1; y++) {
			for (int x = 0; x < width1; x++) {
				int pix1 = img1.getPixel(x, y);
				int pix2 = img2.getPixel(x, y);
				int r1 = Color.red(pix1);
				int g1 = Color.green(pix1);
				int b1 = Color.blue(pix1);

				int r2 = Color.red(pix2);
				int g2 = Color.green(pix2);
				int b2 = Color.blue(pix2);

				diff += Math.abs(r1 - r2);
				diff += Math.abs(g1 - g2);
				diff += Math.abs(b1 - b2);
			}
		}
		double n = width1 * height1 * 3;
		double p = diff / n / 255.0;
		double difPrecentage = (p * 100.0);
		System.out.println(file1.getName() + " diff percent wtih " + file2.getName() +
" is : " + difPrecentage + "%"); return new StructResult(file2.getName(), difPrecentage); } catch (Exception e) { e.printStackTrace(); } return null; }

برای مقایسه ی N تصویر هم کافیه تفاوت ها رو با هم مقایسه کنید ، اونی که کمترین تفاوت رو داشت ، میشه نزدیک ترین تصویر به تصویر اصلی

0 0
تشکر بابت سورس کد :) ، اون متغیر های n و p چی رو محاسبه میکنند؟ (10 سال پیش)
0 0
تشکر فراوان (10 سال پیش)
0 0
کلاس StructResult رو معرفی نمی کنی ؟ (10 سال پیش)
+3 0
بفرما اینم لینک کلاس (10 سال پیش)
0 0
آفرین! درستش کردی :) ولی این هنوز به 50 خط نرسیده باید 6 خط دیگه هم اضافه کنی :) (10 سال پیش)
+2 0
@javac متغییر n تعداد کل R G B های ما هست ، که چون به ازای هر پیکسل 3 رنگ تشکیل دهنده داریم ، میشه تعداد پیکسل های عکس * 3 و متغییر p نسبت شباهت هست ، که پائین تر به درصد هم محاسبه شده / اگر اون 255.0 هم براتون نا مفهوم هست ، باید بگم منظور 0 تا 255 کد های رنگی هست (10 سال پیش)
0 0
در مورد کلیت قضیه ، یه جرقه ای تو زهنم زده شده که پیکسل به پیکسل برسی کنم ، اما این سورس کد سورس کدی نیست که فقط من نوشته باشم ، نمونه اش تو اینترنت زیاد هست ، فقط من ازشون ایده گرفتم و مشابه اش رو با BitMap نوشتم ، چون تو جاوا با BufferedImage نوشته میشه که تو اندروید نمیشه ازش استفاده کرد. (10 سال پیش)
+3 0
@ حسین کرد ، میشه با یکم فکر بدست اش آورد ، همون طور که اسپریت جان به دست آوردن :) / @حمید D: ، آره دیگه ! ، واسه ما کار نشد نداره D: ، اون 6 خط ام باید چند لاگ چاپ کنم ، با تشکر از حمید ، خودم ، پدر مادرم ، استاد آقاجانی، پرفوسور ریچارد و... D: (10 سال پیش)
0 0
هیچ راهی نیست که بشه از BufferedImage توی اندروید استفاده کرد؟ خیلی قابلیت‌های خوبی داره... (10 سال پیش)
0 0
سوالی در همین مورد در انجمن مطرح کردم ، حتی تو استک هم مطرح کردم ،جواب این بود که از کلاس بیت مپ استفاده کن ، تمام متد های bufferedImage رو داره :) (10 سال پیش)
0 0
من چند وقت پیش رفته بودم سراغ یه کتابخونه جاوا برای پردازش تصویر در اندروید اما متدهای اون ورودی‌هایی از جنس BufferedImage می‌خواست در نتیجه ولش کردم؛ حالا بنظرتون راهی هست که بشه ازش استفاده کرد؟ (کتابخونه بسیار خوبی بود خیلی از پردازش تصویرهای معروفی که توی متلب انجام می‌دهند رو بوسیله اون توی جاوا به راحتی می‌شد انجام بدی) (10 سال پیش)
0 0
من چند مورد رو تو جاوا پیاده کردم خیلی خوب جواب میدادن ولی یکی اینکه سنگین و حجیم بودن و اینکه نشد بیارمش تو اندروید - چون سواد کافی تو این زمینه نداشتم - وقتی میشه کلاس های مشابه رو پیدا کرد که به هر دو کلاس و متد هاشون مسلط باشیم که من نبودم :| (10 سال پیش)
+9 0
در واقع مقایسه دو تصویر یه فرآیند آماری هست. توزیعی به اسم chi2 ( خی 2 ) هست که بر اساس معیار اختلافات سنجیده میشه. کلاً آمار درک کردنش خیلی سخته اما اگر علاقه مند بودید به دقیقتر کردن محاسبات، بهتر است مباحث آماری مربوط به «طرح آزمون» را مطالعه نمایید. (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .