Ngôn Ngữ Lập Trình Python và Viết Ứng Dụng Nhận Diện Làn Đường Với OpenCV

Khám phá ngôn ngữ lập trình Python và cách phát triển ứng dụng với OpenCV trong bài viết này. Tìm hiểu các kỹ thuật và ứng dụng thực tiễn.

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Đồ án môn học

2020

54
3
0

Phí lưu trữ

30 Point

Mục lục chi tiết

1. CHƯƠNG 1: TÌM HIỂU NGÔN NGỮ LẬP TRÌNH PYTHON

1.1. Giới thiệu ngôn ngữ lập trình Python

1.2. Lịch sử phát triển. Một số điểm khác nhau giữa phiên bản 3x và 2x. Đặc điểm của Python

1.3. Hướng dẫn cài đặt bằng Anaconda/Miniconda

1.3.1. Giới thiệu Ananconda/Miniconda và cài đặt

1.3.2. Download Anaconda/Miniconda và hướng dẫn cài đặt

1.3.3. Hướng dẫn cài thêm thư viện bằng conda

2. CHƯƠNG 2: TÌM HIỂU XỬ LÝ ẢNH VÀ THƯ VIỆN OPENCV

2.1. Tìm hiểu môn học xử lý ảnh

2.2. Lịch sử phát triển

2.3. Các lĩnh vực ứng dụng

2.4. Phương pháp xử lý ảnh

3. CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG

3.1. Nêu bài toán

3.2. Các bước thực hiện

3.2.1. Bước 1: Đọc và tiền xử lý hình ảnh

3.2.2. Bước 2: Tạo xử lý hình ảnh

3.2.3. Bước 3: Xử lý nhận dạng làn đường

3.2.4. Bước 4: Đưa hình ảnh lên màn hình

3.2.5. Bước 4: Tạo bảng điều khiển tọa độ cho lớp phủ làn đường

3.2.6. Bước 6: Tạo giao diện đồ họa

3.3. Hướng dẫn sử dụng

3.4. Đánh giá về kết quả và đề xuất hướng phát triển

3.4.1. Kết quả đạt được

3.4.2. Hướng phát triển

TÀI LIỆU THAM KHẢO

LỜI CẢM ƠN

MỞ ĐẦU

0.1. Lý do chọn đề tài

0.2. Mục đích nghiên cứu

0.3. Cấu trúc đồ án

Tóm tắt

I. Khám Phá Python và OpenCV Giới Thiệu Tổng Quan Về Nhận Diện Làn Đường

Python và OpenCV là hai công cụ mạnh mẽ trong lĩnh vực xử lý ảnh và nhận diện hình ảnh. Python, với cú pháp đơn giản và dễ học, đã trở thành ngôn ngữ lập trình phổ biến cho các ứng dụng khoa học dữ liệu. OpenCV, một thư viện mã nguồn mở, cung cấp nhiều chức năng hữu ích cho việc xử lý và phân tích hình ảnh. Việc kết hợp hai công nghệ này giúp xây dựng các ứng dụng nhận diện làn đường cho xe tự lái, một trong những ứng dụng quan trọng trong lĩnh vực giao thông hiện đại.

1.1. Giới Thiệu Về Ngôn Ngữ Lập Trình Python

Python là ngôn ngữ lập trình bậc cao, dễ học và mạnh mẽ. Nó hỗ trợ nhiều thư viện cho xử lý ảnh như OpenCV, giúp lập trình viên dễ dàng phát triển ứng dụng nhận diện làn đường.

1.2. Tìm Hiểu Thư Viện OpenCV

OpenCV là thư viện mã nguồn mở cho xử lý ảnh và thị giác máy tính. Nó cung cấp nhiều hàm và công cụ để thực hiện các tác vụ như nhận diện biên, phân đoạn hình ảnh và nhận diện đối tượng.

II. Vấn Đề Nhận Diện Làn Đường Trong Giao Thông Hiện Đại

Nhận diện làn đường là một thách thức lớn trong việc phát triển hệ thống xe tự lái. Các yếu tố như điều kiện thời tiết, ánh sáng và chất lượng hình ảnh có thể ảnh hưởng đến khả năng nhận diện. Việc phát hiện chính xác làn đường giúp tăng cường an toàn giao thông và giảm thiểu tai nạn. Do đó, nghiên cứu và phát triển các phương pháp nhận diện làn đường hiệu quả là rất cần thiết.

