Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
4,29 MB
Nội dung
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA CÔNG NGHỆ THÔNG TIN ====0O0==== ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: PHẦN MỀM NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH TRÊN DESKTOP Tên sinh viên: NGUYỄN VĂN SƠN Ngày sinh: 19/03/1998 Mã sinh viên: 1752480201050 Khóa: Khoa Cơng nghệ thơng tin Lớp: DCCNTT8.10 Giảng viên hướng dẫn: Ths LÊ TRUNG THỰC Bắc Ninh, tháng năm 2022 TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA CÔNG NGHỆ THÔNG TIN ====0O0==== NGUYỄN VĂN SƠN ĐỀ TÀI: PHẦN MỀM NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH TRÊN DESKTOP Giáo viên hướng dẫn: Ths.LÊ TRUNG THỨC BẮC NINH, tháng 07 năm 2022 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ê Trung Thực – Giảng viên khoa Công Nghệ 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……………………………… ………………………………………………………………… ………………………………………………………………… ………………………………………………………………… …………… ………………………………………………… 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, toá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: DANH SÁCH BẢNG: 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 1.1 Tổng quan hệ thống ứng dụng desktop nhận diện mặt điểm danh Yêu cầu hệ thống: 10 ❖ Yêu cầu chức năng: 10 ❖ Yêu cầu phi chức năng: 10 1.2 Các công nghệ sử dụng 11 1.2.1 Thiết kế giao diện ứng dụng ( PyQt5) 11 1.2.2 Thiết kế back end 14 1.3 Nghiên cứu tổng quan 18 1.3.1 Bài toán nhận dạng mặt người 18 1.3.2 Tổng quan kiến trúc hệ thống nhận dạng khuôn mặt 19 1.3.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 22 2.1 Thiết kế hệ thống tổng thể 22 2.2 Phân tích yêu cầu hệ thống 23 2.3 Thiết kế sở liệu 24 2.4 Xây dựng hệ thống 25 2.4.1 Danh sách Actor 25 2.4.2 Danh sách Use Case 26 2.4.3 Sơ đồ Use Case chi tiết 27 2.4.4 Đặc tả Use Case 31 2.4.5 Biểu đồ hoạt động biểu đồ 37 2.6 Phân tích kiến trúc 48 CHƯƠNG III: KẾT QUẢ THỰC NGHIỆM 49 3.1 Quá trin ̀ h triển khai hệ thống: 49 3.1.1 Traning hình ảnh nhân viên lưu trữ 52 3.1.2 Lớp detector nhận diện khuôn mặt traning 54 3.2 Giới thiệu số giao diện hệ thống 55 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 61 • Kết luận 61 • Hướng phát triển 61 DANH MỤC TÀI LIỆU THAM KHẢO 62 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 • Biểu đồ Xem lịch Hình 35: Biểu đồ Xem lịch 2.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 toá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 48 CHƯƠNG III: KẾT QUẢ THỰC NGHIỆM 3.1 Quá trin ̀ h triển khai hệ 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, 0),Gender CHAR (20, 30),Phone NUMERIC (0, 11),Address VARCHAR (150) );" conn.execute(query) cursor = conn.execute(query1) conn.commit() global isRecordExist isRecordExist = for row in cursor: isRecordExist = if(isRecordExist == 0): query = "INSERT INTO people (ID, Name, Age, Gender, P hone, Address) VALUES("+str( id)+",'"+str(name)+"','"+str(age)+"','"+str(gende r)+"',"+str(phone)+",'"+str(address)+"')" ̀ nh công") print("Thêm thông tin tha else: query = "UPDATE people SET Name = '"+str(name)+"',Age = '"+str(age)+"',Gender = '"+str( gender)+"',Phone = "+str(phone)+",Address = '"+st r(address)+"' WHERE ID="+str(id) ̀ nh công") print("Câ ̣p nhâ ̣t thơng tin tha conn.execute(query) conn.commit() conn.close() 49 • Dùng camera để chụp hình liệu, nhập thơng tin nhân viên face_cascade = cv2.CascadeClassifier( cv2.data.haarcascades + "haarcascade_frontalface_defa ult.xml") cap = cv2.VideoCapture(0) sampleNum = 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 += 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 50 • 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 51 3.1.1 Traning hin ̀ h ả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 • 52 • Traning ảnh lưu vào file 53 3.1.2 Lớp detector nhận diện khn 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(ad dress)+"' WHERE ID="+str(id) ̀ nh cơng") print("Câ ̣p nhâ ̣t thơng tin tha • Sử dụng camera để nhận diện def start_webcam(self): QMessageBox.about(self, "THE BOSS(group 98)", "Việc bâ ̣t camera 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] 54 id, confidence = self.recognizer.predict(roi_gray) if confidence < 60: profile = getProfile(id) if(profile != None): self.ID = str(profile[0]) self.Name = str(profile[1]) cv2.putText( img, "Name: "+str(profile[1]), (x+10, y+h+30), fontfa ce, 1, (0, 255, 0), 2) cv2.putText( img, "Age: "+str(profile[2]), (x+10, y+h+60), fontfac e, 1, (0, 255, 0), 2) cv2.putText( img, "Gender: "+str(profile[3]), (x+10, y+h+90), font face, 1, (0, 255, 0), 2) else: self.ID = " None" self.Name = "None" cv2.putText( img, "Unknow", (x+10, y+h+30),fontface, 1, (0, 0, 255 ), 2) 3.2 Giới thiệu số giao diện hệ thống Hình 37: Hình ảnh hình ứng dụng 55 Hình 37 giao diện hình Menu người có lựa chọn Điểm danh, Trợ giúp, Thông tin Chế độ Admin xếp thành hàng dọc khoảng giao diện ngồi cịn có nút Thốt góc bên trái hình Hình 38: Hình ảnh nhận diện khn mặt điểm danh Hình 38 giao diện điểm danh nhận diện khn mặt: Như hình ta thấy ta có khung nhận diện góc trái phía hình phía phím chức phục vụ cho việc điểm danh gồm có nút Bật camera nút Bắt đầu nút Kết thúc, góc bên phải khung hiển thị thời gian phía khung thơng tin trạng thái, phía khung thơng tin ta có nút chức nút Xem lịch nút Trợ Giúp cuối nút Back bên hình 56 Hình 39: Hình ảnh giao diện đăng nhập Admin Hình 39 giao diện đăng nhập hình chia làm nửa trái phải: hình bên trái thơng tin, lời chào nút Back góc phía dưới; hình bên phải có dịng tài khoản dịng mật phím Login phía Hình 40: Hình ảnh chế độ Admin 57 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 42 giao diện thêm cập nhật thông tin Nhân viên: ta có khung hiển thị thơng tin bên trái, nút Hiển thị danh sách bên trái bảng cập nhật thơng tin phía 58 nút cập nhật phía khung tìm kiếm theo ID ( có dịng nhập ID nút tìm kiếm) 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 59 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 60 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Kết luận Báo cáo đồ án trình bày kiến thức để giải tốn nhận dạng khn mặt người Riêng phương pháp nhận dạng mặt người thư viện OpenCV trình bày chương chương Từ kết cho thấy, độ xác chương trình đạt 70% nhận dạng Tuy nhiên, thời gian hạn chế nên chương trình cịn nhiều khuyết điểm nhiều ý tưởng chưa thực Để chương trình sử dụng thực tế cần nhiều thời gian nghiên cứu giải vấn đề gặp phải, thực ý tưởng để nâng cao tốc độ, hiệu suất độ xác chương trình Các ý tưởng mới: - Thực điểm danh camera giám sát lớp học Không cần phải thực chỉnh tay thơng thường Vì dùng webcam điểm danh có nhiều hạn chế định -Liên kết với trang web để việc cập nhật liệu điều khiển làm từ xa đồng toàn hệ thống Hướng phát triển Trong tương lai, phần mềm nhận dạng khuôn mặt điểm danh phát triển vượt bậc, dùng thuật tốn xử lí ảnh tốt để nhận dạng khn mặt cách xác Có thể giám sát chủ động theo thời gian thực tất đối tượng phạm vi Áp dụng giải toán kẹt xe cách giám sát, kiểm sốt lưu lượng lưu thơng mật độ xe từ đưa cảnh báo hướng dẫn Các hệ thống nhận dạng khuôn mặt nghiên cứu triển khai cho phận an ninh sân bay Dữ liệu từ hệ thống nhận dạng khn mặt thu thập lưu trữ mà đối tượng khơng hay biết Thơng tin sau bị tin tặc kẻ truy cập với mục đích xấu 61 DANH MỤC TÀI LIỆU THAM KHẢO Nhận diện khuôn mặt python OpenCV Nhận diện khuôn mặt với Python OpenCV phần Kỹ thuật nhận dạng face Recognition Thị giác máy tính https://build-system.fman.io/pyqt5-tutorial https://medium.com/augmented-startups/facial-recognition-attendancegui-pyqt-1-hour-course-c4219d0aa007 https://pythonawesome.com/a-face-recognition-attendance-system-withpython/ 62