Phần mở đầu Giới thiệu sơ lược về lý do chọn đề tài, lịch sử nghiên cứu, mục tiêu nghiên cứu, đối tượng và phạm vi nghiên cứu, phương pháp nghiên cứu, những đóng góp và những vấn đề tồn tại của đề tài để từ đó đem lại cho mọi người một cái nhìn tổng quan nhất về đề tài. Phần nội dung Chƣơng 1: Tổng quan về phương pháp phát hiện biển báo giao thông và nền tảng opencv. Chƣơng 2: Giới thiệu phương pháp nhận dạng biển báo giao thông. Luan van - 10 - Trình bày nội dung về trình tự các bước trong quá trình phát hiện và nhận dạng biển báo giao thông.
Trình bày chi tiết các thuật toán hỗ trợ trong việc phát hiện và nhận dạng gồm: Đặc trưng Haar, bộ tăng tốc Adaboost, phân tích thành phần chính PCA, và bộ phân lớp SVM. Chƣơng 3: Thiết kế vàxây dựng chương trình. Trình bày các bước xây dựng chương trình phát hiện và nhận dạng biển báo giao thông. Chƣơng 4: Đánh giá kết quả chương trình.
Đánh giá độ chính xác của phương pháp. Phần kết luận Luan van - 11 - CHƢƠNG 1: TỔNG QUAN VỀ CÁC PHƢƠNG PHÁP PHÁT HIỆN BIỂN BÁO GIAO THÔNG VÀ NỀN TẢNG OPENCV Nội dung chính 1.1 Các phƣơng pháp phát hiện biển báo giao thông.2 Giới thiệu thƣ viện mã nguồn mở OpenCV.1Phƣơng pháp phát hiện biển báo giao thông. Nghiên cứu của Viola và Jones [16] là một cột mốc quan trong trong lĩnh vực thị giác máy tính (computer vision). Viola và Jones đã phát triển một thuật toán có khả năng xác định một đối tượng trong thời gian thực.Bộ phát hiện được huấn luyện bằng cách sử dụng một tập các mẫu tích cực (positive) vả tiêu cực (negative).Nghiên cứu gốc chỉ dành cho việc phát hiện khuôn mặt, tuy nhiên nhiều nhà nghiên cứu khác cũng đã ứng dụng thành công bộ phát hiện cho nhiều đối tượng khác.Trong số đó, biển báo giao thông cũng được phát hiện thành công.
Bộ phát hiện của Viola và Jones kết hợp giữa hai khái niệm Adaboost và bộ phân lớp Haar-like. Đây cũng là phương pháp được chúng sử dụng trong đề tài và được trình bày chi tiết trong phần 2.2Giới thiệu thƣ viện mã nguồn mở OpenCV OpenCV là thư viện xử lý thị giác máy tính (computer vision) mã nguồn mở. Thư viện này được viết bằng ngôn ngữ C và C++ và có thể chạy trên các nền tảng Linux, Windows và Mac OS X. Ngoài ra còn được phát triển một cách mạnh mẽ trên các ngôn ngữ Python, Ruby, Matlab và một số ngôn ngữ khác.
OpenCV được thiết kế cho việc xử lý tính toán tối ưu và tập trung mạnh vào các ứng dụng thời gian thực. Do OpenCV được viết tối ưu hóa bằng ngôn ngữ C nên có thể tận dụng ưu điểm của bộ vi xử lý đa luồng. Ngoài ra Intel còn cung cấp thêm một thư viện Intel’s Intergrated Performance Primitives (IPP) nhằm mục đích tự động tối ưu hơn nữa trên kiến trúc của Intel. Tuy nhiên thư viện này là bản thương mại của Intel.
Một trong những mục tiêu của OpenCV là đơn giản hóa những gì có thể trong lĩnh vực thị giác máy tính để hỗ trợ người dùng xây dựng nên những ứng dụng mạnh mẽ, tinh vi một cách nhanh chóng. Thư viện OpenCV có hơn 500 hàm và được chia thành nhiều lĩnh vực thị giác máy như trong an ninh, y tế, robot…[12, trang 1].1Lịch sử OpenCV OpenCV ra đời là một sáng kiến nghiên cứu của Intel nhằm mục đích đẩy mạnh các ứng dụng của CPU chuyên sâu. Hướng tới mục tiêu này, Intel đã đưa ra nhiều dự án bao gồm theo vết thời gian thực, và những bức tường hiển thị ảnh 3D. Một trong những tác giả làm việc cho Intel thời gian này đã đến thăm một số trường đại học và nhận thấy rằng một số nhóm trường đại học hàng đầu nhưng MIT Media Lab, đã phát triển rất tốt với một nền tảng thị giác máy tính mở (open computer vision) được truyền tay nhau nội bộ giữa các sinh viên.
Thay vì phải xây dựng lại những chức năng cơ bản từ đầu thì một sinh viên mới có thể bắt đầu bằng cách xây dựng tiếp dựa trên những gì đã có sẵn. Do đó OpenCV được Intel chú ý và đầu tư nghiên cứu phát triển. Những mục tiêu ban đầu của OpenCV là: Nâng cao nghiên cứu xử lý thị giác không chỉ là nguồn mở mà còn phải tối ưu hóa mã lệnh (code) cho nền tảng xử lý thị giác cơ bản. Phổ biến kiến thức xử lý thị giác bằng cách cung cấp những nền tảng chung để các nhà phát triển có thể xây dựng trên nó, vì vậy mà code sẽ có thể dễ dàng đọc được cũng như trong chuyển nhượng.
Thúc đẩy ứng dụng thương mại dựa trên thị giác máy tính bằng cách làm cho nó linh hoạt, di động (portable), tối ưu hóa hiệu suất của mã lệnh, cung cấp giấy phép miễn phí mà không yêu cầu các ứng dụng thương mại sẽ mở (open) hoặc miễn phí. Kể từ khi dự án đầu tiên vào năm 1999 (Hình 1.1) thì đến nay thư viện OpenCV là một lĩnh vực tích cực quan trọng của một số tổ chức phát triển cũng như thu hút trên 20.000 thành viên sử dụng trên khắp thế giới , do đó OpenCV được mong đợi có sẽ có nhiều bản cập nhật tốt hơn trong các vấn đề về xử lý thị giác máy tính, robot…[12, Trang 1-3]. Luan van - 14 - Hình 1.1Lịch sử phát triển của OpenCV [12, Trang 7].2 Kiến trúc của OpenCV OpenCV có cấu trúc gồm 5 thành phần chính, 4 thành phần trong số đó được thể hiện như trong Hình 1. Các thành phần CV chứa thuật toán xử lý ảnh cơ bản và các thuật toán cao cấp trong xử lý thị giác máy tính; ML là thư viện phục vụ trong lĩnh vực máy học bao gồm nhiều phân lớp thống kê và các công cụ phân cụm.
HighGUI chứa những thành phần nhập xuất và các hàm cho việc lưu trữ và truy xuất hình ảnh, video, và CXCore chứa nội dung và các cấu trúc dữ liệu cơ bản.2Kiến trúc cơ bản của OpenCV [12, Trang 13].2 không mô tả thành phần CvAux, thành phần này chứa các hàm đã ngừng phát triển, hoặc đang thử nghiệm. CvAux bao gồm: Stereo vision. Luan van - 15 - Theo vết mắt và miệng. Xác định khung xương của đối tượng trong cảnh.Tiểu kết Chương này trình bày một số phương pháp tiếp cận cơ bản trong việc phát hiện, nhận dạng biển báo giao thông đã được áp dụng trong nhiều đề tài nghiên cứu và nền tảng thư viện OpenCV hỗ trợ trong việc xử lý ảnh.
Thông qua đó chúng tôi đã chọn lựa và xác định những thuật toán, công nghệ phù hợp để xây dựng đề tài. Luan van - 16 - CHƢƠNG 2: GIỚI THIỆU PHƢƠNG PHÁP NHẬN DẠNG BIỂN BÁO GIAO THÔNG Nội dung chính 2.1 Khái quát phƣơng pháp nhận dạng biển báo giao thông đƣợc sử dụng trong đề tài.2 Xác định vùng đặc trƣng chứa biển báo giao thông.3 Giới thiệu phƣơng pháp phân tích thành phần chính (Principle Components Analysis_PCA).4 Nhận dạng biển báo dùng bộ phân lớp Support Vector Machine (SVM).1Khái quát phƣơng pháp nhận dạng biển báo giao thông sử dụng trong đề tài. Từ ảnh RGB đầu vào ta xác định vùng ảnh chứa biển báo giao thông nguy hiểm và tách vùng ảnh này ra khỏi ảnh đầu vào.Sau đó trích riêng biển báo và so sánh với cơ sở dữ liệu mẫu trong bộ phân loại để nhận dạng biển báo giao thông nguy hiểm. Chi tiết các bước của phương pháp nhận dạng theo quy trình như sau: Ảnh RGB đầu Cân bằng vào histogram ảnh Xác định vùng đặc trưng chứa Loại bỏ những biển giao thông thông tin thừa trong ảnh Tách vùng ảnh này ra để xử lý Dùng PCA để giảm bớt số chiều của ảnh xám Resize ảnh biển báo về Size 50x50 Dùng SVM để nhận dạng biển báo Chuyển ảnh biển báo về ảnh xám Sơ đồ 2.1Trình tự các bước trong phương pháp nhận dạng biển báo giao thông nguy hiểm.2Xác định vùng đặc trƣng chứa biển báo giao thông 2.1Đặc trƣng Haar-like Đặc trưng Haar-like được sử dụng trong việc nhận dạng đối tượng trong ảnh số được phát biểu bởi Viola và Jones[16] gồm 4 đặc trưng cơ bản để xác định một đối tượng trong ảnh.
Mỗi đặc trưng Haar-like là sự kết hợp gồm 2 hoặc 3 khối chữ nhật mang giá trị “đen” hoặc “trắng”. Những khối chữ nhật này thể hiện sự liên hệ tương quan giữa các bộ phận trong ảnh mà bản thân từng giá trị pixel không thể diễn đạt được.1 Đặc trưng theo cạnh Hình 2.2 Đặc trưng theo đường Hình 2.3 Đặc trưng theo xung quanh tâm Hình 2.4 Đặc trưng theo đường chéo Luan van - 19 - Dựa theo các đặc trưng trên, giá trị của đặc trưng Haar-like được xây dựng bởi độ chênh lệch giữa tổng các pixel của các vùng đen so với tổng các pixel của các vùng trắng.1) Như vậy để tính giá trị đặc trưng Haar-like cần phải thực hiện tính toán tổng các vùng pixel trên ảnh.Điều này làm cho chi phí bài toán lớn không thể đáp ứng các tính năng yêu cầu thời gian thực. Do vậy Viola và Jones đã đề xuất ra khái niệm “Integral Image” (ảnh chia nhỏ) để giảm thiểu chi phí cho bài toán tính giá trị của đặc trưng Haar-like để bài toán có thể xử lý với thời gian thực. Tính “Integral Image” bằng cách sử dụng mảng 2 chiều với kích thước bằng kích thước của ảnh cần tính giá trị đặc trưng Haar-like.
Ảnh chia nhỏ ở vị trí (x,y) được tính bằng tổng các giá trị pixel của vùng từ vị trí (0,0) đến vị trí (x-1, y-1). Việc tính toán đơn giản là thực hiện phép cộng số nguyên nên tốc độ thực hiện được tối ưu hóa.5Cách tính Integral Image của ảnh ′ ′ 𝑃 𝑥, 𝑦 = 𝑥 ′ ≤𝑥,𝑦 ′ ≤𝑦 𝑖(𝑥 , 𝑦 ) (2.2) Kết quả có được sau khi tính Integral Image, việc tính tổng giá trị pixel trong vùng cần tính thực hiện như sau: Gọi vùng cần tính tổng các giá trị pixel là vùng “A4”.3) Luan van - 20 - Hình 2.6 Cách tính tổng giá trị pixel vùng cần tính.2 Thuật toán tăng tốc Adaboost Thuật toán tăng tốc Adaboost là thuật toán máy học được cải tiến từ thuật toán Boosting. Với ưu điểm khả năng giải quyết bài toán nhanh chóng, cài đặt đơn giản và dễ dàng, không có các tham số để điều chỉnh và không cần tri thức về bộ học yếu do đó thuật toán tăng tốc Adaboost được sử dụng nhiều trong các ứng dụng về nhận dạng.1Tiếp cận Boosting Boosting là kĩ thuật nâng cao độ chính xác cho các thuật toán máy học. Năm 1989, Schaire đã đưa ra các chứng minh đầu tiên về thuật toán boosting.