Nhận diện khuôn mặt sử dụng phương pháp trích rút đặc trưng PCA và thực hiện phân lớp bằng naïve bayes

19 424 0
Nhận diện khuôn mặt sử dụng phương pháp trích rút đặc trưng PCA và thực hiện phân lớp bằng naïve bayes

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trong bài toán này sẽ giải quyết bài toán nhận dạng mặt người dùng phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) và phân lớp bằng Naïve bayes. Trong đó Phương pháp PCA sẽ dùng để trích chọn đặc trưng một tập cơ sở dữ liệu ảnh mặt người và một trong các ảnh test bất kỳ bên ngoài. Còn phương pháp Naïve bayes sẽ dùng để phân lớp ảnh test đã được trích chọn đặc trưng PCA thuộc vào lớp nào trong các lớp đã được học.

BỘ CÔNG NGHIỆP TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ======***====== Báo cáo tập lớn Nhập mơn lý thuyết nhận dạng Giáo viên: Nhóm - Lớp: Thành viên: Đề tài: Nhận diện khuôn mặt sử dụng phương pháp trích rút đặc trưng PCA thực phân lớp nạve bayes Nhập mơn lý thuyết nhận dạng LỜI MỞ ĐẦU Hiện nay, Cùng với phát triển xã hội, vấn đề an ninh bảo mật yêu cầu khắt khe quốc gia giới Các hệ thống nhận dạng người đời với độ tin cậy ngày cao Một toán nhận dạng người quan tâm nhận dạng khn mặt Vì nhận dạng khn mặt cách mà người dung để phân biệt Bên cạnh đó, ngày việc thu thập xử lý thơng tin qua ảnh để nhận biết đối tượng quan tâm ứng dụng rộng rãi Với phương pháp thu thập nhiều thơng tin từ đối tượng mà không cần tác động nhiều đến đối tượng nghiên cứu Sự phát triển khoa học máy tính tạo mơi trường thuận lợi cho toán nhận dạng mặt người từ ảnh số Trong toán chúng em giải toán nhận dạng mặt người dùng phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) phân lớp Naïve bayes Trong Phương pháp PCA dùng để trích chọn đặc trưng tập sở liệu ảnh mặt người ảnh test bên Còn phương pháp Nạve bayes dùng để phân lớp ảnh test trích chọn đặc trưng PCA thuộc vào lớp lớp học Nhập môn lý thuyết nhận dạng MỤC LỤC Chương Giới thiệu Phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) phương pháp phân lớp Naïve bayes Chương Áp dụng giải toán Các bước giải toán Tiếp nhận ảnh đầu vào thực phân lớp sử dụng naïve bayes tập huấn luyện Chương Chương trình kết Chương trình Kết 18 Nhập môn lý thuyết nhận dạng Chương Giới thiệu Phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) 1.1 Giới thiệu PCA(Principle Components Analysis) thuật toán sử dụng để tạo ảnh từ ảnh ban đầu Ảnh có kích thước nhỏ nhiều so với ảnh đầu vào mang đặc trưng ảnh cần nhận dạng PCA khơng quan tâm đến việc tìm đặc điểm cụ thể thực thể cần nhận dạng mối quan hệ đặc điểm Tất chi tiết thể ảnh tạo từ PCA - Ưu điểm phương pháp PCA  Tìm đặc tính tiêu biểu đối tượng cần nhận dạng mà không cần phải xác định thành phần mối quan hệ thành phần  Thuật tốn thực tốt với ảnh có độ phân giải cao  PCA kết hợp với phương pháp khác mạng noron, Support Vector Machine… để mang lại hiệu cao - Nhược điểm phương pháp PCA  PCA phân loại theo chiều phân bố lớn tập vector Tuy nhiên chiều phân bố lớn lúc mang lại hiệu lớn cho toán nhận dạng  PCA nhạy với nhiễu 1.2 Thuật toán Input: Bảng Dữ liệu X cấp n p ứng với n mẫu p thuộc tính Output: Bảng liệu Y cấp n d ứng với n mẫu d thuộc tính(d=2 >=…>= p >= Bước 4: Chọn d véc tơ lập thành W cấp dp Nhập môn lý thuyết nhận dạng Bước 5: Tính Yn x d = X W’ phương pháp phân lớp Naïve bayes 2.1 Giới thiệu Naive Bayes Classification (NBC) thuật toán dựa định lý Bayes lý thuyết xác suất để đưa phán đoán phân loại liệu dựa liệu quan sát thống kê Naive Bayes Classification thuật toán ứng dụng nhiều lĩnh vực Machine learning dùng để đưa dự đốn xác dự tập liệu thu thập, dễ hiểu độ xác cao Nó thuộc vào nhóm Supervised Machine Learning Algorithms (thuật tốn học có hướng dẫn), tức máy học từ ví dụ từ mẫu liệu có Định lý Bayes cho phép tính xác suất xảy kiện ngẫu nhiên A biết kiện liên quan B xảy Xác suất ký hiệu P(A|B), đọc “xác suất A có B” Đại lượng gọi xác suất có điều kiện hay xác suất hậu nghiệm rút từ giá trị cho B phụ thuộc vào giá trị Theo định lí Bayes, xác suất xảy A biết B phụ thuộc vào yếu tố:  Xác suất xảy A riêng nó, khơng quan tâm đến B Kí hiệu P(A) đọc xác suất A Đây gọi xác suất tiên nghiệm, “tiên nghiệm” theo nghĩa khơng quan tâm đến thơng tin B  Xác suất xảy B riêng nó, khơng quan tâm đến A Kí hiệu P(B) đọc “xác suất B” Đại lượng gọi số chuẩn hóa (normalising constant), ln giống nhau, khơng phụ thuộc vào kiện A muốn biết  Xác suất xảy B biết A xảy Kí hiệu P(B|A) đọc “xác suất B có A” Đại lượng gọi khả xảy B biết A xảy 2.2 Dữ liệu huấn luyện - Xét tập liệu huấn luyện X gồm n mẫu có m thuộc tính(thuộc tính thực) thuộc tính lớp => X R nxm+1 - Ký hiệu C - Cho mẫu thử z Rm cần dự đốn giá trị thuộc tính y, hay nói cách = {c1,…,ck}là tập ký hiệu lớp(k lớp) Mỗi phần tử x X vector m+1 chiều, ký hiệu x = (x1,…,xm,y) y C giá trị thuộc tính lớp ’ khác cần xác định lớp c C cho mẫu z (z thuộc lớp nhất) Nhập môn lý thuyết nhận dạng 2.3 Ý tưởng thuật toán - Để xác định lớp mẫu z ta tính xác xuất có điều kiện để z phân - vào lớp ci , ký hiệu P(ci Theo định lý bayes: P(ci | z) - | z) với i = … k = Trong Nạve Bayes sử dụng giả thiết thuộc tính liệu độc lập nhau, nên theo lý thuyết xác suất ta có: = - (1) (2) Thay (2) vào (1) ta có : P(ci | z) = - Mẫu z phân vào lớp ci có P(ci | z) max - Trong công thức (1) P(z) số với ci nên P(ci | z) max khi: max 2.4 Thuật tốn Nạve bayes Bước 1: Với lớp ci C ta tính : - Xác suất tiên nghiệm P(ci): xác suất tiên nghiệm xấp xỉ tỷ số số lượng mẫu X thuộc lớp ci tổng số lượng mẫu - Đối với giá trị tính xác suất : xác suất xảy giá trị lớp ci Giá trị tính xấp xi tỷ lệ số mẫu có giá trị lớp ci với số lượng mẫu thuộc lớp ci Bước 2: Phân mẫu thử Z vào ci lớp thỏa mãn max 2.5 Phương pháp Naïve Bayes trường hợp thuộc tính có kiểu liên tục  Trong trường hợp thuộc tính có kiểu liên tục Ta rời rạc hóa trước áp dụng Nạve Bayes Nhập mơn lý thuyết nhận dạng  Xét thuộc tính A có kiểu liên tục, ta cần tính giá trị kỳ vọng (µ) phương sai() thuộc tính A với lớp ci  Ký hiệu Di gồm mẫu huấn luyện lớp thuộc tính A mẫu huấn luyện d đó: ci, d(A) giá trị µ= , = )2  Giá trị = gọi phân bố xác suất vào lớp ci tính: exp Chương Áp dụng giải toán Các bước giải toán - Bước 1: Tiếp nhận ảnh đầu vào với số lượng ảnh 25 ảnh cầu thủ tiếng giới chia thành lớp khác - Bước 2: Xác định khn mặt cầu thủ khống chế kích thước ảnh cho ảnh có kích thước 80x70 - Bước 3: Thực duỗi ảnh kích thước 80x70 thành mảng 5600 phần tử để biểu diễn ảnh Kết hợp mảng ảnh ta có ma trận gồm 25 cột 5600 dòng - Bước 4: Thực PCA ma trận tập ảnh ta vừa có Sau q trình trích rút đặc trưng ta thu ma trận kích thước 25x25 Tiếp nhận ảnh đầu vào thực phân lớp sử dụng naïve bayes tập huấn luyện - Bước 1: Xác định khuôn mặt ảnh đầu vào khống chế kích thước ảnh với kích thước ảnh tập huấn luyện - Bước 2: Sử dụng PCA trước sử dụng để trích rút tập huấn luyện để trích rút với ảnh ta thu mảng gồm 25 phần tử - Bước 3: Tính kỳ vọng và phương sai đối ảnh với lớp ảnh trích rút tập huấn luyện Nhập mơn lý thuyết nhận dạng - Bước 4: Tính giá trị phân bố xác suất thuộc tính ảnh thuộc tính lớp ảnh huấn luyện - Bước 5: Lấy giá trị phân bố xác suất lớn xuất phân ảnh vào lớp Các cơng cụ cần có để cài đặt chương trình • • • Visual studio 2017 SQL server Nuget package manager cần tải về: • Accord NET • EmguCV Chương Chương trình kết Chương trình using using using using using using using using using using using using using using Accord.Imaging.Converters; Accord.MachineLearning; Accord.MachineLearning.Bayes; Accord.Math; Accord.Statistics.Analysis; Accord.Statistics.Distributions.Univariate; Emgu.CV; Emgu.CV.Structure; System; System.Collections.Generic; System.Drawing; System.IO; System.Linq; System.Windows.Forms; namespace Nhandangmat { public partial class Form1 : Form { /// /// Bien Private /// #region double[][] features; int[] outputs; int NBC = 0; MinimumMeanDistanceClassifier classifier; NaiveBayes bayes; Nhập môn lý thuyết nhận dạng 10 double[][] kmean; PrincipalComponentAnalysis pca; private CascadeClassifier _cascadeClassifier; #endregion public Form1() { InitializeComponent(); } /// /// Load anh vao form /// #region private void Form1_Load(object sender, EventArgs e) { var path = new DirectoryInfo(Path.Combine(Application.StartupPath, @"E:\Lab_C+++ +\Nhandangmat\Nhandangmat\Anh\")); int currentClassLabel = 0; // For every class folder foreach (var classFolder in path.EnumerateDirectories()) { string name = classFolder.Name; // For each file in the class folder FileInfo[] files = GetFilesByExtensions(classFolder, ".PNG").ToArray(); for (int i = 0; i < files.Length; i++) { FileInfo file = files[i]; Bitmap image = (Bitmap)Bitmap.FromFile(file.FullName); List L1 = new List(); L1 = Dection(image); dataGridView1.Rows.Add(name, currentClassLabel, image); dataGridView2.Rows.Add(name, currentClassLabel, L1[0].ToBitmap()); } currentClassLabel++; } NBC = currentClassLabel; } private IEnumerable GetFilesByExtensions(DirectoryInfo dir, params string[] extensions) Nhập môn lý thuyết nhận dạng 11 { if (extensions == null) throw new ArgumentNullException("extensions"); IEnumerable files = dir.EnumerateFiles(); return files.Where(f => extensions.Contains(f.Extension)); } #endregion /// /// TP ben Region: xu lys button1_click : xu ly PCA; /// /// Method: /// extrac: chuyen du lieu ve ma tran ; /// Dection: nhan dien khuon mat vowi kich thuoc:70x70 /// -/// B1: Anh datagridview duoc xac dinh mat bang anh cua datagridview /// B2: PCA bang anh cua datagridview /// B3: hien thi anh sau PCA len datagridview va chi so Properson /// #region private void button1_Click(object sender, EventArgs e) { dataGridView3.Rows.Clear(); #region // Vecto ma trận ảnh double[][] hands1 = extract(); double[][] hands = Accord.Statistics.Tools.ZScores(hands1); // Tạo đối tượng Principal Component Analysis pca = new PrincipalComponentAnalysis() { Method = PrincipalComponentMethod.Center, ExplainedVariance = 0.9 //độ lợi phương sai }; // Học chúng pca.Learn(hands); // Chuyển đổi vector riêng thành hình ảnh tương ứng ArrayToImage reverse = new ArrayToImage(80, 70); // duyet Pca da co for (int i = 0; i < pca.Components.Count; i++) { // Vector ảnh double[] vector = pca.Components[i].Eigenvector; reverse.Max = vector.Max(); reverse.Min = vector.Min(); // Vector ảnh vector Bitmap eigenHand; reverse.Convert(vector, out eigenHand); Nhập môn lý thuyết nhận dạng 12 dataGridView3.Rows.Add(eigenHand, pca.Components[i].Proportion); } ImageToArray converter = new ImageToArray(min: -1, max: +1); int rows = dataGridView2.Rows.Count; double[][] inputs = new double[rows][]; features = new double[rows][]; kmean = new double[rows][]; outputs = new int[rows]; int index = 0; foreach (DataGridViewRow row in dataGridView2.Rows) { Bitmap image = row.Cells["ImageActor"].Value as Bitmap; int label = (int)row.Cells["CollCorl"].Value; double[] input; converter.Convert(image, out input); double[] feature = pca.Transform(input); //ProjectPCA.Add(feature); row.Tag = feature; inputs[index] = input; features[index] = feature; kmean[index] = feature; outputs[index] = label; row.Cells["Projection"].Value = feature.ToString("N2"); index++; } classifier = new MinimumMeanDistanceClassifier(features, outputs); #endregion } double[][] extract() { double[][] hands = new double[dataGridView1.Rows.Count][]; ImageToArray converter = new ImageToArray(min: -1, max: +1); int index = 0; foreach (DataGridViewRow row in dataGridView1.Rows) { List L1 = new List(); Bitmap image = row.Cells["Image"].Value as Bitmap; L1 = Dection(image); converter.Convert(L1[0].ToBitmap(), out hands[index]); Nhập môn lý thuyết nhận dạng 13 index++; } } return hands; private List Dection(Bitmap image) { List l = new List(); Image imageAnh = new Image(image); _cascadeClassifier = new CascadeClassifier("E:\\Lab_C+++ +\\Nhandangmat\\Nhandangmat\\haarcascade_frontalface_alt2.xml"); using (var imageFrame = imageAnh) { if (imageFrame != null) { var grayframe = imageFrame; var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); foreach (var face in faces) { imageFrame.ROI = new Rectangle(face.Location.X, face.Location.Y, 80, 70); l.Add(imageFrame.Copy()); } } } return l; } #endregion /// /// Trong region gom: button2_Click: chon anh tu file Test /// button3_Click: Hient hien anh se PCA len Datagridview va PCA no /// Dection1 : Xac dinh khuon mat /// /// /// #region private void button2_Click(object sender, EventArgs e) { OpenFileDialog file = new OpenFileDialog(); file.ShowDialog(); Bitmap Image = new Bitmap(file.FileName); pictureBox1.Image = Image; } private void button3_Click(object sender, EventArgs e) { dataGridView4.Rows.Clear(); Nhập môn lý thuyết nhận dạng 14 Bitmap Image = new Bitmap(pictureBox1.Image); Bitmap Face = Dection1(Image)[0].ToBitmap(); dataGridView4.Rows.Add(Face); ImageToArray converter = new ImageToArray(min: -1, max: +1); int index1 = 0; double[] feature = new double[dataGridView1.Rows.Count]; foreach (DataGridViewRow row in dataGridView4.Rows) { Bitmap image = row.Cells["UpImage"].Value as Bitmap; double[] input; converter.Convert(image, out input); feature = pca.Transform(input); row.Cells["ProPertion"].Value = feature.ToString("N2"); index1++; } //double[][] Fmau = Accord.Math.Matrix.Transpose(features); //var teacher = new NaiveBayesLearning(); //bayes = teacher.Learn(features, outputs); //double[] sa = bayes.Probabilities(feature); //lblClass.Text = bayes.Decide(feature).ToString(); #region int nv = 0; double[] navbay = new double[NBC]; for (int i = 0; i < NBC; i++) { double[][] lopi = clasfe(features, i, outputs); double[] kvi = kyvong(lopi); double[] psi = phuongsai(lopi); double[] kqi = Px(psi, kvi, feature); double kqclassi = tich(kqi); navbay[nv] = kqclassi; nv++; } #region } #endregion for (int i = 0; i < navbay.Length; i++) { if (navbay[i] == navbay.Max()) { lblClass.Text = i.ToString(); break; } } #endregion Nhập môn lý thuyết nhận dạng 15 public List Dection1(Bitmap image) { List l = new List(); Image imageAnh = new Image(image); CascadeClassifier _cascadeClassifier = new CascadeClassifier("E:\\Lab_C+++ +\\Nhandangmat\\Nhandangmat\\haarcascade_frontalface_alt2.xml"); using (var imageFrame = imageAnh) { if (imageFrame != null) { var grayframe = imageFrame; var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10, Size.Empty); foreach (var face in faces) { imageFrame.Draw(face, new Bgr(Color.BurlyWood), 3); imageFrame.ROI = new Rectangle(face.Location.X, face.Location.Y, 80, 70); l.Add(imageFrame.Copy()); } } } return l; } #endregion // Phan lop KNN #region private double[][] clasfe(double[][] a, int classes, int[] classa) { double[][] b = new double[5][]; int dem = 0; for (int i = 0; i < classa.Length; i++) { if (classa[i] == classes) { b[dem] = new double[dataGridView1.Rows.Count]; for (int j = 0; j < a[i].Length; j++) { b[dem][j] = double.Parse(a[i][j].ToString("N2")); } dem++; } } } return b; Nhập môn lý thuyết nhận dạng 16 private double[] kyvong(double[][] a) { double[] kv = new double[dataGridView1.Rows.Count]; for (int i = 0; i < a[0].Length; i++) { double avg = double.Parse(((a[0][i] + a[1][i] + a[2][i] + a[3] [i] + a[4][i]) / 5).ToString()); kv[i] = avg; } return kv; } private double[] phuongsai(double[][] a) { double[] kv = new double[dataGridView1.Rows.Count]; for (int i = 0; i < a[0].Length; i++) { double avg = (a[0][i] + a[1][i] + a[2][i] + a[3][i] + a[4][i]) / 5; double sum = Math.Pow((a[0][i] - avg), 2) + Math.Pow((a[1][i] - avg), 2) + Math.Pow((a[2][i] - avg), 2) + Math.Pow((a[3][i] - avg), 2) + Math.Pow((a[4][i] - avg), 2); kv[i] = sum; } return kv; } private double[] Px(double[] ps, double[] kv, double[] f) { double[] kq = new double[dataGridView1.Rows.Count]; for (int i = 0; i < ps.Length; i++) { double e1 = / (Math.Sqrt(2 * Math.PI * ps[i])); double e = Math.Pow(Math.E, -(Math.Pow(f[i] - kv[i], 2) / (2 * ps[i]))); double re = e1 * e; } kq[i] = re; } return kq; private double tich(double[] a) { double t = 1; for (int i = 0; i < a.Length; i++) { if (a[i] > 0) Nhập môn lý thuyết nhận dạng 17 t = t * a[i]; else t = t * 0.00000001; } return double.Parse((t * / dataGridView1.Rows.Count).ToString()); } #endregion } } Kết Hình 1: Màn hình ban đầu Nhập mơn lý thuyết nhận dạng 18 Hình 2: Kết sau PCA Hình 3: Kết sau phân lớp ảnh đầu vào Nhập môn lý thuyết nhận dạng 19 Tài Liệu tham khảo https://machinelearningcoban.com/2017/08/08/nbc/ https://batnamv.wordpress.com/2016/08/03/ml-tim-hieu-ve-naive-bayes-classificationphan-loai-bayes-don-gian/ Nhập môn lý thuyết nhận dạng ... để trích chọn đặc trưng tập sở liệu ảnh mặt người ảnh test bên ngồi Còn phương pháp Nạve bayes dùng để phân lớp ảnh test trích chọn đặc trưng PCA thuộc vào lớp lớp học Nhập môn lý thuyết nhận. .. nhận dạng mặt người từ ảnh số Trong toán chúng em giải tốn nhận dạng mặt người dùng phương pháp trích chọn đặc trưng PCA( Principle Components Analysis) phân lớp Nạve bayes Trong Phương pháp PCA. .. Thực PCA ma trận tập ảnh ta vừa có Sau q trình trích rút đặc trưng ta thu ma trận kích thước 25x25 Tiếp nhận ảnh đầu vào thực phân lớp sử dụng naïve bayes tập huấn luyện - Bước 1: Xác định khuôn

Ngày đăng: 02/04/2019, 23:12

Từ khóa liên quan

Mục lục

  • Chương 1. Giới thiệu

    • 1. Phương pháp trích chọn đặc trưng PCA(Principle Components Analysis)

    • 2. phương pháp phân lớp bằng Naïve bayes

    • Chương 2. Áp dụng giải quyết bài toán

      • 1. Các bước giải quyết bài toán

      • 2. Tiếp nhận ảnh đầu vào và thực hiện phân lớp sử dụng naïve bayes trên tập huấn luyện

      • Chương 3. Chương trình và kết quả

        • 1. Chương trình

        • 2. Kết quả.

Tài liệu cùng người dùng

Tài liệu liên quan