def openpose_detect(request): """ Use OpenPose to extract human skeleton points from a given image. """ if myOpenPose is None: error = "OpenPose not supported on this server" logger.error(prepend_ip("%s" % error, request)) ret = {"success": "false", "error": error} json_ret = json.dumps(ret) return HttpResponse(json_ret, status=501) logger.debug(prepend_ip("Request received: %s" % request, request)) if request.method != 'POST': return HttpResponseBadRequest("Must send frame as a POST") if request.content_type != 'application/x-www-form-urlencoded': return HttpResponseBadRequest( "Content-Type must be 'application/x-www-form-urlencoded'") if request.POST.get("image", "") == "": return HttpResponseBadRequest("Missing 'image' parameter") image = base64.b64decode(request.POST.get("image")) logger.debug( prepend_ip( "Size of received image: %d" % (len(request.POST.get("image"))), request)) save_debug_image(image, request) image = imread(io.BytesIO(image)) logger.debug(prepend_ip("Performing pose detection process", request)) start = time.time() datum = myOpenPose.Datum() datum.cvInputData = image myOpWrapper.emplaceAndPop([datum]) poses = datum.poseKeypoints # Return the human pose poses, i.e., a [#people x #poses x 3]-dimensional numpy object with the poses of all the people on that image elapsed = "%.3f" % ((time.time() - start) * 1000) poses2 = np.around(poses, decimals=6) # poses2 = np.rint(poses) # Create a JSON response to be returned in a consistent manner if isinstance(poses2, np.float32) or len(poses2) == 0: num_poses = 0 ret = {"success": "false", "server_processing_time": elapsed} else: num_poses = len(poses2) ret = { "success": "true", "server_processing_time": elapsed, "poses": poses2.tolist() } logger.info( prepend_ip("%s ms to detect %d poses: %s" % (elapsed, num_poses, ret), request)) json_ret = json.dumps(ret) return HttpResponse(json_ret)
def receive(self, text_data=None, bytes_data=None): if bytes_data != None: if myOpenPose == None: error = "OpenPose not supported" logger.error(error) ret = { "success": "false", "error": error, "server_processing_time": 0 } else: image = imread(io.BytesIO(bytes_data)) logger.debug("Performing pose detection process") start = time.time() datum = myOpenPose.Datum() datum.cvInputData = image myOpWrapper.emplaceAndPop([datum]) poses = datum.poseKeypoints # Return the human pose poses, i.e., a [#people x #poses x 3]-dimensional numpy object with the poses of all the people on that image elapsed = "%.3f" % ((time.time() - start) * 1000) poses2 = np.around(poses, decimals=6) # poses2 = np.rint(poses) # Create a JSON response to be returned in a consistent manner if isinstance(poses2, np.float32) or len(poses2) == 0: num_poses = 0 ret = { "success": "false", "server_processing_time": elapsed } else: num_poses = len(poses2) ret = { "success": "true", "server_processing_time": elapsed, "poses": poses2.tolist() } response = json.dumps(ret) else: logger.info("text_data=%s" % (text_data)) # If text is received, just echo back what we received. response = text_data logger.info("response=%s" % response) self.send(text_data=response)
def openpose_detect(request): """ Use OpenPose to extract human skeleton points from a given image. """ if myOpenPose is None: error = "OpenPose not supported on this server" logger.error(prepend_ip("%s" % error, request)) ret = {"success": "false", "error": error} json_ret = json.dumps(ret) return HttpResponse(json_ret, status=501) logger.debug(prepend_ip("Request received: %s" % request, request)) image = get_image_from_request(request, "pose") if not isinstance(image, np.ndarray): return image logger.debug(prepend_ip("Performing pose detection process", request)) start = time.time() datum = myOpenPose.Datum() datum.cvInputData = image myOpWrapper.emplaceAndPop([datum]) poses = datum.poseKeypoints # Return the human pose poses, i.e., a [#people x #poses x 3]-dimensional numpy object with the poses of all the people on that image elapsed = "%.3f" % ((time.time() - start) * 1000) poses2 = np.around(poses, decimals=6) # poses2 = np.rint(poses) # Create a JSON response to be returned in a consistent manner if isinstance(poses2, np.float32) or len(poses2) == 0: num_poses = 0 ret = {"success": "false", "server_processing_time": elapsed} else: num_poses = len(poses2) ret = { "success": "true", "server_processing_time": elapsed, "poses": poses2.tolist() } logger.info( prepend_ip("%s ms to detect %d poses: %s" % (elapsed, num_poses, ret), request)) json_ret = json.dumps(ret) return HttpResponse(json_ret)