mỞ ĐẦu - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · web viewỨng dụng...

45
ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÁO CÁO ĐỒ ÁN CHUYÊN NGÀNH ĐỀ TÀI: XÂY DỰNG HỆ THỐNG GIÁM SÁT HOẠT ĐỘNG CỦA CÁN BỘ NHÂN VIÊN VÀ SINH VIÊN QUA NHẬN DIỆN KHUÔN MẶT Giảng viên hướng dẫn : PGS.TS.Huỳnh Công Pháp Sinh viên thực hiện : Hồ Thị Thanh Hưng 17IT015 Đặng Thanh Thuý 17IT031 Lớp : 17IT1

Upload: others

Post on 21-Jul-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

ĐẠI HỌC ĐÀ NẴNG

KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

BÁO CÁO

ĐỒ ÁN CHUYÊN NGÀNH

ĐỀ TÀI: XÂY DỰNG HỆ THỐNG GIÁM SÁT HOẠT ĐỘNG CỦA CÁN BỘ

NHÂN VIÊN VÀ SINH VIÊN QUA NHẬN DIỆN KHUÔN MẶT

Giảng viên hướng dẫn : PGS.TS.Huỳnh Công Pháp

Sinh viên thực hiện : Hồ Thị Thanh Hưng 17IT015

Đặng Thanh Thuý 17IT031

Lớp : 17IT1

Đà nẵng, tháng 12 năm 2020

Page 2: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

ĐẠI HỌC ĐÀ NẴNG

KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

ĐỒ ÁN CHUYÊN NGÀNH

XÂY DỰNG HỆ THỐNG GIÁM SÁT HOẠT ĐỘNG CỦA CÁN BỘ NHÂN

VIÊN VÀ SINH VIÊN QUA NHẬN DIỆN KHUÔN MẶT

Đà Nẵng, tháng 12 năm 2020

Page 3: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

MỞ ĐẦUMột trong những lĩnh vực quan trọng của Trí tuệ nhân tạo (Artificial Intelligence)

là thị giác máy (Computer Vision). Computer Vision là một lĩnh vực bao gồm các

phương pháp thu nhận, xử lí ảnh kỹ thuật số, phân tích và nhận dạng các hình ảnh, phát

hiện các đối tượng, tạo ảnh, siêu phân giải hình ảnh và nhiều hơn vậy. Object Detection

là một khía cạnh của thị giác máy đề cập đến khả năng của hệ thống máy tính và phần

mềm để định vị các đối tượng trong một hình ảnh và xác định từng đối tượng.

Với mong muốn tìm hiểu và học tập thông qua bài toán nhận dạng. Nhóm em đã

chọn đề tài: “XÂY DỰNG HỆ THỐNG GIÁM SÁT HOẠT ĐỘNG CỦA CÁN BỘ

NHÂN VIÊN VÀ SINH VIÊN QUA NHẬN DIỆN KHUÔN MẶT” là đề tài cho đồ

án chuyên ngành

Trong quá trình làm đồ án, nhóm em đã có nhận được sự hướng dẫn tận tình của

thầy Huỳnh Công Pháp cùng các bạn trong lớp 17IT1 để hoàn thành tốt đồ án này.

Trong quá trình thực hiện đồ án không thể tránh khỏi những sai xót, vì vậy nhóm

em rất mong nhận được sự quan tâm chỉ bảo của thầy.

Nhóm xin chân thành cảm ơn!

3

Page 4: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

NHẬN XÉT(Của giảng viên hướng dẫn)

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

...........................................................................................................................................

Chữ kí xác nhận của giảng viên

4

Page 5: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

MỤC LỤC

MỞ ĐẦU.........................................................................................................................1

NHẬN XÉT.....................................................................................................................2

Chương 1: Tổng quan đề tài............................................................................................7

1.1. Giới thiệu...........................................................................................................7

1.2. Phương pháp, kết quả........................................................................................7

1.2.1. Phương pháp triển khai thực hiện đề tài:.................................................7

1.2.2. Kết quả đạt được:.....................................................................................8

1.3. Cấu trúc đồ án....................................................................................................8

Chương 2: Nghiên cứu tổng quan...................................................................................9

2.1. Đối tượng và phạm vi nghiên cứu.....................................................................9

2.1.1. Đối tượng nghiên cứu..............................................................................9

