Spaces:
Running
Running
File size: 2,121 Bytes
e469eba |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import gradio as gr
import pandas as pd
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tf_bodypix.api import download_model, load_model, BodyPixModelPaths
from tf_bodypix.draw import draw_poses # utility function using OpenCV
from tensorflow.keras import preprocessing
import cv2
import json
import numpy as np
from calculations import measure_body_sizes
# Load BodyPix model
bodypix_model = load_model(download_model(BodyPixModelPaths.MOBILENET_FLOAT_50_STRIDE_16))
def process_images(front_img, side_img, height):
# Convert images to image arrays
front_image_array = preprocessing.image.img_to_array(front_img)
side_image_array = preprocessing.image.img_to_array(side_img)
# BodyPix prediction
result = bodypix_model.predict_single(front_image_array)
mask = result.get_mask(threshold=0.75)
# colored_mask = result.get_colored_part_mask(mask)
poses = result.get_poses()
print(f'shape of poses: {np.shape(poses)}')
print(poses)
# image_with_poses = draw_poses(
# front_image_array.copy(), # create a copy to ensure we are not modifying the source image
# poses,
# keypoints_color=(255, 100, 100),
# skeleton_color=(100, 100, 255)
# )
# Measure body sizes using poses and real height
body_sizes = measure_body_sizes(poses, height)
print(f'Body sizes: {body_sizes}')
# Prepare the output images
# front_image_with_poses = preprocessing.image.array_to_img(image_with_poses)
# Convert measurements to DataFrame for display
measurements_df = pd.DataFrame(body_sizes)
return measurements_df
# Create the Gradio interface
interface = gr.Interface(
fn=process_images,
inputs=[
gr.Image(label="Upload Front Pose"),
gr.Image(label="Upload Side Pose"),
gr.Number(label="Enter Height (cm)")
],
outputs=[
gr.DataFrame(label="Body Measurements")
],
title="Body Sizing System Demo",
description="Upload two images: Front View and Side View, and input the height in cm."
)
# Launch the app
interface.launch(share=False) |