This commit is contained in:
Kenny Cheng 2024-10-27 22:05:36 +08:00
parent 5268543b7a
commit 624eba00b0
1 changed files with 47 additions and 24 deletions

41
app.py
View File

@ -81,9 +81,19 @@ def get_predicted_coordinates(coordinates: list, width: int, height: int) -> lis
# when testing, can visualize with the method expo_save_bodypose in openpose_gen.py # when testing, can visualize with the method expo_save_bodypose in openpose_gen.py
predicted = pred.predict_pose_keypoints(np.array(coordinates).reshape(1, 18, 3)) #try:
predicted[:, :, 3] = 1 # predicted = pred.predict_pose_keypoints(np.array(coordinates, dtype=np.float32).copy().reshape(1, 18, 3))
return predicted.flatten().tolist() # # add confidence score
# predicted = np.concatenate((predicted, np.ones((1, 18, 1))), axis=2)
# print(predicted.flatten().tolist())
# print('done')
# return predicted.flatten().tolist()
#except Exception as e:
# print(e)
# pass
#predicted[:, :, 3] = 1
#return predicted.flatten().tolist()
# for now, just mirror the coordinates and add some random deviation # for now, just mirror the coordinates and add some random deviation
predicted_coordinates = mirror_coordinates(coordinates, width) predicted_coordinates = mirror_coordinates(coordinates, width)
@ -96,9 +106,10 @@ def get_predicted_coordinates(coordinates: list, width: int, height: int) -> lis
return predicted_coordinates return predicted_coordinates
def mirror_coordinates(coordinates: list, width: int) -> list: def mirror_coordinates(coordinates: list, width: int) -> list:
mirrored = coordinates.copy()
for i in range(0, len(coordinates), 3): for i in range(0, len(coordinates), 3):
coordinates[i] = width - coordinates[i] mirrored[i] = width - coordinates[i]
return coordinates return mirrored
def expo_fencer_prompt(openpose_image_path, save_dir, batch, step): def expo_fencer_prompt(openpose_image_path, save_dir, batch, step):
@ -136,11 +147,12 @@ def expo_clear_images():
@app.route('/expo_postprocess', methods=['POST']) @app.route('/expo_postprocess', methods=['POST'])
async def expo_postprocess(): async def expo_postprocess():
global on_postprocessing global on_postprocessing
try:
if on_postprocessing: if on_postprocessing:
return jsonify({"status": "error", "message": "Postprocessing in progress"}), 503 return jsonify({"status": "error", "message": "Postprocessing in progress"}), 503
on_postprocessing = True on_postprocessing = True
print("Postprocessing") print("pending postprocessing")
# Wait until the directories have the same files or timeout # Wait until the directories have the same files or timeout
if not await wait_for_files_to_match(expo_openpose_dir, expo_raw_sd_dir): if not await wait_for_files_to_match(expo_openpose_dir, expo_raw_sd_dir):
@ -154,11 +166,18 @@ async def expo_postprocess():
on_postprocessing = False on_postprocessing = False
return jsonify({"status": "error", "message": "No images to process in expo_raw_sd_dir"}), 404 return jsonify({"status": "error", "message": "No images to process in expo_raw_sd_dir"}), 404
print("Postprocessing")
await asyncio.to_thread(expo_postprocess_main) await asyncio.to_thread(expo_postprocess_main)
await asyncio.to_thread(expo_clear_images)
on_postprocessing = False
print("Postprocessing completed")
return jsonify({"status": "success", "message": "Postprocessing completed"}), 200 return jsonify({"status": "success", "message": "Postprocessing completed"}), 200
except Exception as e:
on_postprocessing = False
print(e)
return jsonify({"status": "error", "message": "An error occurred during postprocessing"}), 500
finally:
on_postprocessing = False
await asyncio.to_thread(expo_clear_images)
print("Postprocessing completed")
async def wait_for_files_to_match(dir1: str, dir2: str, timeout: int = 180, interval: int = 1) -> bool: async def wait_for_files_to_match(dir1: str, dir2: str, timeout: int = 180, interval: int = 1) -> bool:
@ -208,6 +227,10 @@ def gen_group_pic():
canvas_size = data['canvas_size'] canvas_size = data['canvas_size']
pid = data['pid'] pid = data['pid']
base_image = base64.b64decode(data['base_image']) base_image = base64.b64decode(data['base_image'])
# resize base image to 1280x720
#base_image = cv2.imdecode(np.frombuffer(base_image, np.uint8), cv2.IMREAD_COLOR)
#base_image = cv2.resize(base_image, (1280, 720))
#base_image = cv2.imencode('.png', base_image)[1].tobytes()
if not coordinates_list or not canvas_size or not base_image or not pid: if not coordinates_list or not canvas_size or not base_image or not pid:
return jsonify({"status": "error", "message": "Missing data"}), 422 return jsonify({"status": "error", "message": "Missing data"}), 422