2.1.2. Phạm vi nghiên cứu.................................................................................9

2.2. Cơ sở lí thuyết và thực tiễn................................................................................9

2.2.1. Cơ sở lý thuyết.........................................................................................9

2.2.2. Thực tiễn..................................................................................................9

Chương 3: Cơ sở lí thuyết.............................................................................................10

3.1. Ngôn ngữ lập trình Python...............................................................................10

3.2. Thư viện OpenCV............................................................................................11

3.3. Bài toán nhận dạng khuôn mặt........................................................................11

3.3.1. Tìm kiếm khuôn mặt(Face Detection):..................................................12

3.3.2. Trích rút đặc trưng (Feature Extraction):...............................................12

3.3.3. Nhận dạng khuôn mặt (Face Recognition):...........................................13

3.4. Flask Templates Python...................................................................................14

Chương 4: Xây dựng ứng dụng và triển khai cài đặt....................................................17

4.1. Cài đặt OpenCV và các công cụ phát triển......................................................17

4.1.1. Cài đặt công cụ Visual Studio Code:.....................................................17

4.1.2. Tiến hành cài đặt Python và Anaconda.................................................17

4.1.3. Cài đặt thư viện OpenCV......................................................................18

4.1.4. Cài đặt sqlite:.........................................................................................19

5

Page 6: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

4.1.5. Cài đặt Flask:.........................................................................................20

4.2. Xây dựng ứng dụng.........................................................................................20

4.2.1. Mô hình tổng quan.................................................................................20

4.2.2. Xây dựng chi tiết ứng dụng...................................................................21

4.3. Kết quả:............................................................................................................27

Chương 5: Kết luận và định hướng phát triển...............................................................29

5.1. Kết luận:...........................................................................................................29

5.2. Định hướng phát triển:.....................................................................................29

DANH MỤC TÀI LIỆU THAM KHẢO:.....................................................................30

6

Page 7: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

DANH MỤC HÌNHHình 1: 68 điểm trong thuật toán face landmark estimation.........................................14

Hình 2: Flask là gì?.......................................................................................................15

Hình 3: Cách hoạt động của Flask Framework.............................................................16

Hình 4: Cài đặt Visual Studio Code..............................................................................18

Hình 5: Kiểm tra version Python...................................................................................19

Hình 6: pip search “opencv”.........................................................................................19

Hình 7: install opencv-python.......................................................................................20

Hình 8: Kiểm tra cài đặt opencv....................................................................................20

Hình 9: Cài đặt sqlite.....................................................................................................20

Hình 10: Tạo bảng People trong cơ sở dữ liệu..............................................................21

Hình 11: Kiểm tra cài đặt Flask.....................................................................................21

Hình 12: Dữ liệu được lưu trong Sqlite.........................................................................24

Hình 13: Ảnh để train....................................................................................................25

Hình 14: Giao diện trang chủ web................................................................................28

Hình 15: Đăng ký..........................................................................................................28

Hình 16: Hiển thị danh sách những người trong bảng dữ liệu......................................29

Hình 17: Thêm người mới vào bộ dữ liệu.....................................................................29

Hình 18: Kết quả nhận diện...........................................................................................29

7

Page 8: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

DANH MỤC CỤM TỪ VIẾT TẮT

STT Cụm từ Viết tắt

1 Open Computer Vision OpenCV

2 Cơ sở dữ liệu CSDL

8

Page 9: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Chương 1: Tổng quan đề tài1.1. Giới thiệu

Một trong những lĩnh vực quan trọng của Trí tuệ nhân tạo (Artificial Intelligence) là

thị giác máy (Computer Vision). Computer Vision là một lĩnh vực bao gồm các phương

pháp thu nhận, xử lý ảnh kỹ thuật số, phân tích và nhận dạng các hình ảnh, phát hiện

các đối tượng, tạo ảnh, siêu phân giải hình ảnh và nhiều hơn vậy. Object Detection có

lẽ là khía cạnh sâu sắc nhất của thị giác máy do số lần sử dụng trong thực tế.

Object Detection đề cập đến khả năng của hệ thống máy tính và phần mềm để định

vị các đối tượng trong một hình ảnh và xác định từng đối tượng. Object Detection đã

được sử dụng rộng rãi để phát hiện khuôn mặt, phát hiện xe, đếm số người đi bộ, hệ

