Exemplo n.º 1
0
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)
Exemplo n.º 3
0
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)