Xây dựng hệ thống nhận dạng khuôn mặt sử dụng raspberry pi và opencv

85 19 0
Xây dựng hệ thống nhận dạng khuôn mặt sử dụng raspberry pi và opencv

Đ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

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA NGUYỄN VĂN THƠ C C R L T XÂY DỰNG HỆ THỐNG NHẬN DẠNG KHUÔN MẶT SỬ DỤNG RASPBERRY PI VÀ OPENCV DU LUẬN VĂN THẠC SĨ KỸ THUẬT ĐIỆN TỬ Đà Nẵng – Năm 2020 ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA NGUYỄN VĂN THƠ XÂY DỰNG HỆ THỐNG NHẬN DẠNG KHUÔN MẶT SỬ DỤNG RASPBERRY PI VÀ OPENCV C C R L T DU Chuyên ngành : Kỹ thuật Điện tử Mã số : 852.02.03 LUẬN VĂN THẠC SĨ Người hướng dẫn khoa học: TS NGUYỄN DUY NHẬT VIỄN Đà Nẵng – Năm 2020 LỜI CAM ĐOAN Tơi cam đoan cơng trình nghiên cứu riêng Các số liệu kết luận văn trung thực chưa công bố cơng trình Tác giả luận văn Nguyễn Văn Thơ C C DU R L T XÂY DỰNG HỆ THỐNG NHẬN DẠNG KHUÔN MẶT SỬ DỤNG RASPBERRY PI VÀ OPENCV Học viên: Nguyễn Văn Thơ Chuyên ngành: Kỹ thuật điện tử Mã số: Khóa: K38 Trường Đại học Bách khoa - ĐHĐN Tóm tắt – Hệ thống nhận dạng khuôn mặt nhiệm vụ nghiên cứu phổ biến lĩnh vực xử lý hình ảnh thị giác máy tính, khả ứng dụng to lớn giá trị lý thuyết Hệ thống triển khai rộng rãi nhiều ứng dụng giới thực an ninh, giám sát, an ninh nội địa, kiểm sốt truy cập, tìm kiếm hình ảnh, người-máy giải trí Tuy nhiên, ứng dụng đặt thách thức khác điều kiện ánh sáng nét mặt Luận văn nêu bật nghiên cứu gần phương pháp thuật tốn phát nhận dạng khn mặt Qua đề xuất hệ thống nhận dạng khn mặt máy tính nhúng Raspberry Pi sử dụng thư viện mã nguồn mở OpenCV Hệ thống sử dụng mạng Neural tích chập với Model CNN (convolutional neural network) thuật tốn phát nhận dạng khn mặt Hệ thống với kích thước nhỏ gọn, độ xác cao khả nhận dạng đáp ứng thời gian thực, triển khai ứng dụng IoT, hệ thống điểm danh tự động… C C R L T DU Từ khóa – Hệ thống nhận dạng khn mặt; OpenCV; mạng Neural tích chập; Raspberry Pi; chấm công tự động BUILDING A FACE RECOGNITION SYSTEM USING RASPBERRY PI AND OPENCV Abstract - The facial recognition system is a popular research task in the field of image processing and computer vision, due to its enormous applicability and theoretical value The system is widely deployed in real-world applications such as security, surveillance, domestic security, access control, image search, robotics and entertainment However, these applications pose various challenges such as lighting conditions and facial expressions The thesis highlights recent studies on facial detection methods as well as algorithms for detection and recognition Thereby proposing facial recognition system on Raspberry Pi embedded computer using OpenCV open source library The system uses convolutional neural network (model CNN) in face detection and recognition algorithm The system with compact size, high accuracy and real-time response identification, can be deployed in IoT applications, automatic attendance system… Key words - The facial recognition system; OpenCV; convolutional neural network (CNN); Raspberry Pi; automatic attendance system MỤC LỤC MỞ ĐẦU 1 Tính cấp thiết đề tài Mục đích nghiên cứu Đối tượng phạm vi nghiên cứu Phương pháp nghiên cứu Ý nghĩa khoa học thực tiễn đề tài Bố cục luận văn CHƯƠNG TỔNG QUAN VỀ HỆ THỐNG NHẬN DẠNG KHUÔN MẶT 1.1 Giới thiệu chương 1.2 Tổng quan hệ thống nhận dạng khuôn mặt 1.2.1 Các vấn đề liên quan 1.2.2 Kiến trúc tổng quát hệ thống nhận dạng khuôn mặt C C 1.2.3 Những khó khăn, thách thức hệ thống nhận dạng khuôn mặt 1.2.4 Những ứng dụng hệ thống nhận dạng khuôn mặt 1.3 Kết luận chương R L T DU CHƯƠNG KỸ THUẬT TRÍCH CHỌN ĐẶC TRƯNG VÀ PHƯƠNG PHÁP PHÂN LỚP ỨNG DỤNG TRONG NHẬN DẠNG KHUÔN MẶT 10 2.1 Giới thiệu chương 10 2.2 Kỹ thuật phát khuôn mặt thuật toán Haar 10 2.2.1 Tổng quan đặc trưng Haar-like 10 2.2.2 Mơ hình phân tầng Cascade of Classifiers 12 2.3 Các phương pháp nhận dạng khuôn mặt 14 2.3.1 Nhận dạng dựa đặc trưng phần tử (Feature Based) 14 2.3.2 Nhận dạng dựa xét tồn diện khn mặt (Appearance Based) 15 2.4 Kỹ thuật trích chọn đặc trưng PCA 19 2.4.1 Giới thiệu phương pháp PCA 19 2.4.2 Thuật toán PCA 21 2.5 Phương pháp đối sánh nhận dạng 22 2.6 Phương pháp máy vector hỗ trợ 23 2.7 Phương pháp mạng neural tích chập 25 2.7.1 Nhận dạng khuôn mặt sử dụng mạng neural tích chập 25 2.7.2 Lớp tích chập 27 2.7.3 Lớp tinh chỉnh đơn vị tuyến tính (ReLU layer) 29 2.7.4 Pooling layer 29 2.7.5 Lớp kết nối hoàn chỉnh (The Fully connected layer) 30 2.7.6 Hàm mát (Loss function) 30 2.8 Kết luận chương 31 CHƯƠNG XÂY DỰNG HỆ THỐNG NHẬN DẠNG KHUÔN MẶT TRÊN MÁY TÍNH NHÚNG RASPBERRY PI 32 3.1 Giới thiệu chương 32 3.2 Máy tính nhúng Raspberry Pi 32 3.2.1 Giới thiệu chung 32 3.2.2 Cấu trúc phần cứng 33 3.2.3 Hệ điều hành 36 3.2.4 Ưu, nhược điểm 36 3.3 Ngôn ngữ Python 36 3.3.1 Giới thiệu Python 36 3.3.2 Các chức Python 36 3.4 Thư viện OpenCV 37 3.4.1 Giới thiệu OpenCV 37 3.4.2 Tổ chức thư viện OPENCV 38 3.5 Quy trình xây dựng hệ thống nhận dạng khuôn mặt 39 3.5.1 Sơ đồ chức hệ thống nhận dạng khuôn mặt 39 3.5.2 Phát khuôn mặt sử dụng mạng neural tích chập nối tầng đa nhiệm C C R L T DU (MTCNN) 41 3.5.3 Mã hóa nhận dạng khn mặt 44 3.6 Kết luận chương 46 CHƯƠNG THỰC NGHIỆM VÀ ĐÁNH GIÁ HỆ THỐNG 47 4.1 Giới thiệu chương 47 4.2 Kết thực hệ thống 47 4.3 Đánh giá hệ thống 50 4.3.1 Tiêu chí đánh giá 50 4.3.2 Xây dựng sở liệu phân tích kết 51 4.4 Kết luận chương 53 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 54 DANH MỤC TÀI LIỆU THAM KHẢO PHỤ LỤC QUYẾT ĐỊNH GIAO ĐỀ TÀI (Bản sao) DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Tiếng anh Dịch nghĩa tiếng việt Artificial Neural Network Mạng neural nhân tạo Artificial Intelligence Trí tuệ nhân tạo CNN Convolutional Neural Network Mạng nơ-ron tích chập DSP Digital Signal Processing Xử lý tín hiệu số FSVM Fuzzy support vector machines Máy vector hỗ trợ mờ HOG Histogram of Oriented Gradians Biểu đồ Gradients IoT Internet of Things Kết nối vạn vật ID Identification Nhận dạng Linear Discriminant Analysis Phương pháp phân tích sai khác tuyến tính ANN AI LDA MTCNN C C Mạng nơ-ron tích chập nối tầng đa nhiệm R L T Multi-Task Cascaded Convolutional Networks DU PCA Principal Component Analysis SVM Support Vector Machine Phương pháp phân tích thành phần Máy vector hỗ trợ DANH MỤC CÁC BẢNG Số hiệu bảng Tên bảng Trang 4.1 Ma trận confusion matrix 51 4.2 Kết nhận dạng hệ thống 52 4.3 Kết nhận dạng hệ thống 52 4.4 Tham số ma trận nhầm lẫn hệ thống 52 4.5 Kết thống kê tham số RC, PR, Acc 52 C C DU R L T DANH MỤC CÁC HÌNH Số hiệu hình Tên hình Trang 1.1 Kiến trúc tổng quan hệ thống nhận dạng khn mặt [5] 1.2 Giao diện chương trình FaceFinder 1.3 Máy chấm công FK605 dùng FaceID 2.1 Các đặc trưng Haar-like sở 10 2.2 Các đặc trưng Haar-like mở rộng 10 2.3 Cách tính Integral Image ảnh 11 2.4 Ví dụ cách tính nhanh tổng điểm ảnh vùng D ảnh với đặc trưng xoay 45o 12 2.5 Minh họa mơ hình phân tầng Cascade of Classifiers 2.6 Hình ảnh nhìn từ phía khác lạc đà 16 2.7 Khơng gian (Aex1, Axe2)có độ biến thiên liệu cao so với khơng gian cũ, tìm theo PCA 17 2.8 Phân loại với LDA 19 2.9 Phân loại dựa between within theo LDA 19 2.10 Phân lớp SVM mặt phẳng 24 2.11 Siêu phẳng h phân chia liệu thành lớp + - với khoảng cách biên lớn nhất, điểm gần (được khoanh tròn) 24 C C R L T DU 13 vector hỗ trợ 2.12 Kiến trúc mạng neural tích chập (CNN) 26 2.13 Mạng neural ứng dụng phân loại đối tượng 26 2.14 Các thành phần tích chập 27 2.15 Minh họa tích chập 27 2.16 Ảnh mờ sau áp dụng phép tích chập 28 2.17 Ảnh phát biên sau chập 28 2.18 Đồ thị hàm ReLU 29 2.19 Tính tốn với phương pháp MaxPooling 30 3.1 Máy tính nhúng Raspberry Pi 32 3.2 Sơ đồ phần cứng Raspberry Pi 33 3.3 Sơ đồ chân vào/ Raspberry Pi 34 3.3 Tổ chức thư viện OpenCV 38 3.5 Sơ đồ trình nhận dạng khuôn mặt Raspberry Pi 39 Số hiệu Tên hình hình Trang 3.6 Sơ đồ chức hệ thống 40 3.7 Kiến trúc mạng MTCNN 41 3.8 Các bước phát cân chỉnh khuôn mặt sử dụng MTCNN 44 3.9 Quy trình mã hóa khn mặt sử dụng mạng Neural tích chập 44 3.10 Kết mã hóa khn mặt thành vecto 128 chiều 45 3.11 Q trình mã hóa phân lớp khn mặt 45 3.12 Quá trình huấn luyện mạng sử dụng hàm triple loss 46 4.1 Giao diện đăng ký thông tin 47 4.2 Q trình đăng ký từ hình ảnh có sẵn 48 4.3 Quá trình đăng ký hình ảnh trực tiếp từ camera 48 4.4 Cơ sở liệu data_face sau đăng ký đối tượng 49 4.5 Giao diện nhận dạng khuôn mặt 49 4.6 Hệ thống nhận dạng nhiều đối tượng lúc DU R L T C C 50 hw = np.clip(right_bottom - left_top, 0.0, None) return hw[ , 0] * hw[ , 1] def hard_nms(self, box_scores, iou_threshold, top_k=-1, candidate_size=200): scores = box_scores[:, -1] boxes = box_scores[:, :-1] picked = [] indexes = np.argsort(scores) indexes = indexes[-candidate_size:] while len(indexes) > 0: current = indexes[-1] picked.append(current) if < top_k == len(picked) or len(indexes) == 1: break current_box = boxes[current, :] indexes = indexes[:-1] rest_boxes = boxes[indexes, :] iou = self. iou_of( rest_boxes, np.expand_dims(current_box, axis=0), ) indexes = indexes[iou prob_threshold profs = profs[mask] if profs.shape[0] == 0: continue subset_boxes = boxes[mask, :] box_profs = np.concatenate([subset_boxes, profs.reshape(-1, 1)], axis=1) box_profs = self. hard_nms( box_profs, iou_threshold=iou_threshold, top_k=top_k) picked_box_profs.append(box_profs) picked_labels.extend([class_index] * box_profs.shape[0]) if not picked_box_profs: return np.array([]), np.array([]), np.array([]) picked_box_profs = np.concatenate(picked_box_profs) picked_box_profs[:, 0] *= width picked_box_profs[:, 1] *= height picked_box_profs[:, 2] *= width picked_box_profs[:, 3] *= height return picked_box_profs[:, :4].astype(np.int32), np.array(picked_labels), picked_box_profs[:, 4] C C R L T DU def apply(self, img_ori, threshold=.7, iou_threshold=.3): img_resized = cv2.resize(img_ori, (self.input_size_WH[0], self.input_size_WH[1])) img_rgb = cv2.cvtColor(img_resized, cv2.COLOR_BGR2RGB) self.face_net.setInput( cv2.dnn.blobFromImage( image=img_rgb, scalefactor=1 / self. image_std, size=(self.input_size_WH[0], self.input_size_WH[1]), mean=127)) # time_time = time.time() boxes, scores = self.face_net.forward(['boxes', 'scores']) # print("inference time: {} s".format(round(time.time() - time_time, 4))) boxes = np.expand_dims(np.reshape(boxes, (-1, 4)), axis=0) scores = np.expand_dims(np.reshape(scores, (-1, 2)), axis=0) boxes = self. convert_locations_to_boxes(boxes, self. center_variance, self. size_variance) boxes = self. center_form_to_corner_form(boxes) boxes, labels, profs = self. predict( img_ori.shape[1], img_ori.shape[0], scores, boxes, threshold, iou_threshold=iou_threshold) return boxes, profs self.priors, ## Face_Recognition -## import cv2 import time import numpy as np from sklearn import preprocessing C C R L T DU class FaceRecognition(object): def init (self, weight_path): self.FR_net = cv2.dnn.readNetFromONNX(weight_path) self.is_trained = False def extract_feature(self, img, bbox=None): #imgFace_lst = [] embeds = [] if bbox is not None: #print(bbox) for x1, y1, x2, y2 in bbox: imgFace_lst = [] imgFace = img[y1:y2, x1:x2, :] imgFace_rgb = cv2.cvtColor(imgFace, cv2.COLOR_BGR2RGB) imgFace_rgb = cv2.resize(imgFace_rgb, (112, 112)) imgFace_lst.append(imgFace_rgb) self.FR_net.setInput( cv2.dnn.blobFromImages(images=imgFace_lst)) embeds.append(preprocessing.normalize(np.array(self.FR_net.forward()))[0]) #embeds = preprocessing.normalize(embeds) else: imgFace_lst = [] imgFace_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) imgFace_rgb = cv2.resize(imgFace_rgb, (112, 112)) imgFace_lst.append(imgFace_rgb) self.FR_net.setInput( cv2.dnn.blobFromImages(images=imgFace_lst)) embeds.append(preprocessing.normalize(np.array(self.FR_net.forward()))[0]) #if len(imgFace_lst) > 0: # self.FR_net.setInput( # cv2.dnn.blobFromImages(images=imgFace_lst)) # embeds = np.array(self.FR_net.forward()) # embeds = preprocessing.normalize(embeds) #else: # embeds = [] return embeds C C R L T DU @staticmethod def findFace(embeds_in, embeds_db_lst, thresh=0.63): if len(embeds_db_lst) > 0: sims_db_lst = [] for embed_db in embeds_db_lst: sim = np.dot(embeds_in, embed_db.T) sims_db_lst.append(sim) idx = np.argmax(np.array(sims_db_lst)) if sims_db_lst[idx] >= thresh: return idx, sims_db_lst[idx] return None, R L T DU C C C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T ... hóa Hệ thống sinh trắc học: Hệ thống sinh trắc học hệ thống thiết kế để xác minh nhận dạng người dựa vào đặc trưng sinh học người Hệ thống nhận dạng khn mặt: Hệ thống nhận dạng khuôn mặt hệ thống. .. trình xây dựng hệ thống nhận dạng khuôn mặt 3.5.1 Sơ đồ chức hệ thống nhận dạng khuôn mặt C C R L T DU Hình 3.5 Sơ đồ q trình nhận dạng khn mặt Raspberry Pi Đây q trình nhận dạng khn mặt máy... nhúng Raspberry Pi 3, thư viện mã nguồn mỡ OpenCV ngơn ngữ Python Trình bày quy trình thiết kế hệ thống nhận dạng khuôn mặt Raspberry Pi thuật toán thực phát hiện, nhận dạng khuôn mặt sử dụng hệ thống

Ngày đăng: 14/05/2021, 21:16

Từ khóa liên quan

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

Tài liệu liên quan