THEN giatri = 1;
ENDIF ENDIF
ENDFOR
Theo vết chuyển động
Giai đoạn theo vết chuyển động của từng đầu học sinh trong video sau khi có kết quả tìm được tập các vùng đầu của học sinh trong lớp học 𝐷𝑑𝑎𝑢. Thực hiện thuật toán theo vết chuyển động các vùng đầu học sinh bởi vì có thể trong một khoảng thời gian các bạn học sinh sẽ dịch chuyển nên cần tìm được vị trí
trung bình cho quá trình điểm danh để cho kết quả chính xác nhất. Vì vùng đầu của học sinh (hình chữ nhật bao vùng đầu) có đặc trưng mức độ đồng nhất mức xám (ở không gian xám) chiếm gần như cả hình chữ nhật bao quanh (có tỷ lệ lớn), do đó nên dùng đặc tính mức độ tương quan để theo vết chuyển động sẽ cho kết quả tốt hơn so với các phương pháp theo vết chuyển động khác. Vì vậy, chúng tôi hiệu chỉnh thuật toán theo vết chuyển động theo mức độ tương quan mức xám thành thuật toán theo vết chuyển động vùng đầu các em học sinh trong lớp học.
Thuật toán theo vết chuyển động tương quan được mô tả như sau trong thuật toán 3.5.
Thuật toán 3.5: thuật toán theo vết chuyển động
INPUT:
Video, frame thứ i (𝐹𝑖)
Vị trí đối tượng ở frame trước đó 𝑝𝑖−1 và tỷ lệ 𝑠𝑖−1
Mô hình biến đổi 𝑋ℎ𝑖𝑛ℎ, 𝑌ℎ𝑖𝑛ℎ và mô hình tỷ lệ
𝑋𝑑𝑎𝑛𝑔, 𝑌𝑑𝑎𝑛𝑔
𝑖−1
𝑖−1
𝑖−1 𝑖−1
OUTPUT:
Ước lượng vị trí đối tượng ở frame thứ t 𝑝𝑖; và tỷ lệ 𝑠𝑖;
Cập nhật mô hình biến đổi 𝑋ℎ𝑖𝑛ℎ, 𝑌ℎ𝑖𝑛ℎ ;
𝑖 𝑖
và mô hình tỷ lệ 𝑋𝑑𝑎𝑛𝑔, 𝑌𝑑𝑎𝑛𝑔;
𝑖 𝑖
Ước lượng biến đổi:
Trích một mẫu biến đổi 𝑧ℎ𝑖𝑛ℎ từ 𝐹𝑖 tại 𝑝𝑖−1 và tỷ lệ
𝑠𝑖−1
Tính tương quan biến đổi 𝑤ℎ𝑖𝑛ℎ với 𝑧ℎ𝑖𝑛ℎ, 𝑋ℎ𝑖𝑛ℎ, 𝑣à 𝑌ℎ𝑖𝑛ℎ
(từ công thức 3.2)
𝑖−1
𝑖−1
Đặt 𝑝𝑖 thành vị trí mục tiêu mà được cực đại hóa
𝑤ℎ𝑖𝑛ℎ
Ước lượng tỷ lệ:
Trích một mẫu tỷ lệ 𝑧𝑑𝑎𝑛𝑔 từ 𝐹𝑖 tại 𝑝𝑖 và tỷ lệ 𝑠𝑖−1
Tính tương quan tỷ lệ 𝑤
với 𝑧
, 𝑋𝑑𝑎𝑛𝑔, 𝑣à 𝑌𝑑𝑎𝑛𝑔
(từ công thức 3.2)
𝑑𝑎𝑛𝑔
𝑑𝑎𝑛𝑔
𝑖−1
𝑖−1
Đặt 𝑠𝑖 thành tỷ lệ mục tiêu mà được cực đại hóa
𝑤𝑑𝑎𝑛𝑔
Cập nhật mô hình:
Trích các mẫu 𝑓ℎ𝑖𝑛ℎ và 𝑓𝑑𝑎𝑛𝑔 từ 𝐹 tại 𝑝𝑖 và 𝑠𝑖
Cập nhật mô hình biến đổi 𝑋ℎ𝑖𝑛ℎ, 𝑌ℎ𝑖𝑛ℎ
(từ công thức 3.1 a,b)
𝑖 𝑖
Cập nhật mô hình tỷ lệ 𝑋𝑑𝑎𝑛𝑔, 𝑌𝑑𝑎𝑛𝑔
(từ công thức 3.1a, công thức 3.1b)
𝑖 𝑖
(3.1 a) (3.1 b) | |
∑𝑑̅𝑋̅̅𝑙𝑍𝑙 𝑤 = ℱ−1 { 𝑙=1 } 𝑌 + 𝜆 | (3.2) |
Có thể bạn quan tâm!
- Sự Kết Hợp Giữa Các Lớp Tích Chập Và Max-Pooling
- Thuật Toán Theo Vết Đối Tượng Dựa Trên Đặc Trưng Tương Quan
- Mô Hình Bài Toán Điểm Danh Học Sinh Dùng Camera
- Danh Sách Các Frame Hình Được Chọn Huấn Luyện Từ 30 Video
- Độ Chính Xác Bài Toán Điểm Danh Phân Nhóm Theo Phòng
- Hệ thống điểm danh học sinh thông qua nhận dạng đầu học sinh kết hợp theo vết chuyển động trong video - 11
Xem toàn bộ 97 trang tài liệu này.
Từ kết quả của thuật toán 3.5 nêu trên sau khi được hiệu chỉnh cho phù hợp với bài toán điểm danh học sinh, chúng tôi có được thuật toán theo vết chuyển động vùng đầu của các đối tượng là vùng đầu của từng học sinh trong lớp học, thuật toán 3.6.
Thuật toán 3.6: thuật toán theo vết chuyển động các đối tượng vùng đầu của từng học sinh trong lớp học
INPUT:
Video với vị trí frame bắt đầu trong video;
𝐷𝑑𝑎𝑢 = {𝐷𝑖/𝑖 = 1. . 𝑁}; Bước nhảy frame f
OUTPUT:
𝑘
𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢 = {𝑇𝑖 𝑖 = 1. . 𝑁} mà 𝑇𝑖 = {𝐷𝑎𝑢𝑖 / 𝑘 = 1. . 𝑀}; (với M là số lượng frame dùng để theo vết)
M = size(video)/f;
FOR u = 1 to N do
𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑢] = 𝐷𝑢;
ENDFOR
𝑝1 = 𝐷𝑑𝑎𝑢 ;
initital(𝑠1);
initial(𝑋ℎ𝑖𝑛ℎ, 𝑌ℎ𝑖𝑛ℎ, 𝑋𝑑𝑎𝑛𝑔, 𝑌𝑑𝑎𝑛𝑔);
1 1 1 1
FOR u = 2 to M do
𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢. 𝑡ℎ𝑒𝑜𝑣𝑒𝑡𝐷𝑎𝑢(𝑣𝑖𝑑𝑒𝑜. 𝑡𝑖𝑚𝐹𝑟𝑎𝑚𝑒(𝑢), 𝑝𝑢−1, 𝑠𝑢−1,
𝑋ℎ𝑖𝑛ℎ, 𝑌ℎ𝑖𝑛ℎ, 𝑋𝑑𝑎𝑛𝑔, 𝑌𝑑𝑎𝑛𝑔);
𝑢−1
𝑢−1
𝑢−1
𝑢−1
FOR i=1 to N do
𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑖] = 𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑖] ∪ 𝑝𝑢[𝑖];
ENDFOR ENDFOR
Tính vị trí tâm trung bình vùng đầu từng học sinh
Bước tiếp theo của bài toán điểm danh, sau khi đã có tập hợp tất cả các vị trí chuyển động vùng đầu của từng học sinh trong lớp học là tìm vị trí tâm trung bình của vùng đầu của từng học sinh trong lớp thông qua khoảng cách Euclide, thuật toán 3.7.
Thuật toán 3.7: Thuật toán tính vị trí tâm trung bình của vùng đầu từng học sinh
INPUT:
𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢
OUTPUT:
𝑖
𝑉𝑖𝑇𝑟𝑖𝑑𝑎𝑢 = {𝑉𝑖𝑇𝑟𝑖𝑎𝑣𝑒 = (𝑎, 𝑏)/𝑖 = 1. . 𝑁, (𝑎, 𝑏) ∈ ℤ2}
FOR i = 1 to N do
FOR j = 1 to M do
𝑎𝑙 = 𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑖].timDau().ViTri1A();
𝑎𝑟 = 𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑖].timDau().ViTri2A();
𝑏𝑙 = 𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑖].timDau().ViTri1B();
𝑏𝑟 = 𝑇ℎ𝑒𝑜𝑉𝑒𝑡𝑑𝑎𝑢[𝑖].timDau().ViTri2B();
TB[𝑖][𝑗] =
𝑎𝑙+𝑎𝑟 , 𝑏𝑙+𝑏𝑟);
(
2 2
ENDFOR
𝑎𝑡𝑜𝑛𝑔 = 0;
𝑏𝑡𝑜𝑛𝑔 = 0;
FOR j = 1 to M do
𝑎𝑡𝑜𝑛𝑔 = 𝑎𝑡𝑜𝑛𝑔 + TB[𝑖][𝑗]. 𝑡𝑎𝑜𝐴();
𝑏𝑡𝑜𝑛𝑔 = 𝑏𝑡𝑜𝑛𝑔 + 𝑇𝐵[𝑖][𝑗]. 𝑡𝑎𝑜𝐵();
ENDFOR
𝑉𝑖𝑇𝑟𝑖
𝑎𝑡𝑜𝑛𝑔 𝑏𝑡𝑜𝑛𝑔
[ ]
𝑖 = ( , );
𝑑𝑎𝑢
𝑀 𝑀
ENDFOR
SapXep(𝑉𝑖𝑇𝑟𝑖𝑑𝑎𝑢);
Điểm danh học sinh trong lớp học
Cuối cùng là bài toán điểm danh học sinh. Để điểm danh học sinh, chúng tôi dùng sơ đồ lớp đã được xây dựng trước bao gồm: vị trí bàn ghế của lớp học được sắp xếp cố định trong phòng học, vị trí học sinh được bố trí ở vị trí bàn ghế theo sơ đồ đã được giáo viên chủ nhiệm sắp xếp và đăng ký với Phòng Công tác học sinh (khi có thay đổi sẽ được báo cáo để cập nhật dữ liệu). Khi có được sơ đồ lớp như mô tả, chúng tôi xây dựng thuật toán 3.8 để điểm danh từng học sinh trong lớp học.
Trong thuật toán này dữ liệu đầu vào là vị trí đầu học sinh 𝑉𝑖𝑇𝑟𝑖𝑑𝑎𝑢, sơ đồ vị trí bàn học trong phòng và danh sách học sinh lớp học. Ta có biến 𝐷𝑆𝑏𝑎𝑛 để xác định học sinh có mặt hay vắng mặt khi hệ thống thực hiện điểm danh. Kết quả được so sánh vị trí tốt nhất (max) của tọa độ vùng đầu của học sinh tại vị trí bàn học sinh ngồi theo sơ đồ. Kết quả xuất ra là số vùng đầu học sinh tốt nhất đếm được, từ đó suy ra số lượng học sinh có mặt và vị trí học sinh vắng mặt (nếu có)
Thuật toán 3.8: thuật toán điểm danh học sinh trong lớp học
INPUT:
Vị trí đầu học sinh 𝑉𝑖𝑇𝑟𝑖𝑑𝑎𝑢 ;
Sơ đồ vị trí bàn học 𝑉𝑖𝑇𝑟𝑖𝑏𝑎𝑛 = {(𝑎, 𝑏, 𝑡𝑎𝑚)/(𝑎, 𝑏) ∈ ℤ2 𝑣à 𝑡𝑎𝑚 ∈ {0,1}} ;
Danh sách học sinh tương ứng 𝐷𝑆𝑏𝑎𝑛 = {(𝐷𝑆𝑡𝑒𝑛, 𝑔𝑖𝑎𝑡𝑟𝑖)/
𝑔𝑖𝑎𝑡𝑟𝑖 ∈ {0,1}};
OUTPUT:
𝐷𝑆𝑏𝑎𝑛 có 𝒈𝒊𝒂𝒕𝒓𝒊 = 1 nghĩa là học sinh có mặt tại lớp và nếu 𝒈𝒊𝒂𝒕𝒓𝒊 = 0 là học sinh vắng mặt.
FOR i = 1 to |𝑉𝑖𝑇𝑟𝑖𝑏𝑎𝑛| do
𝐷𝑆𝑏𝑎𝑛[𝑖]. 𝑡𝑎𝑜𝐺𝑖𝑎𝑇𝑟𝑖(0);
𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒 [𝑖]. 𝑡𝑎𝑜𝑇𝑎𝑚(0);
ENDFOR
FOR i = 1 to N do
𝑑𝑚𝑖𝑛 = max;
𝑑 = max;
pos = -1;
FOR j = 1 to |𝑉𝑖𝑇𝑟𝑖𝑏𝑎𝑛| do
IF(! 𝑉𝑖𝑇𝑟𝑖𝑏𝑎𝑛[𝑗]. 𝑡𝑎𝑜𝑇𝑎𝑚()) 𝒕𝒉𝒆𝒏
𝑑 = 𝑘ℎ𝑜𝑎𝑛𝑔𝑐𝑎𝑐ℎ(𝑉𝑖𝑇𝑟𝑖𝑑𝑎𝑢[𝑖], 𝑉𝑖𝑇𝑟𝑖𝑏𝑎𝑛[𝑗]);
IF(𝑑 < 𝑑𝑚𝑖𝑛) then
𝑑𝑚𝑖𝑛 = 𝑑;
pos = j;
ENDIF ENDIF
ENDFOR
IF(𝑑𝑚𝑖𝑛 < 𝛿) THEN
𝐷𝑆𝑏𝑎𝑛[𝒑𝒐𝒔]. 𝑡𝑎𝑜𝐺𝑖𝑎𝑇𝑟𝑖(1);
𝑉𝑖𝑇𝑟𝑖𝑏𝑎𝑛[𝒑𝒐𝒔]. 𝑡𝑎𝑜𝑇𝑎𝑚(1);
ENDIF ENDFOR
KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN
Môi trường thực nghiệm
Bài toán điểm danh học sinh trong lớp học được chúng tôi cài đặt trên máy tính với cấu hình phần cứng gồm: CPU Intel® Core™ i5-6500 tốc độ 3.2HGz, RAM 16GB cùng với GPU 900MB. Máy tính chạy hệ điều hành Ubuntu 16.04; ngôn ngữ lập trình của bài toán điểm danh học sinh là Python 3 cùng sự hỗ trợ của các thư viện: Numpy 1.14.3, Opencv 3.4.0, Tensorflow 1.6.0, Keras 2.1.5,
Dlib 19.13.1.
Xây dựng dữ liệu
Dữ liệu của bài toán điểm danh học sinh bao gồm 45 video được quay tại 15 lớp khác nhau thuộc sáu khoa của Trường Trung cấp Thủy sản, bảng 4.1.
Bảng 4.1 Danh sách 45 video dùng làm dữ liệu
TÊN VIDEO | TÊN LỚP | NGÀY | BUỔI | SĨ SỐ | |
1 | M01 | TKT33 | 03-02-2018 | Chiều | 16 |
2 | M02 | TKT33 | 03-02-2018 | Chiều | 17 |
3 | M03 | TKT33 | 03-02-2018 | Chiều | 17 |
4 | M04 | TTP33-3N | 13-04-2018 | Sáng | 18 |
5 | M05 | TTP33-3N | 13-04-2018 | Sáng | 20 |
6 | M06 | TTP33-3N | 13-04-2018 | Sáng | 20 |
7 | M07 | TTP33 | 10-04-2018 | Chiều | 23 |
8 | M08 | TTP33 | 10-04-2018 | Chiều | 23 |
9 | M09 | TTP33 | 10-04-2018 | Chiều | 24 |
10 | M10 | TCB33-3N | 12-04-2018 | Sáng | 20 |
11 | M11 | TCB33-3N | 12-04-2018 | Sáng | 20 |
12 | M12 | TCB33-3N | 12-04-2018 | Sáng | 19 |