def _get_in_out_for_camera(camera_id: str): in_out_file_path = InOutMetric.get_in_out_file_path( camera_id, get_config()) in_out_boundaries = InOutMetric.read_in_out_boundaries(in_out_file_path) if not in_out_boundaries: return [] return [{ "name": in_out["name"], "ax": in_out['in_out_boundary'][0][0], "ay": in_out['in_out_boundary'][0][1], "bx": in_out['in_out_boundary'][1][0], "by": in_out['in_out_boundary'][1][1], } for in_out in in_out_boundaries["in_out_boundaries"]]
async def get_in_out_boundaries(camera_id: str): """ Get the In/Out Boundaries for a camera. Each In/Out boundary in the list is represented by a name and: Two coordinates `[x,y]` are given in 2-tuples `[A,B]`. These points form a **line**. - If someone crosses the **line** while having **A** to their right, they are going in the `in` direction (entering). - Crossing the **line** while having **A** to their left means they are going in the `out` direction (leaving). """ validate_camera_existence(camera_id) in_out_file_path = InOutMetric.get_in_out_file_path(camera_id, settings.config) in_out_boundaries = InOutMetric.read_in_out_boundaries(in_out_file_path) if in_out_boundaries is None: error_detail = f"There is no defined In/Out Boundary for {camera_id}" raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=error_detail) return InOutBoundaries(**dict(in_out_boundaries))
async def remove_in_out_boundaries(camera_id: str, reboot_processor: Optional[bool] = True): """ Delete the defined In/Out boundaries for a camera. """ validate_camera_existence(camera_id) in_out_file_path = InOutMetric.get_in_out_file_path(camera_id, settings.config) if not validate_file_exists_and_is_not_empty(in_out_file_path): detail = f"There is no defined In/Out Boundary for {camera_id}" raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=detail) os.remove(in_out_file_path) success = restart_processor() if reboot_processor else True return handle_response(None, success, status.HTTP_204_NO_CONTENT)
def map_camera(camera_name, config, options=[]): camera_dict = map_section_from_config(camera_name, config) camera = config.get(camera_name) camera_id = camera.get("Id") image_string = None if "withImage" in options: image_string = get_camera_default_image_string(camera_id) camera_dict["image"] = image_string calibration_file_path = get_camera_calibration_path(settings.config, camera_id) camera_dict["has_been_calibrated"] = validate_file_exists_and_is_not_empty(calibration_file_path) roi_file_path = ObjectsFilteringPostProcessor.get_roi_file_path(camera_id, settings.config) camera_dict["has_defined_roi"] = validate_file_exists_and_is_not_empty(roi_file_path) in_out_file_path = InOutMetric.get_in_out_file_path(camera_id, settings.config) camera_dict["has_in_out_border"] = validate_file_exists_and_is_not_empty(in_out_file_path) return camera_dict
async def add_or_replace_in_out_boundaries(camera_id: str, body: InOutBoundaries, reboot_processor: Optional[bool] = True): """ Create or replace the In/Out boundaries for a camera. Each In/Out boundary in the list is represented by a name and: Two coordinates `[x,y]` are given in 2-tuples `[A,B]`. These points form a **line**. - If someone crosses the **line** while having **A** to their right, they are going in the `in` direction (entering). - Crossing the **line** while having **A** to their left means they are going in the `out` direction (leaving). """ validate_camera_existence(camera_id) in_out_file_path = InOutMetric.get_in_out_file_path(camera_id, settings.config) dir_path = Path(in_out_file_path).parents[0] Path(dir_path).mkdir(parents=True, exist_ok=True) in_out_boundaries = body.dict() with open(in_out_file_path, "w") as outfile: json.dump(in_out_boundaries, outfile) restart_processor() if reboot_processor else True return body