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 | |