Dựa trên tinh thần đó, em đã thực hiện đề tàiứng dụng công nghệ trí tuệ nhân tạo – AI nhận dạng khuôn mặt để điểm danhnhân viên vào làm việc trong các công ty, nhà máy,… Nếu như trước đ
Trang 1Xử lý ảnh nhận diện khuôn mặt ứng dụng điểm danh nhân viên trong nhà máy, có code
Trang 2DANH MỤC CÁC CHỮ VIẾT TẮT IX
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 10
1.1 GIỚI THIỆU ĐỀ TÀI 10
1.2 ĐỐI TƯỢNG NGHIÊN CỨU 10
1.3 PHẠM VI NGHIÊN CỨU 11
1.4 DỰ KIẾN KẾT QUẢ 11
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 12
2.1 ESP32–CAM AI-THINKER 12
2.1.1 ESP32-CAM AI-THINKER LÀ GÌ? 12
2.1.2 ỨNG DỤNG CỦA ESP32-CAM LÀ GÌ? 12
2.2 NODE-RED 12
2.2.1 TỔNG QUANG VỀ NODE – RED 12
2.2.2 MỘT SỐ LỆNH CƠ BẢN: 13
2.3 NGÔN NGỮ LẬP TRÌNH JAVASCRIPT 15
2.3.1 JAVASCRIPT LÀ GÌ? 15
2.3.2 ỨNG DỤNG CỦA JAVASCRIP? 15
2.4 NGÔN NGỮ LẬP TRÌNH PYTHON VÀ THƯ VIỆN OPEN-CV? 15
2.4.1 PYTHON LÀ GÌ? 15
2.4.2 THƯ VIỆN OPEN-CV 15
2.5 THUẬT TOÁN MTCNN VÀ FACENET 16
2.5.1 MTCNN LÀ GÌ? 16
2.5.2 FACENET LÀ GÌ? 16
2.6 KHẢI NIỆM VỀ XỬ LÝ ẢNH 16
2.6.1 XỬ LÝ ẢNH LÀ GÌ? 16
2.6.2 CÁC KHÁI NIỆM TRONG XỬ LÝ ẢNH 17
Trang 3CHƯƠNG 3 GIẢI PHÁP THỰC HIỆN 19
3.1 XỬ LÝ ẢNH 19
3.1.1 IMPORT CÁC THƯ VIỆN LIÊN QUAN 19
3.1.2 THU THẬP DỮ LIỆU ĐẦU VÀO 20
3.1.3 TRAINNING CHO MÁY HỌC 21
3.1.4 NHẬN DIỆN KHUÔN MẶT 22
3.2 ĐƯA DỮ LIỆU TỪ PYTHON LÊN MQTT 22
3.3 NHẬN DỮ LIỆU TỪ MQTT ĐƯA LÊN NODE-RED 22
CHƯƠNG 4 KẾT QUẢ MÔ PHỎNG 24
4.1 KẾT QUẢ NHẬN DIỆN KHUÔN MẶT 24
CHƯƠNG 5 KẾT LUẬN 26
5.1 KẾT LUẬN 26
5.1.1 ƯU ĐIỂM 26
5.1.2 NHƯỢC ĐIỂM 26
5.2 HƯỚNG PHÁT TRIỂN 26
TÀI LIỆU THAM KHẢO 27
PHỤ LỤC A CODE CHƯƠNG TRÌNH 28
Trang 4Hình 3-2 Thu thập dữ liệu 20
Hình 3-3 Trainning cho máy học 21
Hình 3-4 Chương trình nhận diện khuôn mặt 22
Hình 3-5 Chương trình đẩy dữ liệu lên Node-Red bằng MQTT 22
Hình 3-6 Dữ liệu đã được nhận trên Node-Red 23
Hình 3-7 Cấu hình khối “MQTT IN” 23
Hình 4-1 Kết quả nhận diện khuôn mặt 24
Hình 4-2 Kết quả chuỗi truyền lên Node-Red 25
Hình 4-3 Kết quả trên Google Sheet 25
Trang 5DANH MỤC CÁC CHỮ VIẾT TẮT
MQTT Message Queue Telemetry Transport
MTCNN Multi-task Cascaded Convolutional Networks
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1 GIỚI THIỆU ĐỀ TÀI
Trong thời đại cách mạng công nghiệp 4.0 như hiện này, việc ứng dụng trí tuệ nhântạo vào đời sống để phục vụ các nhu cầu của con người, công ty, xí nghiệp, nhà máy
là vô cùng quan trọng Điều đó giúp chúng ta tiết kiệm nhiều thời gian hơn, năngsuất vận hành được cãi tiến tốt hơn Dựa trên tinh thần đó, em đã thực hiện đề tàiứng dụng công nghệ trí tuệ nhân tạo – AI ( nhận dạng khuôn mặt) để điểm danhnhân viên vào làm việc trong các công ty, nhà máy,… Nếu như trước đây, việc điểmdanh thường ngày phải thực hiện quét vân dẫn đến việc nhân viên phải xếp hàng,tốc độ nhận diện khá chậm gây mất nhiều thời gian đối với mọi người Thì giờ đây,với đề tài nhận diện khuôn mặt để điểm danh này có thể giải quyết triệt để các vấn
đề trên Các công nhân viên cứ đi thằng vào cổng công ty mà không cần phải quamột trạm điểm danh nào cả Camera sẽ tự theo dõi, nhận dạng và truy xuất dữ liệu
ra vào và cập nhận lên Google Sheet và người quản lý sẽ dễ dàng lấy và truy suất dữliệu này vào cuối ngày
1.2 ĐỐI TƯỢNG NGHIÊN CỨU
Đối với đề tài này đối tượng nghiên cứu là:
- ESP32–Cam AI-Thinker với bộ xử lý chính là module ESP32 và CameraOV2640
- Node-Red để xây dựng hệ thống Google Sheet nhận dữ liệu điểm danh
- JavaScript nhận và chuyển dữ liệu từ máy tính lên Server bằng kỹ thuật MQTT
- Python và Open-CV dùng để nhận diện khuôn mặt và chuyển dữ liệu lên hệthống
1.3 PHẠM VI NGHIÊN CỨU
Với đề tài ở mức nghiên cứu ban đầu thì việc yêu cầu về sự ổn định và độ chínhxác cần được ưu tiên lên hàng đầu nên em thực hiện việc thu tập dữ liệu hình ảnh đểtraining cho máy tính trong khoảng bốn người bằng thuật toán MTCNN (Multi-task
Trang 7Trang 7
Cascaded Convolutional Networks) và Facenet, việc thu nhận, truy xuất dữ liệuđiểm danh thực hiện hoàn toàn trên Google Sheet được kết nối với nền tảng Node-Red
1.4 DỰ KIẾN KẾT QUẢ
Sau khi hoàn thành đề tài, kết quả sẽ cho ra một hệ thống nhận diện khuôn mặttrên môi trường lập trình Pycharm được kết nối với nền tảng Node-Red thông quacông cụ truyền thông MQTT, sau khi chạy lệnh hệ thống sẽ nhận diện khuôn mặtthông qua Webcam trên máy tính hoặc ESP32-CAM và chuyển dự liệu nhận dạngđược này lên Node-Red, từ đó em sử dụng các công cụ của Node-Red để chuyển dữliệu vào hệ thống Google Sheet
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.5 ESP32–CAM AI-THINKER
1.1.1 ESP32-CAM AI-THINKER LÀ GÌ?
ESP32 – Cam là mạch thu phát wiffi tích hợp với bộ xử lý chính là module ESP32
và Camera OV2640 để hổ trợ việc lấy ảnh và truyền ảnh
1.1.2 ỨNG DỤNG CỦA ESP32-CAM LÀ GÌ?
Trang 8ESP32-CAM có tác dụng như một camera di động giúp người dùng dễ dàng kết nốivới các thiết bị khác để chụp ảnh, livestream,… hỗ trợ chuyền hình ảnh thu được từmạch qua các thiết bị khác để lấy thông tin, ứng dung trong việc giám sát an ninh,theo dỏi hệ thống từ xa, hoặc ứng dụng để xử lý ảnh như trong đề tài này.
1.6 NODE-RED
1.1.3 TỔNG QUANG VỀ NODE – RED
Node-red là nền tảng lập trình kéo thả dựa trên nền tảng JavaScript giúp kết nối cácthiết bị phần cứng với Internet, nền tảng cũng cấp các công cụ xử lý dữ liệu như: sốliệu, hình ảnh, tài liệu,… cho ra kết quả của thuật toán như những nền tảng lập trìnhkhác Ngoài ra, Node-Red còn hỗ trợ xây dựng khối giao diện giáp sát, để giám sát
hệ thống dữ liệu giúp người dùng quản lý thông tinh một cách chủ động
Hình 2 - 1: Giao diện Node-RED1.1.4 MỘT SỐ LỆNH CƠ BẢN:
Trang 9Trang 9
1.1.1.1 Inject
Khối Inject dùng để đưa dữ liệu vào chương trinh bằng cách thủ công hoặc tự động(cho phép cài đặt thời giản tải dữ liệu lên), loại dữ liệu này rất đa dạng, có thể làmột tín hiệu, một chuổi, hình ảnh, hoặc đối tượng JavaScript, thậm chí là thời gianhiện tại
1.1.1.2 Debug
Debug là là khổi hiển thi kết quả quả của một chương trình, kết quả xuất ra kết quả
ở kiểu dữ liệu khác nhau như: mảng, chuổi, thời gian,…
1.1.1.3 Image
Image là một trong những công cụ xử lý hình ảnh của node-red, giúp hỗ trợ lậptrình viện lấy ảnh, xử lý, chuyển định dạng (image, buffer, base 64) theo mongmuốn
1.1.1.4 Function
Function là công cụ quan trọng nhất của Node-Red, giúp người dùng xử lý mọi tác
vụ theo mong muốn với ngôn ngữ lập trình JavaSCript
1.1.1.5 Change
Khối Change thực hiện (Set, Change, Move, Delete) thuộc tính của dữ liệu
1.1.1.6 Switch
Khối Switch có chức năng chuyển tín hiệu đi dựa trên tín hiệu đưa vào và theo trình
tự sắp xếp giúp thay đổi mục đích xử lý dữ liệu của người dùng theo từng trườnghợp cụ thể
Trang 101.1.6 ỨNG DỤNG CỦA JAVASCRIP?
Là ngôn ngữ lập trình bật cao, JavaScript được dùng trong nhiều lĩnh vực như: Thiết
kế web, phần mềm giáo sát, làm app,… Mà cụ thể như trong đề tài này, nó đượcdùng để xử lý ảnh ( tính toán kích thước đồ vật )
1.8 NGÔN NGỮ LẬP TRÌNH PYTHON VÀ THƯ VIỆN OPEN-CV?
1.1.7 PYTHON LÀ GÌ?
Python là ngôn ngữ lập trình đa năng với câu trúc đơn giản, ít cú pháp, dễ dàng thaotác, được ra đời vào năm 1980 do Guido Van Rossum sáng tạo ra Với hệ thống thưviện khổng lồ, Python có thể giải quyết mọi vấn đề từ đơn giản đến phức tạp nhất
Ví dụ như: tạo một trang Web, xây dựng app, lập trình game,… đặc biệt hơn vớiviệc có trong mình nguồn thư viện Open-CV, Python là công cụ lý tưởng nhất đểthực hiện các dự án liên quan đến xử lý ảnh, nhận diện khuôn măt, các đề tài về tríthông minh nhân tạo – AI
1.1.8 THƯ VIỆN OPEN-CV
OpenCV (Open Source Computer Vision Library) được ra đời vào năm 1999 là thưviện nguồn mở được sử dụng trong các dự án Computer Vision và MachaineLearning Các module thường được dùng trong OpenCV là:
- Core functionality (core)
Trang 11Trang 11
- Image Processing (imgproc)
- Video Analysis (video)
- Camera Calibration and 3D Reconstruction (calib3d)
- 2D Features Framework (features2d)
1.9 THUẬT TOÁN MTCNN VÀ FACENET
1.1.9 MTCNN LÀ GÌ?
MTCNN (Multi-task Cascaded Convolutional Networks): Là CNN bao gồm 3 mangxếp chồng lên nhau và hoạt động để thực hiện nhận diện khuôn mặt Mỗi mạng có cấu trúc khác nhau và các chức năng khác nhau trong từng nhiệm vụ cụ thể Kết quảđầu ra của thuật toán MTCNN là là các vị trí đặt điểm của khuôn mặt như là: mắt, mũi, miệng,…
1.1.10 FACENET LÀ GÌ?
Facenet là một module được tạo bởi Google vào năm 2015, với chức năng xuất ra 1vector bao gồm 128 đặc điểm khi ta đưa vào một bức ảnh đúng kính thước của nó,thường được ứng dụng để nhận biết các đặc điểm trên khuôn mặt Sau khi cho rađược vector đặc điểm khuôn mặt, ta dùng SVM để nhóm các vector đó thành mộtnhóm để có dữ liệu so sánh xem vector đó là của ai
1.10 KHẢI NIỆM VỀ XỬ LÝ ẢNH
1.1.11 XỬ LÝ ẢNH LÀ GÌ?
Xử lý ảnh là một phần trong xử lý số tín hiệu với tín hiệu xử lý là hình ảnh, là mộtlĩnh vực đang được quan tâm trong những năm gần đây vì sự hiệu quả trong việcứng dụng của nó Xử lý ảnh gồm 4 lĩnh vực chính: xử lý nâng cao chất lượng ảnh,nhận dạng ảnh, nén ảnh và truy vấn ảnh
1.1.12 CÁC KHÁI NIỆM TRONG XỬ LÝ ẢNH
- Pixel : Trong ảnh kỹ thuật số người ta thường dùng pixel để nói về một điểmảnh nào đó (với pixel là viết tắt của picture và element) là điểm vật lý trong một
Trang 12hình ảnh Mỗi điểm ảnh là một mẫu của hình ảnh ban đầu, nhiều điểm ảnh thườngđại diện chính xác hơn của bản gốc.
Hình 2 - 2: Pixel
Hệ màu RGB: nó là viết tắt của 3 dãy mà Red, Green, Blue, được ra đời từ những năm 1953, nó sử dụng để làm tiêu chuẩn cho tivi màu cũng như các màn hình Internet Khi 3 màu Red (Đỏ), Green (Xanh lá) và Blue (Xanh dương) hợp lại với theo tỉ lệ 1:1:1 sẽ tạo thành màu trắng (màu sáng hơn màu gốc).Hệ màu RGB hoạt động bằng cách phát các điểm sáng màu khác nhau để tạo thành hình ảnh, màu sắc trên nền đen như nền tivi, máy tính, máy ảnh,
Khi biểu diễn dưới dạng số, các giá trị RGB trong mô hình thông thường được ghibằng số nguyên ( 0 và 255), mỗi số đại diện cho cường độ màu, cứ như thế ta biểudiễn như sau:
255 x 255 x 255: màu trắng
0 x 0 x 0: màu đen
0 x 255 x 0: xanh lục
Trang 13Trang 13
Hình 2 - 3: Hệ màu RGB
CHƯƠNG 2 GIẢI PHÁP THỰC HIỆN
Để giải quyết được đề bài đặt ra, trước tiên em sử dụng ngôn ngữ lập trình python
và thư viên OpenCV để giải quyết bài toán nhận diện khuôn mặt theo trình tự ( nhậptên nhân viên, tiến hành lấy ảnh để thu thập dữ liệu bằng Webcam, Trainning chomáy tính) Sau khi máy tính đã học xong chúng ta có thể tiến hành điểm danh, khícamera máy tính nhận diện được danh tính người trong camera sẽ tiến hành đẩychuổi dữ liệu nhân viên lên Node-Red bằng module truyền thông MQTT Tiếp theo,khi dữ liệu được truyền lên sẽ triễn khai cắt chuỗi và truyền dữ liệu vào GoogleSheet bằng công cụ Gsheet của Node-Red
2.1 XỬ LÝ ẢNH
Trang 142.1.1 IMPORT CÁC THƯ VIỆN LIÊN QUAN
- Đoạn lệnh này yêu cầu nhân viên khai báo họ tên của mình, sau đó thực hiện
việc lấy ảnh để xây dựng dữ liệu thông qua đoạn code cap =
Trang 15Trang 15
cv2.VideoCapture(0) Vòng lập while sẽ tiến hành chụp ảnh liên tục cho đếnkhi lấy đủ 50 bức ảnh
2.1.3 TRAINNING CHO MÁY HỌC
Hình 3-3 Trainning cho máy học
- Ở phần code này sẽ chuẩn hóa dữ liệu hình ảnh về một khoảng cố định, hàm Trans(img) sẽ đưa pixel của ảnh về khoảng [-1;1] nhưng vẫn mô tả được hình ảnh gốc của nó
- Tiếp theo chúng ta sữ dụng cấu trúc inceptionResentV1 của Facenet để cho ra Vector 512 đặc điểm của một bức ảnh
- Dòng lệnh for in os.listdir(IMG_PATH) dụng để tạo lập các folder chứa các hình ảnh đã được thu thập và xử lý User và list names là tên và danh sách tên của người dùng trong các folder.Mỗi folder chúng ta sẽ xét toàn bộ ảnh trong đóbao gồm 50 bức ảnh Như vậy ta có tổng cộng 50 embeds cho mỗi cá nhân Nhưng thuật toán chỉ cần 1 embeds cho một cá nhân Vì vậy, việc dùng hàm torch.cat() sẽ đưa danh sách này về thành 1 tensor 2 chiều, sử dụng
torch.mean() để lấy giá trị trung bình của toàn bộ embeds Và kết quá cuối cùngứng với giá trị name của user
Trang 162.1.4 NHẬN DIỆN KHUÔN MẶT
Hình 3-4 Chương trình nhận diện khuôn mặt
- Đầu tiền dùng lệnh lấy khung hình từ camera của máy tính.
- Khoanh vùng tọa độ Roi của khuôn mặt hiển thị thông tin của người được
quét khuôn mặt
- Truy xuất dữ liệu Facelist và usernames từ các file lưu ở trên bằng hàm
load_facelist()
- Sau đó cho khung ảnh vào hàm detect của MTCNN để trả về tọa độ các
khung ROI có chứa khuôn mặt và trích xuất khuôn mặt bằng câu lệnh extract_face(bbox,frame)
2.2 ĐƯA DỮ LIỆU TỪ PYTHON LÊN MQTT
Hình 3-5 Chương trình đẩy dữ liệu lên Node-Red bằng MQTT
- Dòng này giúp đẩy chuỗi tên người nhận diện lên broker.hivemq.com.
2.3 NHẬN DỮ LIỆU TỪ MQTT ĐƯA LÊN NODE-RED
- Ta dùng khối “ MQTT IN” để nhận dữ liệu từ python sẽ cho ra kết quả:
Trang 17Trang 17
Hình 3-6 Dữ liệu đã được nhận trên Node-Red
- Cấu hình “MQTT IN” với “broker.hivemq.com” để nhận dữ liệu từ hệ thống.
Hình 3-7 Cấu hình khối “MQTT IN”
Trang 18CHƯƠNG 3 KẾT QUẢ MÔ PHỎNG
3.1 KẾT QUẢ NHẬN DIỆN KHUÔN MẶT
- Nhận diện khuôn mặt và xuất ra chuỗi dữ liệu ( tên nhân viên ) theo như
mong muốn
- Từ đó chuyển dữ liệu chuỗi này lên Node-Red bằng module MQTT
- Sau đó lưu hồ sơ dữ liệu vào Google Sheet bằng công cụ Gsheet
Hình 4-5 Kết quả nhận diện khuôn mặt
Hình 4-6 Kết quả chuỗi truyền lên Node-Red
Trang 19Trang 19
Hình -7 Kết quả trên Google Sheet
CHƯƠNG 4 KẾT LUẬN
4.1 KẾT LUẬN
Trang 20- Kết quả cuối cùng đã hoàn thành được yêu cầu của đề bài: nhận diện được
khuôn mặt và xuất dữ liệu vào Google Sheet
4.1.1 ƯU ĐIỂM
- Chương trình được viêt bằng ngôn ngữ lập trình Python dễ dàng phát triển.
- Hệ thống lưu trữ dữ liệu bằng Google Sheet giúp người dùng có thể tùy biến
định dạng cũng như yêu từng yêu cầu công ty
- Hệ thống đáp ứng chính xác trong môi trường lý tưởng.
4.1.2 NHƯỢC ĐIỂM
- Không nhận diện được ở góc nghiên.
- Mỗi lần quét chỉ nhận diện được lần lượt từng người một.
Trang 21https://wiki.matbao.net/javascript-la-gi-hoc-lap-trinh-javascript-ngon-ngu-cua-[4] bJzKmrVXZ9N