Nhằm cho công tác nghiên cứu, tìm hiểu thêm về AI, cũng như kiến thức chuyên nghành bài tập Nhận diện khuôn mặt sử dụng Vector SVM dưới đây sẽ là tài liệu hữu ích cho các bạn khối nghành công nghệ thông tin.
Trang 1TRƯỜNG ĐẠI HỌC TÂN TRÀO KHOA KHOA HỌC CƠ BẢN
BỘ MÔN TIN HỌC
BÀI TẬP LỚN MÔN HỌC
Môn học: Kỹ thuật lập trình tiên tiến
Tên đề tài: Phát hiện, nhận dạng khuôn mặt từ dữ liệu thu được từ Webcam Laptop
Nhóm thực hiện: Nhóm 8
1: Hoàng Anh Tuấn2: Ma Thị Thủy Trang3: Tạ Văn Khánh4: Cherxong Kertongpao
Giảng viên hướng dẫn: TS Lê Văn Hùng
Tuyên Quang, ngày tháng năm 2021
Trang 2Hình 1: Minh họa lái xe buồn ngủ
Điều đó giúp tránh được những tai nạn đáng tiếc xảy ra
Trang 3Hay phát hiện nhận dạng khuôn mặt được ứng dụng trong các tòa nhà lớn, nó
sử dụng để điểm danh hay giám sát người di chuyển hoặc hoạt động trong tòa nhà(minh họa trong hình 2)
Điều đó phát hiện ra các hoạt động bất thường và định danh được kẻ trộm
Từ lý do trên đã giúp nhóm chúng em tìm hiểu, quyết định lựa chọn thực hiện
đề tài này
2 Mục tiêu
Một trong những đổi mới quan trọng nhất của giới nghiên cứu trong thập kỷqua là sự ra đời của các công nghệ nhận dạng Từ giữa thế kỷ trước, vấn đề nhậndạng vật thể đã được coi là nhiệm vụ khó khăn nhất trong lĩnh vực thị giác máytính Công nghệ nhận dạng khuôn mặt có thể được sử dụng cho vô số ứng dụng, từbảo mật đến quảng cáo Một số trường hợp sử dụng bao gồm:
• Bảo mật trên thiết bị di động
• Mạng xã hội (chẳng hạn như Facebook, để gắn thẻ các cá nhân trong ảnh)
Hình 2: Điểm danh bằng hệ thống tự động
Trang 4• Bảo mật doanh nghiệp, vì các doanh nghiệp có thể sử dụng nhận dạng khuônmặt để vào tòa nhà.
• Tiếp thị Các nhà tiếp thị có thể sử dụng nhận dạng khuôn mặt để xác định
độ tuổi, giới tính và dân tộc để nhắm mục tiêu tới đối tượng cụ thể
PHẦN II: NỘI DUNG Chương I: Tổng quan
1.1: Lập trình hướng đối tượng
Lập trình hướng đối tượng (còn được gọi là Object Oriented Programming,viết tắt là “OOP”) là một phương thức lập trình mà lập trình viên lấy đối tượng làmnền tảng để viết chương trình Theo một định nghĩa khác, lập trình hướng đốitượng là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng và tậptrung vào các đối tượng thao tác, giúp code dễ quản lý, tái sử dụng được và dễ bảotrì
Hiện nay, OOP là một trong những phương pháp lập trình rất quan trọng vàđược sử dụng rộng rãi Hầu hết các ngôn ngữ lập trình hiện nay như Java, PHP,.NET, Ruby, Python… đều hỗ trợ OOP
* Giải thích cụ thể về định nghĩa hướng đối tượng
- Đối tượng ( Object ): Đối tượng có thể là con người, điện thoại, máy tính, xecộ…mỗi một đối tượng sẽ gồm có 2 thông tin là phương thức và thuộc tính
+ Thuộc tính: Là các thông tin, đặc điểm của đối tượng mà lập trình viênhướng đến
+ Phương thức: Chính là các thao tác, hành động mà đối tượng lập trình cóthể thực hiện được
Ví dụ: Nếu 1 chiếc điện thoại là một đối tượng
• Điện thoại sẽ có các thuộc tính như: màu sắc, kích thước, bộ nhớ, …
Trang 5• Và các phương thức như: quét virus, khóa màn hình, phím khởi động,
sử dụng các trình duyệt
- Lớp ( Class ): Mỗi một lớp là một kiểu dữ liệu chứa nhiều thuộc tính và phương thức đã được định nghĩa sẵn từ trước Đây được xem là sự trừu tượng hóa của rất nhiều đối tượng Kiểu dữ liệu này khác xa với các kiểu dữ liệu thông
thường, mỗi một lớp là một đơn vị bao gồm các sự kế hợp giữa các phương thức
và các thuộc tính Nói một cách dễ hiểu là các đối tượng có các đặc tính giống nhau sẽ được tập trung lại thành một lớp đối tượng
*Đặc điểm cơ bản của OOP
• Tính kế thừa ( Inheritance )
• Tính đa hình (Polymorphism )
• Tính trừu tượng ( Abstraction )
1.2: Tổng quan về xử lý ảnh và thị giác máy tính
1.3: Bộ thư viện OpenCV
OpenCV là tên viết tắt của open source computer vision library – có thể đượchiểu là một thư viện nguồn mở cho máy tính Cụ thể hơn OpenCV là kho lưu trữcác mã nguồn mở được dùng để xử lý hình ảnh, phát triển các ứng dụng đồ họatrong thời gian thực
OpenCV cho phép cải thiện tốc độ của CPU khi thực hiện các hoạt động realtime Nó còn cung cấp một số lượng lớn các mã xử lý phục vụ cho quy trình củathị giác máy tính hay các learning machine khác
Thư viện OpenCV được phát hành với giấy phép BDS Do đó các dịch vụ nócung cấp là hoàn toàn miễn phí và được hạn chế tối đa các rào cản thông thường
Cụ thể, bạn được phép sử dụng phần mềm này cho cả hoạt động thương mại lẫnphi thương mại OpenCV sở hữu giao diện thiên thiện với mọi loại ngôn ngữ lậptrình, ví dụ như C++, C, Python hay Java… Ngoài ra, nó cũng dễ dàng tương thíchvới các hệ điều hành khác nhau, bao gồm từ Windows, Linux, Mac OS, iOS chođến cả Android
Trang 6Kể từ lần đầu xuất hiện từ năm 1999, giờ đây OpenCV đã sở hữu đội ngũngười dùng hùng hậu, con số ước tính có thể lên tới 47.000 người Tất cả là nhờnhững ưu điểm vượt trội của OpenCV.
*Chức năng có trong thư viện OpenCV
Bộ công cụ hỗ trợ 2D và 3D
Nhận diện khuôn mặt
Nhận diện cử chỉ
Nhận dạng chuyển động, đối tượng, hành vi
Tương tác giữa con người và máy tính
Điều khiển Robot
1.4: Học máy ( Machine Learning )
Học máy hay máy học có tên tiếng Anh đầy đủ là Machine Learning, (viết tắt
là ML) Thuật toán Machine Learning là các chương trình máy tính có khả nănghọc hỏi và hoàn thành các nhiệm vụ, đồng thời là cách để cải thiện hiệu suất theothời gian vô cùng hiệu quả
Học máy là công nghệ được phát triển từ trí tuệ nhân tạo
Ngoài ra, Machine Learning còn được biết là còn là công nghệ phát triển từlĩnh vực trí tuệ nhân tạo tiên tiến nhất hiện nay Để đảm bảo không có sai lệch vàkhông xuất hiện dữ liệu giả, Machine Learning vẫn cần quá trình tìm hiểu và lựachọn kỹ thuật phân tích dữ liệu từ con người
Trang 7Học máy ngày càng mang tính phổ biến trên toàn thế giới Sự tăng trưởngvượt bậc của dữ liệu lớn (Big Data) và các thuật toán Machine Learning đã cảithiện độ chính xác của những mô hình và dự đoán tương lai.
*Thuật toán học máy được chia thành 2 loại chính
- Học có giám sát (Supervised Learning)
- Học không có giám sát (Unsupervised Learning)
- Học bán giám sát (Semi – Supervised)
- Học củng cố (Reinforcement learning)
*Ứng dụng của Machine Learning trong thực tiễn
- Cảnh báo giao thông trên ứng dụng (trên ứng dụng Google Maps), (minhhọa trong hình 3)
Hình 3: Cảnh báo giao thông
- Nhận dạng hình ảnh (Image Recognition): là một trong những ứng dụng phổbiến nhất của Machine Learning Có nhiều tình huống để phân loại đối tượng trongmộ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 đomức xám của từng pixel còn trong ảnh màu thì lại sử dụng phép đo cường độ của 3màu khác nhau tạo nên 1 pixel (R-G-B), (minh họa trong hình 4)
Trang 8- Trợ lý ảo Siri của Apple (minh họa trong hình 5)
Hình 5: Ứng dụng Siri trên Iphone của Apple
- Xe tự hành của Google và Tesla (minh họa hình 6)
Hình 6: Xe tự hành của Google
- Máy chơi cờ vây AlphaGo của Google DeepMind (minh họa hình 7)
Hình 4:sử dụng phép đo mức xám của từng pixel
Trang 9- Hệ thống gợi ý phim của Netflix (minh họa hình 8)
Hình 8: Ứng dụng gợi ý phim trên Netflix
- Ứng dụng tag khuôn mặt trên Facebook (minh họa hình 9)
Hình 7: Máy chơi cờ vây của Google
Hình 9: Ứng dụng tag khuôn mặt trên Facebook
Trang 105 Visual Studio
Visual Studio là một trong những công cụ hỗ trợ lập trình website rất nổi
tiếng nhất hiện nay của Mcrosoft và chưa có một phần mềm nào có thể thay thếđược nó Visual Studio được viết bằng 2 ngôn ngữ đó chính là C# và VB+ Đây là
2 ngôn ngữ lập trình, giúp người dùng có thể lập trình được hệ thống một các dễdàng và nhanh chóng nhất thông qua Visual Studio
Visual Studio là một phần mềm lập trình hệ thống được sản xuất trực tiếp
từ Microsoft Từ khi ra đời đến nay, Visual Studio đã có nhiều phiên bản sử dụngkhác nhau Điều đó, giúp cho người dùng có thể lựa chọn được phiên bản tươngthích với dòng máy của mình cũng như cấu hình sử dụng phù hợp nhất
Bên cạnh đó, Visual Studio còn cho phép người dùng có thể tự chọn lựa giaodiện chính cho máy của mình tùy thuộc vào nhu cầu sử dụng
* Một số tính năng của Visual Studio
Trang 11Đối tượng và phạm vi nghiên cứu, phương pháp thực hiện
2.1: Đối tượng và phạm vi nghiên cứu
Tập trung chính vào đối tượng nghiên cứu là mặt người, kỹ thuật nhận diệnkhuôn mặt bằng Machine Learning (Học máy)
Đề tài tập trung tìm hiểu một số phương pháp nhận dạng khuôn mặt ngườiphổ biến hiện nay và đưa ra phương án nhận dạng cho bài toán nhận dạng khuônmặt người
2.2: Phương pháp thực hiện
Phương pháp thực hiện và phát triển hệ thống nhận dạng sinh trắc học dựatrên nhận dạng khuôn mặt bằng thư viện OpenCV và phát trực tuyến thời gian thựcqua camera ghi hình Để hệ thống hoạt động, cần thực hiện, đầu tiên, nó phải pháthiện được khuôn mặt Sau đó, nó phải nhận ra khuôn mặt đó là ai gần như ngay lậptức
Quá trình nhận dạng khuôn mặt bắt đầu bằng một trình ứng dụng chocamera, được cài đặt trên bất kỳ thiết bị tương thích nào và được kết nối với máyảnh, sau đó có thể sử dụng thị giác máy tính (Computer Vision) và mạng thần kinhsâu (Deep Neural Network) để tìm ra một khuôn mặt tiềm năng trong luồng hìnhảnh Khi một khuôn mặt được chụp lại, hình ảnh cắt khung sẽ được chuyển tiếpđến một đường dẫn đã chỉ định và được lưu trữu lại
Trang 12CHƯƠNG III: Các bước thực hiện
3.1: Cấu hình thư viện OpenCV với Visual Studio
Bước 1: Mở Visual Studio và Tạo Empty Project Visual C++ mới
Bước 2: Thêm file C++ vào Project vừa tạo
Trang 13Bước 3: Chuyển build platform của Project sang x64 vì bản OpenCV đã
build sẵn chỉ hỗ trợ 64-bit
Bước 4: Click chuột phải vào Project và chọn Properties để mở cửa
sổ Project Properties
Trang 14Bước 5: Chọn mục C/C++ -> General Ở dòng Additional Include Directories, thêm vào đường dẫn đến thư mục build\include của thư mục
OpenCV đã giải nén ở bước trên Bấm vào Apply
Bước 6: Chuyển sang mục Linker->General Ở dòng Additional Library Directories, thêm vào đường dẫn đến thư mục build\x64\vc15/lib
Trang 15Bước 7: Chuyển sang mục Linker -> Input Ở dòng Additional Dependencies, thêm vào tên file opencv_world341d.lib (vì đang build ở chế độ Debug) Nếu build ở chế độ Release thì tên file là opencv_world341d.lib Hai file
này có thể được tìm thấy trong thư mục build\x64…\bin Bấm vào Apply.
Bước 8: Nhấn OK.
3.2: Lập trình mở webcam và nhận dạng khuôn mặt
// Chương trình CPP để phát hiện khuôn mặt trong video
// Bao gồm các tệp tiêu đề bắt buộc từ thư mục OpenCV
Trang 16using namespace std;
using namespace cv;
// Hàm phát hiện khuôn mặt
void detectAndDraw(Mat& img, CascadeClassifier& cascade,
CascadeClassifier& nestedCascade, double scale);
string cascadeName, nestedCascadeName;
int main(int argc, const char** argv)
//cout << "Frames per second camera : " << fps << endl;
Mat frame, image;
// Bộ phân loại XML được đào tạo được xác định trước với các đặc điểm trên khuôn mặt
CascadeClassifier cascade, nestedCascade;
double scale = 1;
// Tải bộ phân loại từ thư mục "opencv / data / haarcascades"
nestedCascade.load("D:\\Download\\opencv\\build\\etc\\haarcascades\\haarc asc ade_eye_tree_eyeglasses.xml");
// Thay đổi đường dẫn trước khi thực thi
Trang 17cascade.load("D:\\Download\\opencv\\build\\etc\\haarcascades\\haarcascade_ fro ntalface_alt.xml");
// Bắt đầu Video 1) 0 cho WebCam 2) "Đường dẫn đến Video" cho Video cục bộ
videos.open(0);
if (videos.isOpened()) {
// Chụp khung hình từ video và phát hiện khuôn mặt cout << "Bat dau nhan dien khuon mat " << endl;
Mat frame, fgMask;
Trang 18sum += 1;
} }
if (frame.empty())
break;
Mat frame1 = frame.clone();
detectAndDraw(frame1, cascade, nestedCascade, scale);
<< fpsLive << endl;
putText(frame1, "FPS: " + to_string(int(fpsLive)), { 50, 50 }, FONT_HERSHEY_SIMPLEX, 1.5, (255,165,0), 2);
else
Trang 19cout << "Khong the mo may anh";
return 0;
}
void detectAndDraw(Mat& img, CascadeClassifier& cascade,
CascadeClassifier& nestedCascade, double scale)
{
vector<Rect> faces, faces2;
Mat gray, smallImg;
cvtColor(img, gray, COLOR_BGR2GRAY); // Convert to Gray Scale double fx = 1 / scale;
//Thay đổi kích thước hình ảnh thang độ xám resize(gray, smallImg, Size(), fx, fx, INTER_LINEAR);
Trang 20double aspect_ratio = (double)r.width / r.height;
if (0.75 < aspect_ratio && aspect_ratio < 1.3) {
center.x = cvRound((r.x + r.width * 0.5) * scale); center.y = cvRound((r.y + r.height * 0.5) * scale); radius = cvRound((r.width + r.height) * 0.25 * scale); rectangle(img, faces.at(i), CV_RGB(255,165,0),4); }
0 | CASCADE_SCALE_IMAGE, Size(30, 30));
//Vẽ vòng tròn quanh mắt for (size_t j = 0; j < nestedObjects.size(); j++) {
Trang 21radius = cvRound((nr.width + nr.height) * 0.25 * scale);
circle(img, center, radius, CV_RGB(255,192,203),2); }
}
//Hiển thị hình ảnh đã xử lý với các khuôn mặt được phát hiện
//imshow("Camera", img);
- Mã trên sử thư viện <time.h> để truy xuất kiểm tra ra thời gian mở camera
và thời điểm kết thúc Từ đó tính số khung hình thu được trên giây
- Sử dụng ba kênh mà RGB để tạo màu cho nét vẽ khuôn mặt và khoanh mắt.Hàm rectangle sử dụng vẽ hình chữ nhật cho khuôn mặt và hàm circle vẽ hìnhtròn quanh vùng mắt
- Sử dụng file XML của Opencv để truy xuất đặc điểm trên khuôn mặt
- Sử dụng vector SVM để phân loại kích thước từng khuôn mặt và bộ phânloại tầng để phát hiện mắt, mặt với kích thước khác nhau
3.3: Kết quả thu được từ chương trình
Trang 22Hình 10: Nhóm thu được kết quả với hình tròn phát hiện khuôn mặt
Chương IV: Kết luận và hướng phát triển
5.1: Kết luận
- Qua tìm hiểu bài toán phát hiện nhận dạng khuôn mặt người trong ảnh, nhómchúng em đã thấy được sự quan trọng của xử lý ảnh, cũng như sự phát triển và tầmquan trọng của bài toán trong đời sống
- Trong quá trình xây dựng chương trình nhóm chúng em đã tìm hiểu về thưviện mã nguồn mở OpenCV Qua đó biết cách sử dụng các hàm được xây dựng sẵntrong thư viện OpenCV
- Về chương trình nhóm mới chỉ thực hiện phát hiện mặt người trong ảnh, kếtquả đạt được như mong muốn, thời gian phát hiện nhanh đối với mặt người chụpthẳng, chất lượng ảnh tốt, không có vật cản…., còn trong các ảnh như chụp hơinghiêng hay ảnh có màu sắc tối thì chương trình vẫn chưa phát hiện ra khuôn mặttrong ảnh đó Nhóm chúng em sẽ tìm hiểu thêm và cố gắng khắc phục.
5.2: Hướng phát triển
- Tiếp tục nghiên cứu, cải thiện những khuyết điểm nói trên
- Vẫn khai thác điểm mạnh chương trình nhận diện khuôn mặt của nhóm
- Nhóm chúng em sẽ kết hợp với những nhóm có chương trình nghiên cứu khác
để thực hiện việc đồng bộ chương trình với nhau sẽ cho ra được một đề tài nghiêncứu mới, ví dụ như ứng dụng nhận diện khuôn mặt kết hợp với chương trình nhậndạng biển số xe thì sẽ dễ dàng quản lý cho các bãi xe của chung cư, của bãi đỗ xe
Hình 11: Kết quả thu được phát hiện khuôn mặt với hình vuông
Trang 23công cộng, hoặc kết hợp với chương trình nhận dạng bàn tay để dễ dàng phát hiệnnhững kẻ trộm…v v.
TÀI LIỆU THAM KHẢO
[1] Nguyễn Thanh Thuỷ, Lương Mạnh Bá, Nhập môn xử lý ảnh số, Nhà xuất bản khoa học kỹ thuật, 1999.
[2] Lương Mạnh Bá, Nguyễn Thanh Thủy, Nhập môn xử lý ảnh số, NXB Khoa học
kỹ thuật,1999.
[3] Nguyễn Kim Sách, Xử lý ảnh và video số, NXB Khoa học kỹ thuật,1997
[4] John C Russ, The Image Processing Handbook, CRC Press,2002.
[5] Alan C Bovik, Handbook of Image and Video Processing, Academic Press,2000