Spaces:
Runtime error
Runtime error
import numpy as np | |
import math | |
import cv2 | |
import matplotlib | |
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | |
from matplotlib.figure import Figure | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import cv2 | |
def padRightDownCorner(img, stride, padValue): | |
h = img.shape[0] | |
w = img.shape[1] | |
pad = 4 * [None] | |
pad[0] = 0 # up | |
pad[1] = 0 # left | |
pad[2] = 0 if (h % stride == 0) else stride - (h % stride) # down | |
pad[3] = 0 if (w % stride == 0) else stride - (w % stride) # right | |
img_padded = img | |
pad_up = np.tile(img_padded[0:1, :, :]*0 + padValue, (pad[0], 1, 1)) | |
img_padded = np.concatenate((pad_up, img_padded), axis=0) | |
pad_left = np.tile(img_padded[:, 0:1, :]*0 + padValue, (1, pad[1], 1)) | |
img_padded = np.concatenate((pad_left, img_padded), axis=1) | |
pad_down = np.tile(img_padded[-2:-1, :, :]*0 + padValue, (pad[2], 1, 1)) | |
img_padded = np.concatenate((img_padded, pad_down), axis=0) | |
pad_right = np.tile(img_padded[:, -2:-1, :]*0 + padValue, (1, pad[3], 1)) | |
img_padded = np.concatenate((img_padded, pad_right), axis=1) | |
return img_padded, pad | |
# transfer caffe model to pytorch which will match the layer name | |
def transfer(model, model_weights): | |
transfered_model_weights = {} | |
for weights_name in model.state_dict().keys(): | |
transfered_model_weights[weights_name] = model_weights['.'.join( | |
weights_name.split('.')[1:])] | |
return transfered_model_weights | |
# draw the body keypoint and lims | |
def draw_bodypose(canvas, candidate, subset, show_number=False): | |
stickwidth = 4 | |
limbSeq = [[2, 3], [2, 6], [3, 4], [4, 5], [6, 7], [7, 8], [2, 9], [9, 10], | |
[10, 11], [2, 12], [12, 13], [13, 14], [2, 1], [1, 15], [15, 17], | |
[1, 16], [16, 18], [3, 17], [6, 18]] | |
colors = [[255, 0, 0], [255, 85, 0], [255, 170, 0], [255, 255, 0], [170, 255, 0], [85, 255, 0], [0, 255, 0], | |
[0, 255, 85], [0, 255, 170], [0, 255, 255], [ | |
0, 170, 255], [0, 85, 255], [0, 0, 255], [85, 0, 255], | |
[170, 0, 255], [255, 0, 255], [255, 0, 170], [255, 0, 85]] | |
for i in range(18): | |
for n in range(len(subset)): | |
index = int(subset[n][i]) | |
if index == -1: | |
continue | |
x, y = candidate[index][0:2] | |
cv2.circle(canvas, (int(x), int(y)), 4, colors[i], thickness=-1) | |
if show_number: | |
cv2.putText(canvas, f'{index}', (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 0.6, | |
(255, 255, 0), 1, cv2.LINE_AA) | |
# calc and print average | |
for i in range(17): | |
for n in range(len(subset)): | |
index = subset[n][np.array(limbSeq[i]) - 1] | |
if -1 in index: | |
continue | |
cur_canvas = canvas.copy() | |
Y = candidate[index.astype(int), 0] | |
X = candidate[index.astype(int), 1] | |
mX = np.mean(X) | |
mY = np.mean(Y) | |
length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 | |
angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) | |
polygon = cv2.ellipse2Poly((int(mY), int(mX)), (int( | |
length / 2), stickwidth), int(angle), 0, 360, 1) | |
cv2.fillConvexPoly(cur_canvas, polygon, colors[i]) | |
canvas = cv2.addWeighted(canvas, 0.4, cur_canvas, 0.6, 0) | |
return canvas | |
# get max index of 2d array | |
def npmax(array): | |
arrayindex = array.argmax(1) | |
arrayvalue = array.max(1) | |
i = arrayvalue.argmax() | |
j = arrayindex[i] | |
return i, j | |
# get max index of 2d array | |
def npmax_with_score(array): | |
arrayindex = array.argmax(1) | |
arrayvalue = array.max(1) | |
i = arrayvalue.argmax() | |
j = arrayindex[i] | |
score = array[i][j] | |
return i, j, score | |