thống bảo mật và xe không người lái. Có nhiều cách để nhận diện đối tượng có thể

được sử dụng cũng như trong nhiều lĩnh vực thực hành.

Trong giới hạn kiến thức cũng như theo yêu cầu của đồ án chuyên ngành thì chúng

em chọn đề tài “XÂY DỰNG HỆ THỐNG GIÁM SÁT HOẠT ĐỘNG CỦA CÁN

BỘ NHÂN VIÊN VÀ SINH VIÊN QUA NHẬN DIỆN KHUÔN MẶT” nhằm giải

quyết bài toán yêu cầu đồ án đặt ra.

1.2. Phương pháp, kết quả

1.2.1. Phương pháp triển khai thực hiện đề tài:

Đồ án sử dụng OpenCV với ngôn ngữ mô tả là Python cùng với tệp tin XML

Haarcascade để nhận diện khuôn mặt realtime khi dùng webcam:

- Python là ngôn ngữ thông dụng và phổ biến trong trí tuệ nhân tạo cũng như

công nghệ học máy. Python là một ngôn ngữ có tính đơn giản, nhất quán và cho

phép truy cập vào các thư viện và frameword hỗ trợ cho AI và học máy

- Thư viện OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng

đầu cho xử lý về thị giác máy tính, machine learning, xử lý ảnh. OpenCV đươc

viết bằ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 dụng liên quan đến thời gian thực. Opencv có các interface cho C/C++,

Python Java vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS

OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt

quá 6 triệu lần

9

Page 10: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

- OpenCV có rất nhiều ứng dụng:

Nhận dạng ảnh

Xử lí hình ảnh

Phục hồi ảnh, video

Thực tế ảo

Các ứng dụng khác

- Haar Cascade là dữ liệu được sử dụng phổ biến nhất, tôi chỉ sử dụng riêng một

tệp tin trong bộ Haar Cascade là haarcascade_frontalface_default.xml và ngoài

ra còn có các tệp tin về phát hiện mắt, miệng, hình dáng cơ thể trong bộ Haar

Cascade.

1.2.2. Kết quả đạt được:

Hoàn thành được một chương trình với chức năng:

- Xây dựng thành công hệ thống giám sát hoạt động qua nhận diện khuôn mặt.

- Có được một kho dữ liệu đầy đủ hoặc tương đối đầy đủ về hình ảnh của cán bộ

nhân viên trong trường.

- Ứng dụng sẽ hoạt động ổn định trên cả nền tảng website và mobile.

- Hiểu cơ bản về bài toán nhận dạng trong học máy, cơ bản về ngôn ngữ python

cũng như thư viện Opencv.

1.3. Cấu trúc đồ án

Quá trình xây dựng và hoàn thành đồ án tiến hành qua các quy trình sau:

- Nghiên cứu tổng quan

- Phân tích thiết kế hệ thống và triển khai

- Kết luận và hướng phát triển

10

Page 11: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Chương 2: Nghiên cứu tổng quan2.1. Đối tượng và phạm vi nghiên cứu

2.1.1. Đối tượng nghiên cứu

Bài toán đặt ra là bài toán nhận dạng khuôn mặt có trong một bức ảnh hoặc khi sử

dụng webcam realtime bằng cách sử dụng phương pháp nhận diện khuôn mặt Haar-

cascade Detection.

2.1.2. Phạm vi nghiên cứu

Phạm vi nghiên cứu của đề tài “XÂY DỰNG HỆ THỐNG GIÁM SÁT HOẠT

ĐỘNG CỦA CÁN BỘ NHÂN VIÊN VÀ SINH VIÊN QUA NHẬN DIỆN KHUÔN

MẶT”:

Tìm hiểu về các thuật toán nhận diện.

Tìm hiểu, nghiên cứu về thư viện Opencv và ngôn ngữ python.

Tìm hiểu về phương pháp nhận diện khuôn mặt Haar-cascade Detection.

Tìm hiểu xây dựng hệ thống trên nền tảng website và mobile.

2.2. Cơ sở lí thuyết và thực tiễn

2.2.1. Cơ sở lý thuyết

Nhằm xây dựng một ứng dụng phù hợp với vấn đề đặt ra, về mặt lý thuyết đề tài sẽ

tìm hiểu và nghiên cứu các lĩnh vực sau:

