у меня есть робот который отслеживает камерой aruco маркеры, сейчас я тебе пришлю одну из функций программы, проанализируй ее и усовершенствуй код, и напиши рекомендации по изменению: 
def video():
    print('Start video')
    flag3 = 0
    defaultRC1 = defaultRC3 = 1500
    modRC1 = 0
    modRC3 = 0
    modRC5 = 1500
    k = 35
    min_dist = 100
    calib_data_path = r"//home/zhuk/Desktop/CAMERA/zvuk/dist/Distance Estimation/MultiMatrix.npz"
    calib_data = np.load(calib_data_path)
    cam_mat = calib_data["camMatrix"]
    dist_coef = calib_data["distCoef"]

    marker_dict = aruco.getPredefinedDictionary(aruco.DICT_5X5_50)
    param_markers = aruco.DetectorParameters()
    detector = aruco.ArucoDetector(dictionary=marker_dict, detectorParams=param_markers)
    cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 540)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 960)
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
    framecenterx = width / 2
    framecentery = height / 2
    while True:
        _, frame = cap.read()
        frame = cv2.rotate(frame, cv2.ROTATE_180)
        grayframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        grayblurredframe = cv2.GaussianBlur(grayframe, (5, 5), 0)
        grayblurredframe = np.expand_dims(grayblurredframe, axis=2)
        grayblurredframe = np.append(grayblurredframe, grayblurredframe, axis=2)
        grayblurredframe = np.append(grayblurredframe, grayblurredframe, axis=2)
        cv2.line(grayframe, (0, int(framecentery - height / 5)), (int(width), int(framecentery - height / 5)),
                 (0, 255, 255), thickness=2)
        cv2.line(grayframe, (0, int(framecentery + height / 5)), (int(width), int(framecentery + height / 5)),
                 (0, 255, 255), thickness=2)
        cv2.line(grayframe, (int(framecenterx - width / 10), 0), (int(framecenterx - width / 10), int(height)),
                 (0, 255, 255), thickness=2)
        cv2.line(grayframe, (int(framecenterx + width / 10), 0), (int(framecenterx + width / 10), int(height)),
                 (0, 255, 255), thickness=2)
        if flag1.value == 1:
            marker_corners, markers_IDs, reject = detector.detectMarkers(grayblurredframe)  # grayblurredframe
            if marker_corners:
                total_markers = range(0, markers_IDs.size)
                for ids, corners, i in zip(markers_IDs, marker_corners, total_markers):
                    distance = calc_distance(cam_mat, dist_coef, marker_corners, i)
                    print('distance = ', distance)
                    cv2.polylines(grayframe, [corners.astype(np.int32)], True, (0, 255, 255), 4, cv2.LINE_AA)
                    corners = corners.reshape(4, 2)
                    corners = corners.astype(int)
                    top_right = corners[2].ravel()
                    cv2.putText(grayframe, f"id: {ids[0]}", top_right, cv2.FONT_HERSHEY_PLAIN, 1.3, (0, 255, 0), 2,
                                cv2.LINE_AA)
                    print('markers_IDs = ', markers_IDs)
                    if markers_IDs[0][0] == 0:
                        flag3 = 1
                        centerx = marker_corners[0][0][0][0] + (
                                    marker_corners[0][0][2][0] - marker_corners[0][0][0][0]) / 2
                        centery = marker_corners[0][0][0][1] + (
                                    marker_corners[0][0][2][1] - marker_corners[0][0][0][1]) / 2
                        rectsqr = (marker_corners[0][0][1][0] - marker_corners[0][0][0][0]) ** 2 + (
                                    marker_corners[0][0][1][1] - marker_corners[0][0][0][1]) ** 2
                        sqrmax = int((width / 5) ** 2)
                        sqrmin = int((width / 10) ** 2)
                        sqrdelta = sqrmax - sqrmin
                        cv2.circle(grayframe, (int(centerx), int(centery)), radius=2, color=(255, 0, 0), thickness=-1)
                        if centerx < framecenterx - width / 10 or centerx > framecenterx + width / 10:
                            # если слева или справа от центра
                            if rectsqr < sqrmax and rectsqr > sqrmin:
                                # если средний маркер, расчитываем пропорционально размерам                                           
                                modRC1 = int(1500 - (400 * ((framecenterx - centerx) / framecenterx)))
                                modRC3 = 1500
                                print('Midle, outside, modRC1 = ', modRC1, 'modRC3 = ', modRC3)
                            if rectsqr <= sqrmin:
                                # если маленький маркер, набираем скорость
                                modRC1 = int(1500 - (520 * ((framecenterx - centerx) / framecenterx)))
                                modRC3 = 1500
                                print()
                                print('coef = ', (framecenterx - centerx) / framecenterx)
                                print()
                                print('Small, outside, modRC1 = ', modRC1, 'modRC3 = ', modRC3)
                            if rectsqr >= sqrmax:
                                # если большой маркер, то остановка
                                modRC1 = int(1500 - (400 * ((framecenterx - centerx) / framecenterx)))
                                modRC3 = 1500
                                print('Big, outside, modRC1 = ', modRC1, 'modRC3 = ', modRC3)
                        if centerx >= framecenterx - width / 10 and centerx <= framecenterx + width / 10:
                            if rectsqr < sqrmax and rectsqr > sqrmin:
                                # если средний маркер, расчитываем пропорционально размерам 
                                modRC1 = 1500
                                modRC3 = int(1500 + (200 + 200 * ((sqrmax - rectsqr) / sqrdelta)))
                                print('Midle, inside, modRC1 = ', modRC1, 'modRC3 = ', modRC3)
                            if rectsqr <= sqrmin:
                                # если маленький маркер, набираем скорость
                                modRC1 = 1500
                                modRC3 = 1900
                                print('small, inside, modRC1 = ', modRC1, 'modRC3 = ', modRC3)
                            if rectsqr >= sqrmax:
                                # если большой маркер, то остановка
                                modRC1 = 1500
                                modRC3 = 1500
                                print('Big, inside, modRC1 = ', modRC1, 'modRC3 = ', modRC3)
                        if distance <= min_dist + min_dist * 0.1 and distance >= min_dist - min_dist * 0.1:
                            # ~ modRC1 = 1500
                            modRC3 = 1500
                        elif distance <= min_dist - min_dist * 0.1:
                            modRC1 = 1500
                            modRC3 = 1200
                        if centery >= framecentery + height / 5:
                            if (modRC5 + k) <= 2000:
                                modRC5 += k
                            else:
                                modRC5 = 2000
                            print('nizko = ', modRC5)
                        if centery <= framecentery - height / 5:
                            if (modRC5 - k) >= 1000:
                                modRC5 -= k
                            else:
                                modRC5 = 1000
                            print('visoko = ', modRC5)
                        print('Send params: RC1 = ', modRC1, 'RC3 = ', modRC3, 'RC5 = ', modRC5)
                        send_command(modRC1, modRC3, modRC5)