Website có kèm chức năng nhận diện khuôn mặt của nhữngngười dùng đã đăng ký tài khoản có xuất hiện trong hình ảnh, giúp tìm kiếm những người dùng khác tốt hơn... 2.4/ Face_Recognite - Fa
Trang 1TRƯỜNG ĐẠI HỌC SÀI GÒN
KHOA CÔNG NGHỆ THÔNG TIN
Lềnh Kửng Mằn Mai Nguyễn Quốc Dũng
(Nhóm trưởng)
Trang 2TP HỒ CHÍ MINH, THÁNG 5 NĂM 2023
TRƯỜNG ĐẠI HỌC SÀI GÒN
KHOA CÔNG NGHỆ THÔNG TIN
Trang 3Mức
độ đóng góp
Giảng viên đánh giá
1 Nguyễn Ngô
Thế Anh
3121410054
- Giao diện đăng nhập
và đăng ký
2 Trần Hoàng Nam 3121410337
- Toàn bộ phần chức năng
3 Hoàng Văn
Nhân
3121410358
- Chức năngnhận diện khuôn mặt
4 Mai Nguyễn
Quốc Dũng 3121410109 - Xây dựng sơ đồ hệ
thống
- Toàn bộ giao diện ngoại trừ đăng nhập
và đăng ký
- Viết báo cáo
- Làm PowerPoint
- Chức năng
Trang 4tìm kiếm
5 Lềnh Kửng Mằn
3121410
Trang 5NHẬN XÉT CỦA GIẢNG VIÊN
Trang 6
Trang 7
MỤC LỤC
2/ Các thư viện được sử dụng trong chương trình 7
1/ Phân tích và xây dựng chương trình 10
2/ Phân tích bài toán nhận diện khuôn mặt 12
2.2/ Quy trình nhận diện và so sánh khuôn mặt 13
Trang 83/ Hướng phát triển 31
LỜI MỞ ĐẦU
- Ngày nay với sự phát triển của công nghệ thông tin đã được ứng dụng rất rộng rãi và phổ biến trong tất cả các lĩnh vựccủa đời sống xã hội Và một trong những ngôn ngữ lập trình phổ biến và mạnh mẽ nhất hiện nay chính là Python Với cú pháp đơn giản, dễ hiểu và khả năng ứng dụng linh hoạt, Python đã trở thành ngôn ngữ lựa chọn hàng đầu cho các nhà phát triển, nhà nghiên cứu và những người đam mê công nghệ
- Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học (ML) Các nhà phát triển sử dụng Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau.Phần mềm Python được tải xuống miễn phí, tích hợp tốt với tất
cả các loại hệ thống và tăng tốc độ phát triển
- Môn học Python này nhằm mục tiêu giới thiệu đến các bạn
cú pháp cơ bản, các khái niệm quan trọng và các kỹ thuật lập trình thông qua việc sử dụng Python Chúng ta sẽ học cách xây dựng các chương trình, từ những ứng dụng đơn giản đến những
dự án phức tạp hơn, và khám phá sức mạnh của Python trong việc giải quyết các vấn đề thực tế
- Đề tài của nhóm em là phát triển một blog website nơi mà người dùng có thể đăng những hình ảnh của bản thân và tìm kiếm, theo dõi những hình ảnh do các người dùng khác đăng tải Website có kèm chức năng nhận diện khuôn mặt của nhữngngười dùng đã đăng ký tài khoản có xuất hiện trong hình ảnh, giúp tìm kiếm những người dùng khác tốt hơn
Trang 9CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1/ Lý thuyết tổng quan về python
- Python thường được sử dụng để phát triển trang web và phần mềm, tự động hóa tác vụ, phân tích dữ liệu và trực quan hóa dữ liệu Vì tương đối dễ học, Python đã được nhiều người không phải là lập trình viên như kế toán và nhà khoa học áp dụng cho nhiều công việc hàng ngày, chẳng hạn như tổ chức tàichính
- Các nhà phát triển có thể dễ dàng đọc và hiểu một chươngtrình Python vì ngôn ngữ này có cú pháp cơ bản giống tiếng Anh
- Python giúp cải thiện năng suất làm việc của các nhà pháttriển vì so với những ngôn ngữ khác, họ có thể sử dụng ít dòng
mã hơn để viết một chương trình Python
- Python có một thư viện tiêu chuẩn lớn, chứa nhiều dòng
mã có thể tái sử dụng cho hầu hết mọi tác vụ Nhờ đó, các nhà phát triển sẽ không cần phải viết mã từ đầu
- Các nhà phát triển có thể dễ dàng sử dụng Python với các ngôn ngữ lập trình phổ biến khác như Java, C và C++
- Cộng đồng Python tích cực hoạt động bao gồm hàng triệu nhà phát triển nhiệt tình hỗ trợ trên toàn thế giới Nếu gặp phải vấn đề, bạn sẽ có thể nhận được sự hỗ trợ nhanh chóng từ cộngđồng
- Trên Internet có rất nhiều tài nguyên hữu ích nếu bạn muốn học Python Ví dụ: bạn có thể dễ dàng tìm thấy video, chỉdẫn, tài liệu và hướng dẫn dành cho nhà phát triển
- Python có thể được sử dụng trên nhiều hệ điều hành máy tính khác nhau, chẳng hạn như Windows, macOS, Linux và Unix
- Nhờ vào sức mạnh của cộng đồng vfa tính dễ dàng phát triển của nó, các ứng dụng của Python bao gồm AI và máy học, phân tích dữ liệu, trực quan hóa dữ liệu, lập trình ứng dụng, phát triển web…và còn được ứng dụng vào nhiều lĩnh vực khác
Trang 102/ Các thư viện được sử dụng trong chương trình
2.1/ Django
- Là một khung framework trang web bên thứ ba dựa trên Python khác Trong số các thư viện Python khác, mục đích chính của Djangos trong khung framework này là đơn giản hóa quá trình phát triển các trang web dựa trên cơ sở dữ liệu phức tạp Thư viện Django cung cấp nhiều công cụ quản lý Do đó, các nhà phát triển sẽ có thể tạo ra các phần mã code mà khôngphải chuyển sang các công cụ khác
- Django sử dụng một mô hình gọi là MVT là viết tắt của Model – View -Template
- Model: nhiệm vụ của nó là thực hiện quản lý dữ liệu
Nghĩa là Model sẽ kiểm soát mọi sự thay đổi của dữ liệu cũng như việc giao tiếp CRUD giữa BE và Database
- View: Mục đích của View là xử lý logic nghiệp vụ thông
qua các url được định nghĩa Khi có một request từ client, View
sẽ là trung tâm để thực hiện các yêu cầu của request đó và sẽ trả về (response) dữ liệu theo yêu cầu
- Template: Đảm nhiệm việc thể hiện dữ liệu cho người
dùng thông qua việc kết nối với các View và cũng chính là phần
UI Django hỗ trợ…các cú pháp logic…để thuận tiện hơn cho việc lấy dữ liệu từ phía BE Ngoài ra, Django còn cung cấp Django Admin Site (một hệ thống quản lý của Model của Django)
Trang 112.2/ Pillow
- Pillow là một fork từ thư viện PIL của Python được sử dụng
để xử lý hình ảnh So với PIL thì Pillow được cập nhật thường xuyên và đánh giá cao hơn (PIL đã không được cập nhật từ năm 2009)
2.3/ OpenCV
- OpenCV (Open Source Computer Vision Library) là một thưviện mã nguồn mở chuyên về xử lý ảnh và thị giác máy tính OpenCV được viết bằng C++, nhưng nó cũng cung cấp các giaodiện lập trình cho các ngôn ngữ khác như Python, Java,
MATLAB, và Ruby
- OpenCV Python là một gói phần mềm Python cho phép người dùng sử dụng các tính năng của OpenCV bằng Python Nócung cấp cho người dùng khả năng xử lý ảnh và video, nhận dạng đối tượng, xác định chuyển động, xử lý hình ảnh y tế, xử
lý hình ảnh động, và nhiều tính năng khác
Các tính năng chính của OpenCV Python bao gồm:
- Xử lý ảnh: OpenCV Python cung cấp các công cụ để xử lý
ảnh như lọc, phóng to, thu nhỏ, cắt, xoay và chuyển đổi các định dạng hình ảnh khác nhau
- Xử lý video: OpenCV Python cung cấp các công cụ để xử
lý video như phát lại, dừng, tạm dừng, ghi và chuyển đổi các định dạng video khác nhau
- Nhận dạng đối tượng: OpenCV Python cung cấp các
công cụ để nhận dạng đối tượng trong hình ảnh hoặc video bằng cách sử dụng các thuật toán như Haar Cascade
- Xác định chuyển động: OpenCV Python cung cấp các
công cụ để xác định chuyển động trong hình ảnh hoặc video
- Xử lý hình ảnh y tế: OpenCV Python cung cấp các công
cụ để xử lý hình ảnh y tế như phân đoạn, phát hiện bất thường
và xử lý hình ảnh y tế
Trang 12- Xử lý hình ảnh động: OpenCV Python cung cấp các công
cụ để xử lý hình ảnh động như phát hiện chuyển động, phân tích hành vi và xác định các đối tượng di chuyển
2.4/ Face_Recognite
- Face_recognition là một thư viện mã nguồn mở Python được sử dụng để nhận dạng khuôn mặt trong ảnh hoặc video Thư viện này sử dụng một mô hình mạng nơ-ron tích chập (Convolutional Neural Network - CNN) để học và nhận dạng các đặc trưng khuôn mặt
- Phát hiện khuôn mặt: Thư viện này có thể phát hiện và
trích xuất khuôn mặt từ các ảnh hoặc video
- Nhận dạng khuôn mặt: Face_recognition cho phép nhận
dạng các khuôn mặt đã được trích xuất từ các ảnh hoặc video
- So sánh khuôn mặt: Thư viện này có thể so sánh các khuôn mặt với nhau để xác định xem chúng có giống nhau hay không
- Đặt tên khuôn mặt: Face_recognition cho phép đặt tên
cho các khuôn mặt đã được nhận dạng, để sau đó có thể dễ dàng tìm kiếm và nhận dạng chúng
- Học máy: Thư viện này cung cấp các công cụ để huấn
luyện mô hình nhận dạng khuôn mặt
2.5/ Bootstrap
- Bootstrap…là một front-end framework mã nguồn mở miễn phí giúp quá trình phát triển web được nhanh và dễ dàng hơn Giúp xây dựng website chuẩn responsive
Trang 13CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH
1/ Phân tích và xây dựng chương trình
1.1/ Cơ sở dữ liệu
- Để xây dựng một website để chia sẽ hình ảnh, cơ sở dữ liệu của chương trình sẽ được thiết kế như sau nhằm cung cấp cho người dùng những chức năng
cơ bản cho việc đăng ảnh và tương tác giữa người dùng
- Việc xây dựng cơ sở dữ liệu sẽ sử dụng SQLite do Django cung cấp sẵn
Do SQLite không mã hóa dữ liệu khi lưu trữ nên chương trình có thể sẽ có tính bảo mật không cao
- Việc xây dựng cơ sở dữ liệu sẽ được thực hiện qua models.py
Trang 151.2/ Các chức năng cơ bản
1 User - Đăng nhập / đăng ký /đăng xuất
- Chỉnh sửa thông tin cá nhân
- Thêm hình ảnh khuôn mặt cho chức năng nhận diện khuôn mặt
- Tìm kiếm bài đăng theo tiêu đề
2 Post - Thêm sửa xóa bài đăng kèm hình ảnh
- Thả tim, hiển thị lượt xem, lượt thả tim
- Nhận diện khuôn mặt của những người trong ảnh và tạo đường dẫn sang tài khoản người đó nếu người đó đã đăng ký và đã thêm ảnh khuôn mặt cho chức năng nhận diện khuôn mặt
3 Comment - Tạo / phản hồi bình luận
- Thả tim bình luận
4 Tag - Hiển thị các thẻ đã được tạo trong bài đăng
- Hiện thị số lượng bài đăng đã sử dụng thẻ đó
5 PostTag - Hiển thị các bài đăng có dùng thẻ đó theo thời
gian hoặc theo lượt xem
- Việc lưu trữ hình ảnh trong quá trình chương trình hoạt động sẽ được lưu vào folder thay vì trên SQLite
2/ Phân tích bài toán nhận diện khuôn mặt
2.1/ Bài toán nhận diện
- Bài toán được đặt ra ở đây là chương trình phải nhận diện được tất cả cáckhuôn mặt có trong hình ảnh mà người dùng đăng tải, từ đó so sánh và chọn ranhững khuôn mặt trùng khớp với khuôn mặt của những người dùng đã tạo tàikhoản khác tuy nhiên phải gọn nhẹ để phù hợp với một website Có nhiềuthư viện nhận diện khuôn mặt khác nhau, nhưngface_recognition nhận diện khá chính xác và dễ sử dụng Trongchương trình này, nhóm chúng em đã sử dụng model được trainsẵn của thư viện để xác định khuôn mặt người trong ảnh và sosánh
Trang 16- Bởi vì yêu cầu của người dùng là nhận diện tất cả khuônmặt trong ảnh Khi thực thi chương trình sẽ vẽ viền đỏ và đánh
số cho những khuôn mặt người có trong ảnh mà nó cho là trùngkhớp với danh sách khuôn mặt của người dùng
2.2/ Quy trình nhận diện và so sánh khuôn mặt
Bước 1: Lấy dữ liệu đầu vào
- Trước tiên cần có dữ liệu là khuôn mặt của mỗi người dùng Người dùng
sẽ gửi một hình ảnh khuôn mặt lên hệ thống để làm dữ liệu so sánh
Bước 2: Xác định khuôn mặt
- Trước khi nhận diện khuôn mặt, hình ảnh cần tiền xử lý đểloại bỏ nhiễu và chuẩn hóa các giá trị pixel Các bước tiền xử lýbao gồm: chuyển ảnh sang ảnh xám, làm mờ ảnh để giảmnhiễu và cân bằng độ sáng Sau đó đưa qua thuật toán HOG,kết quả cuối cùng là chúng ta biến hình ảnh gốc thành một hìnhđại diện rất đơn giản, nắm bắt cấu trúc cơ bản của khuôn mặtmột cách đơn giản hơn
Bước 3: Đổi góc độ và chiều cho khuôn mặt
- Để làm điều này, chúng ta sẽ cố gắng làm cong bức ảnh để mắt và môi luôn ở vị trí mẫu trong ảnh Điều này sẽ giúp chúng ta dễ dàng hơn rất nhiều để
so sánh khuôn mặt trong các bước tiếp theo
Trang 17Bước 4: Mã hóa khuôn mặt
- Các đặc trưng của khuôn mặt lúc này sẽ được mã thành file npy và đượclưu trữ
Bước 5: So sánh khuôn mặt
- Khi một tấm ảnh được đăng tải và sử dụng chức năng nhận diện, ảnh đó
sẽ đi qua các bước tuần tự trong chương trình để ra được một danh sách cácfile npy trích từ các khuôn mặt có trong hình ảnh, sau đó tiến hành so sánh vàvới tất cả các file npy chứa đặc trưng đã mã hóa của người dùng trả về mộtmảng 2 chiều gồm email và file npy tương ứng
Sau khi nhận dạng xong, chương trình sẽ trả về danh sách cácngười dùng mà nó đã tìm thấy trong bức ảnh và danh sách sẽđược liệt kê trên giao diện người dùng
2.3/ Xây dựng chức năng
- Khi người dùng thêm ảnh khuôn mặt trên trang chỉnh sửathông tin, ảnh sẽ được mã hóa thành file py và lưu vào thư mụcencoding_face
Trang 18- Khi một bài đăng bất kỳ được sử dụng chức năng nhậndiện khuôn mặt, chương trình sẽ mã hóa từng khuôn mặt cótrong bức ảnh và chuyển thành một mảng các file npy Sau đó
so sánh từng phần tử có trong mảng với toàn bộ file có trongthư mục encoding_face
- Nếu trùng khớp, chương trình sẽ gắn file npy có trongmảng đó và email chủ nhân của khuôn mặt đã được mã hóathành file npy có trong thư mục encoding_face vào mảng 2chiều
- Sau khi thực hiện xong quá trình so sánh, ta nhận đượcmột mảng 2 chiều gồm cột một là các file npy đã được cho làtrùng khớp và một 2 là email của người được cho là trùng khớpvới file npy đó
- Tiếp đó sẽ thực hiện vẽ khung cho khuôn mặt và đánh sốvào hình ảnh dựa trên cột đầu tiên của mảng 2 chiều, tên hìnhảnh sẽ là “mã bài đăng” + “output” và được lưu trong thư mụcoutput và tiếp đó, chương trình ghi toàn bộ email ở cột thứ haitrong mảng 2 chiều vào file txt với “mã bài viết” + “email” làtên
Trang 19Nội dung chức năng:
- Kết quả cuối cùng hàm sẽ trả về biến is_success, id của bài đăng và một mảng gồm các email của những người dùng được cho là đã tìm thấy trong ảnh
Các hàm liên quan được gọi trong quá trình thực thi: face_recognition:
- sử dụng hàm face_encodeings có sẵn của
Face_recognition để xác định toàn bộ khuôn mặt có trong ảnh, trả về true và gán vào biến target_encoding một mảng gồm tất
cả các file mã hóa khuôn mặt của những khuôn mặt mà nó tìm
ra trong ảnh, ngược lại nếu phần tử trong target_encoding bằng
0 thì trả về false Khởi tạo mảng list_email bằng hàm
find_target_face
- Sau đó ghi các phần tử của mảng vào file txt nếu trong mảng có phần tử
Trang 20Hàm face_recogntion
find_target_face:
- Tạo một biến path chứa đường dẫn đến thư mục
encoding_face chứa các file mã hóa khuôn mặt của người dùng
- Gọi hàm encode_faces trong vòng lặp Hàm này sẽ trả về một mảng 2 chiều với cột đầu tiên là file khuôn mặt đã mã hóa
và cột thứ 2 là email của chủ nhân file ảnh đó Mảng này chứa toàn bộ ảnh khuôn mặt đã mã hóa của người dùng trên hệ thống
- Sau đó so sánh từng phần tử trong target_encoding đã tạo
ở face_recognition với từng phần tử trong cột thứ nhất của mảng 2 chiều Nếu so sánh trùng khớp thì gán email tương ứng vào list_email sau đó vẽ khung và đánh số vào bức ảnh thông qua hàm create_frame Lưu ý ở đây có tham số tolerance = 0.55 Nếu tham số này có giá trị quá cao hay quá thấp thì độ chính xác sẽ giảm đi và con số 0.55 là giá trị được khuyên dùng
Trang 21Hàm find_target_face
encode_faces:
- Khởi tạo mảng 2 chiều gồm cột hình ảnh khuôn mặt được
mã hóa của người dùng và cột email tương ứng của hình ảnh đódựa vào thư mục encoding_face
Trang 23- Cài đặt biến môi trường
1.2/ Cài đặt Cmake
- Tải và cài đặt CMake
- Cài đặt biến môi trường
Trang 241.3/ Cài đặt Anaconda
- Tải và cài đặt Anacoda
Trang 25- Mở Anaconda Prompt và tạo môi trường:
conda create -n myenv
- Kích hoạt môi trường:
Trang 262/ Demo
- Landingpage: Giới thiệu về website, thanh tìm kiếm bị ẩn
đi khi chưa đăng nhập
- Đăng nhập và đăng ký
Trang 27- Header sau khi đăng nhập xong: thanh tìm kiếm và icon người dùng xuất hiện đồng thời dẫn đến mainpage
Trang 28- Trang người dùng: Hiển thị tên, ảnh đại diện và ảnh bìa, hiển thị chức năng đăng xuất và chỉnh sửa thông tin nếu là chính chủ
- Hiển thị các chức năng thêm sửa xóa nếu đúng là trang chính chủ
Trang 29- Chức năng tạo và sửa dùng chung 1 mẫu
Trang 30- Xem bài viết và các chức năng như nhận diện khuôn mặt, thả tim bài viết, danh sách các thẻ được gắn và có thể dẫn đến danh sách các bài viết được gắn thẻ đó
- Chức năng phản hồi và bình luận
- Trang chỉnh sửa thông tin, tại đây có thể thêm ảnh khuôn mặt để sử dụng chức năng nhận diện khuôn mặt