- Tìm hiểu ngôn ngữ lập trình Python,

- Tìm hiểu các thuật toán nhận dạng trong học máy

- Tìm hiểu các kỹ thuật xử lý ảnh, trích chọn đặc trưng

- Nghiên cứu về thư viện Opencv trong việc hỗ trợ nhận dạng khuôn mặt

- Tìm hiểu Flask Templates Python

2.2.2. Thực tiễn

Từ cơ sở lí thuyết đề tài sẽ xây dựng hệ thống giám sát hoạt động của cán bộ nhân

viên và sinh viên qua nhận diện khuôn mặt với các tính năng:

- Nhận diện nhân viên, sinh viên xuất hiện trong phạm vi trường (ở những chỗ có

camera)

- Phát hiện người lạ xuất hiện trong trường

- Thống kê danh sách những cá nhân xuất hiện trong ngày

11

Page 12: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Chương 3: Cơ sở lí thuyếtTrong chương này sẽ tập trung nghiên cứu tìm hiểu về ngôn ngữ lập trình Python,

các kĩ thuật nhận diện cùng với sự hỗ trợ của thư viện Opencv và Flask Templates

Python.

3.1. Ngôn ngữ lập trình Python

Python là ngôn ngữ lập trình hướng đối tượng bậc cao, dùng để phát triển website

và nhiều ứng dụng khác nhau. Hiện nay, python đang được sử dụng rất rộng rãi trong

các ứng dụng về trí tuệ nhân tạo, học máy, học sâu. Python được tạo ra bởi Guido và

Rossum và được phát triển trong một dự án mã nguồn mở

Với cú pháp cực kì đơn giản và dễ hiểu, dễ sử dụng, Python là sự lựa chọn hoàn

hảo cho những ai lần đầu tiên học lập trình. Tuy nhiên, đây cũng là ngôn ngữ nổi tiếng

về sự chặt chẽ, nhanh, mạnh và có mặt ở mọi hệ điều hành

Python có 100 thư viện xây dựng sẵn để thực hiện các thuật toán Machine

Learning và Deep Learning khác nhau. Vì vậy, mỗi khi bạn muốn chạy một thuật toán

trên một tập dữ liệu, tất cả những gì bạn phải làm là cài đặt và tải các gói cần thiết

bằng một lệnh duy nhất. Ví dụ về các thư viện được xây dựng trước bao gồm numPy,

Keras, Tensolflow, Pytorch,...

Python có thể chạy trên nhiều nền tảng bao gồm Windows, MacOS, Linux, ...

Trong khi chuyển mã từ nền tảng này sang nền tảng khác, bạn có thể sử dụng các gói

như Pylnstaller sẽ xử lý mọi vấn đề phụ thuộc.

Python có một cộng đồng người dùng khổng lồ luôn hữu ích khi chùng ta gặp phải

vấn đề mã hóa. Ngoài lượng người hâm mộ đông đảo, Python có nhiều cộng đồng,

nhóm và diễn đàn nơi các lập trình viên đăng các lỗi của họ và giúp đỡ lẫn nhau.

Triển khai các ứng dụng trí tuệ nhân tạo liên quan đến hàng tấn thuật toán. Nhờ hỗ

trợ của Pythons cho các gói được xác định trước, chúng ta không cần phải code các

thuật toán. Và để làm cho mọi thứ dễ dàng hơn, học Python cung cấp phương pháp

“kiểm tra khi code” giúp làm giảm số lượng code bạn phải gõ.

12

Page 13: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

3.2. Thư viện OpenCV

Thư viện OpenCV:

OpenCV viết tắt của Open Source Computer Vision được xem là một trong

những thư viện mã nguồn mở hàng đầu cho việc xử lý ảnh theo thời gian thực.

OpenCV chính thức được ra mắt đầu tiên vào năm 1999, OpenCV là thư viện

mã nguồn mở miễn phí cho cả học thuật và thương mại.

OpenCV hỗ trợ đa nền tảng gồm Windows, Linux, Mac OS, iOS và Android.

OpenCV hỗ trợ ngôn ngữ lập trình C/C++, Python và Java.

OpenCV được viết bằng C / C ++ và tích hợp OpenCL.

Thư viện có hơn 2500 thuật toán được tối ưu hóa.

3.3. Bài toán nhận dạng khuôn mặt

Nhận dạng là một bài toán quan trọng trong lĩnh vực Computer Vision, thuật toán

nhận dạng khuôn mặt là một bài toán khá phức tạp, nó đòi hỏi một loạt các vấn đề cần

thực hiện:

Việc làm đầu tiên đó là cần phải tìm kiếm tất cả những khuôn mặt có trong bức

hình

Tập trung vào từng khuôn mặt chắc chắn rằng bạn có thể nhận ra cùng một

người từ các góc nhìn hoặc điều kiện sáng tối khác nhau.

Lựa chọn những đặc trưng đặc trưng trên từng khuôn mặt -VD như đôi mắt to,

khuôn mặt dài...

So sánh những đặc trưng này với những người khác để chúng ta có thể biết

được tên của họ.

Giải quyết bài toán từng bước, ở mỗi bước sẽ có các thuật toán học máy khác

nhau:

13

Page 14: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

3.3.1. Tìm kiếm khuôn mặt(Face Detection):

Có thể thấy rõ đầu tiên chúng ta cần xác định vị trí của khuôn mặt có trong bức

hình trước khi xác định người đó là ai.

Để tìm kiếm khuôn mặt trong một bức hình, ta cần làm cho bức hình trở thành ảnh

đen trắng. Về cơ bản thì một bức ảnh màu không có tác dụng gì lắm cho việc xác định

khuôn mặt

Sau đó, vẽ các vector chỉ hướng tối dần đi của các điểm ảnh của bức ảnh đen trắng

đó. Tạo ra các khung tỉ lệ để xác định các đặc điểm cơ bản của khuôn mặt thông qua

các vecto này

3.3.2. Trích rút đặc trưng (Feature Extraction):

Sau khi phát hiện ra khuôn mặt trong bức ảnh, chúng ta tiến hành trích rút những

đặc trưng của khuôn mặt. Bước này trích xuất ra một vector đặc trưng đại diện cho

một khuôn mặt. Nó phải đảm bảo được tính duy nhất của một khuôn mặt.

Có những khuôn mặt thì nghiêng sang trái, nghiêng sang phải, khiến bạn chỉ nhìn

thấy một phần khuôn mặt của họ, hay có những bức hình thì lại hơi nghiêng đầu, khiến

cho bức ảnh bị lệch khỏi khung nhìn. Do đó, chúng ta chúng ta cần phải cố gắng làm

cong bức hình để đôi mắt, bờ môi luôn ở vị trí mẫu trong ảnh. Điều này sẽ làm cho

việc so sánh khuôn mặt ở các bước tiếp theo dễ dàng hơn nhiều.

Để làm điều này, chúng ta sẽ sử dụng một thuật toán được gọi là face landmark

estimation. Ý tưởng cơ bản của thuật toán là tìm ra 68 điểm cụ thể (được gọi là mốc)

tồn tại trên mỗi khuôn mặt - đầu cằm, cạnh bên ngoài của mỗi mắt, cạnh bên trong của

mỗi lông mày ... Sau đó, chúng ta sẽ dùng một thuật toán machine learning để training

để có thể tìm thấy 68 điểm cụ thể trên từng khuôn mặt.

Sau đó, chỉ cần xoay và cắt ảnh để mắt và miệng được căn giữa là xong.

14

Page 15: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Hình 1: 68 điểm trong thuật toán face landmark estimation

3.3.3. Nhận dạng khuôn mặt (Face Recognition):

Với hình ảnh đầu vào sau khi phát hiện ra khuôn mặt, trích rút các đặc trưng của

khuôn mặt và đem so sánh các đặc trưng này với cơ sở dữ liệu khuôn mặt.

Phương pháp tiếp cận đơn giản nhất để nhận biết khuôn mặt là so sánh trực tiếp

khuôn mặt mà chúng ta đã tìm được ở bước 2 với tất cả các hình ảnh của những người

đã được training trước đó trong cơ sở dữ liệu. Kiểm tra các đặc điểm trên khuôn mặt

rồi từ đó nhận diện được khuôn mặt người trong webcam là ai.

15

Page 16: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

3.4. Flask Templates Python

Flask là một Web Framework rất nhẹ của Python, dễ dàng giúp người mới bắt

đầu học Python có thể tạo ra website nhỏ. Flask cũng dễ mở rộng để xây dựng các

ứng dụng web phức tạp.

Hình 2: Flask là gì?

Flask có nền tảng là Werkzeug và Jinja2 và nó đã trở thành một trong

những Web Framework phổ biến nhất của Python

Fask Framework là một bộ lưu trữ giúp các lập trình viên tạo ra các trang web dễ

dàng hơn, có thể mở rộng, hiệu quả và có thể bảo trì bằng cách cung cấp code hoặc

tiện ích mở rộng có thể sử dụng lại cho các nhiệm vụ phổ biến.

16

Page 17: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Hình 3: Cách hoạt động của Flask Framework

Flask cung cấp cho các lập trình viên khả năng tùy biến khi phát triển ứng dụng

web, nó cung cấp cho bạn các công cụ, thư viện và cơ chế cho phép bạn xây dựng một

ứng dụng web nhưng nó sẽ không thực thi bất kỳ sự phụ thuộc nào hoặc cho bạn biết

dự án sẽ như thế nào.

Ứng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

nó vẫn cho phép các lập trình viên cơ hội sử dụng một số tiện ích mở rộng để thêm

nhiều chức năng hơn cho ứng dụng web.

Và trong mọi trường hợp, khi một lập trình viên sử bất kỳ framework nào, nó đều

có ưu điểm và nhược điểm, flask cũng vậy:

Tốc độ

Hỗ trợ cho NoQuery

Độ phức tạp tối thiểu

Chủ nghĩa tối giản tuyệt đối

Không có ORM, dễ dàng kết nối với tiện ích mở rộng

Trình gỡ lỗi được nhúng trong trình duyệt

Mã ngắn và đơn giản trong số các bộ xương Python khác

17

Page 18: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Điểm nổi bật khi sử dụng Flask để lập trình web là bạn sẽ rất ít bị phụ thuộc bên

thứ 3, do đó đề phòng được các lỗi bảo mật.

Bạn có thể kiểm soát mọi thứ khi sử dụng Flask. Và quan trọng, học Flask giúp

bạn hiểu các cơ chế bên trong các Framework khác. Đây là tiền đề tốt để bạn có thể

nắm giữ nhiều công nghệ hơn.

Mặc dù nhược điểm của việc sử dụng Flask là đôi khi bạn phải tự mình làm nhiều

việc hơn hoặc cần tự mình gọi thêm các tiện ích mở rộng.

18

Page 19: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Chương 4: Xây dựng ứng dụng và triển khai cài đặt4.1. Cài đặt OpenCV và các công cụ phát triển

4.1.1. Cài đặt công cụ Visual Studio Code:

Visual Studio Code là một trình biên soạn mã nguồn nhẹ nhưng mạnh mẽ, tích hợp

các tính năng của một môi trường phát triển chuyên nghiệp như tự gợi ý, trình gỡ lỗi ...

cùng với một hệ sinh thái các extensions cho phép mở rộng hơn các tính năng có

sẵn. Hiện Visual Studio Code hỗ trợ cho cả Windows, macOS và Linux

Tải Visual Studio Code 1.12 theo đường dẫn: https://code.visualstudio.com

Hình 4: Cài đặt Visual Studio Code

Sau khi tải xong và tiến hành cài đặt, ta sẽ dùng Visual Code Studio để xây dựng

ứng dụng

4.1.2. Tiến hành cài đặt Python và Anaconda

Anaconda là một trình quản lý gói nguồn mở, trình quản lý môi trường và phân

phối các ngôn ngữ lập trình Python và R. Nó đã tích hợp Python trong này kèm theo

chương trình quản lý các thư viện của Python. Bạn cũng có thể cài các phần mềm

IDE dành cho Python/R thông qua đây.

Các bạn truy cập trang web chính thức của anaconda để download bộ cài đặt:

https://www.anaconda.com/download/

19

Page 20: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Sau khi cài đặt xong Anaconda, tiến hành cài đặt python và đưa đường dẫn python

trong Anaconda vào trong $PATH của Windows

4.1.3. Cài đặt thư viện OpenCV

Tiến hành cài đặt OpenCV với ngôn ngữ lập trình Python

Trước khi cài đặt thì mình kiểm cần phải kiểm tra version của Python hiện tại của

PC của mình bằng câu lệnh: python –version

Hình 5: Kiểm tra version Python

Pip là hệ thống quản lý các package của Python. Mình có thể tìm kiếm các

