def find_lane(self):
        img = self.img

        if self.last_frame and self.last_valid_left_lane_found < 12 and self.last_valid_right_lane_found < 12:
            nonzero, left_lane_inds, right_lane_inds = self._extrapolate_from_last_frame(
            )
        else:
            nonzero, left_lane_inds, right_lane_inds = self._sliding_window()

        nonzerox = np.array(nonzero[1])
        nonzeroy = np.array(nonzero[0])

        # Extract left and right line pixel positions
        leftx = nonzerox[left_lane_inds]
        lefty = nonzeroy[left_lane_inds]
        rightx = nonzerox[right_lane_inds]
        righty = nonzeroy[right_lane_inds]

        if len(leftx) == 0:
            print('no left lane')
        if len(rightx) == 0:
            print('not right lane')

        # Fit a second order polynomial to each
        left_fit_polynomial = np.polyfit(lefty, leftx, 2)
        right_fit_polynomial = np.polyfit(righty, rightx, 2)

        # Generate x and y values for plotting
        left_fitx, right_fitx, left_fity, right_fity = self._fit_polynomial_to_lane_data(
            left_fit_polynomial, right_fit_polynomial)

        left_lane = Lane(leftx, lefty, left_fit_polynomial, left_fitx,
                         left_fity)
        right_lane = Lane(rightx, righty, right_fit_polynomial, right_fitx,
                          right_fity)

        if left_lane.calculate_curvature() < 195:
            # import ipdb; ipdb.set_trace()
            left_lane = self.last_frame.left_lane if self.last_frame else None
            self.last_valid_left_lane_found += 1
        else:
            self.last_valid_left_lane_found = 0

        if right_lane.calculate_curvature() < 195:
            # import ipdb; ipdb.set_trace()
            right_lane = self.last_frame.right_lane if self.last_frame else None
            self.last_valid_right_lane_found += 1
        else:
            self.last_valid_right_lane_found = 0

        return left_lane, right_lane