mỞ ĐẦu - udn.vndaotao.vku.udn.vn/uploads/2020/12/1609250191-bcdacn... · web viewỨng dụng...
TRANSCRIPT
ĐẠ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
ĐẠ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
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
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
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
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
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
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
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
- 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
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
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
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
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
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
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
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
Đ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
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
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
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
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
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
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
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
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
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
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
4.3. Kết quả:
Hình 14: Giao diện trang chủ web
Hình 15: Đăng ký
29
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
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
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