วันเสาร์ที่ 13 ตุลาคม พ.ศ. 2561

หลักการทำงานของโค้ด Smart Mirror & Hand Detection ( Part 3 การติดตามมือ)


blobs_buffer[n] == [] case
1.จะเช็ค array ที่ถูกเก็บอยู่ใน blobs_buffer ทุกตัว คือตั้งแต่ blobs_buffer[1], blobs_buffer[2], blobs_buffer[3]
2.เมื่อเช็คจนครบทุกตัวแล้ว n + 1 > buffer_size จากนั้น จะ set id ให้กับ blob และ นำ [blob.centroid, blob.centroid] ไปเก็บใส่ไว้ใน blobs_movement ที่ตำแหน่ง i ( ตำแหน่งของตัวใน array จะเท่ากับ id ของ blob)


(น่าจะเป็นช่วงที่ มีเฟรม 2 ผ่านเข้ามา และต้องเอาไปใช้เทียบกับเฟรม 1)
blobs_buffer[n] != [] case ( blobs_buffer[n] มีค่า)
1.วนลูปเช็คหาว่า blob ที่ได้มากับ blobs_buffer[n][j] เป็น blob อันเดียวกันมั้ย //เช็คว่า blob ของ frame ก่อนหน้า กับ frame ปัจจุบัน ว่าเป็นอันเดียวกันหรือไม่
2.ถ้าเป็น blob เดียวกัน ให้เอา id จาก blobs_buffer[n][j] มาเก็บใน new_id และตั้งตัวแปร exist = false
3.วนลูปเช็คว่า id ของ blob ใน blobs มีค่าซ้ำกับ new_id หรือไม่ ถ้ามันซ้ำกัน จะเปลี่ยนค่า exist เป็น True
4.ถ้า exist = true
4.1 ถ้า n + 1 < buffer_size จะให้ทำ blobs_track(blob, i, n+1)
4.2 ถ้า n + 1 > buffer_size จะให้
  • new_id = 1
  • วนลูปหา id ที่มากที่สุดจาก old_id + 1 ที่มากกว่า new_id และเปลี่ยนค่า new_id เป็น max(old_id) + 1
  • set id ให้ blob เป็น new_id
  • ใส่ new_id ไปใน old_id[0]
  • นำ [blob.centroid, blob.centroid] ไปเก็บใส่ไว้ใน blobs_movement ที่ตำแหน่ง new_id
5.ถ้า exist = False
5.1 set id ให้กับ blob เป็น new_id
5.2 เช็คว่า blobs_buffer[n][j] มีลักษณะเป็นมือหรือไม่ ถ้าเป็น  ให้ set blob เป็นมือ
5.3 ใส่ blob.centroid ลงใน blobs_movement ที่ตำแหน่ง new_id
5.4 ให้ blobs_movement ที่ตำแหน่ง new_id เป็น blobs_movement 20 ตำแหน่งท้ายสุด
6. ถ้าเจอ blob ที่ไม่ใช่ id เป็น -1 ให้ออกจากลูป

7. ถ้า id ของ blob เป็น -1
7.1 ถ้า n + 1  < buffer_size ให้ทำ blobs_track(blob, i, n + 1) // หา id ของ blob ที่ไม่เท่ากับ -1
7.2 ถ้า n + 1  >= buffer_size ให้ทำ

  • new_id = 1
  • วนลูปหา id ที่มากที่สุดจาก old_id + 1 ที่มากกว่า new_id และเปลี่ยนค่า new_id เป็น max(old_id) + 1
  • set id ให้ blob เป็น new_id
  • ใส่ new_id ไปใน old_id[0]
  • นำ [blob.centroid, blob.centroid] ไปเก็บใส่ไว้ใน blobs_movement ที่ตำแหน่ง new_id

ไม่มีความคิดเห็น:

แสดงความคิดเห็น