File size: 6,236 Bytes
e0a5f53
 
e05df18
e0a5f53
 
 
e05df18
e0a5f53
 
e05df18
e0a5f53
 
f5b9020
 
2b342d6
 
 
 
 
 
 
 
c15d55f
2b342d6
c15d55f
06417df
 
c15d55f
2b342d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
06417df
 
2b342d6
 
 
 
 
 
 
 
 
 
 
 
 
 
06417df
 
 
c15d55f
06417df
 
 
 
 
 
 
c15d55f
 
 
 
 
 
 
06417df
 
2b342d6
 
c15d55f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
06417df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2b342d6
 
 
06417df
 
 
 
 
 
 
 
2b342d6
 
 
06417df
 
 
 
 
 
 
e05df18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
---
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):
```bash
git clone https://github.com/kr4phy/OpenCVLaneDetectionDemo.git
cd OpenCVLaneDetectionDemo
```

2. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ (Install required packages):
```bash
pip install -r requirements.txt
```

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

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

1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ (Run the application):
```bash
python app.py
```

2. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์œผ๋กœ ์—ด๋ฆฌ๋Š” Gradio UI์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
   (The Gradio UI will automatically open in your browser)

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

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

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

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

์˜ˆ์‹œ (Example):
```bash
# ํ…Œ์ŠคํŠธ ๋น„๋””์˜ค ์ƒ์„ฑ (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:)

```bash
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.)