Số lượng trong (2.17) , (2.18) giống như (2.8) . Thay thế √𝜆 thành 𝑟 vào (2.17) và (2.18). Sau đó chúng ta có thể nhận được phương trình mới, (2.19)
min
𝑓 ∑(𝑆𝑓(𝑥𝑖) − 𝑦𝑖)2+ ‖𝑟⨀𝑓‖2
𝑛
𝑖=1
(2.19)
Giống như KCF, (2.19) có thể được giải quyết dưới dạng như (2.20)
𝑓 = (𝑋𝑇𝑋 + 𝑅2)−1𝑋𝐻𝑦 (2.20)
Trong (2.20), 𝑋 tương tự như trong (2.9). Ma trận điều chỉnh không gian có thể giúp mở rộng khu vực nhận được các mẫu huấn luyện và các mẫu phát hiện ứng cử viên. Khi chúng ta khoanh tròn mẫu cơ sở để lấy mẫu mới, vị trí của đối tượng và nền được thay đổi. Do đó, để đánh giá độ lớn của các hệ số
đổi theo vòng tròn. 𝑅 trong (2.20) là ma trận tuần hoàn được tạo ra từ ma trận chuẩn hóa không gian 𝑟. Mỗi thay đổi theo chu kỳ của ma trận chuẩn hóa không gian 𝑟 tương ứng với việc dịch chuyển tuần hoàn của mẫu cơ sở. Áp dụng các tính chất của ma trận tuần hoàn, tất cả các phép toán trong (2.20) có thể được thực hiện các phần tử nằm trên đường chéo.
Lấy 𝑋𝑇𝑋 thay thế X trong (2.11), ta được (2.21)
𝑋𝑇𝑋 = 𝐹𝑑𝑖𝑎𝑔(𝑥̂∗)𝐹𝐻𝐹𝑑𝑖𝑎𝑔(𝑥̂)𝐹𝐻 (2.21)
Trong (2.21) , 𝑥̂∗ là các trường hợp phức tạp của 𝑥̂ . Áp dụng tính chất
𝐹𝐻𝐹 = 𝐼, chúng ta có thể viết lại (2.20) với miền tần số là (2.22)
𝑓̂ = 𝑑𝑖𝑎𝑔(𝑥̂∗)𝑦̂/(𝑑𝑖𝑎𝑔(𝑥̂∗⨀𝑥̂) + 𝑑𝑖𝑎𝑔(𝑟̂∗⨀ 𝑟̂)) (2.22) Sử dụng cùng một tính chất của nhân như KCF để có được α , (2.23)
𝛼̂ = 𝑦̂/(𝑘̂𝑥𝑥+ 𝑟̂∗ ⨀ 𝑟̂) (2.23)
Trong (2.23) , 𝑘̂𝑥𝑥là ma trận nhân trong miền tần số và phần tử của ma trận là tích các phần tử của hai mẫu. Đối với các hàm nhân như nhân Gauss, nhân tuyến tính và nhân đa thức thì tính chất ma trận tuần hoàn cũng có thể được áp dụng [27] .
Sử dụng nhân Gauss và ma trận nhân có thể thu được bằng phương trình (2.24)
𝑘𝑥𝑥′ = exp (− 1
𝜎2(‖𝑥‖2 + ‖𝑥′‖2) − 2𝐹−1(𝑥̂ ⨀ 𝑥̂′∗)) (2.24) Sau khi nhận được bộ lọc α có thể sử dụng bộ lọc này để phát hiện đối tượng được theo dõi bằng cách áp dụng tính chất của ma trận tuần hoàn và ánh xạ đặc trưng z từ hình ảnh tại cùng một vị trí nơi đối tượng theo dõi được phát hiện trong khung trước đó. Ánh xạ đặc trưng z được coi là mẫu cơ bản của mẫu
𝑠̂(𝑧) = 𝑘̂𝑥𝑥⨀𝛼̂ (2.25) Trong đó, x là mô hình được học từ khung ảnh trước đó. Vị trí của giá trị tối đa được coi là vị trí của mục tiêu được theo dõi. Trong quá trình huấn luyện và phát hiện thì việc theo vết đối tượng mới chỉ cần tính tích các phần tử và chia cho các phần tử với chi phí độ phức tạp tính toán O(nlogn).
2.4.2.3 Sử dụng đặc trưng và chia nhỏ tỉ lệ
Nhân Gauss được sử dụng trong (2.24) dựa trên tích các phần tử và đặc điểm của vectơ, nhiều phần có thể được áp dụng trong nhân Gauss. Ánh xạ đặc trưng x ghép các vectơ riêng lẻ trong C như 𝑥 = [𝑥1, 𝑥2, … , 𝑥𝑐]. (2.24) có thể được viết lại dưới dạng (2.26):
𝑘𝑥𝑥′ = exp (− 1
𝜎2(‖𝑥‖2+ ‖𝑥′‖2) − 2𝐹−1(∑ 𝑥̂ ⨀ 𝑥̂′∗
𝑐
)) (2.26)
Trong (2.26) cho phép sử dụng những đặc trưng nổi trội để biểu diễn mục tiêu và áp dụng biểu đồ Gradient [49] và đặt tên màu (Color-naming) [50] để mô tả các đặc điểm của mục tiêu khắc phục được vấn đề lỗi khi mục tiêu lẫn trong nền.
Biểu đồ của Gradient là một trong những đặc trưng hình ảnh phổ biến nhất trong thị giác máy tính vì nó rất hiệu quả trong các ứng dụng thực tế và có thể tính rất chính xác. Đặc trưng này trích xuất thông tin gradient từ ô - phạm vi pixel. HOG đếm định hướng rời rạc để tạo thành biểu đồ.
Đặt tên màu hay còn gọi là thuộc tính màu chính là không gian bối cảnh,
nhãn màu được gán bởi con người để mô tả màu sắc. Sử dụng phương pháp ánh xạ để biến đổi từ không gian RGB sang color-naming có không gian biểu diễn 11 chiều, dựa vào tên màu để nhận biết đối tượng.
Kỹ thuật chia nhỏ tỉ lệ là một phương pháp thường được sử dụng để cải thiện hiệu suất của các thuật toán theo dõi bộ lọc theo mức độ tương quan. Đặt 7 kích thước mẫu khác nhau dựa trên kích thước mục tiêu trong khung đầu tiên. Ở vị trí mục tiêu tạo mẫu có kích thước khác nhau, được định nghĩa là
{𝑧𝑟}𝑟∈(1,2,…,7). Thay {𝑧𝑟}𝑟∈(1,2,…,7) vào (2.25) ta nhận được 7 ma trận tương ứng. Trong đó, tất cả {𝑧𝑟}𝑟∈(1,2,…,7) cần phải được thay đổi với kích thước tương tự như các bộ lọc theo mức độ tương quan. Tìm giá trị lớn nhất trong số các ma trận tương ứng này, mục tiêu được tìm thấy chính là vị trí mới và kích thước mới.
2.4.2.4 Cập nhật mô hình
Trong quá trình theo dõi, thuật toán cập nhật mô hình mục tiêu và bộ lọc theo mức độ tương quan với phương trình (2.27).
{𝑥̂
𝑡 = (1 − 𝜂)𝑥̂𝑡−1+ 𝜂𝑥̂𝑡
𝛼̂𝑡 = (1 − 𝜂)𝛼̂𝑡−1+ 𝜂𝛼̂𝑡 (2.27)
𝑥̂𝑡là ánh xạ đặc trưng trong miền tần số được tạo từ vị trí mới trong khung hiện tại.
𝛼̂𝑡 là bộ lọc theo mức độ tương quan mới được học trong miền tần số. Sơ đồ 2.1 cho chúng ta thấy thuật toán lọc theo mức độ tương quan.
Khung hình đầu tiên và vị trí ban đầu của mục tiêu
Nhân tương quan
𝑘𝑥𝑥 = 𝐾(𝑥̂, 𝑥̂)
Mô hình huấn luyện
𝛼̂ = 𝑦̂/(𝑘̂𝑥𝑥+ 𝑟̂∗ ⨀ 𝑟̂) Cập nhật mô hình {𝑥̂ 𝑡+1= (1 − 𝜂)𝑥̂𝑡+ 𝜂𝑥̂ 𝛼̂𝑡+1 = (1 − 𝜂)𝛼̂𝑡+ 𝜂𝛼̂ Nạp khung hình thứ t+1 và phần ứng cử viên z
Nhân tương quan chéo
𝑘𝑥𝑧 = 𝐾(𝑥̂𝑡+1, 𝑧̂) Tính toán 𝑦 = 𝐹−1(𝛼̂𝑡+1⨀𝑘𝑥𝑧) Lấy vị trí mục tiêu 𝑃𝑡+1 Theo dõi kết thúc? End Đ S
Chương 3. XÂY DỰNG THUẬT TOÁN
Bài toán điểm danh học sinh THPT thông qua camera trong lớp học được giải quyết như sơ đồ 3.1. Từ một bài toán điểm danh cần giải quyết, chúng tôi phân tích để trở thành bốn bài toán cần được giải quyết, đó là:
a. Bài toán 1, Phát hiện đầu của học sinh trong một số frame của video thu trong lớp học;
b. Bài toán 2, Theo vết chuyển động đầu của từng học sinh trong lớp học; c. Bài toán 3, Xác định vị trí tâm trung bình vùng đầu của từng học sinh
trong lớp học;
d. Bài toán 4, Chiếu vị trí tâm trung bình vùng đầu của từng học sinh lên sơ đồ lớp học để điểm danh.
3.1. Phát hiện đối tượng đầu học sinh
Vấn đề đầu tiên cần giải quyết là thời điểm nào (frame bắt đầu) trong đoạn video được chọn để bắt đầu thuật toán tìm các vùng là vùng đầu của học sinh? Trong lớp học khi chưa có giáo viên vào lớp thì học sinh sẽ di chuyển hay trao đổi nhiều, điều này dẫn đến mức độ hỗn loạn dữ liệu (các điểm ảnh) trong các frame ảnh là rất lớn. Từ nhận xét này chúng tôi đề xuất thuật toán xác định thời điểm bắt đầu (frame bắt đầu) thực hiện thuật toán xác định các vùng đầu của học sinh, thuật toán 1. Ý tưởng chính của thuật toán chính là xem xét mức độ chênh lệch (độ thay đổi) của hai frame cách nhau một khoảng thời gian t.
Thuật toán 1: xác định frame bắt đầu cho thuật toán tìm các vùng đầu
của học sinh trong video
Input: video trong lớp học
Output: chỉ mục (indexing) frame theo yêu cầu
Step 1: max 0
start vị trí frame đầu tiên của video index start
Step 2: chuyển các frame về không gian xám Step 3: count 0 ; flag false
frame_1video[start].getFrame() Step 4: while (video còn và !flag) start start+t 4.1: frame_2 video[start].getFrame() 4.2: If (max ≤ |𝑓𝑟𝑎𝑚𝑒_2 – 𝑓𝑟𝑎𝑚𝑒_1|) then max = |𝑓𝑟𝑎𝑚𝑒_2 – 𝑓𝑟𝑎𝑚𝑒_1| index = start
Endif
4.3: frame_1 frame_2
If (start đủ lớn và count không đổi) then
flag true Endif
Endwhile
Step 5: Return index
Chúng tôi sử dụng tập dữ liệu 𝑇ℎ𝑒𝑎𝑑 để huấn luyện mô hình học chuyên sâu YOLO2 để được mô hình phát hiện vùng đầu trong ảnh của chúng tôi – có tên 𝑂𝑈𝑅_𝑌𝑂𝐿𝑂2ℎ𝑒𝑎𝑑, tập dữ liệu 𝑇ℎ𝑒𝑎𝑑 được xây dựng từ dữ liệu được trích trong một phần video và các ảnh được thu thập từ các nguồn khác nhau. Có thể trong quá trình xác định các đối tượng đầu học sinh trong frame thứ i và frame thứ k khác biệt nhau do môi trường tác động như: mức độ sáng thay đổi do mây, do che khuất của đối tượng khác đi ngang cửa sổ, do chuyển động của quạt, do màn che bị gió thổi, … hay do các đối tượng học sinh dịch chuyển. Từ đây chúng tôi xây dựng thuật toán để phát hiện các vùng đầu của từng frame trong đoạn video, thuật toán 2.
Thuật toán 2: Xác định các vùng đầu trong đoạn video
Input: tập hợp Frame có N phần tử, kết quả index từ thuật toán 1, và step
là bước nhảy
Output: tập hợp B có N phần tử, mỗi phần tử của tập hợp B là một tập
các vùng đầu của một frame (𝐵𝑖, 𝑖 = 1. . 𝑁)
start index for i=1 to N do
end for return B
Từ kết quả của thuật toán 2, chúng tôi xây dựng thuật toán để tích hợp các 𝐵𝑖, 𝑖 = 1. . 𝑁 từ các frame để có được một tập các vùng đầu của học sinh trong lớp tốt nhất, thuật toán 3.
Thuật toán 3: xác định một tập các vùng đầu của học sinh trong lớp. Input: 𝐵 = {𝐵𝑖/𝑖 = 1. . 𝑁} and d Output: 𝐵ℎ𝑒𝑎𝑑 𝐵ℎ𝑒𝑎𝑑 = 𝐵1 for i = 2 to N do for k = 1 to |𝐵𝑖| do if(!isElementOfSet( 𝐵ℎ𝑒𝑎𝑑, 𝐵𝑖[𝑘],d )) then 𝐵ℎ𝑒𝑎𝑑 = 𝐵ℎ𝑒𝑎𝑑∪ 𝐵𝑖[𝑘] endif endfor endfor return 𝐵ℎ𝑒𝑎𝑑
Thuật toán kiểm tra một phần tử có thuộc một tập hợp hay không dựa vào khoảng cách d dùng cho thuật toán 3. Mỗi phần tử là một hình chữ nhật. Tâm hai phần tử không xa nhau hơn khoảng cách d và giao hai hình chữ nhật này phải hơn α%.
Thuật toán kiểm tra (isElementOfSet(T,a, d))
Input: tập hợp T, phần tử a, khoảng cách d
for i = 1 to |𝑇| do
if(|𝑎. 𝑔𝑒𝑡𝐶𝑒𝑛𝑡𝑒𝑟() − 𝑇[𝑖]. 𝑔𝑒𝑡𝐶𝑒𝑛𝑡𝑒𝑟()| ≤ d) then ratio = 𝑎∩𝑇[𝑖]
𝑎∪𝑇[𝑖]
if(ratio > α) then value = true; endif
endif endfor
3.2. Theo vết chuyển động đầu học sinh trong lớp học
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
𝐵ℎ𝑒𝑎𝑑 chúng tôi tiến hành theo vết chuyển động các vùng đầu học sinh này 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 để có kết quả tốt 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ả (tỷ lệ lớn) hình chữ nhật bao, 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 so với các phương pháp theo vết chuyển động khác. 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 thuật toán 4 để theo vết chuyển động đầu các em học sinh, thuật toán 5.
Thuật toán 4: theo vết chuyển động Input:
Video, frame thứ t (𝐼𝑡)
Vị trí đối tượng ở frame trước đó 𝑝𝑡−1 và tỷ lệ 𝑠𝑡−1
Mô hình biến đổi 𝐴𝑡−1𝑡𝑟𝑎𝑛𝑠, 𝐵𝑡−1𝑡𝑟𝑎𝑛𝑠 và mô hình tỷ lệ 𝐴𝑡−1𝑠𝑐𝑎𝑙𝑒, 𝐵𝑡−1𝑠𝑐𝑎𝑙𝑒
Output:
1. Trích một mẫu biến đổi 𝑧𝑡𝑟𝑎𝑛𝑠 từ 𝐼𝑡 tại 𝑝𝑡−1 và tỷ lệ 𝑠𝑡−1
2. Tính tương quan biến đổi 𝑦𝑡𝑟𝑎𝑛𝑠 với 𝑧𝑡𝑟𝑎𝑛𝑠, 𝐴𝑡−1𝑡𝑟𝑎𝑛𝑠, 𝑣à 𝐵𝑡−1𝑡𝑟𝑎𝑛𝑠 (từ công thức 3.2)
3. Đặt 𝑝𝑡 thành vị trí mục tiêu mà được cực đại hóa 𝑦𝑡𝑟𝑎𝑛𝑠
Ước lượng tỷ lệ:
4. Trích một mẫu tỷ lệ 𝑧𝑠𝑐𝑎𝑙𝑒 từ 𝐼𝑡 tại 𝑝𝑡 và tỷ lệ 𝑠𝑡−1
5. Tính tương quan tỷ lệ 𝑦𝑠𝑐𝑎𝑙𝑒 với 𝑧𝑠𝑐𝑎𝑙𝑒, 𝐴𝑡−1𝑠𝑐𝑎𝑙𝑒, 𝑣à 𝐵𝑡−1𝑠𝑐𝑎𝑙𝑒 (từ công thức 3.2)
6. Đặt 𝑠𝑡 thành tỷ lệ mục tiêu mà được cực đại hóa 𝑦𝑠𝑐𝑎𝑙𝑒
Cập nhật mô hình:
7. Trích các mẫu 𝑓𝑡𝑟𝑎𝑛𝑠 và 𝑓𝑠𝑐𝑎𝑙𝑒 từ 𝐼𝑡 tại 𝑝𝑡 và 𝑠𝑡
8. Cập nhật mô hình biến đổi 𝐴𝑡𝑟𝑎𝑛𝑠𝑡 , 𝐵𝑡𝑡𝑟𝑎𝑛𝑠 (từ công thức 3.1 a,b) 9. Cập nhật mô hình tỷ lệ 𝐴𝑡𝑠𝑐𝑎𝑙𝑒, 𝐵𝑡𝑠𝑐𝑎𝑙𝑒 (từ công thức 3.1 a,b)
𝐴𝑡𝑙 = (1 − 𝜂)𝐴𝑡−1𝑙 + 𝜂𝐺̅̅̅𝐹𝑡 𝑡𝑙 𝐵𝑡 = (1 − 𝜂)𝐵𝑡−1+ 𝜂 ∑ 𝐹̅̅̅̅𝑡𝑘 𝑑 𝑘=1 𝐹𝑡𝑘 (3.1 a) (3.1 b) 𝑦 = ℱ−1{∑ 𝐴 𝑙 ̅̅̅𝑍𝑙 𝑑 𝑙=1 𝐵 + 𝜆 } (3.2)
Thuật toán 5: theo vết chuyển động các đối tượng đầu của học sinh trong
lớp
Output: 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑 = {𝑇𝑖𝑖 = 1. . 𝑁} mà 𝑇𝑖 = {𝐻𝑒𝑎𝑑𝑘𝑖 / 𝑘 = 1. . 𝑀} với M là số lượng frame dùng để theo vết
M = size(video)/ f for k = 1 to N do 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑘] = 𝐵𝑘 endfor 𝑝1 = 𝐵ℎ𝑒𝑎𝑑 initital(𝑠1) initial(𝐴1𝑡𝑟𝑎𝑛𝑠, 𝐵1𝑡𝑟𝑎𝑛𝑠, 𝐴1𝑠𝑐𝑎𝑙𝑒, 𝐵1𝑠𝑐𝑎𝑙𝑒) for k = 2 to M do 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑. 𝑡𝑟𝑎𝑐𝑘𝑖𝑛𝑔𝐻𝑒𝑎𝑑(𝑣𝑖𝑑𝑒𝑜. 𝑔𝑒𝑡𝐹𝑟𝑎𝑚𝑒(𝑘), 𝑝𝑘−1, 𝑠𝑘−1, 𝐴𝑡𝑟𝑎𝑛𝑠𝑘−1 , 𝐵𝑘−1𝑡𝑟𝑎𝑛𝑠, 𝐴𝑘−1𝑠𝑐𝑎𝑙𝑒, 𝐵𝑘−1𝑠𝑐𝑎𝑙𝑒) for i=1 to N do 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑖] = 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑖] ∪ 𝑝𝑘[𝑖] endfor endfor
3.3. Xác định vị trí đầu học sinh dựa trên trung bình
Sau khi có tất cả các vị trí chuyển động đầu học sinh trong lớp học của từng học sinh, chúng tôi xây dựng thuật toán 6 để tìm vị trí trung bình của vùng đầu của từng học sinh trong lớp học thông qua khoảng cách Euclide.
Thuật toán 6: Vị trí 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 𝑥𝑙 = 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑖].getHead().getPositionOneX() 𝑥𝑟 = 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑖].getHead().getPositionTwoX() 𝑦𝑙 = 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑖].getHead().getPositionOneY() 𝑦𝑟 = 𝑇𝑟𝑎𝑐𝑘ℎ𝑒𝑎𝑑[𝑖].getHead().getPositionTwoY() 𝐶𝑒𝑛𝑡𝑒𝑟[𝑖][𝑗] = (𝑥𝑙+𝑥𝑟 2 ,𝑦𝑙+𝑦𝑟 2 ) endfor 𝑥𝑡𝑜𝑡𝑎𝑙 = 0; 𝑦𝑡𝑜𝑡𝑎𝑙 = 0 for j = 1 to M do 𝑥𝑡𝑜𝑡𝑎𝑙 = 𝑥𝑡𝑜𝑡𝑎𝑙 + 𝐶𝑒𝑛𝑡𝑒𝑟[𝑖][𝑗]. 𝑔𝑒𝑡𝑋() 𝑦𝑡𝑜𝑡𝑎𝑙 = 𝑦𝑡𝑜𝑡𝑎𝑙 + 𝐶𝑒𝑛𝑡𝑒𝑟[𝑖][𝑗]. 𝑔𝑒𝑡𝑌() endfor 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛ℎ𝑒𝑎𝑑[𝑖] = (𝑥𝑡𝑜𝑡𝑎𝑙 𝑀 ,𝑦𝑡𝑜𝑡𝑎𝑙 𝑀 ) endfor sort(𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛ℎ𝑒𝑎𝑑)
3.4. Điểm danh học sinh
Dựa vào sơ đồ lớp đã được xây dựng trước bao gồm: vị trí bàn ghế của lớp học, vị trí học sinh được bố trí ở vị trí bàn ghế theo sơ đồ, chúng tôi xây dựng thuật toán 7 để điểm danh từng học sinh của lớp.
Input: vị trí đầu học sinh 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛ℎ𝑒𝑎𝑑 và sơ đồ vị trí bàn học 𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒 = {(𝑥, 𝑦, 𝑓𝑙𝑎𝑔)/(𝑥, 𝑦) ∈ ℤ2 𝑣à 𝑓𝑙𝑎𝑔 ∈ {0,1}} cùng danh sách học sinh tương ứng 𝐿𝑖𝑠𝑡𝑡𝑎𝑏𝑙𝑒 = {(𝐹𝑢𝑙𝑙𝑛𝑎𝑚𝑒, 𝑣𝑎𝑙𝑢𝑒)/ 𝑣𝑎𝑙𝑢𝑒 ∈ {0,1}}
Output: 𝐿𝑖𝑠𝑡𝑡𝑎𝑏𝑙𝑒 có 𝑣𝑎𝑙𝑢𝑒 mang giá trị là 1 nghĩa là có mặt tại lớp và 0 là vắng mặt. for i = 1 to |𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒| do 𝐿𝑖𝑠𝑡𝑡𝑎𝑏𝑙𝑒[𝑖]. 𝑠𝑒𝑡𝑉𝑎𝑙𝑢𝑒(0) 𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒[𝑖]. 𝑠𝑒𝑡𝐹𝑙𝑎𝑔(0) endfor for i = 1 to N do 𝑑𝑚𝑖𝑛 = max 𝑑 = max index = -1; for j = 1 to |𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒| do if(! 𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒[𝑗]. 𝑔𝑒𝑡𝐹𝑙𝑎𝑔()) 𝑡ℎ𝑒𝑛 𝑑 = 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒(𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛ℎ𝑒𝑎𝑑[𝑖], 𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒[𝑗]) if(𝑑 < 𝑑𝑚𝑖𝑛) then 𝑑𝑚𝑖𝑛 = 𝑑 index = j endif endif endfor if(𝑑𝑚𝑖𝑛 < 𝛿) then 𝐿𝑖𝑠𝑡𝑡𝑎𝑏𝑙𝑒[𝑖𝑛𝑑𝑒𝑥]. 𝑠𝑒𝑡𝑉𝑎𝑙𝑢𝑒(1) 𝑃𝑜𝑠𝑡𝑎𝑏𝑙𝑒[𝑖𝑑𝑒𝑥]. 𝑠𝑒𝑡𝐹𝑙𝑎𝑔(1) endif
Chương 4. KẾT QUẢ THỰC NGHIỆM VÀ HƯỚNG PHÁT TRIỂN
Chương 4 trình bày kết quả nghiên cứu và hướng phát triển của đề tài trong tương lai
4.1. Môi trường thực nghiệm
Chúng tôi thực nghiệm trên máy tính được cài đặt hệ điều hành Unbuntu 16.04 phiên bản server, máy tính có cấu hình RAM 8GB, Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz. chúng tôi cài đặt bằng ngôn ngữ python 3 kết hợp cùng các thư viện mã nguồn mở như numpy 1.141.3, opencv 3.4.0, tensorflow 1.6.0, keras 2.1.5, dlib 19.13.1.
4.2. Xây dựng dữ liệu
Chúng tôi thu thập xây dựng bộ dữ liệu A gồm 50 video từ 18 lớp khác nhau tại trường THPT Vũng Tàu. Thời gian trung bình của mỗi video là 01 phút, mỗi video có số frame là 25 frame cho một giây. Chúng tôi trích 500 frame ảnh từ 70% của bộ dữ liệu A (35 video) dùng để trích các vùng đầu của học sinh trong lớp học – tập ảnh B, mục tiêu xây dựng bộ dữ liệu vùng đầu học sinh trong lớp học – bộ dữ liệu C.
4.3. Kết quả
4.3.1. Thời gian thực hiện
Kết quả thời gian trung bình các bước của hệ thống, bảng 4.1.
Bảng 4.1. Thời gian trung bình trên một frame.
Giai đoạn Thời gian (giây)
Phát hiện các vùng đầu 0.2 Theo vết chuyển động các vùng đầu 0.3 Xác định vị trí của lớp 0.02
4.3.2. Phát hiện đối tượng đầu học sinh
Mức độ chính xác của bài toán phát hiện vùng đầu tốt; bảng 4.2; vì chúng tôi đã dùng thêm thuật toán kết hợp các kết quả phát hiện vùng đầu trong một dãy các frame ảnh (thuật toán 3), bảng 4.3.
Bảng 4.2. Độ chính xác của giai đoạn phát hiện. Tên lớp Độ chính xác (%) 12A3 92.85 12A4 90.55 12A5 88.25 12A7 90 12A8 90.64 12A9 90.32 12A10 88.57 11A1 90.1 11A2 88.87 11A3 89.7 … … Trung bình 89.99
Biểu đồ 4.1. Độ chính xác phát hiện đối tượng đầu học sinh của các lớp kiểm tra và độ chính xác trung bình phát hiện đối tượng
Bảng 4.3 cho thấy mức độ chính xác của bài toán theo vết chuyển động vùng đầu học sinh trong lớp.
Bảng 4.3. Độ chính xác của giai đoạn theo vết đối tượng đầu học sinh. Tên lớp Độ chính xác (%) 12A3 100 12A4 100