kr4phy's picture
Update README.md
e05df18 verified

A newer version of the Gradio SDK is available: 6.5.1

Upgrade
metadata
title: OpenCVLaneDetectionDemo
emoji: ๐Ÿš€
colorFrom: blue
colorTo: indigo
sdk: gradio
sdk_version: 5.49.1
app_file: app.py
pinned: false
license: gpl-3.0

OpenCVLaneDetectionDemo

OpenCV Lane Detection Demo with Gradio

๊ฐœ์š” (Overview)

์ด ํ”„๋กœ์ ํŠธ๋Š” OpenCV๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋””์˜ค์—์„œ ์ฐจ์„ ์„ ๊ฐ์ง€ํ•˜๊ณ , Gradio UI๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

This project is a demo application that detects lane lines in videos using OpenCV and visualizes the results through a Gradio UI.

๊ธฐ๋Šฅ (Features)

  • ๐ŸŽฅ Gradio๋ฅผ ํ†ตํ•œ ๋น„๋””์˜ค ์—…๋กœ๋“œ (Video upload via Gradio)
  • ๐Ÿ›ฃ๏ธ 6๊ฐ€์ง€ ์ฐจ์„  ๊ฒ€์ถœ ๋ฐฉ๋ฒ• ์ œ๊ณต (6 lane detection methods available)
  • ๐Ÿ“Š ์›๋ณธ/์ฒ˜๋ฆฌ ๋น„๋””์˜ค ์‚ฌ์ด๋“œ๋ฐ”์ด์‚ฌ์ด๋“œ ๋น„๊ต (Side-by-side comparison of original and processed videos)
  • ๐Ÿ“ˆ ์‹ค์‹œ๊ฐ„ ์ง„ํ–‰ ์ƒํ™ฉ ํ‘œ์‹œ (Real-time progress tracking with progress bar)
  • ๐Ÿ’ป CLI ๋„๊ตฌ ์ œ๊ณต (Command-line interface available)
  • ๐Ÿงช ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ (Comprehensive test suite)
  • โšก GPU ๊ฐ€์† ์ง€์› (GPU acceleration support when available)

์„ค์น˜ (Installation)

  1. ์ €์žฅ์†Œ ํด๋ก  (Clone the repository):
git clone https://github.com/kr4phy/OpenCVLaneDetectionDemo.git
cd OpenCVLaneDetectionDemo
  1. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ (Install required packages):
pip install -r requirements.txt

์‚ฌ์šฉ๋ฒ• (Usage)

๋ฐฉ๋ฒ• 1: Gradio UI ์‚ฌ์šฉ (Using Gradio UI)

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ (Run the application):
python app.py
  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์œผ๋กœ ์—ด๋ฆฌ๋Š” Gradio UI์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. (The Gradio UI will automatically open in your browser)

  2. ๋น„๋””์˜ค ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ  "Process Video" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. (Upload a video file and click the "Process Video" button)

  3. ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (์™ผ์ชฝ: ์›๋ณธ, ์˜ค๋ฅธ์ชฝ: ์ฐจ์„  ๊ฐ์ง€ ๊ฒฐ๊ณผ). (View the processed result - left: original, right: lane detection result)

๋ฐฉ๋ฒ• 2: CLI ์‚ฌ์šฉ (Using Command Line)

python cli.py input_video.mp4 output_video.mp4 [method]

์˜ˆ์‹œ (Example):

# ํ…Œ์ŠคํŠธ ๋น„๋””์˜ค ์ƒ์„ฑ (Create test video)
python create_test_video.py

# ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฐจ์„  ๊ฐ์ง€ ์ฒ˜๋ฆฌ (Process with different methods)
python cli.py /tmp/test_road_video.mp4 result_advanced.mp4 advanced
python cli.py /tmp/test_road_video.mp4 result_yolop.mp4 yolop
python cli.py /tmp/test_road_video.mp4 result_ufld.mp4 ufld
python cli.py /tmp/test_road_video.mp4 result_scnn.mp4 scnn
python cli.py /tmp/test_road_video.mp4 result_basic.mp4 basic_standard
python cli.py /tmp/test_road_video.mp4 result_segmented.mp4 basic_segmented

์ฐจ์„  ๊ฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Lane Detection Algorithm)

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 6๊ฐ€์ง€ ์ฐจ์„  ๊ฐ์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: (This project provides 6 lane detection methods:)

1. Basic Standard (Hough Transform)

  • Grayscale ๋ณ€ํ™˜ ๋ฐ ๊ฐ€์šฐ์‹œ์•ˆ ๋ธ”๋Ÿฌ
  • Canny ์—์ง€ ๊ฒ€์ถœ
  • Hough ๋ณ€ํ™˜์„ ํ†ตํ•œ ์ง์„  ๊ฒ€์ถœ
  • ๋‹จ์ผ ํ‰๊ท ํ™”๋œ ์ฐจ์„  ํ‘œ์‹œ
  • ์žฅ์ : ๊ฐ€์žฅ ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„
  • ๋‹จ์ : ๊ณก์„  ๋„๋กœ์—์„œ ์ •ํ™•๋„ ๋‚ฎ์Œ

2. Basic Segmented (Hough Transform)

  • Basic Standard์™€ ๋™์ผํ•œ ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ
  • ์—ฌ๋Ÿฌ ์„ ๋ถ„์œผ๋กœ ์ฐจ์„  ํ‘œํ˜„
  • ์žฅ์ : ๊ณก์„  ํ‘œํ˜„ ๊ฐœ์„ , ๋น ๋ฅธ ์ฒ˜๋ฆฌ
  • ๋‹จ์ : ๋ณต์žกํ•œ ์ฐจ์„ ์—์„œ๋Š” ํ•œ๊ณ„

