شناسایی چهره ، مقایسه تصویر نمای بسته ی دو شخص- حل شد + نمونه کد
سلام
فرض کنید بخوایم کاری شبیه به باز کردن قفل صفحه با شناسایی چهره انجام بدیم ، اما کارم خیلی حساس نیست و در حد یه پروژه ی تست هست ، من 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 تصویر هم کافیه تفاوت ها رو با هم مقایسه کنید ، اونی که کمترین تفاوت رو داشت ، میشه نزدیک ترین تصویر به تصویر اصلی
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .