def mark_fingers(frame_in,hull,pt,radius):
global first_iteration
global finger_ct_history
finger=[(hull[0][0][0],hull[0][0][1])]
j=0
cx = pt[0]
cy = pt[1]
for i in range(len(hull)):
dist = np.sqrt((hull[-i][0][0] - hull[-i+1][0][0])**2 + (hull[-i][0][1] - hull[-i+1][0][1])**2)
if (dist>18):
if(j==0):
finger=[(hull[-i][0][0],hull[-i][0][1])]
else:
finger.append((hull[-i][0][0],hull[-i][0][1]))
j=j+1
temp_len=len(finger)
i=0
while(i<temp_len):
dist = np.sqrt( (finger[i][0]- cx)**2 + (finger[i][1] - cy)**2)
if(dist<finger_thresh_l*radius or dist>finger_thresh_u*radius or finger[i][1]>cy+radius):
finger.remove((finger[i][0],finger[i][1]))
temp_len=temp_len-1
else:
i=i+1
temp_len=len(finger)
if(temp_len>5):
for i in range(1,temp_len+1-5):
finger.remove((finger[temp_len-i][0],finger[temp_len-i][1]))
palm=[(cx,cy),radius]
if(first_iteration):
finger_ct_history[0]=finger_ct_history[1]=len(finger)
first_iteration=False
else:
finger_ct_history[0]=0.34*(finger_ct_history[0]+finger_ct_history[1]+len(finger))
if((finger_ct_history[0]-int(finger_ct_history[0]))>0.8):
finger_count=int(finger_ct_history[0])+1
else:
finger_count=int(finger_ct_history[0])
finger_ct_history[1]=len(finger)
count_text="FINGERS:"+str(finger_count)
cv2.putText(frame_in,count_text,(int(0.62*frame_in.shape[1]),int(0.88*frame_in.shape[0])),cv2.FONT_HERSHEY_DUPLEX,1,(0,255,255),1,8)
for k in range(len(finger)):
cv2.circle(frame_in,finger[k],10,255,2)
cv2.line(frame_in,finger[k],(cx,cy),255,2)
return frame_in,finger,palm
# 5. Mark hand center circle
HandRecognition.py 文件源码
python
阅读 24
收藏 0
点赞 0
评论 0
评论列表
文章目录