TỔNG QUAN
Lý do chọn đề tài
Hệ thống này cho phép dừng và khởi động động cơ tự động mà không cần người lái nhấn nút, giúp giảm bớt thao tác tay cho người điều khiển.
Trong bối cảnh công nghiệp hóa và hiện đại hóa, nhu cầu di chuyển và vận tải ngày càng tăng cao, dẫn đến sự gia tăng sở hữu ô tô cá nhân Sự gia tăng thu nhập cá nhân đã khiến việc sở hữu xe ô tô trở nên dễ dàng hơn, tuy nhiên, điều này cũng dẫn đến việc phát thải khí CO2 gia tăng đáng kể, góp phần vào vấn đề ô nhiễm môi trường hiện nay.
Hình 1 1 Biểu đồ thể hiện lượng khí thải CO2 trên toàn thế giới đến năm 2012
Biểu đồ trên thể hiện lượng khí thải CO2 toàn cầu trong hơn 100 năm qua, cho thấy mức độ ô nhiễm môi trường và biến đổi khí hậu ngày càng nghiêm trọng Nhiệt độ toàn cầu gia tăng khiến băng tan, dâng mực nước biển và dẫn đến thiên tai, lũ lụt, ảnh hưởng đến cuộc sống con người Khí thải từ ô tô chứa nhiều chất độc hại như NOx, gây ra bệnh tật nghiêm trọng, trong đó CO2 là thủ phạm chính gây ra cái chết cho nhiều người do thiên tai.
Thêm vào đó, trong thời gian chờ đèn tín hiệu giao thông, ô tô phát thải khá nhiều chất ô nhiễm và tiêu hao nhiên liệu vô ích
Hệ thống trên ô tô không chỉ giúp tiết kiệm nhiên liệu hóa thạch mà còn giảm lượng khí thải ra môi trường, góp phần tạo ra một môi trường sống lý tưởng hơn cho con người và sinh vật.
Đối tượng và phạm vi nghiên cứu
Hệ thống Auto Start/Stop
Mạch điện điều khiển hệ thống khởi động và dừng động cơ tự động thông qua tín hiệu đèn giao thông
Tìm hiểu lý thuyết và nguyên lý hoạt động của hệ thống Auto Start/Stop
Tìm hiểu, nghiên cứu phương pháp điều khiển hệ thống Auto Start/Stop dựa vào tín hiệu đèn giao thông trên xe ô tô
Tìm hiểu và thiết kế mạch điện, mô hình điều khiển hệ thống Auto Start/Stop
Phương pháp nghiên cứu
Hiện trạng thị trường xe ô tô tại Việt Nam và thế giới đang có những biến chuyển mạnh mẽ, với xu hướng phát triển bền vững và ứng dụng công nghệ tiên tiến Các phương pháp điều khiển hiện đại được áp dụng nhằm nâng cao hiệu suất và giảm thiểu tác động môi trường Sự chuyển mình này không chỉ phản ánh nhu cầu tăng cao của người tiêu dùng mà còn thể hiện nỗ lực của ngành công nghiệp ô tô trong việc thích ứng với xu hướng toàn cầu.
Tham khảo, nghiên cứu, đánh giá những mô hình có sẵn
Tìm hiểu nguyên lý hoạt động của hệ thống, gồm các điều kiện cần thiết để hệ thống hoạt động và dừng
Sau khi đã tìm hiểu hệ thống Auto Start/Stop, nghiên cứu lí thuyết, nguyên lí của hệ thống xử lí ảnh, ngôn ngữ lập trình Python
Tiến hành viết chương trình nhận điện đèn giao thông sau đó giao tiếp với Arduino, tiến hành lắp ráp mô hình
Tiến hành cho chạy thử nghiệm và sửa lỗi.
Mục tiêu nghiên cứu
Nghiên cứu, thiết kế được hệ thống điều khiển khởi động và dừng động cơ tự động
Sản phẩm có tính ứng dụng thực tế giúp tiết kiệm nhiên liệu và giảm thiểu ô nhiễm môi trường.
Kết quả dự kiến đạt được
Nắm rõ được nguyên lý hoạt động của hệ thống Auto Start/Stop
Nắm được thành phần cấu tạo, nguyên lý hoạt động của hệ thống điều khiển
Thiết kế, thi công và hoàn thành mô hình hệ thống.
Nội dung
Chương 2: Cơ sở lý thuyết
Chương 3: Hệ thống Auto Start/Stop
Chương 4: Xây dựng hệ thống khởi động và dừng động cơ tự động
Chương 5: Phân tích kết quả
Chương 6: Kết luận và hướng phát triển
CƠ SỞ LÝ THUYẾT
Cơ sở lí thuyết xử lí ảnh
2.1.1.Tổng quan về xử lí ảnh
Xử lý ảnh là một lĩnh vực quan trọng trong thị giác máy, liên quan đến việc chuyển đổi hình ảnh gốc thành hình ảnh mới với các đặc điểm cụ thể theo yêu cầu của người dùng.
Xử lý ảnh bao gồm nhiều bước quan trọng như phân tích và phân lớp các đối tượng, nâng cao chất lượng hình ảnh, phân đoạn và tách cạnh, cũng như gán nhãn cho các vùng trong ảnh Quá trình này giúp biên dịch thông tin hình ảnh một cách hiệu quả.
Xử lý ảnh số là một lĩnh vực quan trọng trong tin học ứng dụng, tương tự như xử lý dữ liệu bằng đồ họa Trong khi xử lý dữ liệu bằng đồ họa tập trung vào các ảnh nhân tạo được tạo ra bởi chương trình, xử lý ảnh số bao gồm các phương pháp và kỹ thuật biến đổi nhằm truyền tải hoặc mã hóa các ảnh tự nhiên Mục đích chính của xử lý ảnh là cải thiện chất lượng hình ảnh, tăng cường thông tin và hỗ trợ trong việc phân tích dữ liệu hình ảnh.
- Biến đổi ảnh làm tăng chất lượng ảnh
- Tự động nhận dạng ảnh, đoán nhận ảnh, đánh giá các nội dung của ảnh
Quá trình xử lý ảnh là thao tác nhằm cải thiện hình ảnh đầu vào để đạt được kết quả mong muốn Kết quả này có thể là một bức ảnh chất lượng cao hơn hoặc một kết luận cụ thể từ dữ liệu hình ảnh.
Hình 2 1 Kết quả của quá trình xử lí ảnh
Ảnh có thể được hiểu là tập hợp các điểm ảnh, trong đó mỗi điểm ảnh thể hiện cường độ sáng hoặc một đặc trưng tại vị trí cụ thể của đối tượng trong không gian Điều này cho thấy ảnh trong xử lý ảnh có thể được coi là ảnh n chiều, với mỗi điểm ảnh là một hàm có n biến P(c1, c2,……, cn).
Nhận biết và đánh giá nội dung của ảnh là quá trình phân tích hình ảnh thành các phần có ý nghĩa, giúp phân biệt các đối tượng khác nhau Qua đó, chúng ta có thể mô tả cấu trúc của hình ảnh gốc Một số phương pháp nhận dạng cơ bản bao gồm nhận dạng đối tượng trong ảnh, tách cạnh và phân đoạn hình ảnh.
2.1.2.Các quá trình xử lí ảnh
Nội dung các quá trình xử lí ảnh bao gồm:
Quá trình thu nhận ảnh là bước đầu tiên và quyết định trong xử lý ảnh, nơi ảnh đầu vào được ghi lại qua các thiết bị như camera, sensor và máy scanner, sau đó các tín hiệu này sẽ được số hóa Việc lựa chọn thiết bị thu nhận ảnh phụ thuộc vào đặc tính của đối tượng cần xử lý, với các thông số quan trọng bao gồm độ phân giải, chất lượng màu, dung lượng bộ nhớ và tốc độ thu nhận ảnh.
Tiền xử lý ảnh là bước quan trọng nhằm cải thiện độ tương phản, khử nhiễu, khử bóng và khử độ lệch, từ đó nâng cao chất lượng ảnh Quá trình này chuẩn bị cho các bước xử lý phức tạp hơn sau này và thường được thực hiện thông qua các bộ lọc.
Hình 2 2 Quá trình xử lí ảnh
Phân đoạn ảnh là bước quan trọng trong xử lý ảnh, giúp phân tích ảnh thành các thành phần có tính chất tương đồng dựa trên biên hoặc các vùng liên thông Các tiêu chuẩn xác định vùng liên thông có thể dựa vào màu sắc hoặc mức xám Mục tiêu của phân đoạn ảnh là tạo ra một mô tả tổng quát về các phần tử khác nhau trong ảnh thô Do lượng thông tin trong ảnh rất lớn, trong khi nhiều ứng dụng chỉ cần một số đặc trưng nhất định, quá trình này cần thiết để giảm thiểu thông tin khổng lồ, bao gồm phân vùng ảnh và trích chọn các đặc tính chủ yếu.
Trong quá trình tách các đặc tính của ảnh, kết quả phân đoạn thường được biểu diễn dưới dạng dữ liệu điểm ảnh thô, chứa biên hoặc tập hợp điểm ảnh của một vùng ảnh Việc chuyển đổi dữ liệu này thành dạng phù hợp cho xử lý máy tính là cần thiết, với câu hỏi chính là nên biểu diễn vùng ảnh dưới dạng biên hay dạng vùng hoàn chỉnh Biểu diễn dạng biên thích hợp cho các ứng dụng chú trọng vào đặc trưng hình dạng bên ngoài, trong khi biểu diễn dạng vùng phù hợp cho việc khai thác các tính chất bên trong như vân ảnh hoặc cấu trúc xương Lựa chọn cách biểu diễn phù hợp chỉ là một phần trong việc chuyển đổi dữ liệu ảnh thô, và cần thiết phải có phương pháp mô tả dữ liệu đã chuyển đổi để làm nổi bật các tính chất quan trọng cho việc xử lý sau này.
Nhận dạng và giải thích là bước cuối cùng trong quá trình xử lý ảnh, trong đó nhận dạng ảnh liên quan đến việc gán nhãn cho các đối tượng trong ảnh Giải thích, ngược lại, là công đoạn gán nghĩa cho các đối tượng đã được nhận biết.
Không phải tất cả ứng dụng xử lý ảnh đều cần tuân theo mọi bước xử lý Thông thường, các chức năng như nhận dạng và giải thích chỉ xuất hiện trong hệ thống phân tích ảnh tự động hoặc bán tự động, nhằm rút trích thông tin quan trọng từ hình ảnh.
2.1.3.Các vấn đề cơ bản trong xử lí ảnh
2.1.3.1.Một số khái niệm cơ bản Ảnh và điểm ảnh: điểm ảnh được xem như là dấu hiệu hay cường độ sáng tại một tọa độ trong không gian của đối tượng và ảnh được xem như là một tập hợp các điểm ảnh Mức xám, màu: là số các giá trị có thể có của các điểm ảnh của ảnh
2.1.3.2.Nắn chỉnh biến dạng Ảnh thu nhận thường bị biến dạng do các thiết bị quang học và điện tử Để khắc phục người ta sử dụng các phép chiếu, các phép chiếu thường được xây dựng trên tập các điểm điều khiển
Giả sử (Pi, Pi ’) i = (1,n) có n các tập điều khiển
Tìm hàm f: Pi→f(Pi) sao cho
Hình 2 3 Ảnh thu nhận và ảnh mong muốn
Giả sử ảnh bị biến đổi chỉ bao gồm : Tịnh tiến, quay, tỉ lệ, biến dạng bậc nhất tuyến tính Khi đó hàm f có dạng: f (x, y) = (a1x + b1y + c1, a2x + b2y + c2)
Giải hệ phương trình tuyến tính tìm được a1, b1, c1
Có 2 loại nhiễu cơ bản trong quá trình thu nhận ảnh
- Nhiễu hệ thống: là nhiễu có quy luật có thể khử bằng các phép biến đổi
- Nhiễu ngẫu nhiên: vết bẩn không rõ nguyên nhân có thể khắc phục bằng các phép lọc
Nhằm khắc phục tính không đồng đều của hệ thống gây ra Thông thường có hai hướng tiếp cận:
Giảm số mức xám bằng cách nhóm các mức xám gần nhau thành một bó, và nếu chỉ có hai mức xám, chuyển đổi ảnh sang đen trắng Phương pháp này thường được áp dụng khi in ảnh màu ra máy in đen trắng.
Tăng số mức xám: Thực hiện nội suy ra các mức xám trung gian bằng kĩ thuật nội suy Kĩ thuật này nhằm tăng cường độ min cho ảnh
Cơ sở lí thuyết Python
Python là ngôn ngữ lập trình bậc cao phổ biến, thường được sử dụng để phát triển trang web, phần mềm, tự động hóa tác vụ và phân tích dữ liệu Đây là ngôn ngữ lập trình đa năng, cho phép tạo ra nhiều loại chương trình khác nhau mà không bị giới hạn cho một lĩnh vực cụ thể nào.
Các nhà phát triển sử dụng Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau
Hình 2 11 Hệ thống nhận diện khuôn mặt
2.2.2.Lịch sử hình thành ngôn ngữ lập trình Python
Python được Guido van Rossum phát triển vào cuối những năm 1980 tại Viện Nghiên cứu Quốc gia về Toán học và Khoa học Máy tính ở Hà Lan, nhằm kế thừa ngôn ngữ ABC với khả năng xử lý và giao tiếp ngoại lệ.
Python có nguồn gốc từ các ngôn ngữ lập trình như ABC, Modula 3, small talk, Algol-
Van Rossum đã chọn tên Python cho ngôn ngữ mới từ một chương trình truyền hình, Monty Python’s Flying Circus
Trang Python là một tệp có phần mở rộng py chứa có thể là sự kết hợp của Thẻ HTML và tập lệnh Python
Hình 2 12 Ngôn ngữ lập trình Python
Vào tháng 12 năm 1989, trình thông dịch Python đầu tiên được phát triển như một sở thích, và vào ngày 16 tháng 10 năm 2000, phiên bản Python 2.0 chính thức ra mắt với nhiều tính năng mới.
Vào ngày 3 tháng 12 năm 2008, Python 3.0 được phát hành với nhiều thử nghiệm hơn và bao gồm các tính năng mới
Python là một ngôn ngữ kịch bản mã nguồn mở
Python là một trong những ngôn ngữ chính thức tại Google
*Các phiên bản của Python
Guido Van Rossum đã giới thiệu phiên bản đầu tiên của ngôn ngữ Python (phiên bản 0.9.0) vào năm 1991, với các tính năng hữu ích như nhiều kiểu dữ liệu và hàm xử lý lỗi.
Python 1.0 đã được ra mắt vào năm 1994 với các hàm mới để dễ dàng xử lý danh sách dữ liệu, chẳng hạn như ánh xạ, lọc và lược bỏ
Python 2.0 đã được ra mắt vào ngày 16 tháng 10 năm 2000, với các tính năng hữu ích mới cho lập trình viên, chẳng hạn như hỗ trợ ký tự Unicode và cách xử lý chi tiết một danh sách nhanh chóng hơn
Python 3.0 đã được ra mắt vào ngày 3 tháng 12 năm 2008 Phiên bản này bao gồm các tính năng như hàm in và hỗ trợ nhiều hơn cho việc phân chia số và xử lý lỗi
2.2.3.Những ưu điểm của ngôn ngữ lập trình Python
Chúng ta có thể dễ dàng đọc và hiểu một chương trình Python vì ngôn ngữ này có cú pháp cơ bản giống tiếng Anh
Python nâng cao hiệu suất làm việc nhờ khả năng viết chương trình bằng ít dòng mã hơn so với các ngôn ngữ lập trình khác.
Python sở hữu một thư viện tiêu chuẩn phong phú, cung cấp nhiều đoạn mã tái sử dụng cho hầu hết các tác vụ, giúp lập trình viên tiết kiệm thời gian và công sức bằng cách không cần phải viết mã từ đầu.
Chúng ta có thể dễ dàng sử dụng Python với các ngôn ngữ lập trình phổ biến khác như Java, C và C++
Cộng đồng Python là một mạng lưới rộng lớn với hàng triệu người dùng nhiệt tình, sẵn sàng hỗ trợ lẫn nhau trên toàn cầu Khi gặp khó khăn, bạn có thể nhanh chóng nhận được sự trợ giúp từ những thành viên trong cộng đồng này.
Trên Internet, có vô số tài nguyên giá trị cho việc học Python, bao gồm video, hướng dẫn, tài liệu và chỉ dẫn dành cho lập trình viên, giúp bạn tiếp cận kiến thức một cách dễ dàng.
Python có thể được sử dụng trên nhiều hệ điều hành máy tính khác nhau, chẳng hạn như Windows, macOS, Linux và Unix
2.2.4.Những ứng dụng của ngôn ngữ lập trình Python
2.2.4.1.Phát triển web phía máy chủ
Phát triển web phía máy chủ bao gồm những hàm backend phức tạp mà các trang web thực hiện để hiển thị thông tin cho người dùng
Python là một ngôn ngữ lập trình mạnh mẽ cho mã phía máy chủ, nhờ vào việc cung cấp nhiều thư viện và mã viết sẵn cho các hàm backend phức tạp Các nhà phát triển có thể tận dụng các khung Python để xây dựng ứng dụng web một cách nhanh chóng và dễ dàng, giúp tối ưu hóa quy trình phát triển.
2.2.4.2.Tự động hóa bằng các tập lệnh Python
Ngôn ngữ tập lệnh là một loại ngôn ngữ lập trình giúp tự động hóa các tác vụ thường được thực hiện bởi con người Các lập trình viên thường sử dụng Python để tự động hóa nhiều công việc hàng ngày một cách hiệu quả.
- Đổi tên một số lượng lớn tệp cùng lúc
- Chuyển đổi một tệp sang một loại tệp khác
- Loại bỏ các từ trùng lặp trong tệp văn bản
- Thực hiện các phép tính toán cơ bản
- Thực hiện phân tích nhật ký cơ bản
- Tìm kiếm lỗi trong nhiều tệp
2.2.4.3 Khoa học dữ liệu và máy học
Khoa học dữ liệu là quá trình trích xuất thông tin quý giá từ dữ liệu, trong khi máy học (ML) giúp máy tính tự động học hỏi từ dữ liệu để đưa ra dự đoán chính xác Các nhà khoa học dữ liệu thường sử dụng Python để thực hiện các tác vụ liên quan đến khoa học dữ liệu.
- Sửa và loại bỏ dữ liệu không chính xác, hay còn được gọi là làm sạch dữ liệu
- Trích xuất và chọn lọc các đặc điểm đa dạng của dữ liệu
- Ghi nhãn dữ liệu gán tên có ý nghĩa cho dữ liệu
- Tìm các số liệu thống kê khác nhau từ dữ liệu
Trực quan hóa dữ liệu là quá trình sử dụng các biểu đồ và đồ thị để thể hiện thông tin một cách rõ ràng và dễ hiểu Các loại biểu đồ phổ biến bao gồm biểu đồ đường, biểu đồ cột, biểu đồ tần suất và biểu đồ tròn, mỗi loại đều có những ưu điểm riêng trong việc truyền đạt dữ liệu Việc lựa chọn hình thức trực quan phù hợp sẽ giúp người xem nhanh chóng nắm bắt được các xu hướng và mối quan hệ trong dữ liệu.
Các nhà khoa học dữ liệu tận dụng thư viện Machine Learning (ML) của Python để đào tạo mô hình và phát triển các công cụ phân loại, giúp phân loại dữ liệu một cách chính xác Chuyên gia từ nhiều lĩnh vực áp dụng các công cụ này cho các tác vụ như phân loại hình ảnh, văn bản, lưu lượng truy cập mạng, nhận dạng giọng nói và nhận diện khuôn mặt Ngoài ra, Python cũng được sử dụng trong deep learning, một kỹ thuật ML tiên tiến.
Python thường được sử dụng cho những tác vụ phát triển và ứng dụng phần mềm khác nhau như:
- Theo dõi lỗi trong mã của phần mềm
- Tự động xây dựng phần mềm
- Đảm nhận quản lí dự án phần mềm
- Phát triển nguyên mẫu phần mềm
- Phát triển các ứng dụng máy tính bằng cách sử dụng những thư viện giao diện đồ họa người dùng (GUI)
- Phát triển từ các trò chơi văn bản đơn giản cho đến những trò chơi điện tử phức tạp
2.2.4.5.Tự động hóa kiểm thử phần mềm
Xử lí ảnh trong Python
2.3.1 Các thuật toán xử lí hình ảnh
2.3.1.1 Xử lí ảnh hình thái học ( Morphological Image Processing )
Xử lý ảnh hình thái (Morphological Image Processing) bao gồm các phép toán phi tuyến tính tác động đến hình dạng của ảnh nhị phân, giúp loại bỏ điểm nhiễu và làm mịn hình ảnh.
Xử lý hình thái học có thể áp dụng cho hình ảnh thang độ xám thông qua các thao tác phi tuyến tính Những thao tác này liên quan đến cấu trúc của các vị trí pixel trong ảnh, cho phép phân tích hình ảnh một cách hiệu quả Kỹ thuật này sử dụng các phần tử để cải thiện chất lượng và độ chính xác của hình ảnh.
Cấu trúc (structuring element) được đặt ở nhiều vị trí khác nhau trong hình ảnh và được so sánh với các pixel lân cận tương ứng Phần tử cấu trúc là một ma trận nhỏ với các giá trị cụ thể.
Hai thao tác cơ bản của quá trình xử lý hình thái học là Dilation (phép giãn) và Erosion (phép co)
- Phép giãn thêm pixel vào ranh giới của đối tượng trong một hình ảnh
- Phép co loại bỏ các pixel khỏi ranh giới đối tượng
Số lượng pixel được xóa hoặc thêm vào hình ảnh gốc phụ thuộc vào kích thước của phần tử cấu trúc
2.3.1.2 Xử lí hình ảnh Gaussian
Gaussian blur (làm mờ/mịn Gaussian) là kết quả của việc làm mờ hình ảnh bởi một hàm Gaussian
Hình 2 13 Quá trình xử lí hình thái học
Kỹ thuật Gaussian được áp dụng để giảm nhiễu ảnh và làm mờ các chi tiết, tạo hiệu ứng tương tự như khi nhìn qua màn hình mờ Trong lĩnh vực thị giác máy tính, Gaussian không chỉ giúp tăng cường hình ảnh ở các quy mô khác nhau mà còn được sử dụng như một phương pháp tăng cường dữ liệu trong học sâu.
Hàm gaussian cơ bản được biểu diễn như sau:
Trong quá trình áp dụng Gaussian blur, chúng ta có thể tận dụng đặc tính phân tách để thực hiện làm mờ hình ảnh qua hai bước Đầu tiên, sử dụng kernel một chiều để làm mờ theo hướng ngang hoặc dọc Sau đó, áp dụng một kernel một chiều tương tự để làm mờ theo hướng còn lại Kết quả cuối cùng tạo ra là một kernel hai chiều, giúp hình ảnh trở nên mượt mà hơn Dưới đây là một ví dụ trực quan minh họa tác động của bộ lọc Gaussian đối với hình ảnh.
Có thể thấy, Gaussian filter là bộ lọc thông thấp, tức là làm suy yếu các tần số cao
Nó thường được sử dụng trong phát hiện cạnh
2.3.1.3.Fourier Transform trong xử lí ảnh
Phép biến đổi Fourier phân tách hình ảnh thành các thành phần sine và cosine, mang lại nhiều ứng dụng quan trọng như tái tạo, nén và lọc hình ảnh hiệu quả.
Một hình sin bao gồm ba yếu tố:
- Độ lớn – liên quan đến độ tương phản
Hình 2 14 Kết quả của tác động của bộ lọc Gaussian
- Tần số không gian – liên quan đến độ sáng
- Pha – liên quan đến thông tin màu
Công thức cho phép biến đổi fourier rời rạc 2D là:
Trong công thức trên f (x, y) biểu thị hình ảnh
Phép biến đổi fourier nghịch đảo chuyển phép biến đổi trở lại hình ảnh Công thức cho phép biến đổi fourier rời rạc nghịch đảo 2D là:
2.3.1.4 Phát hiện cạnh trong xử lí ảnh
Phát hiện cạnh là một kỹ thuật quan trọng trong xử lý hình ảnh, giúp xác định ranh giới của các đối tượng bằng cách phát hiện những điểm không liên tục về độ sáng Kỹ thuật này cho phép phân tích và nhận diện các hình dạng trong ảnh một cách hiệu quả.
Hình 2 15 Hình ảnh biểu thị trong miền tần số
Thuật toán này có khả năng phản ứng nhanh chóng khi phát hiện nhiễu trong ảnh, đồng thời nhận diện các biến thể của mức xám Các cạnh được xác định là cực đại cục bộ của gradient.
Thuật toán phát hiện cạnh phổ biến nhất là thuật toán Sobel, được xây dựng từ các hạt nhân chập kích thước 3x3 Nó bao gồm hai kernel: Gx và Gy, trong đó Gy được xoay 90 độ so với Gx Để phát hiện cạnh, các phép đo riêng biệt được thực hiện bằng cách áp dụng cả hai kernel này vào hình ảnh.
Gradient kết quả có thể được tính như sau:
2.3.1.5 Xử lí hình ảnh Wavelet
Biến đổi Wavelet vượt trội hơn phép biến đổi Fourier vì nó không chỉ tập trung vào tần số mà còn xem xét cả thời gian và tần suất Điều này khiến Wavelet trở thành lựa chọn lý tưởng cho việc phân tích các tín hiệu không ổn định.
Cạnh là yếu tố quan trọng trong hình ảnh, nhưng việc sử dụng các bộ lọc truyền thống thường dẫn đến việc loại bỏ nhiễu đồng thời làm mờ hình ảnh Biến đổi Wavelet được phát triển nhằm cải thiện độ phân giải tần số cho các thành phần tần số thấp, giúp giữ lại chi tiết hình ảnh tốt hơn.
2.3.2 Các công cụ xử lí hình ảnh
OpenCV, viết tắt của Thư viện Thị giác Máy tính Mở, bao gồm hơn 2000 thuật toán tối ưu cho thị giác máy tính và học máy Bạn có thể áp dụng OpenCV trong xử lý hình ảnh qua nhiều phương pháp khác nhau.
- Chuyển đổi hình ảnh từ không gian màu này sang không gian màu khác, chẳng hạn như giữa BGR và HSV, BGR và màu xám, v.v
- Thực hiện ngưỡng trên hình ảnh, như, ngưỡng đơn giản, ngưỡng thích ứng, v.v
- Làm mịn hình ảnh, như, áp dụng các bộ lọc tùy chỉnh cho hình ảnh và làm mờ hình ảnh
- Thực hiện các phép toán hình thái trên ảnh
- Xây dựng hình kim tự tháp
- Trích xuất tiền cảnh từ hình ảnh bằng thuật toán GrabCut
- Phân đoạn ảnh sử dụng thuật toán watershed
Scikit là thư viện mã nguồn mở mạnh mẽ cho việc tiền xử lý hình ảnh, sử dụng học máy với các chức năng tích hợp Thư viện này cho phép thực hiện các tác vụ phức tạp trên hình ảnh chỉ với vài dòng lệnh, giúp đơn giản hóa quy trình xử lý dữ liệu hình ảnh.
Scikit là một thư viện mạnh mẽ cho Python, hoạt động hiệu quả với các mảng numpy và rất dễ sử dụng, ngay cả với những người mới bắt đầu Thư viện này cho phép thực hiện nhiều thao tác khác nhau, giúp đơn giản hóa quy trình xử lý dữ liệu và xây dựng mô hình học máy.
Để thực hiện các hoạt động tạo ngưỡng, bạn hãy sử dụng phương thức try_all_threshold() trên hình ảnh, áp dụng bảy thuật toán ngưỡng toàn cầu có sẵn trong mô-đun bộ lọc.
Cơ sở lí thuyết Arduino
Arduino UNO R3 là một board mạch vi xử lý tích hợp, giúp xây dựng các ứng dụng tương tác hiệu quả với môi trường Nó được thiết kế dựa trên vi xử lý AVR ATmega328 8 bit và bao gồm 1 cổng giao tiếp USB cùng 6 chân đầu vào analog.
14 chân I/O kỹ thuật số tương thích với nhiều board mở rộng khác nhau
2.4.2 Các thông số Arduino Uno R3
- Vi điều khiển: ATmega328 họ 8bit
- Điện áp hoạt động: 5V DC ( chỉ được cấp qua cổng USB)
- Tần số hoạt động: 16 MHz
- Dòng tiêu thụ: khoảng 30mA
- Điện áp vào khuyên dùng: 7-12V DC
- Điện áp vào giới hạn: 6-20V DC
- Số chân Digital I/O: 14 (6 chân hardware PWM)
- Số chân Analog: 6 (độ phân giải 10bit)
- Dòng tối đa trên mỗi chân I/O: 30mA
- Dòng ra tối đa (5V): 500 mA
- Dòng ra tối đa (3.3V): 50 mA
Arduino UNO sử dụng ba vi điều khiển 8bit AVR: ATmega8, ATmega168 và ATmega328 Với bộ não này, Arduino UNO có khả năng thực hiện các tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lý tín hiệu cho xe điều khiển từ xa, và tạo ra trạm đo nhiệt độ - độ ẩm hiển thị trên màn hình LCD.
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V
GND (Ground) là cực âm của nguồn điện cung cấp cho Arduino UNO, và khi sử dụng các thiết bị với nguồn điện riêng biệt, các chân này cần được kết nối với nhau Chân 5V cung cấp điện áp đầu ra 5V, với dòng tối đa cho phép là 500mA.
3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND
Trên Arduino UNO, chân IOREF cho phép đo điện áp hoạt động của vi điều khiển, luôn duy trì ở mức 5V Tuy nhiên, cần lưu ý rằng chân này không được sử dụng để cấp nguồn 5V cho các thiết bị khác, vì chức năng chính của nó không phải là cung cấp nguồn điện.
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ
*Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
Bộ nhớ Flash 32KB trên vi điều khiển cho phép lưu trữ các đoạn lệnh lập trình Mặc dù một phần nhỏ, khoảng vài KB, sẽ được sử dụng cho bootloader, bạn thường chỉ cần dưới 20KB cho các ứng dụng của mình.
SRAM (Static Random Access Memory) có dung lượng 2KB, nơi lưu trữ giá trị các biến mà bạn khai báo trong lập trình Số lượng biến càng lớn, yêu cầu bộ nhớ RAM càng nhiều Tuy nhiên, bộ nhớ RAM thường không phải là điều bạn phải lo lắng nhiều Lưu ý rằng khi mất điện, dữ liệu trên SRAM sẽ bị mất.
EEPROM (Bộ nhớ chỉ đọc có thể lập trình và xóa điện tử) với dung lượng 1KB hoạt động giống như một ổ cứng mini, cho phép người dùng đọc và ghi dữ liệu mà không lo mất mát khi mất điện, khác với dữ liệu trên SRAM.
Arduino UNO có 14 chân digital để đọc và xuất tín hiệu, hoạt động với 2 mức điện áp là 0V và 5V Mỗi chân có dòng vào/ra tối đa là 40mA Các điện trở pull-up từ được tích hợp trong vi điều khiển ATmega328, nhưng mặc định không được kết nối.
Một số chân digital có các chức năng đặc biệt như sau:
Chân Serial 0 (RX) và 1 (TX) trên Arduino Uno được sử dụng để gửi và nhận dữ liệu TTL Serial, cho phép giao tiếp với các thiết bị khác Kết nối Bluetooth thường được xem như một hình thức kết nối Serial không dây Nếu không cần giao tiếp Serial, nên tránh sử dụng hai chân này để tiết kiệm tài nguyên.
Chân PWM (3, 5, 6, 9, 10, và 11) cho phép xuất xung PWM với độ phân giải 8 bit, tương ứng với giá trị từ 0 đến 255, tạo ra điện áp từ 0V đến 5V thông qua hàm analogWrite() Điều này giúp bạn có khả năng điều chỉnh điện áp ra một cách linh hoạt, thay vì chỉ có mức cố định như các chân khác.
Chân giao tiếp SPI bao gồm 10 (SS), 11 (MOSI), 12 (MISO) và 13 (SCK) Bên cạnh các chức năng cơ bản, bốn chân này còn được sử dụng để truyền tải dữ liệu qua giao thức SPI với các thiết bị khác.
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L) Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân này được người dùng sử dụng, LED sẽ sáng
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0
Để đọc giá trị điện áp từ 0V đến 5V, bạn có thể sử dụng chân AREF trên board Arduino để cung cấp điện áp tham chiếu cho các chân analog Khi cấp điện áp 2.5V vào chân AREF, các chân analog sẽ đo điện áp trong khoảng 0V đến 2.5V với độ phân giải 10 bit Ngoài ra, Arduino UNO còn có hai chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
HỆ THỐNG AUTO START/STOP
Nguyên lý hoạt động của hệ thống Auto Start/Stop
Hình 3 1 Nguyên lí hoạt động của hệ thống Auto Start/Stop
Khi người lái đạp phanh để dừng xe, động cơ sẽ tắt hoàn toàn sau vài giây, bao gồm cả hệ thống cung cấp nhiên liệu và đánh lửa Tuy nhiên, quạt gió điều hòa và các hệ thống khác như gương chiếu hậu, loa vẫn hoạt động bình thường nhờ vào năng lượng từ bình ắc quy.
Khi muốn khởi động lại xe, người lái chỉ cần nhấc chân khỏi bàn đạp phanh và đạp bàn đạp ga Quá trình này kích hoạt ắc-quy gửi điện đến máy khởi động, làm quay bánh đà và bơm nhiên liệu vào động cơ, giúp xe hoạt động trở lại trong chưa đầy 1 giây Điều này rất tiện lợi cho những người thường xuyên lái xe trong thành phố đông đúc, với nhiều đèn giao thông và tình trạng tắc đường.
Hệ thống Auto Start/Stop hoạt động nhờ vào việc điều khiển của ECU thông qua rơle chính Tất cả thông số từ các cảm biến như cảm biến tốc độ, cảm biến vị trí bàn đạp ga và cảm biến vị trí bàn đạp phanh đều được gửi về ECU để đảm bảo hoạt động hiệu quả.
Khi động cơ khởi động lại, hệ thống điện trên xe sẽ hoạt động bình thường và máy phát sẽ tiếp tục sạc ắc quy, đảm bảo sự ổn định cho các hệ thống điện Đối với xe có tính năng hỗ trợ leo dốc, nếu động cơ dừng do hệ thống Auto Start/Stop, phanh tự động sẽ được kích hoạt để ngăn chặn bánh xe bị tụt dốc, chức năng này cũng hoạt động hiệu quả trên bề mặt phẳng.
Khi động cơ khởi động lại, công suất tạo ra có thể tạm thời không được sử dụng để di chuyển xe, vì cần phải dẫn động các hệ thống khác trước.
Các trường hợp hệ thống không hoạt động
Hệ thống Auto Start/Stop sẽ ngừng hoạt động trong một số điều kiện sau:
- Vô lăng bị khóa cứng
- Chế độ SNOW và POWER được chọn
- Xe di chuyển ở những nơi có độ dốc quá lớn
- Người dùng tắt chế độ tự động của hệ thống
- Khi dừng xe mà nhiệt độ trong buông lái quá lớn
- Mở nắp capo khi động cơ đã tạm dừng.
Những lợi ích và hạn chế khi trang bị hệ thống Auto Start/Stop
Hệ thống Auto Start/Stop mang lại nhiều tiện ích cho người dùng và giúp giảm thiểu ô nhiễm môi trường Tuy nhiên, để đảm bảo hiệu quả hoạt động, cần cải tiến chất lượng các hệ thống khác trên xe.
3.3.1 Những lợi ích khi trang bị hệ thống Auto Start/Stop
Chúng có khả năng giảm bớt 3 – 10% lượng nhiên liệu tiêu hao và cả lượng khí thải
Có thể con số này không là gì đối với một cá nhân, nhưng nó thực sự mang lại những ích lợi lớn cho môi trường
Từ năm 2015 đến 2020, công nghệ Auto Start/Stop đã giúp tiết kiệm khoảng 1.6 tỷ gallons nhiên liệu (tương đương 1 gallon ~3.785L) và giảm 8 tấn khí thải CO2 tại 14 địa điểm trên toàn cầu.
Giúp động cơ không quá nhiệt trong khi xe vận hành
3.3.2 Những hạn chế khi trang bị hệ thống Auto Start/Stop Đa số các hệ thống điện trên xe ô tô như hệ thống điều hòa, hệ thống làm mát động cơ đều sẽ ngừng hoạt động khi hệ thống Auto Start/Stop ngắt động cơ Bởi các hệ thống
49 này tiêu tốn rất nhiều điện năng để hoạt động, và bình ắc quy chỉ có thể sử dụng trong một quãng thời gian ngắn
Hiện nay, các nhà sản xuất đã phát triển động cơ hybrid, kết hợp giữa năng lượng điện và nhiên liệu, giúp các hệ thống trên xe không còn phụ thuộc hoàn toàn vào động cơ Một ví dụ tiêu biểu cho sự cải tiến này là Toyota Prius.
Hệ thống này yêu cầu xe phải được trang bị bình ắc quy có tuổi thọ cao để đảm bảo hoạt động hiệu quả Nếu sử dụng bình ắc quy có tuổi thọ thấp, xe sẽ nhanh chóng hết bình khi hệ thống hoạt động.
XÂY DỰNG HỆ THỐNG KHỞI ĐỘNG VÀ DỪNG TỰ ĐỘNG
Cấu tạo của hệ thống
Do hạn chế về kinh phí và thời gian, bộ Start/Stop này không phải là sản phẩm chính thống lắp trên xe mà được phát triển bên ngoài Việc sử dụng bộ Start/Stop có sẵn trên xe yêu cầu can thiệp vào chương trình bên trong hộp, điều này hiện tại không khả thi Bộ Start/Stop bên ngoài cho phép can thiệp mà không ảnh hưởng đến các hệ thống khác trên xe, bao gồm mạng CAN và chẩn đoán lỗi Nút Start/Stop này có thể thay thế cho chìa khóa cơ trên các đời xe cũ.
Hình 4 1 Bộ nút nhấn Start/Stop
*Nguyên lý hoạt động của bộ nút Start/Stop:
Nó hoạt động giống như chìa khóa cơ nhưng thay vì ta dùng tay để xoay chìa khóa thì ở đây ta dùng tay để ấn nút:
Khi không đạp chân phanh:
- Ấn lần một hệ thống điện trên xe sẽ hoạt động ở ACC, dây ACC trên xe được cấp điện 12V
- Ấn lần hai hệ thống điện trên xe sẽ hoạt động ở ON, dây ON trên xe được cấp điện 12V
- Ấn lần ba hệ thống điện trên xe sẽ tắt
- Ấn 1 lần và đạp chân phanh thì dây khởi động được cấp điện 12V đến RELAY khởi động cho phép khởi động động cơ
Khi xe không nổ máy, bạn cần ấn và giữ nút khởi động, lúc này dây khởi động sẽ được cấp điện 12V trong khoảng 3-5 giây và sau đó tự tắt về 0V Nếu bạn tiếp tục giữ nút ấn, xe sẽ không khởi động được nữa Để khởi động lại, bạn cần thả tay ra khỏi nút ấn và ấn lại một lần nữa.
Các dây điện có trên bộ này:
Các dây tín hiệu đầu vào:
Dây màu trắng là dây tín hiệu đầu vào của bàn đạp chân phanh Khi người lái đạp chân phanh, tín hiệu sẽ được cung cấp điện áp 12V, trong khi khi không đạp chân phanh, điện áp sẽ giảm xuống 0V.
Dây màu nâu là dây tín hiệu đầu vào của dầu động cơ Khi động cơ khởi động, bơm dầu hoạt động và kích hoạt công tắc dầu, tạo ra tín hiệu điện áp 12V Ngược lại, khi động cơ không hoạt động, dây tín hiệu sẽ có điện áp 0V.
Dây màu đen là dây tín hiệu đầu vào của phanh tay, với điện áp 0V khi phanh tay được kéo và 12V khi phanh tay được thả.
Dây màu xanh lá được kết nối với hệ thống khóa cửa, giúp thực hiện quá trình khóa và mở cửa khi nhận tín hiệu điều khiển từ remote.
Dây màu đỏ: dây này nhận tín hiệu từ REMOTE sau 5s sẽ khởi động động cơ khi đủ điều kiện để khởi động
Các dây tín hiệu đầu ra:
Dây màu đỏ và dây màu đen là hai dây nguồn của hệ thống hoạt động với điện áp 12V, trong đó dây đỏ đại diện cho dây dương và dây đen là dây âm.
Dây to màu nâu và màu trắng, tương ứng với dây ON1 và ON2, đóng vai trò quan trọng trong quá trình khởi động động cơ Việc sử dụng hai dây ON giúp tập trung nguồn điện cho máy khởi động mà không làm ngắt hoàn toàn nguồn điện cho các thiết bị khác Khi khởi động, dây ON1 sẽ mất điện trong khi dây ON2 vẫn cung cấp điện cho bơm nhiên liệu, đảm bảo nhiên liệu được bơm vào kim phun, từ đó giúp động cơ khởi động một cách bình thường Dây to màu xanh da trời ở mức ACC cho phép các thiết bị điện hoạt động với tải điện nhỏ, tương tự như khi bật chìa khóa ở mức đầu tiên.
Dây khởi động động cơ màu vàng sẽ có điện áp 12V khi bạn đạp phanh và ấn nút khởi động Nếu giữ phanh và nút khởi động, dây này sẽ được cấp điện 12V trong khoảng 3-5 giây trước khi tự ngắt Để khởi động lại, bạn cần thả ra và ấn nút khởi động một lần nữa.
Arduino được sử dụng trong hệ thống là Arduino Uno, với các chân được sử dụng trong hệ thống này là:
Chân 2: là chân nhận tín hiệu của nút ấn chọn MODE, đây là nút ấn chọn xem có cho hệ thống tự động tắt động cơ có hoạt động hay không
Chân 3: là chân nhận tín hiệu của tay số, chân này nhận tín hiệu của cả tay số N và P
Chân 4: là chân nhận tín hiệu của phanh tay
Chân 5: là chân nhận tín hiệu của phanh chân
Chân 6: là chân nhận tín hiệu của công tắc áp suất dầu bôi trơn của động cơ Chân 8: là chân điều khiển mở ACC
Chân 10: là chân điều khiển tắt động cơ
Chân 11: là chân điều khiển khởi động lại động cơ
Chân Vin: là chân ta cần cấp điện áp 5V cho Arduino
Chân Ground: là chân vào MASS
ESP8266 là một module quan trọng trong việc kết nối hệ thống trên xe với điện thoại qua Internet, cho phép khởi động động cơ từ xa Các chân của ESP8266 được sử dụng để tích hợp và điều khiển các chức năng trong hệ thống này.
Chân D2: là chân tín hiệu khởi động
Chân D1: là chân tín hiệu khóa cửa
Hình 4 2 Sơ đồ các chân tín hiệu của Arduino Uno
Chân D5: là chân tín hiệu áp suất dầu
Chân Vin: là chân cấp nguồn 5V cho ESP8266
Chân Ground: là chân vào MASS
4.1.3 Các bộ phận khác của hệ thống
4.1.3.1 Các linh kiện điện tử Điện trở (resistor) là một linh kiện điện tử thụ động gồm 2 tiếp điểm kết nối, thường được dùng để hạn chế cường độ dòng điện chảy trong mạch, điều chỉnh mức độ tín hiệu, dùng để chia điện áp, kích hoạt các linh kiện điện tử chủ động như transistor, tiếp điểm cuối trong đường truyền điện và có trong rất nhiều ứng dụng khác Điện trở công suất có thể tiêu tán một lượng lớn điện năng chuyển sang nhiệt năng có trong các bộ điều khiển động cơ, trong các hệ thống phân phối điện
Hình 4 3 Sơ đồ các chân tín hiệu của ESP8266
Transistor là linh kiện bán dẫn chủ động, thường được sử dụng như bộ khuếch đại hoặc khóa điện tử Với khả năng đáp ứng nhanh chóng và chính xác, transistor được ứng dụng rộng rãi trong các hệ thống số, bao gồm điều chỉnh điện áp, mạch khuếch đại, tạo dao động và điều khiển tín hiệu.
Relay là một công tắc điện từ được vận hành bởi một dòng điện tương đối nhỏ có thể bật hoặc tắt một dòng điện lớn hơn nhiều
Hình 4 5 Hai loại Transitor NPN và PNP
LED là các diode có khả năng phát ra ánh sáng, tia hồng ngoại và tia tử ngoại Cấu trúc của LED bao gồm một khối bán dẫn loại p kết hợp với một khối bán dẫn loại n, tương tự như diode thông thường.
4.1.3.2 Các bộ phận trên xe
Phanh chân (phanh thuỷ lực) là một bàn đạp được kết nối với bộ trợ lực chân không có tác dụng dừng hoặc làm chậm xe
Phanh tay, hay còn gọi là phanh dừng hoặc phanh khẩn cấp, thường nằm gần cột lái của xe Đây là thiết bị quan trọng được sử dụng trong các tình huống dừng khẩn cấp hoặc khi xe đang ở trạng thái đứng yên Việc sử dụng phanh tay đúng cách đảm bảo an toàn cho xe và người sử dụng.
Nguyên lí hoạt động của hệ thống
4.2.1.Điều kiện để hệ thống hoạt động
Khi xe dừng lại tại đèn giao thông, tài xế cần đạp phanh và quan sát tín hiệu Nếu đèn đỏ còn lâu, tài xế nên chuyển số về N và kéo phanh tay, sau đó thả phanh chân để thư giãn trong thời gian chờ Hệ thống sẽ kiểm tra xem xe có đang dừng chờ đèn hay không; nếu đúng, sau khoảng 2 giây, động cơ sẽ tự động tắt và khởi động lại khi tài xế đạp phanh.
4.2.2.Sơ đồ tổng quát hệ thống
Các chương trình xử lí của hệ thống
Để hệ thống hoạt động hiệu quả, yêu cầu đầu tiên là xây dựng cơ sở dữ liệu cho việc truy xuất dữ liệu Để phát hiện tín hiệu đèn giao thông trong một bức ảnh, chương trình cần được cung cấp hình dáng của đèn giao thông, từ đó xác định sự hiện diện và độ chính xác của nó trong bức hình Quá trình tách hình đèn giao thông ra khỏi bức ảnh được thực hiện bởi chương trình tách ảnh, đóng vai trò quan trọng trong việc nhận diện.
Hình 4 10 Sơ đồ tổng quát của hệ thống
Dưới đây là chương trình phân tách hình ảnh đèn giao thông: import cv2 import object_detection
# Đi đến file chứa hình ảnh cần được tách files = object_detection.get_files('traffic_light_input/*.jpg')
# Tải các hình ảnh lên model ta cần phân tách this_model = object_detection.load_ssd_coco()
# Đây là biến đếm số lượng hình ảnh đã được phân tách thành công traffic_light_count = 0
# Đây là biến đếm số file đã được phân tách ra gồm có 3 file tương ứng với 3 màu của đèn file_count = 0
# Hiển thị số lượng hình ảnh chúng ta phải xử lý print("Number of Images:", len(files))
# Đi qua tất cả các file hình ảnh cần được tách for file in files:
# Phát hiện đối tượng trong tấm ảnh
# img_rgb là hình ảnh ban đầu trong RGB format
# Suất ra những tấm hình mà bên trong nó có chứa các hình ảnh của đối tượng mà ta cấn phân tách
# file_name đây là tên của file đã được thiết lập sẵn từ trước
(img_rgb,out,file_name)= object_detection.perform_object_detection(model=this_model,file_name=file, save_annotated=None, model_traffic_lights=None)
# Xử lý 10 file 1 lần if (file_count % 10) == 0:
# Hiển thì số lượng hình ảnh đã được xử lý thành công print("Images processed:", file_count)
The total number of successfully identified traffic lights is displayed with the message: "Number of Traffic lights identified: ", followed by the variable `traffic_light_count` Each correct identification increments the variable `file_count` by one.
All separated images will be collected into a single pre-created file For each index in the range of detected boxes, the corresponding object class will be identified from the detection classes.
# Nếu đối tượng đó là tín hiệu đèn giao thông đã được phát hiện if obj_class == object_detection.LABEL_TRAFFIC_LIGHT:
# Tập hợp các file lại
Để xử lý hình ảnh giao thông, chúng ta trích xuất khu vực hình ảnh từ các tọa độ box với cú pháp `traffic_light = img_rgb[box["y"]:box["y2"], box["x"]:box["x2"]]` Sau đó, chúng ta chuyển đổi hình ảnh từ định dạng RGB sang BGR bằng hàm `traffic_light = cv2.cvtColor(traffic_light, cv2.COLOR_RGB2BGR)`.
# Lưu các hình ảnh vào file có tên 'traffic_light_cropped' cv2.imwrite("traffic_light_cropped/" + str(traffic_light_count) +
# biến traffic lights tăng lên 1 traffic_light_count = traffic_light_count + 1
# Hiển thị tổng số tín hiệu đèn giao thông đã được xác print("Number of Traffic lights identified:", traffic_light_count)
Dưới đây là một số kết quả khi tách đèn giao thông ra khỏi ảnh:
Sau khi tách hình ảnh đèn giao thông, cần điều chỉnh độ phân giải của các bức ảnh để chúng đồng nhất, nhằm nâng cao khả năng nhận diện hình ảnh của chương trình.
Hình 4 11 Đèn giao thông sau khi tách ảnh
4.3.2 Chương trình cập nhật dữ liệu cho hệ thống
Sau khi thu thập dữ liệu, việc đào tạo chương trình nhận diện hình ảnh đèn giao thông cần nhiều thời gian, với mỗi lần training có thể kéo dài tới 60 phút cho một lượng dữ liệu nhỏ Dưới đây là hình ảnh minh họa cho chương trình cập nhật tín hiệu đèn giao thông và các đối tượng liên quan.
This article outlines the program for updating traffic light signals and other related objects using various libraries and frameworks It imports essential packages such as collections for specialized data types, OpenCV for computer vision, and TensorFlow for machine learning The code includes the InceptionV3 model from Keras for image classification, along with tools for data preprocessing, model training, and evaluation Key functionalities such as model checkpointing and early stopping are integrated to enhance training efficiency The program visualizes the model's accuracy over epochs, providing insights into training and validation performance.
63 def Transfer(n_classes, freeze_layers=True):
Sử dụng InceptionV3 neural network để thực hiện việc chuyển giao
:param:n_classes Số phân lớp
:param:freeze_layers Nếu đúng các tham số sẽ không thây đổi
:return trả lại mạng lưới thần kinh tốt nhất
""" print("Loading Inception V3 ") base_model=InceptionV3(weights='imagenet',include_top=False, input_shape=(299, 299, 3)) print("Inception V3 has finished loading.")
The code snippet displays the details of a neural network model by printing the number of layers, the shape of the output, and the model's summary It initializes a sequential model named `top_model` for further development.
The model architecture is constructed by adding layers to a base model, starting with a Global Average Pooling layer followed by a series of Dropout and Dense layers with ReLU activation Specifically, the configuration includes a Dropout rate of 0.5 after the first Dense layer with 1024 units, Batch Normalization, and additional Dense layers of 512 and 128 units, each followed by Dropout The final layer outputs the class probabilities using a softmax activation function If layer freezing is enabled, all layers in the base model are set to non-trainable, ensuring that only the top model's layers are updated during training.
# Thu thập được nhiều hình ảnh bên ngoài hơn datagen = ImageDataGenerator(rotation_range=5, width_shift_range=[-10,
-5, -2, 0, 2, 5, 10], zoom_range=[0.7,1.5], height_shift_range=[-10, -5, -2, 0, 2, 5, 10], horizontal_flip=True) shape = (299, 299)
Upload the previously stored traffic light images using the following commands: `img_0_green = object_detection.load_rgb_images("traffic_light_dataset/0_green/*", shape)`, `img_1_yellow = object_detection.load_rgb_images("traffic_light_dataset/1_yellow/*", shape)`, `img_2_red = object_detection.load_rgb_images("traffic_light_dataset/2_red/*", shape)`, and `img_3_not_traffic_light = object_detection.load_rgb_images("traffic_light_dataset/3_not/*", shape)`.
# Tạo ra danh sách nhãn dán các hình ảnh có khã năng giống với danh sách các hình ảnh đã được lưu trữ trước đó
# Các loại nhãn gián cần làm
# 0 = green giá trị 0 tương ứng với màu xanh
# 1 = yellow giá trị 1 tương ứng với màu vàng
# 2 = red giá trị 2 tương ứng với màu đỏ
In this article, we classify images based on their content, specifically focusing on traffic lights The value '3' indicates that the object in question is not a traffic light To create labels for our dataset, we initialize a list with zeros for images classified as green lights, then extend it with ones for yellow lights, twos for red lights, and threes for images that do not depict traffic lights This structured labeling approach ensures accurate categorization for further analysis.
# Tạo ra mãng labels_np = np.ndarray(shape=(len(labels), 4)) images_np = np.ndarray(shape=(len(labels), shape[0], shape[1], 3))
# Tạo ra danh sánh các hình ảnh có tính hiệu đèn giao thông img_all = []
65 img_all.extend(img_0_green) img_all.extend(img_1_yellow) img_all.extend(img_2_red) img_all.extend(img_3_not_traffic_light)
# Đảm bảo các hình ảnh phải có nhẵn dán tương ứng assert len(img_all) == len(labels)
# Xáo trộn hình ảnh img_all = [preprocess_input(img) for img in img_all]
(img_all, labels) = object_detection.double_shuffle(img_all, labels)
To store images and stickers in an array, iterate through the length of the labels, assigning images and labels to their respective arrays The code snippet demonstrates this process, printing the total number of images and labels stored.
# Tín hiệu đèn giao thông labels_np[idx] = np.array(to_categorical(labels[idx], 4))
Tỷ lệ chính xác của đối tượng được phát hiện được tính toán bằng cách chia dữ liệu thành hai phần: 80% cho tập huấn luyện và 20% cho tập xác thực Cụ thể, biến `idx_split` được xác định bằng cách nhân độ dài của nhãn với 0.8, sau đó phân chia mảng hình ảnh và nhãn thành `x_train`, `x_valid`, `y_train`, và `y_valid`.
# Lưu trữ số lượng đèn giao thông của mỗi màu cnt = collections.Counter(labels) print('Labels:', cnt) n = len(labels) print('0:', cnt[0]) print('1:', cnt[1]) print('2:', cnt[2]) print('3:', cnt[3])
# Tính toán độ rộng của phân lớp tín hiệu đèn giao thông class_weight = {0: n / cnt[0], 1: n / cnt[1], 2: n / cnt[2], 3: n / cnt[3]} print('Class weight:', class_weight)
# Lưu trữ mẫu tốt nhất vào trong traffic.h5 checkpoint=ModelCheckpoint("traffic.h5",monitor='val_loss', mode='min', verbose=1, save_best_only=True) early_stopping=EarlyStopping(min_delta=0.0005, patience=15, verbose=1)
# Tạo ra mẫu phân lớp cần phân chuyển model = Transfer(n_classes=4, freeze_layers=True)
# Hiển thị khái quát mẫu đã được phân lớp model.summary()
# Tạo ra batch các hình ảnh đã được phân lớp it_train = datagen.flow(x_train, y_train, batch_size=32)
# Định hình lại các tham số đã được cập nhật model.compile(loss=categorical_crossentropy, optimizer=Adadelta( lr=1.0, rho=0.95, epsilon=1e-08, decay=0.0), metrics=[‘accuracy’])
The model is trained using the `fit` method with the training data `it_train` for 250 epochs, while validating against `x_valid` and `y_valid` The training process includes shuffling the data and utilizes callbacks such as checkpointing and early stopping Additionally, class weights are applied to address any imbalances in the dataset.
# Hiển thị lịch Sử cập nhật show_history(history_object)
To assess the performance of the model, we evaluate the validation dataset using the command `score = model.evaluate(x_valid, y_valid, verbose=0)`, which provides both the validation loss and accuracy The results are then printed, displaying the validation loss and accuracy values Additionally, we save the validation dataset and report its length, ensuring a comprehensive understanding of the dataset's size and the model's effectiveness.
# Xem qua tập dữ liệu xác thực và xem mô hình đã hoạt động như thế nào trên từng hình ảnh for idx in range(len(x_valid)):
# Làm hình ảnh thành mãng img_as_ar = np.array([x_valid[idx]])
# Tạo ra sự phỏng đón ban đầu prediction = model.predict(img_as_ar)
# Xác định nhãn dựa trên xác suất cao nhất label = np.argmax(prediction)
Mạch điện và các tín hiệu điều khiển của hệ thống
Nhóm chúng em sử dụng sơ đồ mạch điện của HONDA CIVIC để dựa vào đó lấy các tín hiệu điện để cung cấp cho hệ thống hoạt động
4.4.1 Tín hiệu điều khiển máy khởi động
Hệ thống sẽ thay thế công tắc đánh lửa "A" bằng bộ Start/Stop, trong đó dây vàng trên bộ Start/Stop sẽ được kết nối với dây nối vào chân ST trên công tắc đánh lửa "A" Dây vàng này sẽ kích hoạt tín hiệu 12V vào relay khởi động mỗi khi người lái cần khởi động xe.
4.4.2 Các tín hiệu khác Ở điểm B của hình trên là tín hiệu tay số tự động
Hình 4 13 Sơ đồ mạch điện hệ thống khởi động trên HONDA CIVIC 2012
Tín hiệu phanh tay sẽ được lấy tại công tắc phanh tay, khi kéo phanh tay tín hiệu sẽ kéo về 0V
Tín hiệu phanh chân được truyền từ công tắc phanh chân, như thể hiện trong sơ đồ hệ thống đèn phanh của xe tại điểm “C” Khi người lái đạp phanh, tín hiệu sẽ kéo theo nguồn điện 12V.
Hình 4 14 Tín hiệu phanh chân được lấy trong mạch đèn pha
4.4.3 Nguyên lí hoạt động của cả hệ thống
Laptop hoạt động như một vi xử lý, thực hiện tính toán để xác định sự hiện diện của tín hiệu đèn giao thông Để nhận diện đèn giao thông, vi xử lý sẽ chạy chương trình chuyên dụng nhằm phân tích và nhận biết các tín hiệu này.
ESP8266 nhận tín hiệu từ điện thoại để điều khiển bộ Start/Stop, giúp khởi động và dừng động cơ Bên cạnh đó, nó còn nhận tín hiệu từ công tắc dầu bôi trơn, hiển thị trạng thái khởi động của động cơ trên điện thoại, giúp người dùng dễ dàng theo dõi.
Bộ Start/Stop nhận tín hiệu từ chân phanh, chân ga, nút ấn và điều khiển từ Arduino, cung cấp các chân ACC, ON1, ON2, Start, Lock để cấp điện cho relay và các tải điện trên xe.
Hệ thống phun xăng và đánh lửa là hai hệ thống điện quan trọng được kích hoạt sau khi bật công tắc máy Khi người dùng muốn dừng động cơ, việc xoay chìa khóa về vị trí OFF sẽ ngắt nguồn điện cho cả hai hệ thống này.
Hình 4 15 Sơ đồ khái quát hệ thống
Hình 4 16.Sơ đồ khái quát hệ thống
Bộ Start/Stop cung cấp điện cho hai hệ thống riêng biệt và toàn bộ tải điện trên xe Để thực hiện điều này, chúng ta cần đấu thêm hai relay vào đầu cấp nguồn của hai hệ thống Khi dừng xe, hệ thống dừng động cơ sẽ kiểm tra các tín hiệu cần thiết; nếu đủ điều kiện, Arduino sẽ điều khiển hai relay ngắt điện cho hệ thống phun xăng và đánh lửa trong khoảng hai giây, giúp động cơ dừng hoạt động Tuy nhiên, các tải điện khác trên xe vẫn tiếp tục hoạt động bình thường Sơ đồ đấu nối sẽ được trình bày như hình bên dưới.
Hình 4 17 Sơ đồ hệ thống đánh lửa
Tại điểm D, một relay thường đóng được lắp đặt để điều khiển hệ thống đánh lửa Hệ thống này nhận điện 12V trong trạng thái bình thường Khi cần dừng động cơ, relay sẽ mở, ngắt nguồn điện trong khoảng 2 giây, giúp động cơ dừng lại Sau đó, relay sẽ đóng lại, phục hồi nguồn điện 12V cho hệ thống đánh lửa, sẵn sàng cho việc khởi động lại sau này.
Tại điểm E, chúng ta sẽ lắp đặt một relay thường đóng để điều khiển hệ thống phun xăng Hệ thống này sẽ nhận điện 12V trong trạng thái bình thường Khi cần dừng động cơ, relay sẽ mở, ngắt nguồn điện cấp cho hệ thống phun xăng trong khoảng 2 giây, giúp động cơ dừng lại Sau đó, relay sẽ đóng lại, phục hồi nguồn điện 12V cho hệ thống phun xăng, chuẩn bị cho lần khởi động tiếp theo.
Khi động cơ ngừng hoạt động, việc đạp phanh chân sẽ kích hoạt chương trình logic yêu cầu Arduino gửi tín hiệu khởi động vào bộ điều khiển.
Hình 4 18 Sơ đồ mạch phun xăng
Hình 4 19.Sơ đồ mạch phun xăng
Start/Stop, bộ Start/Stop sẽ kích điều khiển chân Start cấp điện 12V và relay khởi động làm cho máy khởi động khởi động động cơ
Bên cạnh đó còn hệ thống khởi động từ xa:
Hệ thống khởi động từ xa này được cải tiến từ hệ thống dừng tự động, cho phép người dùng điều khiển thông qua một ứng dụng trên điện thoại Khi nhấn nút khởi động, ESP8266 nhận lệnh và kích hoạt bộ Start/Stop, cung cấp điện 12V để khởi động động cơ Sau khi động cơ khởi động thành công, công tắc dầu bôi trơn sẽ gửi tín hiệu về ESP8266, thông báo trạng thái khởi động đến ứng dụng Nếu người dùng nhấn nút khởi động lần nữa, hệ thống sẽ dừng động cơ hoặc tự động ngắt sau 10 phút hoạt động Lưu ý, hệ thống chỉ hoạt động khi xe dừng, trong khi xe đang chạy, người dùng chỉ có thể xem trạng thái hiện tại của động cơ.
Hình 4 19 Mô hình hệ thống khởi động và dừng động cơ tự động
PHÂN TÍCH KẾT QUẢ
Hệ thống khởi động và dừng động cơ tự động
Khả năng nhận diện tín hiệu đèn giao thông của chương trình nhận diện đèn giao thông, sau khi đã cập nhật dữ liệu tín hiệu đèn giao thông
Chương trình nhận diện đèn giao thông có khả năng xác định đúng từ 60% đến 90% đèn tín hiệu Để nâng cao độ chính xác trong việc nhận diện, chúng ta có thể cải thiện bằng cách cập nhật thêm các tín hiệu đèn giao thông và mở rộng kho dữ liệu.
Hình 5 1 Tín hiệu đèn giao thông sau khi chạy chương trình nhận diện
Hình 5 2.Tín hiệu đèn giao thông sau khi chạy chương trình nhận diện
92 của nó, khi ta cho nó học càng nhiều thì khả năng phát hiện chính xác tín hiệu đèn giao thông càng cao
Chương trình nhận diện tín hiệu đèn giao thông không phải lúc nào cũng hoạt động chính xác, dẫn đến việc không thể nhận diện đúng đèn giao thông trong một số trường hợp Dưới đây là một số hình ảnh minh họa cho những lỗi mà chương trình gặp phải khi nhận diện đèn giao thông.
Mặc dù chương trình nhận diện đèn giao thông còn một số lỗi, nhưng nó vẫn có thể chấp nhận được vì có khả năng nhận diện các tín hiệu đèn giao thông trong ảnh Điều quan trọng là chương trình có thể xác định sự hiện diện của tín hiệu đèn giao thông, điều này đủ để hệ thống hoạt động hiệu quả Tuy nhiên, để cải thiện khả năng nhận diện, chương trình cần được cập nhật thêm nhiều hình ảnh tín hiệu đèn giao thông.
Mặc dù khả năng nhận diện tín hiệu đèn giao thông chưa đạt 100%, nhưng các thành phần khác như Arduino thu nhận tín hiệu và bộ Start/Stop điều khiển khởi động vẫn hoạt động rất hiệu quả.
Hình 5 3 Chương trình nhận diện đèn giao thông bị lỗi
Hình 5 4.Chương trình nhận diện đèn giao thông bị lỗi
Hệ thống khởi động từ xa
Hiện tại App trên điện thoại chỉ có 1 nút khởi động và 1 đèn để thể hiện trạng thái của động cơ đã có được khởi động hay chưa
The ESP8266 offers excellent Internet connectivity; once powered and configured with Wi-Fi and a password, it can easily connect to the Internet.
Tốc độ truyền thông tin giữa điện thoại và ESP8266 diễn ra rất nhanh, gần như đồng thời, khi cả hai thiết bị được kết nối với Internet ổn định Tuy nhiên, nếu tốc độ Internet chậm, thì tốc độ truyền dữ liệu của hệ thống cũng sẽ bị ảnh hưởng và giảm xuống.
Hệ thống khởi động từ xa đảm bảo an toàn cho người lái, vì khi xe đang trong quá trình điều khiển, người lái không thể khởi động xe từ xa, mà chỉ có thể theo dõi trạng thái của xe.
Hình 5 5 Giao diện App trên điện thoại lúc động cơ hoạt động và không hoạt động
Hình 5 6.Giao diện App trên điện thoại lúc động cơ hoạt động và không hoạt động
Khi khởi động động cơ từ xa mà không ấn nút dừng, động cơ sẽ hoạt động ở chế độ cầm chừng trong 10 phút trước khi tự động dừng Đồng thời, khi khởi động từ xa, cửa xe sẽ tự động khóa để ngăn ngừa người lạ vào trong xe.