I am applying the approach by Naoki Shibuya, which uses moviepy for splitting a video file into sequential images, and then applying the lane detection algorithm. This draws red markers over detected lanes in dashcam footage.
QUEUE_LENGTH=50 class LaneDetector: def __init__(self): self.left_lines = deque(maxlen=QUEUE_LENGTH) self.right_lines = deque(maxlen=QUEUE_LENGTH) def mean_line(self, line, lines): if line is not None: lines.append(line) if len(lines)>0: line = np.mean(lines, axis=0, dtype=np.int32) line = tuple(map(tuple, line)) return line def process(self, image): try: white_yellow = select_white_yellow(image) gray = convert_gray_scale(white_yellow) smooth_gray = apply_smoothing(gray) edges = detect_edges(smooth_gray) regions = select_region(edges) lines = hough_lines(regions) left_line, right_line = lane_lines(image, lines) left_line = self.mean_line(left_line, self.left_lines) right_line = self.mean_line(right_line, self.right_lines) return draw_lane_lines(image, (left_line, right_line)) except: #traceback.print_exc() return image def process_video(dirpath, video_file): video_outfile = os.path.splitext(video_file) + '.mp4' detector = LaneDetector() clip = VideoFileClip(os.path.join(dirpath, video_file)) processed = clip.fl_image(detector.process) print(os.path.join('output', video_file)) processed.write_videofile(os.path.join('output', video_outfile), audio=False)
The Canny Edge Detection algorithm worked well once I cropped out the yellow text my dashcam overlays on the footage from the area of interest. However, it’s not perfect as you see in this sample clip where:
Overall, this algorithm does a pretty good job of detecting lanes in dashcam footage, however taking 30 minutes or more to process 3 minutes of dashcam footage isn’t a reasonable approach. I would not want to drive in that vehicle!
There are two directions I’d like to follow up on: