Nội dung báo cáoBáo cáo này gồm 4 chương: Chương 1: Giới thiệu đề tài Chương 2: Áp dụng các kĩ thuật xử lý ảnh vào bài toán - Mô hình tổng quát và chi tiết của bài toán - Chi tiết các th
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
-*** -BÁO CÁO BÀI TẬP LỚNHỌC PHẦN “THỊ GIÁC MÁY TÍNH”
Đề tài:
XÂY DỰNG CHƯƠNG TRÌNH NHẬN DẠNG KHUÔN MẶT ĐỂ TÍCH
HỢP VÀO HỆ THỐNG ĐIỂM DANH
GVHD: GV.Hồ Thị Hương Thơm
Sinh viên thực hiện: Bùi Duy Hiếu – Mã SV: 83066
Đàm Thị Hà – Mã SV: 82867
Hải Phòng, tháng 11 năm 2022
Trang 2TRƯỜNG ĐẠI HỌC HÀNG HẢIKHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚNHỌC PHẦN: THỊ GIÁC MÁY TÍNH
3 Công việc cần thực hiện
Tìm hiểu các vấn đề liên quan
Đề xuất phương án và xây dựng chương trình
Làm báo cáo bài tập lớn
Bảo vệ bài tập lớn
4 Yêu cầu
Kết quả làm bài tập lớn: Báo cáo bài tập lớn
Báo cáo bài tập lớn phải được trình bày theo mẫu quy định (kèm theo),báo cáo có thể kết xuất thành tệp định dạng PDF và nộp qua email
5 Tài liệu tham khảo
- Giáo trình Công nghệ Thị Giác Máy Tính - Trường Đại học Hàng hải ViệtNam
- Youtube, github…
Trang 3Nội dung báo cáo
Báo cáo này gồm 4 chương:
Chương 1: Giới thiệu đề tài
Chương 2: Áp dụng các kĩ thuật xử lý ảnh vào bài toán
- Mô hình tổng quát và chi tiết của bài toán
- Chi tiết các thuật toán sử dụng
Chương 3: Cài đặt và đánh giá kết quả hệ thống
- Ngôn ngữ lập trình, nền tảng lập trình, thư viện sử dụng
- Đánh giá kết quả thực hiện chương trình
Chương 4: Kết luận
- Tóm tắt lại quá trình thực hiện bài tập lớn
- Ưu, nhược điểm của hệ thống
Trang 4MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI 1
1.1 Lý do chọn đề tài: 1
1.2 Mục đích – Ngữ cảnh áp dụng: 2
1.3 Phạm vi bài toán: 3
1.4 Các phương pháp có thể áp dụng: 3
1.4.1 Xây dựng hệ thống nhận dạng mặt người thông qua biến đổi Gabor wavelets 3
1.4.2 Phân tích thành phần chính (PCA) 3
1.4.3 Xây dưng hệ thống nhận dạng mặt người thông qua phương pháp trích chọn đặc trưng mẫu nhị phân cục bộ LBP 4
1.4.4 Support vector Machines (SVM) 4
1.5 Cách thức đánh giá kết quả: 5
CHƯƠNG 2: ÁP DỤNG CÁC KĨ THUẬT XỬ LÝ ẢNH CHO BÀI TOÁN NHẬN DẠNG MẶT NGƯỜI 6
2.1 Mô hình tổng quát của bài toán 6
2.2 Mô hình chi tiết của bài toán 7
2.3 Chi tiết thuật toán sử dụng 7
2.3.1 Phát hiện khuôn mặt (face detection) 7
2.3.2 Tiền xử lý ảnh (Preprocessing) 7
2.3.3 Trích rút đặc trưng (Feature extraction) 7
2.3.4 Nhận dạng, phân lớp 8
2.3.5 Dữ liệu hệ thống nhận dạng 8
CHƯƠNG 3: CÀI ĐẶT VÀ ĐÁNH GIÁ KẾT QUẢ HỆ THỐNG 10
3.1 Ngôn ngữ lập trình, thư viện sử dụng , nền tảng lập trình 10
3.1.1 Ngôn ngữ lập trình: Python 10
3.1.2 Thư viện sử dụng: OpenCV 11
3.1.3 Nền tảng lập trình – Anaconda: 12
3.2 Mã nguồn chi tiết của chương trình: 12
Trang 53.2.1 NewUser.py 12
3.2.2 TrainModel.py 14
3.2.3 FaceRecognizer.py 16
3.3 Đánh giá kết quả 19
3.3.1 Dữ liệu 19
3.3.2 Kết quả 19
CHƯƠNG 4: KẾT LUẬN 21
4.1 Qúa trình thực hiện 21
4.2.1 Ưu điểm 21
4.2.2 Nhược điểm 21
4.2.3 Hướng phát triển 21
4.2 Tổng kết 22
Trang 6CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI1.1 Lý do chọn đề tài:
Trong những năm gần đây, Trí tuệ nhân tạo (Artificial Intellegence)
là một trong những lĩnh vực được rất nhiều các nhà khoa học quan tâm.Đặc biệt các ứng dụng và nghiên cứu của Trí tuệ nhân tạo & Máy học đãđược áp dụng rất nhiều vào thực tế, và góp phần không nhỏ vào việc cảithiện cuộc sống của con người ngày nay Một trong những lĩnh vực liênquan tới công nghệ tri thức mà hiện nay được ứng dụng rất nhiều vàotrong cuộc sống là nhận dạng mẫu (Pattern Recognition) Một số hệ thốngđược ứng dụng rộng rãi hiện nay: nhận dạng chữ viết (đánh máy hoặc viếttay), nhận dạng chuyển động của mắt người, nhận dạng biển số xe, nhậndạng phương tiện giao thông, nhận dạng mặt người…
Cụ thể, một trong những bài toán được khá nhiều người quan tâm ởthời điểm hiện tại là Bài toán nhận dạng mặt người ( Face Recognition).Khuôn mặt đóng vai trò vô cùng quan trọng việc tiếp xúc và giao tiếp,mặt khác nó cũng là một nguồn cung cấp những thông tin cần thiết khigiao tiếp hoặc chứa những dữ liệu cơ bản như: giới tính, tuổi, màu da,trạng thái, cảm xúc,… để nhận diện một người Nhận dạng khuôn mặtkhông còn là một đề tài quá mới mẻ nhưng vẫn là một thách thức mới đòihỏi được khám phá Ngoài ra để giải quyết bài toán ta phải giải quyết cácvấn đề khác của bài toán như: ánh sáng, độ mờ, đỗ nhiễu, độ phân giải củaảnh, góc ảnh…
Trong thực tế đã có rất nhiều ông lớn như Google, Facebook,Apple, Microsoft đều có những trung tâm sinh trắc học (Biometrics
Trang 7Center) riêng và nghiên cứu nhận dạng khuôn mặt người là lĩnh vựcnghiên cứu chính từ đó đến nay.
Nhận diện khuôn mặt được ứng dụng khá rộng rãi vào thực tế tùyvào nhu cầu của các nhà sử dụng: ví dụ như được dùng trong camera anninh để phát hiện trộm cắp, khủng bố, tội phạm nguy hiểm; hoặc dùng để
mở khóa cửa ra vào thông qua khuôn mặt, nhận dạng mặt người nhằmchống gian lận trong thi cử…
Cùng với phát triển của AI, đã có rất nhiều các hệ thống nhận dạngkhuôn mặt khác nhau được hình thành Kết quả nhận dạng của từng hệthống cũng khác nhau tùy vào dữ liệu test Trong bài tập lớn này, mộtphương pháp em nghĩ là đơn giản mà cũng hiệu quả không kém đó làphương pháp Trích chọn đặc trưng mẫu nhị phân cục bộ LBP (LocalBinary Patterns) Mặc dù LBP không phải là phương pháp mới nhất, tốtnhất nhưng nhờ vào tính năng hiệu quả và khả năng bền vững độc lập của
dữ liệu, cho đến hiện tại thì LBP được sử dụng để làm baseline để sosánh, đánh giá cho một hệ thống nhận diện Nhờ vào khả năng bất biếnvới độ sáng (đây là một trong những thách thức lớn nhất của các bài toánliên quan đến ảnh mặt người) nên em chọn Local Binary Pattern (LBP)trong hệ thống nhận dạng khuôn mặt trong bài tập của em
Trang 8o Ngữ cảnh áp dụng: Do các khó khăn của bài toán nhận dạng khuôn mặt :Góc chụp, độ phân giải, ánh sáng, hướng ảnh… nên đề xuất bài toán nênđược áp dụng đối với các điều kiện sau:
Góc ảnh trực diện, thẳng mặt, không bị che khuất
1.3.2 Phân tích thành phần chính (PCA)
Phân tích thành phần chính là một kỹ thuật phân tích biến đổi đượcnghiên cứu khá rộng rãi và biết đến nhiều Ý tưởng chính của thuật toán phântích thành phần chính là giảm số chiều của tập dữ liệu có sự tương quan lớn giữa
Trang 9các biến Mặc dù giảm số chiều của biến nhưng vẫn duy trùy sự biến đổi nhiềunhất có thể của tập dữ liệu ban đầu Thực chất của PCA là giải 4 quyết bài toántìm trị riêng và vector riêng cho ma trận đối xứng.
Ưu điểm: Dễ cài đặt, tìm được các đặc tính tiêu biểu của đối tượngcần nhận dạng mà không cần phải xác định các thành phần và mốiquan hệ giữa các thành phần đó
Nhược điểm: Phụ thuộc vào tập huấn luyện ( Các ảnh kiểm traphải giống các ảnh huấn luyện về kích thước, độ sáng, độ phân giải,
tư thế… mà trong thực tế điều này là không thể)
1.3.3 Xây dưng hệ thống nhận dạng mặt người thông qua phương pháp tríchchọn đặc trưng mẫu nhị phân cục bộ LBP
LBP là một toán tử kernel 3×3, nó tổng quát hóa cấu trúc không gian cục
bộ của một ảnh Ojala và các đồng nghiệp đã giới thiệu phương pháp LBP và chỉ
ra khả năng phân tách cao của chúng cho sự phân lớp vân Bởi vì khả năng phântách và chi phí tính toán thấp, LBP trở nên rất phổ biến trong nhận dạng mẫuLBP đã được áp dụng cho phát hiện khuôn mặt, nhận dạng khuôn mặt, xác thựckhuôn mặt, truy vấn ảnh
Trang 10Ưu điểm: Thuật toán trích rút đặc trưng LBP cài đặt đơn giản, thờigian tính toán giá trị đặc trưng nhanh vì nó làm việc với giá trịnguyên, tính toán rất nhanh và hoạt động rất hiệu quả.
Nhược điểm: Tuy nhiên độ chính xác không cao bằng thuật toánHaar-like
1.3.4 Support vector Machines (SVM)
SVM là một phương pháp phân lớp xuất phát từ lý thuyết học thống kê.Thuật toán SVM lần đầu tiên được Vladimir Vapnik đề xuất Sau đó, CorinnaCortes cùng với Vladimir Vapnik đề xuất hình thức chuẩn hiện nay SVM cónhiều tính năng ưu việt so với các phương pháp cổ điển khác: dễ dàng xử lý, xử
lý với tính ổn định cao trên dữ liệu phức tạp, có thể có số chiều lớn và quantrọng hơn cả là khả năng xử lý tổng quát
Trang 11Trên thực tế, việc xây dựng chương trình cho việc huấn luyện SVM là khókhăn và mất nhiều công sức, vì vậy đa số thuật chương trình SVM đã được xâydựng sẵn trong một số công cụ lập trình và cho bởi nguyên hàm và chỉ cần điềntham số, ta sẽ có kết quả đầu vào và đầu ra Tuy nhiên, về cơ bản chương trình
đó được xây dựng trên một số thuật toán có sẵn
Ưu điểm: Có khả năng huấn luyện với tập dữ liệu lớn
Nhược điểm: Khó khăn và mất nhiều công sức
Tóm lại: Local Binary Pattern (LBP) là một đặc trưng rất phổ biến trong các bàitoán liên quan đến ảnh khuôn mặt nói chung và nhận dạng khuôn mặt nói riêng.Nhờ vào khả năng bất biến với độ sáng (đây là một trong những thách thức lớnnhất của các bài toán liên 3 quan đến ảnh mặt người), tính toán rất nhanh và hoạtđộng rất hiệu quả nên Local Binary Pattern (LBP) được chọn trong hệ thốngnhận dạng khuôn mặt trong đề tài này
Trang 121.4 Cách thức đánh giá kết quả:
Kết quả của chương trình sẽ được đánh giá thông qua các tiêu chí sau đây:
- Tốc độ thực hiện chương trình: Chương trình thực thi nhanh hay chậm
- Độ chính xác của chương trình: Có nhận diện đúng người hay không kể cảtrong các điều kiện: thiếu sáng, mờ ảnh, góc ảnh, phân giải yếu …
- Trải nghiệm người dùng: Chương trình có đáp ứng được kì vọng của ngườidùng hay không
- Sự dễ dàng trong việc triển khai và vận hành
- Tài nguyên sử dụng: Chương trình khi khởi chạy có tiêu tốn nhiều tài nguyênhay không
Trang 13CHƯƠNG 2: ÁP DỤNG CÁC KĨ THUẬT XỬ LÝ ẢNH CHO BÀI TOÁN NHẬN DẠNG MẶT NGƯỜI
2.1 Mô hình tổng quát của bài toán
Các bước cơ bản trong xử lý ảnh:
Phần thu nhận ảnh: Ảnh có thể nhận qua camera Có thể là
màu hoặc đen trắng với độ phân giải khác nhau
Tiền xử lý: lọc nhiễu, nâng cao chất lượng ảnh
Phân vùng ảnh hay phân đoạn: tách ảnh thành các vùng hoặc
đối tượng quan tâm
Biểu diễn ảnh: Việc chọn các tính chất để thể hiện ảnh gọi làtrích chọn đặc trưng (feature extraction)
Nhận dạng và nội suy ảnh: Nhận dạng ảnh là quá trình xác
định ảnh Quá trình này thường thu được bằng cách so sánh với mẫuchuẩn đã được học (hoặc lưu) từ trước Nội suy là phán đoán theo ýnghĩa trên cơ sở nhận dạng
Cơ sở tri thức: Nhằm giúp quá trình xử lý và phân tích ảnh
Trang 14theo cách làm của con người.
2.2 Mô hình chi tiết của bài toán
Một hệ thống nhận dạng mặt người thông thường sẽ có các bước sau đây:
Figure 1-Hệ thống nhận dạng khuân mặt
2.3 Chi tiết thuật toán sử dụng
2.3.1 Phát hiện khuôn mặt (face detection)
Bước này sẽ phát hiện và lấy ra tất cả khuôn mặt trong bức ảnh hoặc video.2.3.2 Tiền xử lý ảnh (Preprocessing)
Bước này nhằm lọc nhiễu, nâng cao chất lượng của ảnh, video bao gồm: căn chỉnh ảnh, chuẩn hóa ánh sáng cho phù hợp với điều kiện phát hiện ảnh.2.3.3 Trích rút đặc trưng (Feature extraction)
Trang 15Ở bước này sử dụng phương pháp trích chọn đặc trưng LBP với ảnh mặt để tríchxuất các thông tin đặc trưng cho ảnh, kết quả là mỗi ảnh sẽ được biểu diễn dưới dạng một vector.
Tập nhập dữ liêu người mới (NewUser.py)
Tập đào tạo huấn luyện (TrainModel.py)
Tập nhận dạng (FaceRecognizer.py)
- Tập NewUser.py là tập thực hiện chụp ảnh cho người mới:
Yêu cầu người dùng nhập và ID và Name, sau đó lưu vào DBYêu cầu người dùng đưa mặt vào camera, chụp khoảng 100 ảnh của người dùng và tiến hành lưu trữ tại thư mục dataSet với cấu trúc User.<mã nhân viên>.<số thứ tự>.jpg
Ảnh được lưu trong dataSet như hình dưới:
Figure 2Ảnh được lưu trong dataSet
Trang 16- Tập TrainModel.py thực hiện train model để học được các khuôn mặt đã chụp:
Đọc thông tin trong csdl về danh sách những người hiện tại.Đọc dữ liệu ảnh từ mục dataset
Train model để nhận dạng khuôn mặt và gán vào các khuôn mặt
- Tập FaceRecognizer.py kiểm thử hệ thống Sau khi đăng kí các khuôn mặt
và danh tính của chúng thì file này làm nhiệm vụ:
Load dữ liệu người từ csdl
Load model phát hiện khuôn mặt và nhận diện khuôn mặt đã train ở tập Train Model ở trên
Đọc ảnh từ camera và hiện thị tên người có mặt trong camera đó
Trang 17CHƯƠNG 3: CÀI ĐẶT VÀ ĐÁNH GIÁ KẾT QUẢ HỆ THỐNG
3.1 Ngôn ngữ lập trình, thư viện sử dụng , nền tảng lập trình
3.1.1 Ngôn ngữ lập trình: Python
Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đốitượng (object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩađộng (dynamic semantics) Python hỗ trợ các module và gói (packages), khuyếnkhích chương trình module hóa và tái sử dụng mã Trình thông dịch Python vàthư viện chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễnphí cho tất cả các nền tảng chính và có thể được phân phối tự do
Sau đây là các đặc điểm của ngôn ngữ lập trình Python:
Ngữ pháp đơn giản, dễ đọc
Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (oriented)
object-Hỗ trợ module và hỗ trợ gói (package)
Xử lý lỗi bằng ngoại lệ (Exception)
Kiểu dữ liệu động ở mức cao
Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhucầu lập trình
Có khả năng tương tác với các module khác viết trên C/C++ (Hoặc Javacho Jython, hoặc Net cho IronPython)
Có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scriptinginterface)
Trang 18- Python dễ dàng kết nối với các thành phần khác: Python có thể kết nối vớicác đối tượng COM, .NET (Ironpython, Python for .net), và CORBA,Java… Python cũng được hỗ trợ bởi Internet Communications Engine (ICE)
và nhiều công nghệ kết nối khác Có thể viết các thư viện trên C/C++ đểnhúng vào Python và ngược lại
- Python là ngôn ngữ có khả năng chạy trên nhiều nền tảng: Python có chomọi hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, và những hệđiều hành khác Thậm chí có cả những phiên bản chạy trên NET, máy ảoJava, và điện thoại di động (Nokia Series 60) Với cùng một mã nguồn sẽchạy giống nhau trên mọi nền tảng
- Python rất đơn giản và dễ học: Python có cộng đồng lập trình rất lớn, hệthống thư viện chuẩn, và cả các thư viện mã nguồn mở được chia sẻ trênmạng
- Python là ngôn ngữ mã nguồn mở: Cài đặt Python dùng giấy phép nguồn
mở nên được sử dụng và phân tối tự do, ngay cả trong việc thương mại.Giấy phép Python được quản lý bởi Python Software Foundation
Lý do lựa chọn ngôn ngữ Python:
+ Đây là ngôn ngữ dễ học, không cầu kì như C, C++
+ Code ngắn gọn
+ Là ngôn ngữ lập trình phổ biến hiện nay nên tiện cho việc học hỏi và sửachữa
3.1.2 Thư viện sử dụng: OpenCV
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầucho xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viếtbằng C/C++, vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng
Trang 19dụng liên quan đến thời gian thực Opencv có các interface cho C/C++, PythonJava vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android Đặc biết thưviện OpenCV rất dễ cài đặt và sử dụng.
Kiểm tra và giám sát tự động
Robot và xe hơi tự lái
3.2 Mã nguồn chi tiết của chương trình:
3.2.1 NewUser.py
import cv2
import sqlite3
Trang 20id=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=0
Trang 21cv2.rectangle(img, (centerW - sizeboxW // 2, centerH - sizeboxH // 2),
(centerW + sizeboxW // 2, centerH + sizeboxH // 2), (255, 255, 255), 5)
# Ghi d li u khuôn m t vào th m c dataSet ữ ệ ặ ư ụ
cv2.imwrite("dataSet/User." + id + '.' + str(sampleNum) + ".jpg", gray[y:y + h, x:x + w])
cv2.imshow('frame', img)
# Check xem có b m q ho c trên 100 nh sample thì thoát ấ ặ ả