Spaces:
Runtime error
Runtime error
import numpy as np | |
import gradio as gr | |
import math | |
demo = gr.Blocks() | |
def estimate(input_img): | |
threshold = 0.9 | |
img = Image.fromarray(input_img.astype('uint8'),'RGB') | |
(w, h) = img.size | |
image_intrinsics = np.array([[w + h, 0, w // 2], [0, w + h, h // 2], [0, 0, 1]]) | |
res = img2pose_model.predict([transform(img)])[0] | |
all_bboxes = res["boxes"].cpu().numpy().astype('float') | |
poses = [] | |
bboxes = [] | |
for i in range(len(all_bboxes)): | |
if res["scores"][i] > threshold: | |
bbox = all_bboxes[i] | |
pose_pred = res["dofs"].cpu().numpy()[i].astype('float') | |
pose_pred = pose_pred.squeeze() | |
poses.append(pose_pred) | |
bboxes.append(bbox) | |
trans_vertices = renderer.transform_vertices(img, poses) | |
img = renderer.render(img, trans_vertices, alpha=1) | |
plt.figure(figsize=(8, 8)) | |
for bbox in bboxes: | |
plt.gca().add_patch(patches.Rectangle((bbox[0], bbox[1]), bbox[2] - bbox[0], bbox[3] - bbox[1],linewidth=3,edgecolor='b',facecolor='none')) | |
plt.imshow(img) | |
plt.show() | |
pose_pred[0] = math.degrees(pose_pred[0]) | |
pose_pred[1] = math.degrees(pose_pred[1]) | |
pose_pred[2] = math.degrees(pose_pred[2]) | |
listToStr = ' '.join([str(elem) for elem in pose_pred]) | |
return img,pose_pred[0],pose_pred[1],pose_pred[2],pose_pred[3],pose_pred[4],pose_pred[5] | |
def estimate_crowd(input_img): | |
threshold = 0.5 | |
img = Image.fromarray(input_img.astype('uint8'),'RGB') | |
(w, h) = img.size | |
image_intrinsics = np.array([[w + h, 0, w // 2], [0, w + h, h // 2], [0, 0, 1]]) | |
res = img2pose_model.predict([transform(img)])[0] | |
all_bboxes = res["boxes"].cpu().numpy().astype('float') | |
poses = [] | |
bboxes = [] | |
for i in range(len(all_bboxes)): | |
if res["scores"][i] > threshold: | |
bbox = all_bboxes[i] | |
pose_pred = res["dofs"].cpu().numpy()[i].astype('float') | |
pose_pred = pose_pred.squeeze() | |
poses.append(pose_pred) | |
bboxes.append(bbox) | |
#render_plot(img.copy(), poses, bboxes) | |
n = str((len(bboxes))) | |
(w, h) = img.size | |
image_intrinsics = np.array([[w + h, 0, w // 2], [0, w + h, h // 2], [0, 0, 1]]) | |
trans_vertices = renderer.transform_vertices(img, poses) | |
img = renderer.render(img, trans_vertices, alpha=1) | |
return img, n | |
with demo: | |
gr.Markdown("Head Pose Estimation in Crowd") | |
with gr.Tabs(): | |
with gr.TabItem("What is Head Pose Estimation?"): | |
gr.Markdown( | |
""" | |
### Head pose estimation in crowd (HPECS) is a task of estimating the head pose of people in the crowd scenes. | |
Six degrees of freedom of head pose is the freedom of movement of the head pose in three-dimensional space. 6DoF is the | |
abbreviation of six degrees of freedoms. 6DoF of head pose records the rotational motion such as | |
pitch, yaw and roll , and translational motions of the head pose including up/down, left/right and front/back. | |
6DoF of 3D head pose is being regressed as it can harvest more versatile | |
spatial information which able to track the movement of object even in a still image. | |
""" | |
) | |
gr.Image("/content/gdrive/MyDrive/project_folder/img2pose/6DoF.gif",size=20) | |
with gr.TabItem("Head Pose Estimation"): | |
gr.Markdown( | |
""" | |
### Please insert image with single head | |
""" | |
) | |
image = gr.inputs.Image() | |
text_button = gr.Button("Estimate") | |
with gr.Row(): | |
outputs=[gr.outputs.Image(),gr.outputs.Textbox(type="auto", label="Yaw"), | |
gr.outputs.Textbox(type="auto", label="Pitch"), | |
gr.outputs.Textbox(type="auto", label="Roll"), | |
gr.outputs.Textbox(type="auto", label="tx"), | |
gr.outputs.Textbox(type="auto", label="ty"), | |
gr.outputs.Textbox(type="auto", label="tz")] | |
with gr.TabItem("Estimate Head Pose in Crowd"): | |
gr.Markdown( | |
""" | |
### Please insert crowd scene image | |
""" | |
) | |
image_input = gr.Image() | |
with gr.Row(): | |
image_output = [gr.outputs.Image(),gr.outputs.Textbox(type="auto", label="Number of head pose estimated"), | |
] | |
image_button = gr.Button("Estimate") | |
text_button.click(estimate, inputs=image, outputs=outputs) | |
image_button.click(estimate_crowd, inputs=image_input, outputs=image_output) | |
demo.launch() |