Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
2,65 MB
Nội dung
HỌC VIỆN KĨ THUẬT MẬT MÃ KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN MÔN HỌC THỰC TẬP CƠ SỞ ĐỀ TÀI: PHẦN MỀM NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH TRÊN DESKTOP Sinh viên thực : HOÀNG VĂN THÁI NGUYỄN ĐÌNH HIỆP TRỊNH ĐÌNH THÀNH Giảng viên hướng dẫn : ThS LÊ BÁ CƯỜNG AT150647 AT150518 AT150649 Hà nội, tháng 09 năm 2021 LỜI CẢM ƠN Trước tiên em xin bày tỏ trân trọng lòng biết ơn thầy giáo ThS Lê Bá Cường – Giảng viên khoa An tồn Thơng tin Trong suốt thời gian học làm đồ án tốt nghiệp, thầy dành nhiều thời gian quý báu để tận tình bảo, hướng dẫn, định hướng cho em thực đồ án Em xin cảm ơn thầy cô giáo Học viện kỹ thuật mật mã giảng dạy trình học tập, thực hành, làm tập, giúp em hiểu thấu đáo nội dung học tập hạn chế cần khắc phục việc học tập, nghiên cứu thực đồ án Em xin cảm ơn bạn bè thành viên gia đình tạo điều kiện tốt nhất, động viên, cổ vũ suốt trình học tập đồ án tốt nghiệp Nhận xét cán hướng dẫn……………………………… ………………………………………………………………… ………………………………………………………………… Điểm chuyên cần……………………………………………… Điểm báo cáo………………………………………………… Xác nhận cán hướng dẫn MỞ ĐẦU Công nghệ thông tin ngày phát triển có vai trị quan trọng thiếu sống đại Con người ngày tạo cỗ máy thông minh có khả tự nhận biết xử lí công việc cách tự động, phục vụ cho lợi ích người Trong năm gần đây, toán nhận nhiều quan tâm tốn nhiều công sức lĩnh vực cơng nghệ thơng tin, tốn nhận dạng Tuy xuất chưa lâu quan tâm tính ứng dụng thực tế toán phức tạp nó.Bài tốn nhận dạng có nhiều lĩnh vực như: nhận dạng vất chất(nước, lửa, đất, đá, gỗ ) nhận dạng chữ viết, nhận dạng giọng nói, nhận dang hình dáng, nhận dạng khn mặt phổ biến ứng dụng nhiều toán nhận diện khuôn mặt.Để nhận dạng khuôn mặt, bước để nhận dạng phát khuôn mặt, điều thực quan trọng khó khăn Cho đến tận bây giờ, nhà nghiên cứu chưa đạt ưng ý việc giải khó khăn tốn cho kết hồn tồn Tuy nhiên, đạt đủ để áp dụng rộng rãi đem lại lợi ích to lớn sống.Với hấp dẫn toán thách thức cịn phía trước, với niềm đam mê công nghệ đại ứng dụng thực tế tuyệt với nó, với khát khao khám phá chinh phục chi thức mẻ Hiện nay, với phát triển xã hội, vấn đề an ninh bảo mật yêu cầu khắt khe 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 sử dụng để phân biệt Bên cạnh đó, việc thu thập, xử lí thơng tin qua ảnh để nhận biết quan tâm ứng dụng rộng rãi Với phương pháp này, thu thập nhiều thơng tin từ đối tượng mà không cần tác động nhiều đố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 tốn nhận dạng mặt người từ ảnh số Việc áp dụng nhận dạng khuôn mặt sử dụng rộng rãi trường học, quan, văn phòng Một nhu cầu sử dụng nhận dạng khn mặt điểm danh Vì vậy, nên nhóm em chọn đề tài nghiên cứu: PHẦN MỀM NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH TRÊN DESKTOP MỤC LỤC LỜI CẢM ƠN MỞ ĐẦU MỤC LỤC DANH SÁCH HÌNH ẢNH: .6 DANH SÁCH BẢNG: .8 CHƯƠNG I: PHÂN TÍCH YÊU CẦU HỆ THỐNG ỨNG DỤNG DESKTOP NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH .10 Tổng quan hệ thống ứng dụng desktop nhận diện mặt điểm danh 10 Yêu cầu hệ thống 11 2.1 Yêu cầu chức 11 2.2 Yêu cầu phi chức 11 Các công nghệ sử dụng 11 3.1 Thiết giao diện ứng dụng ( PyQt5) 12 3.2 Thiết kế back end 14 3.3 Mổi trường lập trình Visual Studio Code 18 Nghiên cứu tổng quan 19 4.1 Bài toán nhận dạng mặt người .19 4.2 Tổng quan kiến trúc hệ thống nhận dạng khuôn mặt 20 4.3 Hạn chế, tồn phương pháp 20 CHƯƠNG II: PHÂN TÍCH THIẾT KẾ HỆ THỐNG ỨNG DỤNG DESKTOP NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH .23 Thiết kế hệ thống tổng thể 23 Phân tích yêu cầu hệ thống 23 Thiết kế sở liệu 24 Xây dựng hệ thống .26 4.1 Danh sách Actor 26 4.2 Danh sách Use Case 26 4.3 Sơ đồ Use Case chi tiết 28 4.4 Đặc tả Use Case 32 4.5 Biểu đồ hoạt động biểu đồ 38 4.6 Phân tích kiến trúc 46 CHƯƠNG III: KẾT QUẢ THỰC NGHIÊ ̣M 47 Quá trình triển khai ̣ thống: 47 1.1 Traning hình ảnh nhân viên lưu trữ 50 1.2 Lớp detector nhận diện khuôn mặt traning .52 Giới thiệu số giao diện hệ thống 53 CHƯƠNG IV: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .59 Kết luận 59 Hướng phát triển 59 DANH MỤC TÀI LIỆU THAM KHẢO .60 DANH SÁCH HÌNH ẢNH: Hình 1: Ngơn ngữ lập trình Python Hình Giới thiệu thư viện OpenCV Hình 3: Giới thiệu SQLite Hình 4:Mơi trường lập trình Visual Studio Code Hình 5: Hệ thống nhận dạng khn mặt Hình 6: Các bước hệ thống nhận dạng Hình 7: Luồng hoạt động tổng thể hệ thống Hình 8: Database FaceData.db data.sqlie Hình 9: Sơ đồ Use Case tổng quan Hình 10: Use Case Đăng xuất Hình 11: Use Case Đăng xuất Hình 12: Use Case Thay đổi mật Hình 13: Use Case Thêm sửa Nhân viên Hình 14: Use Case xóa Nhân viên Hình 15: Đặc tả Use Case Tìm thơng tin nhân viên Hình 16: Use Case Training Data Hình 17: Use Case Xem lịch Hình 18: Use Case Điểm danh Hình 19: Use Case Xem lịch Hình 20: Biểu đồ hoạt động đăng nhập Hình 21: Biểu đồ Đăng nhập Hình 22: Biểu đồ hoạt động Thay đổi mật Hình 23: Biểu đồ Thay đổi mật Hình 24: Biểu đồ hoạt động Thêm sửa thơng tin Nhân viên Hình 25: Biểu đồ Thêm sửa thơng tin Nhân viên Hình 26: Biểu đồ hoạt động xóa thơng tin Nhân viên Hình 27: Biểu đồ xóa thơng tin Nhân viên Hình 28: Biểu đồ hoạt động Xem lịch Hình 29: Biểu đồ Xem lịch Hình 30: Biểu đồ hoạt động Tìm kiếm Hình 31: Biểu đồ Tìm kiếm Hình 32: Biểu đồ hoạt động Điểm danh Hình 33 : Biểu đồ Điểm danh Hình 34: Biểu đồ hoạt động Xem lịch Hình 35: Biểu đồ Xem lịch Hình 36: Phân tích kiến trúc Hình 37: Hình ảnh hình ứng dụng Hình 38: Hình ảnh nhận diện khn mặt điểm danh Hình 39: Hình ảnh giao diện đăng nhập Admin Hình 40: Hình ảnh chế độ Admin Hình 41: Hình ảnh xem kết điểm danh Hình 42: Hình ảnh cập nhật thơng tin nhân viên Hình 43: Hình ảnh xóa nhân viên theo ID Hình 44: Hình ảnh cập nhập tài khoản Admin Hình 45: Hình ảnh thơng tin trợ giúp Hình 46: Hình ảnh thơng tin sản phẩm DANH SÁCH BẢNG: Bảng 1: Tạo database FaceData.db Bảng 2: Tạo database data.sqlite Bảng 3: Các Actor tham gia hệ thống điểm danh nhận diện khuôn mặt Bảng 4: Bảng danh sách Use Case Authentication Bảng 5: Bảng danh sách Use Case Admin Bảng 6: Bảng danh sách Use Case Nhân viên Bảng 7: Đặc tả Use Case Đăng nhập Bảng 8: Đặc tả Use Case Đăng xuất Bảng 9: Đặc tả Use Case Thay đổi mật Bảng 10: Đặc tả Use Case Thêm sửa thông tin Nhân viên Bảng 11: Đặc tả Use Case Xóa nhân viên Bảng 12: Đặc tả Use Case Tìm thơng Nhân viên Bảng 13: Đặc tả Use Case Xem lịch Bảng 14: Đặc tả Use Case Training Data Bảng 15: Đặc tả Use Case Điểm danh Bảng 16: Đặc tả Use Case Xem lịch CHƯƠNG I: PHÂN TÍCH YÊU CẦU HỆ THỐNG ỨNG DỤNG DESKTOP NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH Tổng quan hệ thống ứng dụng desktop nhận diện mặt điểm danh Phổ biến đời sống người làm cho lượng thông tin thu hình ảnh ngày tăng Theo đó, lĩnh vực xử lý ảnh trọng phát triển, ứng dụng rộng rãi đời sống xã hội đại Không dừng lại việc chỉnh sửa, tăng chất lượng hình ảnh mà với cơng nghệ xử lý ảnh giải toán nhận dạng chữ viết, nhận dạng dấu vân tay, nhận dạng khn mặt… Một tốn nhiều người quan tâm lĩnh vực xử lý ảnh nhận dạng khn mặt (Face Recognition) Như biết, khn mặt đóng vai trị quan trọng q trình giao tiếp người với người, mang lượng thơng tin giàu có, chẳng hạn từ khn mặt xác định giới tính, tuổi tác, chủng tộc, trạng thái cảm xúc, đặc biệt xác định mối quan hệ với đối tượng (có quen biết hay khơng) Do đó, tốn nhận dạng khn mặt đóng vai trị quan trọng nhiều lĩnh vực đời sống ngày người hệ thống giám sát, quản lý vào ra, tìm kiếm thơng tin người tiếng,…đặc biệt an ninh, bảo mật Có nhiều phương pháp nhận dạng khuôn mặt để nâng cao hiệu suất nhiên dù hay nhiều phương pháp vấp phải thử thách độ sáng, hướng nghiêng, kích thước ảnh, hay ảnh hưởng tham số mơi trường Có hai phương pháp nhận dạng phổ biến nhận dạng dựa đặc trưng phần tử khuôn mặt biến đổi Gabor Wavelet mạng Neural, SVM,…và nhận dạng dựa xét tổng thể tồn khn mặt phương pháp PCA, LDA, LFA Chính nhờ yếu tố trên, nhóm chúng em đưa ý tưởng tạo phần mềm nhận diện khuôn mặt điểm danh Được dựa thư viện OpenCV Yêu cầu hệ thống 2.1 Yêu cầu chức - Xây dựng chức ứng dụng desktop nhận diện khuôn mặt điểm danh: nhận diện, điểm danh, xem thơng tin điểm danh, thêm/sửa/xóa nhân viên, cập nhật tài khoản v.v - Quản lý hệ thống nhận diện điểm danh dễ dàng giúp nâng cao khả quản lý thồn tin - Cung câp chức nhận diện khuôn mặt để điểm danh cách dễ dàng - Hỗ trợ chức quản trị chung hệ thống ( admin) người quản trị thêm mới, sữa xóa thơng tin nhân viên cập nhật thông tin (admin) - Cung cấp bảng lịch điểm danh giúp người dùng dễ dàng tra cứu lịch điểm danh bình 2.2 Yêu cầu phi chức - Ứng dụng có giao diện đẹp, dễ dàng sử dụng - Hỗ trợ người dùng có trục trặc - Giúp việc điểm danh trở lên khách quan - Dễ dàng quản lý danh sách nhân viên - Năm bắt phương thức xác định khuôn mặt ( Face Detection) thư viện Open CV - Năm bắt thư viện tạo ứng dụng tạo giao diện PyQt5 - Năm bắt ngơn ngữ lập trình python3 Các công nghệ sử dụng 10 Biểu đồ Xem lịch Hình 35: Biểu đồ Xem lịch 4.6 Phân tích kiến trúc Nhân viên truy cập vào hệ thống để điểm danh nhận diện khuôn mặt xem lịch điểm danh Quản trị viên ( Admin) đăng nhập vào Sever để quản lý sở liệu Server xử lý, tính tốn trả giao diện cho NSD để điểm danh, quản lý đăng nhập, cập nhật thơng tin gửi csdl có vào Database Server Database Server nhận, xuất liệu lưu từ phía Server Admin cập nhật thơng tin Hình 36: Phân tích kiến trúc 44 CHƯƠNG III: KẾT QUẢ THỰC NGHIỆM Quá trình triển khai ̣ thống: Kết nối sqlite để tạo/cập nhật record def insertOrUpdate(id, name, age, gender, phone, address): conn = sqlite3.connect('FaceData.db') query1 = "SELECT * FROM people WHERE ID="+str(id) try: cursor = conn.execute(query1) except sqlite3.OperationalError: query = " CREATE TABLE people ( ID CHAR (10, 20) N OT NULL PRIMARY KEY,Name VARCHAR (30, 40) NOT NULL,Age INTEGER (10, 2 0),Gender CHAR (20, 30),Phone NUMERIC (0, 11),Address VARCHAR (150) );" conn.execute(query) cursor = conn.execute(query1) conn.commit() global isRecordExist isRecordExist = 0 for row in cursor: isRecordExist = 1 if(isRecordExist == 0): query = "INSERT INTO people (ID, Name, Age, Gender, P hone, Address) VALUES("+str( id)+",'"+str(name)+"','"+str(age) +"','"+str(gender)+"',"+str(phone)+",'"+str(address)+"')" print("Thêm thông tin thành công") else: query = "UPDATE people SET Name = '"+str(name)+"',Age = '"+str(age)+"',Gender = '"+str( gender)+"',Phone = "+str(phone)+",Address = ' "+str(address)+"' WHERE ID="+str(id) print("Câ ̣p nhâ ̣t thông tin thành công") conn.execute(query) conn.commit() conn.close() Dùng camera để chụp hình liệu, nhập thông tin nhân viên 45 face_cascade = cv2.CascadeClassifier( cv2.data.haarcascades + "haarcascade_frontalface_defa ult.xml") cap = cv2.VideoCapture(0) sampleNum = 0 while(True): ret, frame = cap.read() cv2.imshow('FaceDetecting', frame) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) if not os.path.exists("dataSet"): os.makedirs("dataSet") sampleNum += 1 cv2.imwrite( "dataSet/User."+str(id)+"."+str(sampleNum) +".jpg", gray[y:y+h, x:x+w]) # cv2.imshow('FaceDetecting', frame) cv2.waitKey(1) if sampleNum > 150: break cap.release() cv2.destroyAllWindows() Dữ liệu chụp tới 150 ảnh 46 Thông tin nhân viên lưu vào database hình ảnh đưa vào file dataset với folder tên nhân viên 47 1.1 Traning hình ảnh nhân viên lưu trữ Load đường dẫn file thư mục dataset path = 'dataSet' def getImageWithId(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] Tách ID từ tên ảnh, add vào mảng faces vùng ID faces = [] IDs = [] for imagePath in imagePaths: faceImg = Image.open(imagePath).convert('L') faceNp = np.array(faceImg, 'uint8') print(faceNp) Id = int(imagePath.split('\\')[1].split('.')[1]) faces.append(faceNp) IDs.append(Id) cv2.imshow('Training', faceNp) cv2.waitKey(10) return faces, IDs Traning ảnh lưu vào file 48 49 1.2 Lớp detector nhận diện khuôn mặt traning Lấy thông tin nhân viên từ database def detect_face(self,img): def getProfile(id): conn = sqlite3.connect('FaceData.db') query = 'SELECT * FROM people WHERE ID=' + str(id) cursor = conn.execute(query) profile = None for row in cursor: profile = row conn.close() return profile Cập nhập nhân viên database query = "UPDATE people SET Name = '"+str(name)+"',Age = ' "+str(age)+"',Gender = '"+str( gender)+"',Phone = "+str(phone)+",Address = ' "+str(address)+"' WHERE ID="+str(id) print("Câ ̣p nhâ ̣t thông tin thành công") Sử dụng camera để nhận diện def start_webcam(self): QMessageBox.about(self, "THE BOSS(group 98)", "Việc bật camera có thể mấ t từ 5s - 1p!") self.capture=cv2.VideoCapture(0) self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,480) self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640) Hiện thị thơng tin nhân viên lên hình for(x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y: y+h, x: x+w] 50 id, confidence = self.recognizer.predict(roi_gray) if confidence