2.1. Thách Thức Trong Nhận Diện Làn Đường

Điều kiện thời tiết xấu, như mưa hoặc sương mù, có thể làm giảm chất lượng hình ảnh, gây khó khăn cho việc nhận diện làn đường. Hệ thống cần phải được tối ưu hóa để hoạt động hiệu quả trong mọi điều kiện.

2.2. Tầm Quan Trọng Của Nhận Diện Làn Đường

Nhận diện làn đường không chỉ giúp xe tự lái di chuyển an toàn mà còn hỗ trợ các hệ thống ADAS (Advanced Driver Assistance Systems) trong việc cảnh báo và điều khiển xe.

III. Phương Pháp Xây Dựng Ứng Dụng Nhận Diện Làn Đường Bằng Python và OpenCV

Xây dựng ứng dụng nhận diện làn đường bao gồm nhiều bước quan trọng. Đầu tiên, hình ảnh từ camera cần được thu thập và tiền xử lý. Sau đó, các thuật toán nhận diện biên sẽ được áp dụng để xác định vị trí làn đường. Cuối cùng, kết quả sẽ được hiển thị trên giao diện người dùng. Việc sử dụng Python và OpenCV giúp đơn giản hóa quy trình này và tăng cường hiệu suất của ứng dụng.

3.1. Các Bước Tiền Xử Lý Hình Ảnh

Tiền xử lý hình ảnh bao gồm các bước như chuyển đổi màu sắc, làm mịn và tăng cường độ tương phản. Những bước này giúp cải thiện chất lượng hình ảnh trước khi áp dụng các thuật toán nhận diện.

3.2. Ứng Dụng Các Thuật Toán Nhận Diện Biên

Các thuật toán như Canny Edge Detection được sử dụng để phát hiện biên của làn đường. Việc áp dụng các thuật toán này giúp xác định rõ ràng các đường viền và hình dạng của làn đường.

IV. Kết Quả Nghiên Cứu và Ứng Dụng Thực Tiễn Của Nhận Diện Làn Đường

Kết quả nghiên cứu cho thấy ứng dụng nhận diện làn đường có thể hoạt động hiệu quả trong nhiều điều kiện khác nhau. Các thử nghiệm thực tế cho thấy độ chính xác cao trong việc phát hiện làn đường, giúp cải thiện an toàn giao thông. Ứng dụng này không chỉ có giá trị trong lĩnh vực xe tự lái mà còn có thể được áp dụng trong các hệ thống giám sát giao thông.

4.1. Đánh Giá Kết Quả Nhận Diện

Kết quả thử nghiệm cho thấy độ chính xác của hệ thống đạt trên 90% trong điều kiện ánh sáng tốt. Tuy nhiên, cần cải thiện hơn nữa trong điều kiện thời tiết xấu.

4.2. Ứng Dụng Trong Thực Tế

Ứng dụng nhận diện làn đường có thể được tích hợp vào các hệ thống giao thông thông minh, giúp cải thiện quản lý và an toàn giao thông.

V. Kết Luận và Tương Lai Của Nhận Diện Làn Đường

Nhận diện làn đường là một lĩnh vực nghiên cứu quan trọng trong công nghệ xe tự lái. Việc phát triển các ứng dụng hiệu quả sẽ góp phần nâng cao an toàn giao thông và giảm thiểu tai nạn. Tương lai của công nghệ này hứa hẹn sẽ mang lại nhiều cải tiến và ứng dụng mới trong lĩnh vực giao thông.

5.1. Tương Lai Của Công Nghệ Nhận Diện Làn Đường

Công nghệ nhận diện làn đường sẽ tiếp tục phát triển với sự hỗ trợ của Machine Learning và Deep Learning, giúp cải thiện độ chính xác và khả năng nhận diện trong các điều kiện khó khăn.

5.2. Hướng Phát Triển Mới

Nghiên cứu sẽ tiếp tục tìm kiếm các phương pháp mới để tối ưu hóa quy trình nhận diện, bao gồm việc sử dụng các mô hình học sâu để cải thiện khả năng nhận diện trong thời gian thực.

15/07/2025

Trích đoạn nội dung tài liệu

CHƯƠNG 1: TÌM HIỂU NGÔN NGỮ LẬP TRÌNH PYTHON 1. Giới thiệu ngôn ngữ lập trình Python 1. Lịch sử phát triển - Ngôn ngữ Python được Guido van Rossum tạo ra và được phát hành lần đầu tiên vào tháng 2 năm 1991. - Python khá giống Perl, Ruby, Scheme, Smalltalk và Tcl.

- Python được phát triển trong một dự án mã mở do một tổ chức phi lợi nhuận Python Software Foundation quản lý. - Python được phát triển để chạy trên nền Unix. Nhưng theo thời gian, nó đã "bành trướng" sang mọi hệ điều hành từ MS-DOS đến MAC OS, OS/2, Windows, Linux và một số điều hành khác thuộc họ Unix. - Python là ngôn ngữ bậc cao (high-level), có hình thức sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình.

Cho phép người sử dụng viết mã với số lần gõ phím tối thiểu. - Python cũng là một trong những ngôn ngữ phổ biến nhất thế giới. - Python không phải được đặt theo tên của con rắn thần Python trong thần thoại Hy Lạp đâu. Rossum là fan của một sê-ri chương trình hài cuối những năm 1970, và cái tên “Python” được lấy từ tên một phần trong sê-ri đó “Monty Python’s Flying Circus”.

Phiên bản Bảng 1.1 các phiên bản Python đã phát hành Phiên bản Ngày phát hành Python 1.x cuối cùng) 05/09/2000 Python 2.x cuối cùng) 03/07/2010 Python 3.1 các phiên bản Python đã phát hành Phiên bản Ngày phát hành Python 3. Một số điểm khác nhau giữa phiên bản 3x và 2x 1. Sự khác biệt ở hàm PRINT - Ở 2x print ‘a’,’b’ dễ gây hiểu lầm với kiểu dữ liệu Tuple khi ta truyền nhiều đối số vào parantheses. - Ở phiên bản 3x hàm print dùng ().

Python 2x Python 3x print 'Hello, World!' print ('Hello, World!') print ('Hello, World!') print 'Hello, World!' >>> Hello, World! >>> Hello, Word! File "<ipython-input-3-139a7c5835bd>", line 2 >>> Hello, Word! print 'Hello, World!' ^ SyntaxError: invalid syntax 2 1. Toán tử DIV - Ở Python 2x toán tử chia (/) có một ý nghĩa mơ hồ cho các đối số ‘số’: nó trả về sàn của kết quả toán học của phép chia nếu các đối số là kiểu ints hoặc long, nhưng nó trả về một xấp xỉ hợp lý của kết quả phân chia nếu các đối số là kiểu float hoặc phức. Vấn đề này lại được giải quyết ở bản 3x. Python 2x Python 3x print '3 / 2 =', 3 / 2 print ('3 / 2 =', 3 / 2) print '3 // 2 =', 3 // 2 print ('3 // 2 =', 3 // 2) print '3 / 2.

