if not os.path.isdir("log_data"):
        os.mkdir("log_data")
    if args.record:
        if os.path.isfile("log_data/out_no_vis.avi") or os.path.isfile(
                "log_data/out_with_vis.avi"):
            print("video exist, quitting")
            sys.exit()

        fourcc = cv2.VideoWriter_fourcc(*'X264')

        out_raw = cv2.VideoWriter("log_data/out_no_vis.avi", fourcc, 5.0,
                                  (640, 480))
        out_pose = cv2.VideoWriter("log_data/out_with_vis.avi", fourcc, 5.0,
                                   (640, 480))

    if args.camera == "webcam":
        from threaded_cam import ThreadedCamera
        cap = ThreadedCamera()

    elif args.camera == "jetson":
        from threaded_cam import jetson_csi_camera
        camSet = "nvarguscamerasrc sensor-id=0 ! video/x-raw(memory:NVMM), width=3280, height=2464, framerate=21/1, format=NV12 ! nvvidconv flip-method=0 ! video/x-raw, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink"
        cap = jetson_csi_camera(camSet)

    net = PoseEstimationWithMobileNet()
    checkpoint = torch.load(args.checkpoint_path, map_location='cpu')
    load_state(net, checkpoint)

    run_demo(net, args.height_size, args.track, args.smooth, args.record,
             args.camera)
        lowerY = data["W_hue_min"], data["W_sat_min"], data["W_val_min"]
        upperY = data["W_hue_max"], data["W_sat_max"], data["W_val_max"]
        lane_ROI = np.array([[(data["X1_lane"], data["Y1_lane"]),
                              (data["X2_lane"], data["Y2_lane"]),
                              (data["X3_lane"], data["Y3_lane"]),
                              (data["X4_lane"], data["Y4_lane"])]], np.int32)
        lowerR = data["R_hue_min"], data["R_sat_min"], data["R_val_min"]
        upperR = data["R_hue_max"], data["R_sat_max"], data["R_val_max"]

    except FileNotFoundError as identifier:
        print("no lane config found")
        print("Please configs your robot first.")
        sys.exit()

    if args.camera:
        cap = jetson_csi_camera(CAMSET)

    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BCM)
    BUTTON_PIN = 18
    GPIO.setup(BUTTON_PIN, GPIO.IN)

    while GPIO.input(BUTTON_PIN) == 1:
        pass

    tag = apriltag_reader([131])

    # topY = [lane_ROI[0][0][1], lane_ROI[0][1][1]]
    # highestY = max(topY)

    # lane_ROI[0][0][1] = np.array([0], np.int32)
import cv2
from threaded_cam import jetson_csi_camera
from utils.apriltag_reader import apriltag_reader
from utils.lane_reader import lane

cap = jetson_csi_camera()