Mang lại rất nhiều ứng dụng trong đời sống: xử lí hìnhảnh, trình đọc tự động, phát hiện các đối tượng, nhận diện khuôn mặt, xe tự lái,… Trong đó, nhận diện đối tượng Object Detection là
Trang 1TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNHKHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN CƠ SỞ
Tên đề tài:XÂY DỰNG HỆ THỐNG CHẤM CÔNG
BẰNG NHẬN DIỆN KHUÔN MẶT
Giảng viên hướng dẫn: ĐẶNG NHƯ PHÚSinh viên thực hiện: VÕ ANH KIỆTMSSV: 2100010701
Khoá: 21Ngành/ chuyên ngành: TRÍ TUỆ NHÂN TẠO
TP HCM, 28 tháng 9 năm 2023
Trang 2TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNHKHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN CƠ SỞ
Tên đề tài:XÂY DỰNG HỆ THỐNG CHẤM CÔNG
BẰNG NHẬN DIỆN KHUÔN MẶT
Giảng viên hướng dẫn: ĐẶNG NHƯ PHÚSinh viên thực hiện: VÕ ANH KIỆTMSSV: 2100010701
Khoá: 21Ngành/ chuyên ngành: TRÍ TUỆ NHÂN TẠO
TP HCM, 28 tháng 9 năm 2023
Trang 3NHIỆM VỤ ĐỒ ÁNMục tiêu
Tìm hi u và áp d ng các kỹỹ thu t c b n c a Trí tu nhân t o đ d đoánể ụ ậ ơ ả ủ ệ ạ ể ựd a trên các ỹêếu tốế c a đâầu vào.ự ủ
Hi u để ược quỹ trình xâỹ d ng mố hình, huâến luỹ n và đánh giá mố hình trongự ệTrí tu nhân t o.ệ ạ
Xâỹ d ng mố hình h c máỹ c b n (ví d : hốầi quỹ tuỹêến tính) đ d đoán d aự ọ ơ ả ụ ể ự ựtrên các ỹêếu tốế đã ch n.ọ
3 Huấn luyện và đánh giá mô hình: Tách t p d li u thành t p huâến luỹ n và t p ki m tra.ậ ữ ệ ậ ệ ậ ể Huâến luỹ n mố hình trên t p huâến luỹ n và đánh giá hi u suâết trên t p ki m ệ ậ ệ ệ ậ ể
tra.4 Thực hiện ứng dụng:
Xâỹ d ng ng d ng đ n gi n cho phép ngự ứ ụ ơ ả ười dùng nh p thống tin và d ậ ựđoán kêết qu ả
5 Báo cáo đồ án:
i
Trang 4 Viêết báo cáo vêầ quỹ trình th c hi n, kêết qu đ t đự ệ ả ạ ược và đánh giá mố hình. Chu n b thuỹêết trình đ trình bàỹ kêết qu đốầ án.ẩ ị ể ả
Tiến độ dự kiến
Tuâần 1-2: Nghiên c u lý thuỹêết và thu th p d li u.ứ ậ ữ ệ Tuâần 3-4: Tiêần x lý d li u và xâỹ d ng mố hình d đoán.ử ữ ệ ự ự Tuâần 5-6: Huâến luỹ n và đánh giá mố hình.ệ
Tuâần 7-8: Xâỹ d ng ng d ng và tốếi u hóa.ự ứ ụ ư Tuâần 9-10: Hoàn thi n báo cáo đốầ án và n i dung thuỹêết trình.ệ ộ
ii
Trang 5LỜI CẢM ƠN
Trong quá trình làm đồ án này, em đã gặp không ít những khó khăn và trở ngạido vốn kiến thức còn hạn chế Dù bận rộn nhiều công việc nhưng các Thầy Cô vẫngiành nhiều thời gian và tâm huyết trong việc hướng dẫn em Thầy Cô luôn quan tâm,chỉ bảo và sửa chữa những vấn đề quan trọng giúp em định hướng và làm việc theoquan điểm đúng đắn, chính sự tận tâm và nhiệt huyết của thầy đã giúp em có được tinhthần, một niềm tin và khối lượng kiến thức phong phú để đến ngày hôm nay, đồ án cơsở của em đã được hoàn thành
Với tất cả tấm lòng biết ơn sâu sắc, em xin chân thành gửi lời cảm ơn đến Bangiám hiệu cùng toàn thể quý Thầy Cô trường Đại học Nguyễn Tất Thành, các Thầy Côkhoa Công nghệ thông tin, chuyên ngành Trí tuệ nhân tạo đã tận tình hướng dẫn – giúpđỡ em trong suốt quá trình học tập tại trường, đặc biệt là Thầy Đặng Như Phú – Giảngviên hướng dẫn đồ án
Sau cùng em xin cảm ơn gia đình, người thân luôn bên cạnh ủng hộ và độngviên, cảm ơn tất cả bạn bè đã gắn bó và cùng học tập, giúp đỡ em trong suốt thời gianqua, cũng như trong suốt quá trình hoàn thành đồ án này
Chân thành cảm ơn!
iii
Trang 6LỜI MỞ ĐẦU
Trong thời đại hiện nay, xã hội chúng ta bước vào cuộc cách mạng công nghiệp4.0, có cốt lõi là công nghệ thông tin và các thiết bị máy móc thông minh để phục vụnhu cầu đời sống con người và tăng năng suất lao động Để các thiết bị máy móc nàytrở nên thật sự thông minh thì con người chúng ta cần phải dạy cho chúng biết nhậnbiết và xử lí các sự vật, sự việc trong thực tế để đạt được mục đích trong công việc Từđó, chúng ta cần phát triển các chương trình có thể giúp máy tính nhận diện được đốitượng ngoài xã hội đời thực
Thị giác máy tính (Computer Vision) là một trong những lĩnh vực của khoa họcmáy tính và nghiên cứu trí tuệ Mang lại rất nhiều ứng dụng trong đời sống: xử lí hìnhảnh, trình đọc tự động, phát hiện các đối tượng, nhận diện khuôn mặt, xe tự lái,…
Trong đó, nhận diện đối tượng (Object Detection) là mộ đề tài rất được quantâm hiện nay bởi khả năng ứng dụng cao, dữ liệu dễ chuẩn bị và kết quả ứng dụngnhiều
Vì vậy, em quyết định làm đồ án về Object Detection là “Ứng dụng mô hình
YOLO để nhận diện khuôn mặt” Ở đây, em chọn sử dụng mô hình YOLO – You
only look once – tốc độ thực thi rất nhanh, đạt được việc nhận diện đối tượng trongthời gian thực
Em xin chân thành gửi lời cảm ơn tới Thầy Đặng Như Phú đã có những nhậnxét, hướng dẫn và góp ý khách quan để em có thể hoàn thành báo cáo này một cáchchỉnh chu và tốt nhất Trong quá trình tìm hiểu và làm báo cáo sẽ không tránh khỏinhững sai sót, em mong nhận được sự thông cảm và góp ý thêm của quý Thầy Cô
Em xin chân thành cảm ơn!
iv
Trang 7Phân tích yêu cầu 5
2.1 Giới thiệu về YOLO 5
Trang 8Kết luận và hướng phát triển 13
Trang 9TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH
TRUNG TÂM KHẢO THÍ
KỲ THI KẾT THÚC HỌC PHẦNHỌC KỲ: 3 NĂM HỌC: 2022 - 2023PHIẾU CHẤM THI TIỂU LUẬN/ĐỒ ÁN
Môn thi: ĐỒ ÁN CỞ SỞ TRÍ TUỆ NHÂN TẠO Lớp học phần: 010107601705Sinh viên thực hiện: VÕ ANH KIỆT MSSV: 2100010701
Đề tài tiểu luận/báo cáo của sinh viên :Phần đánh giá của giảng viên (căn cứ trên thang rubrics của môn học):
Tiêu chí(theoCĐR HP)
tối đaĐiểm
đạtđược
Cấu trúc của báo cáo
1Các nội
dung thành phần
6Lập luận
2Kết luận
0.5Trình bày
Trang 10DANH MỤC BẢNG
Bảng 5-1: Những hạn chế của mô hình YOLO trong việc nhận diện khuôn mặt 14
viii
Trang 11DANH MỤC HÌNH
Hình 1-1: Học máy 1
Hình 1-2: Nhận dạng đối tượng trong một bức ảnh 2
Hình 1-3: Ứng dụng trí tuệ nhân tạo trong lĩnh vực y tế 2
Hình 1-4: Dự đoán trong Machine Learning 3
Hình 1-5: Biological neurons to Artificial neurons 3
Hình 1-6: Kiến trúc mạng nơ-ron nhân tạo 4
Hình 2-1: Mốc thời gian của các biến thể YOLO 5
Hình 2-2: Kiến trúc mạng YOLO 5
Hình 2-3: Cách YOLO hoạt động 6
Hình 5-1: Hình ảnh minh họa khi chạy được chương trình 13
ix
Trang 12KÍ HIỆU CÁC CỤM TỪ VIẾT TẮT
ANN (Artificial Neural Network) Mạng nơ-ron nhân tạoAI (Artificial Intelligence) Trí tuệ nhân tạoCNN (Convolutional Neural Netwrok) Mạng nơ-ron tích chập
YOLO (You Only Look Once) Bạn chỉ nhìn một lần
x
Trang 13CHƯƠNG 1Cơ sở lý thuyết
1.1 Học máy1.1.1 Học máy là gì?
Học máy là một lĩnh vực trong trí tuệ nhân tạo (AI) nghiên cứu và phát triển cácthuật toán và mô hình để cho máy tính có khả năng học từ dữ liệu và tự động cải thiệnhiệu suất của chúng theo thời gian Thay vì được lập trình cụ thể để giải quyết mộtnhiệm vụ, máy tính được huấn luyện sử dụng các thuật toán học máy để phân tích dữliệu, tìm ra mẫu và rút ra kết luận từ đó Học máy có thể áp dụng cho nhiều lĩnh vựckhác nhau như xử lý ngôn ngữ tự nhiên, nhận diện hình ảnh, dự báo tài chính, hay điềukhiển tự động
Hình 1-1: Học máy
1.1.2 Ứng dụng của học máy1.1.2.1 Nhận dạng hình ảnh (Image Recognition)
Nhận dạng hình ảnh là một trong những ứng dụng phổ biến nhất của MachineLearning Có nhiều tình huống để phân loại đối tượng trong một hình ảnh kỹ thuật số.Ví dụ, trường hợp ảnh đen trắng thì sẽ sử dụng phép đo mức xám của từng pixel, còntrong ảnh màu thì lại sử dụng phép đo lường cường độ của ba màu khác nhau tạo nên 1pixel
Machine Learning cũng được ứng dụng để phát hiện khuôn mặt trong ảnh Cómột danh mục riêng cho mỗi người trong cơ sở dữ liệu hình ảnh của nhiều người.Machine Learning cũng được ứng dụng trong nhận dạng chữ viết để phân biệt chữ viết
1
Trang 14tay hay chữ in Chúng ta cần phân đoạn một đoạn văn bản thành các hình ảnh nhỏ hơn,mỗi hình ảnh chứa một ký tự.
Hình 1-2: Nhận dạng đối tượng trong một bức ảnh
1.1.2.2 Chuẩn đoán trong y học (Medical Diagnosis)
Machine Learning có thể sử dụng trong các kỹ thuật và công cụ chuẩn đoánbệnh Nó được sử dụng để phân tích các biểu hiện lâm sàng và kết hợp chúng để tiênđoán về sự tiến triển của bệnh tật để thông tin tới bác sĩ để lập kế hoạch diều trị vàtheo dõi bệnh nhân Nó cũng có thể giúp tích hợp các hệ thống trong lĩnh vực chămsóc sức khỏe
Hình 1-3: Ứng dụng trí tuệ nhân tạo trong lĩnh vực y tế
2
Trang 151.1.2.3 Dự đoán (Prediction)
Machine Learning cũng được sử dụng trong các hệ thống dự đoán Ví dụ nhưviệc cho vay của ngân hàng, để tính xác suất xảy ra lỗi, hệ thống cần phân loại dữ liệucó sẵn theo nhóm Nó được xác định bởi một bộ quy tắc được quy định bởi các nhàphân tích Sau khi được phân loại xong, ta có thể tính xác suất về lỗi có thể xảy ra.Những tính toán này có thể áp dụng trên nhiều lĩnh vực và mục đích khác nhau
Hình 1-4: Dự đoán trong Machine Learning
1.2 Mạng nơ-ron nhân tạo (Artificial Neural Network – ANN)1.2.1 ANN là gì?
Là một mô hình tính toán được lấy cảm hứng từ cấu trúc và hoạt động của hệthống nơ-ron trong não người Nó là một mô hình mấy học sâu (deep learning) đượcsử dụng để giải quyết các bài toán cụ thể (nhận dạng, phát hiện, dự đoán, suy diễn,…)
Hình 1-5: Biological neurons to Artificial neurons
3
Trang 16ANN có khả năng tự điều chỉnh và tìm ra các biểu diễn phức tạp của dữ liệu,cho phép xử lý rất nhiều loại thông tin khác nhau Chúng được áp dụng thành côngtrong rất nhiều ứng dụng như nhận dạng hình ảnh, xử lý ngôn ngữ tự nhiên, dự đoánchuỗi thời gian và nhiều lĩnh vực khác.
Trang 17CHƯƠNG 2Phân tích yêu cầu
2.1 Giới thiệu về YOLO
YOLO (You Only Look Once) là mô hình phát hiện đối tượng phổ biến đượcbiết đến với tốc độ nhanh và độ chính xác cao Mô hình này lần đầu tiên được giớithiệu bởi Joseph Redmon và cộng sự vào năm 2016 Kể từ đó đến nay, đã có nhiềuphiên bản của YOLO, một trong những phiên bản gần đây nhất là YOLO v7
Hình 2-1: Mốc thời gian của các biến thể YOLO
- Detection head: Sau khi thông tin đã được rút trích từ backbone network,detection head tiếp tục xử lý để nhận diện và phát hiện vị trí của các đốitượng trong ảnh Detection head bào gồm các lớp tích chập và kết nối đầyđủ để tạo ra các bounding box (hộp giới hạn) cho từng đối tượng cần nhậndiện
Hình 2-2: Kiến trúc mạng YOLO
5
Trang 182.3 Cách hoạt động của YOLO
Quá trình hoạt động của YOLO bao gồm các bước:- Chuẩn bị dữ liệu: Ảnh được chia thành các ô vuông có kích thước cố định
Mỗi ô vuông sẽ chứa thông tin về các điểm ảnh và thông tin liên quan khác.- Phát hiện: Mô hình YOLO sử dụng một CNN (Convolutional NeuralNetwork) để phát hiện các vùng quan tâm trong ảnh CNN này được huấnluyện để nhận diện các đặc tính của đối tượng, ví dụ: biên, hình dạng,texture,…
- Phân loại: Sau khi phát hiện được vùng quan tâm, YOLO sử dụng một thuậttoán phân loại để xác định loại của từng vùng quan tâm, ví dụ: người,phương tiện, động vật,…
- Tinh chỉnh: YOLO điều chỉnh lại các dự đoán bàn đầu để cải thiện độ chínhxác Điều này bao gồm việc điều chỉnh vị trí và kích thước của các hộp giớihạn (bounding boxes) để phù hợp với đối tượng thực tế
Hình 2-3: Cách YOLO hoạt động
6
Trang 19CHƯƠNG 3Xây dựng mô hình
3.1 Xây dựng NewUser.py
import cv2
import sqlite3
cam =cv2.VideoCapture(0detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Hàm c p nh t tên và ID vào CSDLậậdefinsertOrUpdate(id, name): conn=sqlite3.connect("FaceBaseNew.db") cursor=conn.execute('SELECT * FROM People WHERE ID='+str(id)) isRecordExist=
forrowincursor: isRecordExist =1 break
ifisRecordExist==1 cmd="UPDATE people SET Name=' "+str(name)+" ' WHERE ID="+str(id) else:
cmd="INSERT INTO people(ID,Name) Values("+str(id)+",' "+str(name)+" ' )"
conn.execute(cmd) conn.commit() conn.close()
id=input('Nh p mã nhân viên:'ậ)name=input('Nh p tên nhân viên:'ậ)print("B t đ u ch p nh nhân viên, nh n q đ thoát!"ắầụ ảấể)insertOrUpdate(id name,)
sampleNum=
while(True): ret, img =cam.read() # L t nh cho đ b ngậ ảỡ ịược img =cv2.flip(img,1
# K khung gi a màn hình đ ngẻữểười dùng đ a m t vào khu v c nàyưặự
7
Trang 20centerW =img.shape[1] //2 sizeboxW =300;
sizeboxH =400; cv2.rectangle(img, (centerW -sizeboxW//2, centerH -sizeboxH//2), (centerW +sizeboxW//2, centerH +sizeboxH//2), (255, 255, 255), 5
# Đ a nh v nh xámư ảề ả gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Nh n di n khuôn m tậệặ faces =detector.detectMultiScale(gray, 1.3, 5 for (x, y, w, h) infaces:
# V hình ch nh t quanh m t nh n đẽữậặậược cv2.rectangle(img, (x, y), (x +w, y +h), (255, 0, 0), 2 sampleNum =sampleNum +1
# Ghi d li u khuôn m t vào th m c dataSetữệặư ụ cv2.imwrite("dataSet/User." +id +'.' +str(sampleNum) +".jpg", gray[ : +h, x x: +w])
cv2.imshow('frame', img) # Check xem có b m q ho c trên 100 nh sample thì thoátấặả ifcv2.waitKey(100) &0xFF==ord('q'):
break elifsampleNum>100: break
recognizer =cv2.face.LBPHFaceRecognizer_create()detector=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
def getImagesAndLabels(path): # L y t t c các file trong th m cấấảư ụ imagePaths=os.path.join(path,) for fin os.listdir(path)] #create empth face list
faceSamples=[] #create empty ID list Ids=[]
#now looping through all the image paths and loading the Ids and the images
8
Trang 21if (imagePath[-:]=="jpg"): print(imagePath[-:]) #loading the image and converting it to gray scale pilImage=Image.open(imagePath).convert('L') #Now we are converting the PIL image into numpy array imageNp=np.array(pilImage,'uint8')
#getting the Id from the image Id=int os(.path.split(imagePath)[-].split(".")[1]) # extract the face from the training image sample faces=detector.detectMultiScale(imageNp) #If a face is there then append that in the list as well as Id of it
for (x y w h, , ,) infaces: faceSamples.append(imageNp[ :y y h+, :x x w+]) Ids.append(Id)
returnfaceSamples Ids,
# L y các khuôn m t và ID t th m c dataSetấặừư ụfaceSamples Ids, =getImagesAndLabels('dataSet')# Train model đ trích xu t đ c tr ng các khuôn m t và gán v i t ng nahan ểấặưặớừviên
recognizer.train(faceSamples, np.array(Ids))
# L u modelưrecognizer.save('recognizer/trainner.yml')print("Trained!")
3.3 Xây dựng FaceRecognizer.py
import cv2import numpy asnp
from PIL import Image
import pickle
import sqlite3
# Kh i t o b phát hi n khuôn m tởạộệặfaceDetect=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Kh i t o b nh n di n khuôn m tởạộậệặrecognizer =cv2.face.LBPHFaceRecognizer_create()recognizer.read('recognizer/trainner.yml')
id=#set text stylefontface =cv2.FONT_HERSHEY_SIMPLEX
9
Trang 22fontcolor= (0 255,,)fontcolor1= (0 0 255, ,)# Hàm l y thông tin ngấười dùng qua IDdefgetProfile(id):
conn=sqlite3.connect("FaceBaseNew.db") cursor=conn.execute("SELECT * FROM People WHERE ID="+str(id)) profile=None
forrowincursor: profile=row conn.close() returnprofile# Kh i t o cameraởạcam=cv2.VideoCapture(0;
while(True): # Đ c nh t cameraọ ảừ ret img,=cam.read(); # L t nh cho đ b ngậ ảỡ ịược img =cv2.flip(img, 1
# V khung ch nh t đ đ nh v vùng ngẽữậể ịịười dùng đ a m t vàoưặ centerH =img.shape[0] //2
centerW =img.shape[1] //2 sizeboxW =300;
sizeboxH =400; cv2.rectangle(img, (centerW -sizeboxW//2, centerH -sizeboxH//2), (centerW +sizeboxW//2, centerH +sizeboxH//2), (255, 255, 255), 5
# Chuy n nh v xámể ảề gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Phát hi n các khuôn m t trong nh cameraệặả faces=faceDetect.detectMultiScale(gray,1.3, )5; # L p qua các khuôn m t nh n đặặậược đ hi n thông tinểệ for( , , ,x y w h) infaces:
# V hình ch nh t quanh m tẽữậặ cv2.rectangle(img,(x y,),(x w+,y h+),(255 0 0, ,),2
# Nh n di n khuôn m t, tr ra 2 tham s id: mã nhân viên và dist (d ậệặảốộsai khác)
id dist,=recognizer.predict(gray y y h[ :+, :x x w+]) profile=None
10