Phát hiện đối tượng đầu học sinh

Một phần của tài liệu (LUẬN văn THẠC sĩ) hệ thống điểm danh tự động học sinh trung học phổ thông qua camera trong lớp học (Trang 52 - 55)

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_1video[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

Một phần của tài liệu (LUẬN văn THẠC sĩ) hệ thống điểm danh tự động học sinh trung học phổ thông qua camera trong lớp học (Trang 52 - 55)

Tải bản đầy đủ (PDF)

(77 trang)