شناسایی چهره ، مقایسه تصویر نمای بسته ی دو شخص- حل شد + نمونه کد
سلام
فرض کنید بخوایم کاری شبیه به باز کردن قفل صفحه با شناسایی چهره انجام بدیم ، اما کارم خیلی حساس نیست و در حد یه پروژه ی تست هست ، من 2 تا تصویر دارم A.jpg و B.jpg میخوام این 2 تا تصویر رو بدم به یه لایبرری بگه یه نفر هستن یا نه !
چون فعلا نه دانش شروع پردازش تصویر رو دارم ، نه وقت اش رو ، بیشتر دنبال کتابخانه میگردم و کتابخانه ای که معمولا توصیه میشه openCV هست ، کسی باهاش کار کرده ، یا کلا در این زمینه اطلاعاتی داره که باعث بشه حتی 1 دقیقه کمتر وقت صرف کنم !
تا الان تونستم با FaceDetector چهره ها رو تشخیص بدم ، بگم چند نفر تو عکس هستن و.. ، اما واقعا واسه مقایسه شون هیچ ایده ای ندارم :|
بالاخــــــــــــــــــــــــــــــــــــره به نتیجه رسیدم ، اصلا اشتباه ام این بود از اولش خودم رو دست کم گرفتم رفتم دنبال کتابخونه :|
این از اون سورس کدهای با ارزشه ! ، درج میکنم تا یادمون باشه کار نشد نداره 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 تصویر هم کافیه تفاوت ها رو با هم مقایسه کنید ، اونی که کمترین تفاوت رو داشت ، میشه نزدیک ترین تصویر به تصویر اصلی
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .