跳轉到

🔰 影像範例 - 數位花繩

數位花繩



數位花繩

🎦 Demo影片



📄 Py4t程式碼

from 視覺模組 import *
import math

攝影機 = 設置影像擷取(後端='DSHOW')
偵測器 = 設置HandAndGesture()

finger_list = [4,8,12,16,20]
finger_flag_dict = { idx:False  for idx in finger_list }
color_dict = { 4 : (0, 0, 255),
            8 : (0, 128, 255),
            12 : (0, 255, 128),
            16 : (255, 0, 255),
            20 : (255, 0, 0)}

def check_finger_touched(手清單, idx):
    global finger_list
    global finger_flag_dict

    if finger_flag_dict[idx]:
        return

    x0, y0 = 手清單[0].特徵點(索引=idx)
    x1, y1 = 手清單[1].特徵點(索引=idx)
    distance = math.sqrt((x1-x0)**2 + (y1-y0)**2)
    if distance < 50:
        finger_flag_dict[idx] = True

def draw_line_index_finger(手清單, idx):
    pt1 = 手清單[0].特徵點(索引=idx)
    pt2 = 手清單[1].特徵點(索引=idx)   
    color=color_dict[idx]

    畫直線(image=陣列,
        pt1=pt1,
        pt2=pt2,
        color=color,
        thickness=2)
    畫圓形(image=陣列,
        center=pt1,
        radius=5,
        color=color,
        thickness=-1)
    畫圓形(image=陣列,
        center=pt1,
        color=color,
        radius=8)
    畫圓形(image=陣列,
        center=pt2,
        radius=5,
        color=color,
        thickness=-1)
    畫圓形(image=陣列,
        center=pt2,
        color=color,
        radius=8)

while True :
    陣列 = 擷取影像(攝影機)
    陣列 = 左右翻轉(陣列)
    結果 = 偵測器.process(陣列)
    if 結果:
        手清單 = 取出Hand清單(結果)
        if len(手清單) == 2:
            for idx in finger_list:
                check_finger_touched(手清單,idx)
                if finger_flag_dict[idx]:
                    draw_line_index_finger(手清單, idx)

    顯示影像(陣列)