16-Laboratoriya mashguloti
Mavzu: Matlab dasturida Face Recognition tizimini yaratish
Ishdan maqsad: Obyektlarni kompyuter tizimlari tomonidan tanib olinishi haqida umumiy tushunchaga ega bolish hamda Matlab dasturida yuzni tanib oluvchi dasturni yaratish.
Ob'ektlarni aniqlash va kuzatib borish ko'plab kompyuterlarni ko'rish dasturlarida, shu jumladan faoliyatni aniqlash, avtomobil xavfsizligi va kuzatuvda muhim ahamiyatga ega. Bu erda nafaqat odamning yuzini, balki ko'zlari va tanasining yuqori qismini ham aniqlay oladigan MATLAB tizimidan foydalangan holda yuzni aniqlash mavjud.Yuzni aniqlash odamlar uchun oson va sodda vazifadir, ammo kompyuterlar uchun bunday emas. Yuzning tashqi ko'rinishi, yorug'ligi va ifodasi o'zgarishi natijasida yuzaga keladigan katta sinfiy farqlar tufayli bu kompyuterni ko'rish sohasidagi eng murakkab va qiyin muammo sifatida qaraladi. Bunday o'zgarishlar yuzning taqsimlanishini asl tasvir makoniga to'g'ri keladigan har qanday bo'shliqda juda noaniq va murakkab bo'lishiga olib keladi.
Ushbu mavzu orqali MATLAB yordamida yuzlarni qanday tanib olish jarayoni o'rganiladi. Bunday tizimni amalga oshirish uchun dastlab uchta ketma-ketlik bajarilishi kerak:
1-qadam: Ma'lumotlar to'plamini tayyorlash,
2-qadam: Ma'lumotlar bazasini yuklash
3-qadam: Yuzni tanib olish
Ushbu o'quv qo'llanmada ushbu uch bosqich batafsil yoritiladi. Avval ma'lumotlar bazasini tayyorlanadi. Ma'lumotlar to'plamini avtomatik ravishda tayyorlayotgan bo'lsada, aslida nima bo'layotganini tushunilishi uchun buni batafsil yoritiladi. Keyin Matlab-da ma'lumotlar bazasini qanday yuklashni ko'rsatiladi. Va nihoyat, ushbu ma'lumotlar to'plami yordamida yuzlarni qanday tanib olish taqdim etiladi.
Dastlab 40 kishilik ma'lumotlar to'plami tayyorlanadi. Ushbu odamlarning har birida turli xil korinishlarda 10 ta rasm mavjud. Bu jami 40 x 10 = 400 ta rasm mavjudligini anglatadi. Har bir inson uchun alohida papkalar mavjud. Buni shu tarzda tushuntirish tartibsizliklarni keltirib chiqaradi. Shuning uchun 1.1 shakl ni tayyorlangan. Ma'lumotlar to'plamini qanday tayyorlashni tushunishga yordam beradi.
1.1 rasm
1.1-rasmda siz 1, 2, 3 dan 40 gacha bo'lgan 40 kishidan iborat yuqori qatorni ko'rishingiz mumkin. Ularning har birida 10 ta rasm bor. Ushbu rasmlar kul rangda. Ushbu rasmlarning barchasi bir xil o'lcham va hajmga ega bo'lishi kerak. Va nihoyat, har bir shaxsning rasmlarini alohida papkada saqlanishi kerak. 1.1-rasmda s1, s2, s3
.. s40 papkalarni aks ettiradi. Ma'lumotlar bazasini tayyorlash bosqichlarini sarhisob qilinsa: Har bir inson uchun 10 ta rasm.
Har bir kishi uchun 1 ta papka (s1, s2, s3 va boshqalar) Rasmlar kulrang rangda bo'lishi kerak
Rasmlar bir xil o'lchamda va o'lchamda bo'lishi kerak. Ushbu misolda 92 x 112 pikselli rasm tanlab olingan.
Rasm nomi 1, 2, 3 kabi raqamli bo'lishi kerak.
Va tasvirlar bmp, pgm va boshqalar kabi bir xil kengaytmaga ega bo'lishi kerak. Rasmning turli xil kengaytmalarini aralashtirmang.
Shunday qilib, ma'lumotlar to'plamini shu tarzda tayyorlash mumkin. Ma'lumotlar to'plamini tayyorlashning ko'plab boshqa usullari mavjud. Bu ulardan bittasi.
Ma'lumotlar to'plamini tayyorlagandan so'ng, keyingi vazifa ma'lumotlar bazasini yuklashdir. Ma'lumotlar bazasini yuklash uchun. Quyida uni "load_database.m" deb nomlangan.
Birinchi satrda "load_database ()" funktsiyasining nomini e'lon qilingan, bu hech qanday kirishni talab qilmaydi. Shuning uchun bo'sh qavsdan foydalanilgan. Ammo bu rasmlarning raqamli shaklini qaytaradi. Qaytariladigan rasmlar "ouput_value" nomli o'zgaruvchida saqlanadi.
Shundan so'ng "loaded" va "numeric_Images" nomli yana ikkita o'zgaruvchini olingan. Ushbu o'zgaruvchilar doimiy turga ega.
«Doimiy o'zgaruvchilar e'lon qilingan funktsiya uchun lokaldir; hali ularning qiymatlari funktsiyaga qo'ng'iroqlar orasida xotirada saqlanadi. Doimiy o'zgaruvchilar global o'zgaruvchilarga o'xshaydi, chunki MATLAB ikkalasi uchun doimiy xotirani yaratadi. Ular global o'zgaruvchilardan farq qiladi, chunki doimiy o'zgaruvchilar faqat e'lon qilingan funktsiyalari bilan ma'lum. Bu doimiy o'zgaruvchilarni boshqa funktsiyalar tomonidan yoki MATLAB buyruq satridan o'zgartirilishini oldini oladi:
Shundan so'ng, "agar" shartida men "yuklangan" o'zgaruvchining bo'shligini tekshirdim. Agar u bo'sh bo'lsa, biz faqat ma'lumotlar bazasini yuklaymiz. Doimiy o'zgaruvchilar doimiy ravishda ma'lumotlarni saqlaydi. Ma'lumotlar to'plamini faqat bir marta yuklanishi kerak. Shuning uchun o'zgaruvchining boshida bo'sh yoki yo'qligini tekshirish muhimdir.
Ushbu holatda 40 ta rasm bor. Ularning har biri 92 x 112 = 10304 pikselga ega. Shuning uchun biz 10304 nolni 40 marta olinishi kerak. Keyinchalik rasmlarning piksel qiymatlari ushbu "nol" lar o'rnini bosadi. Keyin strcat funktsiyasidan foydalangan holda "for loop" ichida papkalarning nomlarini (s1, s2, s3 va boshqalar), rasmlarning nomlarini (1, 2, 3 va boshqalar) va rasmlar (ushbu holatda .pgm rasmlaridan foydalanilgan).
Shundan so'ng "imread" funktsiyasidan foydalangan holda, rasmlar yuklangan. Tasvirlarni qayta shakllantirish kerak. Rasmlarni yuklagandan so'ng, rasmlarni bitta ustunli matritsaga aylantirish uchun "qayta shakllantirish" funktsiyasidan foydalanilgan. Shuningdek, rasmlarning satrlari va ustunlari hajmini beradigan "size" funktsiyasidan foydalanilgan. Shundan so'ng xotiradan foydalanishni kamaytirish uchun rasmlarni 8 bit imzosiz butun songa aylantirilgan. "Uint8" funktsiyasidan foydalanib, to'g'ridan-to'g'ri Matlab-da ma'lumotlarni 8 bit imzosiz butun songa aylantirish mumkin. "For loop" dan oldin "if" sharti mavjud. "Yuklangan" o'zgaruvchi qiymatga ega bo'lganda, u noto'g'ri bo'ladi. Nihoyat, bu funktsiya rasmlarni 8 bit imzosiz tamsayı shaklida qaytaradi.
Yuzlarni tanib olish uchun avval ma'lumotlar bazasini yuklanadi. Shundan so'ng tasodifiy funktsiyadan foydalanib tasodifiy indeks hosil qilinadi. Tasodifiy indeks ketma-ketligidan foydalanib, keyinchalik tanib bo'ladigan tasvirni yuklanadi. Qolgan rasmlar ham alohida o'zgaruvchiga yuklanadi.
Shundan so'ng, barcha rasmlarning o'rtacha qiymatini hisoblab chiqilgan va ulardan o'rtacha qiymati olib tashlanadi. Ushbu tasvirlar bo'yicha xususiy vektorlar hisoblab chiqilgan. O'ziga xos qiymatlarga ega bo'lingandan so'ng, har bir satrda alohida rasmlarning imzolarini o'z ichiga olgan matritsa yaratildi. Ularni aniqlash uchun o'ziga xos qiymatlar va rasm imzolari mavjud.
Oxirgi bo'limda tanib olishni istagan tasvirdan o'rtacha qiymatni chiqarib tashlanadi. Keyin uni xususiy vektor bilan ko'paytiriladi. Va nihoyat, hozirgi imzolar bilan yuqorida aytib o'tgan imzo o'rtasidagi farqga asoslanib tanilgan yuzni bashorat qilindi.
Ushbu usulning aniqligi 94% atrofida. Bu 100 sinovdan to'rtta xatoga yo'l qo'yishi mumkinligini anglatadi.
Bu yerda esa natija aks ettirilgan.
Ushbu dastur avtomatik ravishda rasmni yuklaydi (agar siz aniq bir rasmni yuklashni tanlamasangiz), so'ngra ma'lumotlar to'plamidan xuddi shu odamning rasmini topasiz. Ushbu misoldan foydalanib, siz o'zingizning yuzingizni aniqlash tizimini yaratishingiz mumkin.
Do'stlaringiz bilan baham: |