package mà pip hỗ trợ thông qua lệnh pip search.

pip search ”opencv”

Hình 6: pip search “opencv”

Như hình trên mình thấy, pip hiện tại hỗ trợ package opencv-python (phiên bản

3.4.2.16), nên mình có thể cài đặt OpenCV cho Python thông qua pip. Sử dụng

lệnh pip install để cài đặt OpenCV.

pip install opencv-python==3.4.2.16

20

Page 21: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Hình 7: install opencv-python

Kiểm tra lại, nếu có thể import được OpenCV mà không báo lỗi thì việc cài đặt

thành công.

Import cv2

Hình 8: Kiểm tra cài đặt opencv

4.1.4. Cài đặt sqlite:

Hình 9: Cài đặt sqlite

21

Page 22: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Tạo CSDL FaceBase với bảng People

Hình 10: Tạo bảng People trong cơ sở dữ liệu

4.1.5. Cài đặt Flask:

Nếu bạn đã cài Python và thiết lập môi trường thành công. Bạn có thể sử dụng

command sau đây để cài Flask:

Pip install Flask

Hình 11: Kiểm tra cài đặt Flask

4.2.Xây dựng ứng dụng

4.2.1. Mô hình tổng quan

Mô hình tổng thể của hệ thống bao gồm:

- Tạo file GetData.py dùng để kết nối CSDL

- Tạo file RecognizerData.py để nhận diện

- Tạo file Train.py để training dữ liệu

- Tạo trang web để quản lí, hiển thị dữ liệu

22

Page 23: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

4.2.2. Xây dựng chi tiết ứng dụng

4.2.2.1. Kết nối sqlite để tạo và cập nhật dữ liệu các khuôn mặt:import numpy as npimport cv2

import sqlite3import os

def insertOrUpdate(id, name, age, job):

    conn = sqlite3.connect("E:/BT/DACN/FaceBase.db")    print("Opened database successfully")

    query = "SELECT * FROM people WHERE ID="+str(id)    cursor = conn.cursor()

    cursor = conn.execute(query)    isRecordExist=0

    for row in cursor:        isRecordExist=1

    if(isRecordExist==1):        query="UPDATE people SET Name='"+str(name)+"', Age=

"+str(age)+", Job='"+str(job)+"' WHERE ID="+str(id)    else:

        query="INSERT INTO people(ID, Name, Age, Job) VALUES("+str(id)+",'"+str(name)+"',"+str(age)+",'"+str(job)+"')"

    print(query)    conn.execute(query)

    conn.commit()    conn.close()

#load thu vien nhan dien khuon mat dafault opencv

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')cap = cv2.VideoCapture(0)

#insert dbid = input("enter your ID: ")

name = input('enter your Name: ')age = input("enter your Age: ")

job = input('enter your Job: ')#lay du lieu tu camera

sampleNum = 023

Page 24: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

while(True):    ret, frame = cap.read()

    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')

        #tang id        sampleNum +=1

        cv2.imwrite('dataSet/User.'+str(id)+'.'+str(sampleNum)+'.jpg', gray[y:y+h,x:x+w])

    cv2.imshow('frame', frame)

    cv2.waitKey(1)    if sampleNum>100:

        cap.release()        cv2.destroyAllWindows()

        break;insertOrUpdate(id, name, age, job)

cap.release()cv2.destroyAllWindows()

24

Page 25: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Dữ liệu lưu vào sqlite

Hình 12: Dữ liệu được lưu trong Sqlite

4.2.2.2. Tạo lớp training dữ liệu:import cv2

import numpy as npimport os

from PIL import Image

#training hinh anh nhan dienrecognizer = cv2.face.LBPHFaceRecognizer_create()

path = 'dataSet'

def getImageWithID(path):    imagePaths = [os.path.join(path, f) for f in os.listdir(path)]

    faces = []    IDs = []

    for imagePath in imagePaths:

        faceImg = Image.open(imagePath).convert('L')        faceNp = np.array(faceImg,'uint8')

        #print(faceNp)        ID = int(os.path.split(imagePath)[-1].split(".")[1])

        #add to array

25

Page 26: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

        faces.append(faceNp)        IDs.append(ID)

        cv2.imshow("training", faceNp)        cv2.waitKey(10)

    return IDs, faces

