diff --git a/paddlehub/common/utils.py b/paddlehub/common/utils.py index 2ac04673151c876cee0982caac2da34b6a494977..5aa4f7a3f71d338ad679652e0e2175bed219c276 100644 --- a/paddlehub/common/utils.py +++ b/paddlehub/common/utils.py @@ -65,10 +65,14 @@ def base64s_to_cvmats(base64s): return base64s -def handle_mask_results(results): +def handle_mask_results(results, data_len): result = [] - if len(results) <= 0: - return results + if len(results) <= 0 and data_len != 0: + return [{ + "data": "No face.", + "id": i, + "path": "" + } for i in range(1, data_len + 1)] _id = results[0]["id"] _item = { "data": [], @@ -87,6 +91,15 @@ def handle_mask_results(results): "id": item.get("id", _id) } result.append(_item) + for index in range(1, data_len + 1): + if index > len(result): + result.append({"data": "No face.", "id": index, "path": ""}) + elif result[index - 1]["id"] != index: + result.insert(index - 1, { + "data": "No face.", + "id": index, + "path": "" + }) return result diff --git a/paddlehub/serving/app_single.py b/paddlehub/serving/app_single.py index 1cfeb94f83b148209a58c5b0020d0bab38eb4aff..f73c1814f6fca14cb415b1aa60b750ea1b8e0ad4 100644 --- a/paddlehub/serving/app_single.py +++ b/paddlehub/serving/app_single.py @@ -140,6 +140,8 @@ def predict_mask(module, input_img, id, batch_size, extra=None, r_img=True): global use_gpu method_name = module.desc.attr.map.data['default_signature'].s predict_method = getattr(module, method_name) + data_len = len(input_img) + results = [] try: data = {} if input_img is not None: @@ -153,7 +155,7 @@ def predict_mask(module, input_img, id, batch_size, extra=None, r_img=True): visualization=r_img, use_gpu=use_gpu, batch_size=batch_size) - results = utils.handle_mask_results(results) + results = utils.handle_mask_results(results, data_len) except Exception as err: curr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) print(curr, " - ", err) @@ -170,20 +172,27 @@ def predict_mask(module, input_img, id, batch_size, extra=None, r_img=True): input_img = input_img.get("image", []) for index in range(len(input_img)): item = input_img[index] - with open(os.path.join(output_folder, item), "rb") as fp: - b_head = "data:image/" + item.split(".")[-1] + ";base64" - b_body = base64.b64encode(fp.read()) - b_body = str(b_body).replace("b'", "").replace("'", "") - b_img = b_head + "," + b_body - base64_list.append(b_img) - results[index]["path"] = results[index]["path"].replace( - id + "_", "") if results[index]["path"] != "" \ - else "" - - results[index].update({"base64": b_img}) + file_path = os.path.join(output_folder, item) + if not os.path.exists(file_path): results_pack.append(results[index]) - os.remove(item) - os.remove(os.path.join(output_folder, item)) + os.remove(item) + else: + with open(file_path, "rb") as fp: + b_head = "data:image/" + item.split( + ".")[-1] + ";base64" + b_body = base64.b64encode(fp.read()) + b_body = str(b_body).replace("b'", "").replace( + "'", "") + b_img = b_head + "," + b_body + base64_list.append(b_img) + results[index]["path"] = results[index]["path"].replace( + id + "_", "") if results[index]["path"] != "" \ + else "" + + results[index].update({"base64": b_img}) + results_pack.append(results[index]) + os.remove(item) + os.remove(os.path.join(output_folder, item)) else: results_pack = results