3. Advanced (Perspective Transform + Polynomial)

  • ์›๊ทผ ๋ณ€ํ™˜์œผ๋กœ bird's eye view ์ƒ์„ฑ
  • CLAHE๋ฅผ ์ด์šฉํ•œ ํ–ฅ์ƒ๋œ ๋Œ€๋น„ ๊ฐœ์„ 
  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋ฅผ ํ†ตํ•œ ๋‹คํ•ญ์‹ ํ”ผํŒ…
  • ๊ทธ๋ž˜๋””์–ธํŠธ ๋ฐฉํ–ฅ ํ•„ํ„ฐ๋ง
  • ์žฅ์ : ๋†’์€ ์ •ํ™•๋„, ๊ณก์„  ๋ฐ ์ ์„  ์ฐจ์„  ์šฐ์ˆ˜
  • ๋‹จ์ : ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋А๋ฆผ

4. YOLOP (Multi-task Learning)

  • YOLOP (You Only Look Once for Panoptic Driving) ์˜๊ฐ
  • ๋‹ค์ค‘ ์ƒ‰์ƒ ์ฐจ์„  ๊ฒ€์ถœ (ํฐ์ƒ‰, ๋…ธ๋ž€์ƒ‰)
  • ์ปจํˆฌ์–ด ๊ธฐ๋ฐ˜ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜
  • ์žฅ์ : ๋‹ค์–‘ํ•œ ์ฐจ์„  ์ƒ‰์ƒ ์ธ์‹, ๋น ๋ฅธ ์ฒ˜๋ฆฌ
  • ๋‹จ์ : ๋ณต์žกํ•œ ๋„๋กœ ํ™˜๊ฒฝ์—์„œ ์ •ํ™•๋„ ์ €ํ•˜

5. UFLD (Ultra Fast Lane Detection)

  • Ultra Fast Structure-aware Deep Lane Detection ์˜๊ฐ
  • ํ–‰๋ณ„ ๋ถ„๋ฅ˜ ์ ‘๊ทผ ๋ฐฉ์‹
  • ์ ์‘ํ˜• ์ž„๊ณ„๊ฐ’ ์ฒ˜๋ฆฌ
  • ์žฅ์ : ์†๋„์™€ ์ •ํ™•๋„์˜ ๊ท ํ˜•, ์‹ค์‹œ๊ฐ„ ๊ฐ€๋Šฅ
  • ๋‹จ์ : ๋งค์šฐ ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” SCNN๋ณด๋‹ค ๋‚ฎ์€ ์ •ํ™•๋„

6. SCNN (Spatial CNN)

  • Spatial CNN for traffic lane detection ์˜๊ฐ
  • 4๋ฐฉํ–ฅ ๊ณต๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
  • ๋‹ค์ค‘ ์Šค์ผ€์ผ ์—์ง€ ๊ฒ€์ถœ
  • ์žฅ์ : ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ตœ๊ณ  ์ •ํ™•๋„
  • ๋‹จ์ : ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋‹ค์†Œ ์†Œ์š”๋จ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ ๊ฐ€์ด๋“œ (Selection Guide)

  • ์ตœ๊ณ  ์†๋„: Basic Standard, YOLOP
  • ๊ณก์„  ๋„๋กœ: UFLD, Advanced, Basic Segmented
  • ์ตœ๊ณ  ์ •ํ™•๋„: SCNN, Advanced (Enhanced)
  • ๋‹ค์–‘ํ•œ ์ฐจ์„  ์ƒ‰์ƒ: YOLOP
  • ๊ท ํ˜•์žกํžŒ ์„ฑ๋Šฅ: UFLD

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (Project Structure)

OpenCVLaneDetectionDemo/
โ”œโ”€โ”€ app.py                    # Gradio UI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ”œโ”€โ”€ lane_detection.py         # ํ•ต์‹ฌ ์ฐจ์„  ๊ฒ€์ถœ ๋กœ์ง
โ”œโ”€โ”€ cli.py                    # ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค
โ”œโ”€โ”€ create_test_video.py      # ํ…Œ์ŠคํŠธ ๋น„๋””์˜ค ์ƒ์„ฑ ๋„๊ตฌ
โ”œโ”€โ”€ create_sample_images.py   # ์ƒ˜ํ”Œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋„๊ตฌ
โ”œโ”€โ”€ test_lane_detection.py    # ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ
โ”œโ”€โ”€ requirements.txt          # Python ์˜์กด์„ฑ
โ””โ”€โ”€ README.md                 # ๋ฌธ์„œ

ํ…Œ์ŠคํŠธ (Testing)

์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํ–‰: (Run the complete test suite:)

python test_lane_detection.py

์š”๊ตฌ์‚ฌํ•ญ (Requirements)

  • Python 3.7+
  • gradio>=4.0.0
  • opencv-python>=4.5.0
  • numpy>=1.20.0

๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

  • OpenCV: ์ปดํ“จํ„ฐ ๋น„์ „ ์ฒ˜๋ฆฌ
  • NumPy: ์ˆ˜์น˜ ์—ฐ์‚ฐ
  • Gradio: ์›น UI ํ”„๋ ˆ์ž„์›Œํฌ

๋ผ์ด์„ ์Šค (License)

MIT License

๊ธฐ์—ฌ (Contributing)

์ด์Šˆ์™€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! (Issues and pull requests are welcome!)

๋ฌธ์˜ (Contact)

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด๋‚˜ ์ œ์•ˆ์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”. (For questions or suggestions about the project, please create an issue.)