Beispiel #1
0
    def __call__(self, raw_results, cam):
        # fire filter
        cam_function = cam.function
        cam_info = cam_function.get(self.func_name, {})
        cam_reverse = cam_info.get("reverse", False)
        filter_results = []
        if cam_info.get("enable", False):
            logging.info("_apply_{}_filter:: filtering...".format(
                self.func_name))
            cam_zones = cam_info.get("zones", [])
            if cam_zones == []:
                logging.info("apply_{}_filter:: zones: whole img".format(
                    self.func_name))
                for result in raw_results:
                    if result[0] == 'person':
                        result_temp = copy.deepcopy(result)
                        result_temp[0] = "pata"
                        result_temp[2] = str(int(result_temp[2]) - 15)
                        result_temp[4] = str(int(result_temp[4]) + 15)
                        result_temp[5] = str(
                            3 * (int(result_temp[5]) - int(result_temp[3])) +
                            int(result_temp[5]))
                        filter_results.append(result_temp)
            else:
                logging.info("_apply_{}_filter:: zones: {}".format(
                    self.func_name, cam_zones))
                for result in raw_results:
                    in_flag = False
                    if result[0] == "person":
                        result_temp = copy.deepcopy(result)
                        result_temp[0] = "pata"
                        result_temp[2] = str(int(result_temp[2]) - 15)
                        result_temp[4] = str(int(result_temp[4]) + 15)
                        result_temp[5] = str(
                            3 * (int(result_temp[5]) - int(result_temp[3])) +
                            int(result_temp[5]))
                        left_down_x = int(result[2])
                        right_down_x = int(result[4])
                        down_y = int(result[5])
                        check_point = {
                            "x": int((left_down_x + right_down_x) / 2),
                            "y": down_y
                        }
                        for zone in cam_zones:
                            check_point_inside = _isInsidePolygon(
                                check_point, zone)
                            if check_point_inside:
                                in_flag = True
                        if cam_reverse:
                            if not in_flag:
                                filter_results.append(result_temp)
                        else:
                            if in_flag:
                                filter_results.append(result_temp)

        logging.info("_apply_{}_filter:: results: {}".format(
            self.func_name, filter_results))
        parse_results = reslove_result(filter_results, self.func_name)
        return parse_results
Beispiel #2
0
    def __call__(self, raw_results, cam):
        # mask filter
        cam_function = cam.function
        cam_info = cam_function.get(self.func_name, {})
        cam_reverse = cam_info.get("reverse", False)
        filter_results = []
        if cam_info.get("enable", False):
            logging.info("_apply_{}_filter:: filtering...".format(
                self.func_name))
            cam_zones = cam_info.get("zones", [])
            if cam_zones == []:
                logging.info("apply_{}_filter:: zones: whole img".format(
                    self.func_name))
                for result in raw_results:
                    if result[0] == 'movement':
                        filter_results.append(result)
            else:
                logging.info("_apply_{}_filter:: zones: {}".format(
                    self.func_name, cam_zones))
                for result in raw_results:
                    in_flag = False
                    if result[0] == "movement":
                        left_leg_x = int(result[2])
                        right_leg_x = int(result[4])
                        leg_y = int(result[5])
                        check_point = {
                            "x": int((left_leg_x + right_leg_x) / 2),
                            "y": leg_y
                        }
                        for zone in cam_zones:
                            check_point_inside = _isInsidePolygon(
                                check_point, zone)
                            if check_point_inside:
                                in_flag = True
                        if cam_reverse:
                            if not in_flag:
                                filter_results.append(result)
                        else:
                            if in_flag:
                                filter_results.append(result)

        logging.info("_apply_{}_filter:: results: {}".format(
            self.func_name, filter_results))
        parse_results = reslove_result(filter_results, self.func_name)
        return parse_results
Beispiel #3
0
    def __call__(self, raw_results, cam):
        # fire filter
        cam_function = cam.function
        cam_info = cam_function.get(self.func_name, {})
        cam_reverse = cam_info.get("reverse", False)
        filter_results = []
        if cam_info.get("enable", False):
            logging.info("_apply_{}_filter:: filtering...".format(
                self.func_name))
            cam_zones = cam_info.get("zones", [])
            if cam_zones == []:
                logging.info("apply_{}_filter:: zones: whole img".format(
                    self.func_name))
                for result in raw_results:
                    if result[0] == 'huoyan':
                        filter_results.append(result)
            else:
                logging.info("_apply_{}_filter:: zones: {}".format(
                    self.func_name, cam_zones))
                for result in raw_results:
                    in_flag = False
                    if result[0] == "huoyan":
                        min_point = {'x': int(result[2]), 'y': int(result[3])}
                        max_point = {'x': int(result[4]), 'y': int(result[5])}
                        for zone in cam_zones:
                            is_min_inside = _isInsidePolygon(min_point, zone)
                            is_max_inside = _isInsidePolygon(max_point, zone)
                            if is_min_inside or is_max_inside:
                                in_flag = True
                        if cam_reverse:
                            if not in_flag:
                                filter_results.append(result)
                        else:
                            if in_flag:
                                filter_results.append(result)

        logging.info("_apply_{}_filter:: results: {}".format(
            self.func_name, filter_results))
        parse_results = reslove_result(filter_results, self.func_name)
        return parse_results
Beispiel #4
0
    def __call__(self, raw_results, cam):
        # leave filter
        cam_function = cam.function
        cam_info = cam_function.get(self.func_name, {})
        cam_reverse = cam_info.get("reverse", False)
        aggreagate_time = functl.get(self.func_name).get("aggreagate", 300)
        filter_results = []
        if cam_info.get("enable", False):
            logging.info("_apply_{}_filter:: filtering...".format(
                self.func_name))
            cam_zones = cam_info.get("zones", [])
            cam_detected_times = cam.detected_times
            _, _, ts = clock.now()
            if cam_zones == []:
                logging.info("apply_{}_filter:: zones: whole img".format(
                    self.func_name))
                logging.info(
                    "last detected time is:: {}, current time is:: {}".format(
                        clock._get_csttz_dt(cam_detected_times[0]),
                        clock._get_csttz_dt(ts)))
                detected_flag = False
                for result in raw_results:
                    if result[0] == 'person_body':
                        detected_flag = True
                if detected_flag:
                    cam_detected_times = [ts]
                    camctl.update(cam.uuid,
                                  {"detected_times": cam_detected_times})
                else:
                    if (ts - cam_detected_times[0]) > aggreagate_time:
                        return_result = ["leave", 0.666, "0", "0", "1", "1"]
                        filter_results.append(return_result)
            else:
                logging.info("_apply_{}_filter:: zones: {}".format(
                    self.func_name, cam_zones))
                if len(cam_detected_times) != len(cam_zones):
                    cam_detected_times = [ts] * len(cam_zones)

                for result in raw_results:
                    in_flag = False
                    in_index = -1
                    if result[0] == "person_body":
                        left_leg_x = int(result[2])
                        right_leg_x = int(result[4])
                        leg_y = int(result[5])
                        check_point = {
                            "x": int((left_leg_x + right_leg_x) / 2),
                            "y": leg_y
                        }
                        for i, zone in enumerate(cam_zones):
                            check_point_inside = _isInsidePolygon(
                                check_point, zone)
                            if check_point_inside:
                                in_flag = True
                                in_index = i
                        if in_flag:
                            cam_detected_times[in_index] = ts
                camctl.update(cam.uuid, {"detected_times": cam_detected_times})
                for i, zone in enumerate(cam_zones):
                    detected_time = cam_detected_times[i]
                    logging.info(
                        "zone {} @ last detected time is:: {}, current time is:: {}"
                        .format(i, clock._get_csttz_dt(detected_time),
                                clock._get_csttz_dt(ts)))
                    if (ts - detected_time) > aggreagate_time:
                        xmin = str(zone[0]["x"])
                        ymin = str(zone[0]["y"])
                        xmax = str(zone[2]["x"])
                        ymax = str(zone[2]["y"])
                        return_result = [
                            "leave", 0.666, xmin, ymin, xmax, ymax
                        ]
                        filter_results.append(return_result)
                        """
                        if cam_reverse:
                            if not in_flag:
                                filter_results.append(result)
                        else:
                            if in_flag:
                                filter_results.append(result)
                        """

        logging.info("_apply_{}_filter:: results: {}".format(
            self.func_name, filter_results))
        parse_results = reslove_result(filter_results, self.func_name)
        return parse_results