Ids, faces = getImageWithID(path)recognizer.train(faces,np.array(Ids))

if not os.path.exists('recognizer'):    os.makedirs('recognizer')

recognizer.save('recognizer/trainingData.yml')cv2.destroyAllWindows()

Hình 13: Ảnh để train

4.2.2.3. Lớp RecognizerData.py để nhận diệnimport cv2

import numpy as npfrom PIL import Image

import osimport sqlite3

#training hinh anh nhan dien vs thu vien

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

26

Page 27: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('recognizer/trainingData.yml')

#get profile by iddef getProfile(id):

    conn = sqlite3.connect('E:/BT/DACN/FaceBase.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#user webcam

cap = cv2.VideoCapture(0)fontface = cv2.FONT_HERSHEY_SIMPLEX

while(True):

    ret, frame = cap.read()    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    #ket hop webcam voi face_cascade de nhan dien khuon mat    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)        roi_gray = gray[y:y+h,x:x+w]

        id, confidence = recognizer.predict(roi_gray)

        if confidence < 40:            profile = getProfile(id)

            if(profile!= None):                cv2.putText(frame,"Name: "+str(profile[1]),(x + 10, 

y + h + 30), fontface, 1, (0,255,0),2)                cv2.putText(frame, "Age: " + str(profile[2]), (x,y+h

+60), fontface, 1, (0,255,0) ,2)                cv2.putText(frame, "Job: " + str(profile[3]), (x,y+h

+90), fontface, 1, (0,255,0) ,2)            else:

27

Page 28: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

                cv2.putText(frame,"Unknown", (x+10, y+h+30), fontface, 1, (0,0,255),2)

    cv2.imshow('photograph', frame)    if(cv2.waitKey(1)== ord('q')):

        breakgetProfile(id)

cap.release()cv2.destroyAllWindows()

28

Page 29: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

4.3. Kết quả:

Hình 14: Giao diện trang chủ web

Hình 15: Đăng ký

29

Page 30: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Hình 16: Hiển thị danh sách những người trong bảng dữ liệu

Hình 17: Thêm người mới vào bộ dữ liệu

Hình 18: Kết quả nhận diện

30

Page 31: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

Chương 5: Kết luận và định hướng phát triển5.1. Kết luận:

Sau quá trình tìm hiểu môi trường Anaconda, python, Flask Framework và thư viện

Opencv cùng một số kĩ thuật có liên quan, đề tài đã đạt được mục tiêu đề ra là xây

dựng hệ thống giám sát hoạt động của cán bộ nhân viên và sinh viên qua nhận diện

khuôn mặt.

Vì kiến thức học được còn ít nên ứng dụng chỉ mới ở giai đoạn ban đầu. Còn rất

nhiều hạn chế và thứ cần phát triển.

Một số hạn chế:

Tỉ lệ nhận diện đúng chưa quá cao

Quá trình training dữ liệu còn lâu

5.2. Định hướng phát triển:

Để chương trình có thể được ứng dụng vào thực tế thì cần giải quyết các khuyết

điểm của ứng dụng như xây dựng bộ dữ liệu nhiều hơn nữa

Nghiên cứu các kĩ thuật xử lí ảnh, cải thiện hiệu suất cũng như tỉ lệ chính xác của

việc nhận dạng khuôn mặt.

31

Page 32: MỞ ĐẦU - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · Web viewỨng dụng web có thể là blog, trang web thương mại hoặc một số trang web khác,

DANH MỤC TÀI LIỆU THAM KHẢO:1. Xây dựng hệ thống kiểm soát nhận dạng khuôn mặt với OpenCV Dlib và Deep

Learning

https://viblo.asia/p/xay-dung-he-thong-kiem-soat-nhan-dang-khuon-mat-voi-opencv-

dlib-va-deep-learning-4P8566ma5Y3

2. Python cv2.VideoCapture() Example

https://www.programcreek.com/python/example/85663/cv2.VideoCapture

3. Xây dựng hệ thống kiểm soát nhận dạng khuôn mặt với OpenCV

https://techtalk.vn/xay-dung-he-thong-kiem-soat-nhan-dang-khuon-mat-voi-opencv-

dlib-va-deep-learning.html

4. Hướng dẫn lập trình với Flask Framework

https://thaitpham.com/huong-dan-lap-trinh-flask-phan-1-hello-world/

32