Kiểu STRING mặc định - Python 2x có các kiểu str () thuộc kiểu ASCII, riêng biệt unicode (), nhưng không có kiểu byte. - Python 3x có các chuỗi Unicode (utf-8) và 2 lớp byte: byte và bytearrays. Python 2x Python 3x print type(unicode(‘Chuỗi này giống kiểu print('strings are now utf-8 str ở Python 3’)) \u03BCnico\u0394é!') >>> <type 'unicode'> >>> strings are now utf-8 μnicoΔé! print type(b‘Đây giống như một chuỗi str print(sys.version,' has', type(b' bytes for do không có kiểu byte ở 2x’) storing data')) >>> <type 'str'> 3 >>> 3.1916 32 bit (Intel)] has <class 'bytes'> print '2 chuỗi này' + b'giống nhau' print('note that we cannot add a string' + >>> 2 chuỗi này giống nhau b'bytes for data') >>> Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "bytes") to str 1. Loại bỏ hàm XRANGE() ở bản 3x - Việc sử dụng xrange() rất phổ biến trong Python 2.x để tạo một đối tượng có thể lặp lại.

- Ở python 3x đã loại bỏ hàm XRANGE() thay vào đó là sử dụng hàm RANGE(). Nhưng hàm range() ở bản 3x đã được tích hợp cơ chế ‘lazy avaluation’ cơ chế giải phóng bộ nhớ đã chiếm dụng của xrange() (bản 2x). Xử lý ngoại lệ - Trong Python 3x yêu cầu xử dụng từ khóa as để xử lý ngoại lệ. Python 2x Python 3x try: try: let_us_cause_a_NameError let_us_cause_a_NameError except NameError, err: except NameError as err: print err, '--> our error message' print(err, '--> our error message') >>>name >>>name 'let_us_cause_a_NameError' 'let_us_cause_a_NameError' is not is not defined --> our error message defined --> our error message 4 1.

Banker’s Round - Python 3 đã áp dụng cách làm tròn số thập phân chuẩn mới hiện nay khi kết quả là hòa (0,5) ở các chữ số có nghĩa cuối cùng. Bây giờ, trong Python 3, số thập phân được làm tròn đến số chẵn gần nhất. - Mặc dù đó là một sự bất tiện cho tính di động của mã, nhưng nó được cho là cách làm tròn tốt hơn so với làm tròn cũ vì nó tránh được sự thiên vị đối với số lượng lớn. Python 2x Python 3x round(15.

Ordering Comparisons - Python 3.0 đã đơn giản hóa các quy tắc của toán tử so sánh: - Các toán tử so sánh thứ tự ( < , <= , > = , > ) đưa ra một ngoại lệ TypeError khi các toán hạng không có thứ tự tự nhiên có ý nghĩa. Do đó, các biểu thức như 1 < '' , 0 > Không có hoặc len <= len không còn hợp lệ và ví dụ: Không < Không làm tăng TypeError thay vì trả về Sai. Đặc điểm của Python - Python là ngôn ngữ lập trình hướng đối tượng, bậc cao, mạnh mẽ. Ngoài ra, học Python là khá đơn giản và dễ dàng.

Python cũng là một ngôn ngữ thông dịch, tức là ngôn ngữ không cần phải biên dịch ra file chạy mà đọc code đến đâu thì chạy đến đó. Khi chạy lệnh Python ta sẽ có một giao diện dòng lệnh giống của Unix, có thể chạy từng dòng code ngay trực tiếp tại đây. - Python có rất nhiều ưu điểm để khiến cho các nhà lập trình web yêu thích và sử dụng nó cho ngôn ngữ lập trình đầu tiên của mình đó là:  Đơn giản: Cú pháp đơn giản giúp cho người lập trình dễ dàng đọc và tìm hiểu.  Tốc độ: Python có tốc độ xử lý nhanh hơn so với ngôn ngữ PHP.

5  Tương tác: Chế độ tương tác cho phép người lập trình thử nghiệm tương tác sửa lỗi của các đoạn mã.  Chất lượng: Thư viện có tiêu chuẩn cao, Python có khối cơ sở dữ liệu khá lớn nhằm cung cấp giao diện cho tất cả các CSDL thương mại lớn.  Thuận tiện: Python được biên dịch và chạy trên tất cả các nền tảng lớn hiện nay.  Mở rộng: Với tính năng này, Python cho phép người lập trình có thể thêm hoặc tùy chỉnh các công cụ nhằm tối đa hiệu quả có thể đạt được trong công việc.

 Có trên tất cả các nền tảng hệ điều hành từ UNIX, MS – DOS, Mac OS, Windows và Linix và các OS khác thuộc họ Unix.  Tương thích mạnh mẽ với Unix, hardware, thirt-party software với số lượng thư viện khổng lồ (400 triệu người sử dụng)  Python với tốc độ xử lý cực nhanh, python có thể tạo ra những chương trình từ những script siêu nhỏ tới những phần mềm cực lớn như Blender 3D. Hướng dẫn cài đặt bằng Anaconda/Miniconda 1. Giới thiệu Ananconda/Miniconda và cài đặt - Anaconda là một Distribution miễn phí và mã nguồn mở của Python và R giúp đơn giản hóa việc cài đặt, quản lý và triển khai packages (numpy, scipy, tensorflow,.

- Anaconda phục vụ cho nhiều mục địch, đặc biệt trong Data Science (Khoa học dữ liệu), Machine learnig (Máy học), Big Data (Dữ liệu lớn), Image Processing (Xử lý ảnh),. - Anaconda hiện nay đã có hơn 20 triệu người dùng và hơn 7500 packages khoa học dữ liệu dành cho Windows, Linux và MacOS. - Trong khi đó Spyder là 1 trong những IDE (môi trường tích hợp dùng để phát triển phần mềm) tốt nhất cho data science và quang trọng hơn là nó được cài đặt khi bạn cài đặt Anaconda. Download Anaconda/Miniconda và hướng dẫn cài đặt 1.

Các bước cài đặt - Yêu cầu phần cứng và phần mềm:  Hệ điều hành: Win 7, Win 8/8.1, Win 10, Red Hat Enterprise Linux/CentOS 6. 6  Ram tối thiểu 4GB.  Ổ cứng trống tối thiểu 3GB để tải và cài đặt. Cài đặt: - Bước 1: truy cập vào trang web https://www.1 Trang chủ ananconda.com  Chọn xuống mục download: và chọn tải phiên bản thích hợp, ở đây em chọn hệ điều hành windows bản python 3.7 và 64-bit Graphical.2 Download bản cài đặt - Bước 2: Chạy file cài đặt với quyền admin 7 Hình 1.3 tiến hình cài đặt - Bước 3: Chấp nhập các yêu cầu thiết lập và tiến hình cài đặt Hình 1.4 Giao diện cài đặt - Bước 4: Chọn tài khoản và vị trí để cài đặt.

Ở đây em chọn recommended và ổ C:/ Hình 1.5 Chọn tài khoản và vị trí để cài đặt - Bước 5: Giao diện Anaconda khi cài đặt xong 8 Hình 1.6 Giao diện của phần mền Anaconda - Bước 6: Kiểm tra lại phiên bản phần mềm Anaconda Hình 1.7 Giao diện home của Anaconda  Chọn Launch ở Environments base(root) để mở CMD ở môi trường conda để kiểm tra lại phiên bản cài đặt bằng lệnh: conda -V 9 Hình 1.8 kiểm tra phiên bản conda Hình 1.9 kiểm tra phiên bản python 1. Quản lý môi trường - Với Anaconda có nhiều packages khoa học phụ thuộc vào các phiên bản cụ thể của các packages khác. Các nhà khoa học dữ liệu thường sử dụng nhiều phiên bản của nhiều package và sử dụng nhiều môi trường để phân tách các phiên bản khác nhau này. - Chương trình dòng lệnh (command-line program conda) vừa là trình quản lý các package vừa là trình quản lý môi trường (environment manager).

Điều này giúp các nhà khoa học dữ liệu đảm bảo rằng mỗi phiên bản của mỗi package có tất cả các phụ thuộc mà nó yêu cầu và hoạt động chính xác. - Anaconda Navigator cung cấp cho người dùng một giao diện đồ họa để quản lý các environment (môi trường) và package. Ta sẽ có environment mặc định là base (root) chứa các package cơ bản. 10 - Ở ngăn giao diện Home là nơi quản lý các Application (ứng dụng) tại một environment (trong vòng đỏ).10 Giao diện environment 3 1 2 Hình 1.11 các ngăn của giao diện Environments - Vùng số 1 là danh sách các environment ta đã tạo.

- Vùng số 2 là nút để tạo environment mới, sau nhấp chuột vào ta sẽ có giao diện như hình 1. Chúng ta chọn version của Python và đặt tên cho môi trường. 11 - Tương tự Clone là để sao chép một bản environment với các package giống một environment đã tạo. Import dùng để tạo environment bằng file có sẵn.

- Vùng thứ 3 dùng để tìm kiếm và cài đặt các package trong environment bạn đã chọn trong vùng thứ nhất. - Ví dụ tạo mới một environment imgprocess.12 tạo mới một environment imgprocess Hình 1.13 environment imgprocess đã được tạo thành công 12 1. Hướng dẫn cài thêm thư viện bằng conda 1. Các thư viện sử dụng - Tạo một environment finalexam để cài các thư viện hỗ trợ cho CHƯƠNG 3.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