|
|
import os
|
|
|
import json
|
|
|
import math
|
|
|
import cv2
|
|
|
|
|
|
img_path = 'D:\\APPes\\Alphapose\\AlphaPose\\duan_alphapose\\photo\\'
|
|
|
posePoint_Path = 'D:\\APPes\\Alphapose\\AlphaPose\\duan_alphapose\\'
|
|
|
# python D:\APPes\Alphapose\AlphaPose\demo.py --indir 'D:\APPes\Alphapose\AlphaPose\tello_alphapose_duan\posephoto_duan\\' --outdir 'D:\\APPes\Alphapose\\AlphaPose\\tello_alphapose_duan\\' --sp
|
|
|
# python tello_alphapose_duan.py
|
|
|
|
|
|
#运行alphapose demo,提取人体关键点
|
|
|
command = 'python D:\APPes\Alphapose\AlphaPose\demo.py' + ' --indir ' + img_path + ' --outdir ' + posePoint_Path + ' --sp'
|
|
|
os.system(command)
|
|
|
|
|
|
f_obj = open(posePoint_Path+'alphapose-results.json')#打开关键点信息
|
|
|
numbers = json.load(f_obj)
|
|
|
|
|
|
'''
|
|
|
// Result for COCO (17 body parts)
|
|
|
{0, "Nose"},
|
|
|
{1, "LEye"},
|
|
|
{2, "REye"},
|
|
|
{3, "LEar"},
|
|
|
{4, "REar"},
|
|
|
{5, "LShoulder"},
|
|
|
{6, "RShoulder"},
|
|
|
{7, "LElbow"},
|
|
|
{8, "RElbow"},
|
|
|
{9, "LWrist"},
|
|
|
{10, "RWrist"},
|
|
|
{11, "LHip"},
|
|
|
{12, "RHip"},
|
|
|
{13, "LKnee"},
|
|
|
{14, "Rknee"},
|
|
|
{15, "LAnkle"},
|
|
|
{16, "RAnkle"},
|
|
|
'''
|
|
|
#登记LH左手、LE左肘、LS左肩、RH右手、RE右肘、RS右肩数据
|
|
|
LS_X = int(numbers[0]['keypoints'][15])
|
|
|
LS_Y = int(numbers[0]['keypoints'][16])#左肩
|
|
|
RS_X = int(numbers[0]['keypoints'][18])
|
|
|
RS_Y = int(numbers[0]['keypoints'][19])#右肩
|
|
|
|
|
|
LE_X = int(numbers[0]['keypoints'][21])
|
|
|
LE_Y = int(numbers[0]['keypoints'][22])#左肘
|
|
|
RE_X = int(numbers[0]['keypoints'][24])
|
|
|
RE_Y = int(numbers[0]['keypoints'][25])#右肘
|
|
|
|
|
|
LH_X = int(numbers[0]['keypoints'][27])
|
|
|
LH_Y = int(numbers[0]['keypoints'][28])#左腕
|
|
|
RH_X = int(numbers[0]['keypoints'][30])
|
|
|
RH_Y = int(numbers[0]['keypoints'][31])#右腕
|
|
|
|
|
|
#以双眼间距的两倍作为参照
|
|
|
Leye_x = int(numbers[0]['keypoints'][3])
|
|
|
Leye_y = int(numbers[0]['keypoints'][4])
|
|
|
Reye_x = int(numbers[0]['keypoints'][6])
|
|
|
Reye_y = int(numbers[0]['keypoints'][7])
|
|
|
len = int(math.sqrt(math.pow(Leye_x-Reye_x,2)+math.pow(Leye_y-Reye_y,2))) * 2
|
|
|
|
|
|
print(LH_Y,LE_Y,LS_Y)
|
|
|
print(RH_Y,RE_Y,RS_Y)
|
|
|
print(len)
|
|
|
|
|
|
#判断姿势
|
|
|
pose = 0
|
|
|
if LH_Y - LE_Y >= len and LE_Y - LS_Y >= len and RH_Y - RE_Y >= len and RE_Y - RS_Y >= len:
|
|
|
pose = 1#双垂,降落
|
|
|
if LE_Y - LH_Y >= len and abs(LE_Y - LS_Y) <= len and RE_Y - RH_Y >= len and abs(RE_Y - RS_Y) <= len:
|
|
|
pose = 2#双平举,起飞
|
|
|
if LS_Y - LE_Y >= len and LE_Y - LH_Y >= len and RS_Y - RE_Y >= len and RE_Y - RH_Y >= len:
|
|
|
pose = 3#双高举,向上飞
|
|
|
if abs(LH_Y - LE_Y) <= len and abs(LE_Y - LS_Y) <= len and abs(RH_Y - RE_Y) <= len and abs(RE_Y - RS_Y) <= len:
|
|
|
pose = 4#双伸,向下飞
|
|
|
if abs(LH_Y - LE_Y) <= len and abs(LE_Y - LS_Y) <= len and RE_Y - RH_Y >= len and abs(RE_Y - RS_Y) <= len:
|
|
|
pose = 5#左伸右平举,前进
|
|
|
if abs(LH_Y - LE_Y) <= len and abs(LE_Y - LS_Y) <= len and RH_Y - RE_Y >= len and RE_Y - RS_Y >= len:
|
|
|
pose = 6#左伸右垂,后进
|
|
|
if LE_Y - LH_Y >= len and abs(LE_Y - LS_Y) <= len and abs(RH_Y - RE_Y) <= len and abs(RE_Y - RS_Y) <= len:
|
|
|
pose = 7#左平举右伸,左进
|
|
|
if LH_Y - LE_Y >= len and LE_Y - LS_Y >= len and abs(RH_Y - RE_Y) <= len and abs(RE_Y - RS_Y) <= len:
|
|
|
pose = 8#左垂右伸,右进
|
|
|
if LS_Y - LE_Y >= len and LE_Y - LH_Y >= len and RH_Y - RE_Y >= len and RE_Y - RS_Y >= len:
|
|
|
pose = 9#左高举右垂,左旋
|
|
|
if LH_Y - LE_Y >= len and LE_Y - LS_Y >= len and RS_Y - RE_Y >= len and RE_Y - RH_Y >= len:
|
|
|
pose = 10#右高举左垂,右旋
|
|
|
else:
|
|
|
pass
|
|
|
print(pose)
|
|
|
|
|
|
|
|
|
#绘制关键点可视化
|
|
|
# 0鼻子,1左眼,2右眼,3左耳,4右耳,5左肩,6右肩,7左肘,8右肘,9左腕,10右腕,11左臀,12右臀,13左膝,14右膝,15左踝,16右踝
|
|
|
point_list = [(int(numbers[0]['keypoints'][0]),int(numbers[0]['keypoints'][1])), (int(numbers[0]['keypoints'][3]),int(numbers[0]['keypoints'][4])),
|
|
|
(int(numbers[0]['keypoints'][6]),int(numbers[0]['keypoints'][7])),(int(numbers[0]['keypoints'][9]),int(numbers[0]['keypoints'][10])),
|
|
|
(int(numbers[0]['keypoints'][12]),int(numbers[0]['keypoints'][13])),(int(numbers[0]['keypoints'][15]),int(numbers[0]['keypoints'][16])),
|
|
|
(int(numbers[0]['keypoints'][18]),int(numbers[0]['keypoints'][19])),(int(numbers[0]['keypoints'][21]),int(numbers[0]['keypoints'][22])),
|
|
|
(int(numbers[0]['keypoints'][24]),int(numbers[0]['keypoints'][25])),(int(numbers[0]['keypoints'][27]),int(numbers[0]['keypoints'][28])),
|
|
|
(int(numbers[0]['keypoints'][30]),int(numbers[0]['keypoints'][31])),(int(numbers[0]['keypoints'][33]),int(numbers[0]['keypoints'][34])),
|
|
|
(int(numbers[0]['keypoints'][36]),int(numbers[0]['keypoints'][37])),(int(numbers[0]['keypoints'][39]),int(numbers[0]['keypoints'][40])),
|
|
|
(int(numbers[0]['keypoints'][42]),int(numbers[0]['keypoints'][43])),(int(numbers[0]['keypoints'][45]),int(numbers[0]['keypoints'][46])),
|
|
|
(int(numbers[0]['keypoints'][48]),int(numbers[0]['keypoints'][49]))]
|
|
|
img = cv2.imread(img_path+'frame.jpg')
|
|
|
for point in point_list:
|
|
|
cv2.circle(img, point, 1, (0,0,255), 4)
|
|
|
|
|
|
cv2.line(img, point_list[0], point_list[1], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[0], point_list[2], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[1], point_list[3], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[2], point_list[4], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[9], point_list[7], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[7], point_list[5], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[5], point_list[6], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[6], point_list[8], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[8], point_list[10], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[5], point_list[11], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[6], point_list[12], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[11], point_list[12], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[11], point_list[13], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[13], point_list[15], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[12], point_list[14], (0,255,0), 1,4)
|
|
|
cv2.line(img, point_list[14], point_list[16], (0,255,0), 1,4)
|
|
|
|
|
|
cv2.imshow('result',img)
|
|
|
cv2.waitKey(0)
|
|
|
|