nghiên cứu thư viện opencv ứng dụng trong việc nhận dạng biển báo giao thông - Pdf 33

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ TT VÀ TT
BỘ MÔN TIN HỌC ỨNG DỤNG

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

NGHIÊN CỨU THƯ VIỆN OPENCV
ỨNG DỤNG TRONG VIỆC NHẬN DẠNG
BIỂN BÁO GIAO THÔNG

Sinh viên thực hiện:
Nguyễn Thái Hưng
MSSV: 1111525

Cán bộ hướng dẫn:
Ths. Nguyễn Đức Khoa

Cần Thơ, 06/2015



TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ TT VÀ TT
BỘ MÔN TIN HỌC ỨNG DỤNG

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

NGHIÊN CỨU THƯ VIỆN OPENCV
ỨNG DỤNG TRONG VIỆC NHẬN DẠNG
BIỂN BÁO GIAO THÔNG
Sinh viên thực hiện:

đề tài cho em, cũng như trong việc giúp em tìm và đưa ra các hướng giải quyết vấn đề. Tuy
không có nhiều thời gian làm dự án này xuyên suốt với thầy, nhưng nhờ những gợi ý của
thầy mà em có thể thuận lợi giải quyết được các vấn đề trong dự án và hoàn thành tốt được
đề tài Luận văn tốt nghiệp.
Và, em cũng chân thành cám ơn trường Đại học Cần Thơ đã cung cấp cho em một
môi trường học tập với đầy đủ các trang thiết bị và tài liệu học tập và nghiên cứu trong 4
năm học vừa qua.
Cuối cùng em xin chúc trường Đại học Cần Thơ ngày càng phát triển và mở rộng quy
mô, đạt chuẩn chất lượng của khu vực và thế giới, cung cấp đầu ra nguồn nhân lực chất
lượng cao. Và em xin chúc quý thầy cô thuộc Bộ môn Tin học ứng dụng dồi dào sức khoẻ
và thành công trong cuộc sống.
Cần Thơ, ngày 20 tháng 06 năm 2015
Sinh viên

Nguyễn Thái Hưng

i



MỤC LỤC
THƯ CÁM ƠN........................................................................................................................ i
MỤC LỤC............................................................................................................................ iii
DANH MỤC HÌNH...............................................................................................................v
DANH MỤC CÁC CHỮ VIẾT TẮT....................................................................................vi
TÓM TẮT............................................................................................................................ vii
ABSTRACT........................................................................................................................ viii
CHƯƠNG 1: TỔNG QUAN..................................................................................................1
1.1. Đặt vấn đề...................................................................................................................1
1.2. Một số nghiên cứu.......................................................................................................1

3.1.4. Phát hiện biển báo..............................................................................................45
3.1.5. Nhận dạng biển báo............................................................................................45
3.2. Cài đặt....................................................................................................................... 46
3.2.1. Đọc tập biển báo mẫu.........................................................................................46
3.2.2. Áp dụng ngưỡng để phát hiện biên của biển báo................................................46
3.2.3. Loại bỏ biển báo giả...........................................................................................47
3.2.4. Loại bỏ kết quả so khớp không chính xác..........................................................47
3.3. Kết quả...................................................................................................................... 48
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN............................................................................51
TÀI LIỆU THAM KHẢO....................................................................................................53

iv


DANH MỤC HÌNH
Hình 2.1: Độ phân giải của ảnh..............................................................................................5
Hình 2.2: Binary image..........................................................................................................6
Hình 2.3: Grayscale image.....................................................................................................6
Hình 2.4: Color image............................................................................................................6
Hình 2.5: Dãy màu thể hiện ảnh 8-bit = 256 sắc thái (shades)................................................7
Hình 2.6: Kết quả của các hàm vẽ........................................................................................20
Hình 2.7: Kernel cho giải thuật mean filter (bên trái) và structure element với origin nằm ở
trung tâm (bên phải).............................................................................................................26
Hình 2.8: Edges detect object...............................................................................................30
Hình 2.9: Hình ảnh dùng để tìm contours, có các vùng A, B, C,... màu trắng trên nền đen. .31
Hình 2.10: Kết của của việc tìm contours, được thể hiện ở 2 dạng: exterior (đường đứt nét)
và hole (đường chấm)...........................................................................................................31
Hình 2.11: Minh hoạ cách lưu trữ / thể hiện của hệ thống contours tree...............................33
Hình 2.12: Walk sign dectection...........................................................................................34
Hình 2.13: Một số biển báo cấm...........................................................................................42

HSV

Hue Saturation Value color space

2D, 3D

2-, 3-Dimensional

SURF

Speeded Up Robust Features

SIFT

Scale Invariant Feature Transform

ORB

Oriented FAST and Rotated BRIEF

vi


TÓM TẮT
Biển báo giao thông điều khiển người tham gia giao thông, giúp họ nhận biết được các nguy
hiêm có thể thể xãy ra hay các lệnh buộc phải thi hành hoặc các hướng dẫn; nhận dạng được
biển báo giúp người lái xe được an toàn hơn.
Trong đề tài này, tôi đề xuất phương pháp phát hiện biển báo bằng cách áp dụng ngưỡng
dựa trên màu sắc trên không gian màu HSV để xác định viền của biển báo, sau đó sử dụng
Canny edges và tìm đường biên của biển báo và nhận dạng biển báo bằng phương pháp so

keypoints, compute all their descriptors on candidates; also extract and compute on all
traffic signs template and then match candidates with all templates, choose the best match is
traffic sign recognised. Signs have detected must apply post-processing to remove noise and
resize to fit with size of template signs, aims to increase accurate. With this simple method
can helps decrease time to process, good for real-time application.
To simulate the real environment, I was capture a video on roads with illumination cloudy
weather with test speed is 40 km/h and I was create all one video to test system. Beside that,
I also has other simulate the real environment by using a camera as camera on a cars or
mobile devices and some sign has print on paper as signs on road with lighting in the room.
In template signs collection, I have chosed 32 most common signs include warn, prohibition
and guide signs; and over 10 signs to test system. Results processed and identify rapidly
meet the requirements of a real-time application.
Keyword: Traffic Sign Detection; Traffic Sign Recognition; Image Processing
Programming; Canny edges detector; OpenCV library; Feature Maching; Keypoint
Descriptor; Color Detection / Segmentation; Driver Assistance System; Feature matching
with ORB, SIFT, SURF.

viii


CHƯƠNG 1: TỔNG QUAN
1.1. Đặt vấn đề
Hiện nay trên các tuyến đường bộ ở Việt Nam hầu hết đều có đặt các biển báo giao thông,
nhằm thông tin cho người lái xe biết những điều được phép, điều không được phép, các
nguy hiểm có thể xãy ra, các hiệu lệnh phải thi hành hay các hướng dẫn giúp cho người
tham gia giao thông lái xe được an toàn hơn.
Nhưng khi tham gia giao thông người lái xe cần tập trung lái xe để tránh gặp tai nạn giao
thông hoặc khi gặp sự cố người lái xe có thể đối phó kịp thời, do đó việc cứ liên tục quan sát
các biển báo giao thông đặt bên đường có thể khiến cho người lái xe không thể đối phó kịp
thời các sự cố trên đường nếu gặp phải. Ví dụ như khi người lái xe chuẩn bị tới một đoạn




“Traffic sign detection and identification using SURF algorithm and GPGPU”,
1


Dajun Ding và Jihwan Yoon và Chanho Lee (2012), Korea
Nhưng các nghiên cứu thường được áp dụng trong phạm vi biển báo của một số quốc gia, vì
đặt trưng biển báo của các quốc gia là khác nhau.
1.3. Phạm vi của đề tài
Xây dựng một hệ thống thông tin nhận dạng biển báo giao thông từ một đoạn video thực tế
được quay trên các đoạn đường có đặt các biển báo giao thông.
Khi gặp được một biển báo, nhận dạng biển báo trong video là biển báo gì và thông báo ra
màn hình hiển thị (hoặc thông báo bằng hệ thống âm thanh hoặc cả hai).
Trong phạm vi nghiên cứu, hệ thống sẽ nhận dạng các loại biển báo cấm, biển báo nguy
hiểm và biển báo chỉ dẩn phổ biến, thường gặp được đặt trên các tuyến đường ở Việt Nam.
1.4. Phương pháp tiếp cận
Việc phát hiện và nhận dạng biển báo trong video có thể được đơn giản hoá bằng việc phát
hiện và nhận dạng biển báo trong một hình ảnh, vì bản chất của video là sự kết hợp của
nhiều hình ảnh lại với nhau.
Để phát hiện và nhận dạng được biển báo thì cần phải phân tích, xử lý và trích xuất các
thông tin cần thiết trong hình ảnh để phát hiện được có “sự xuất hiện” của biển báo, sau đó
mới tiến hành nhận dạng biển báo đó từ tập dữ liệu chứa các thông tin về biển báo.
Do các biển báo giao thông là đối tượng biết trước, không đổi – là tập tất cả các biển báo có
được vẽ bằng các phần mềm. Do đó, tôi đề xuất sử dụng phương pháp:


Phát hiện vùng biển báo bằng dựa trên các đặc trưng của từng loại biển báo



Các yếu tố ảnh hưởng đến việc phát hiện và nhận dạng



Tìm hiểu các giải thuật so khớp và tìm giải thuật phù hợp nhất


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1. Thị giác máy tính (Computer vision)
Thị giác máy tính là một lĩnh vực gồm các phương pháp thu nhận, phân tích, xử lý và nhận
dạng hình ảnh và dữ liệu đa chiều từ thực tế để cho ra thông tin số (numerical) hoặc biểu
tượng (symbolic) dùng cho các mục đích nhất định.
Ý tưởng được dựa trên thị giác của con người về khả năng nhận dạng và hiểu một hình ảnh.
Để làm được điều đó, thị giác máy tính áp dụng các mô hình xây dựng dựa trên các ngành lý
thuyết học, vật lý, thống kê và hình học.
2.1.1. Ứng dụng
Trong các ứng dụng thị giác máy tính, thường được lập trình để giải quyết một vấn đề cụ
thể, nhưng trên cơ bản các phương pháp đều đều dựa trên sự học (learning) trở nên ngày
càng phổ biến. Ví dụ các ứng dụng thị giác máy tính phục vụ cho:


Điều khiển tiến trình (Controlling processes) như rô bốt công nghiệp



Điều hướng (Navigation) như xe tự động hay rô bốt di động





Dectection (Phát hiện) – Phát hiện một đối tượng quan tâm. Ví dụ: phát hiện các tế
bào lạ trong ảnh y học hay phát hiện xe cộ đi qua hệ thống thu phí tự động.
3


Motion analysis
Phân tích chuyển động trên một chuỗi hình ảnh là một xử lý để có được vận tốc ước lượng
của mỗi điểm trên chuỗi hình ảnh hoặc cảnh 3 chiều.
Scene reconstruction
Mục đích xây dựng một mô hình 3 chiều từ một hoặc nhiều hình ảnh của một quang cảnh
hoặc video.
Image restoration
Mục đích của phục hồi hình ảnh là loại bỏ các thành phần gây nhiễu. Phương pháp đơn giản
nhất là có thể dùng các bộ lọc (filter) như median filter, Gaussian filter hay các bộ lọc cơ
bản khác.
2.1.3. Các phương pháp
Image acquisition
Thu nhận hình ảnh từ một vài thiết bị như máy chụp hình, máy chụp x-quang, ra đa, kính
hiển vi hiện đại, máy quét,... Tuỳ vào từng thiết bị mà kết quả có thể tạo ra ảnh 2 chiều, 3
chiều hoặc một chuỗi các hình ảnh.
Pre-processing
Tiền xử lý là bước làm trước khi áp dụng các phương pháp của thị giác máy tính lên các
hình ảnh để trích xuất ra một phần cụ thể của thông tin và cũng nhằm đảm bảo nó đáp ứng
một số giả định của phương pháp. Ví dụ như:


Lấy mẫu lại để đảm bảo sự chính xác của hệ thống toạ độ.





Tách một hoặc nhiều khu vực nhỏ trên ảnh chứa một đối tượng quan tâm.


High-level processing
Tại bước xử lý nâng cao, dữ liệu đầu vào thường là tập các điểm hoặc một vùng ảnh quan
tâm được tạo ra từ bước xử lý detection/segmentation. Ví dụ như:


Xác thực dữ liệu có đáp ứng mô hình và giả định của ứng dụng hay không



Nhận dạng hình ảnh – Phân loại các đối tượng phát hiện được thành các loại



Đăng ký hình ảnh – So sánh và kết hợp 2 cái nhìn khác nhau của cùng một đối tượng

Decision making
Đưa ra quyết định cho ứng dụng. Ví dụ như:


Đạt hoặc không đạt (pass/fail) cho ứng dụng kiểm tra tự động



Khớp hoặc không khớp (match/no-match) cho ứng dụng nhận dạng



Hình 2.1: Độ phân giải của ảnh

Aspect ratio
Tỷ lệ hình ảnh là tỷ số giữa chiều rộng và chiều cao của hình ảnh. Ví dụ, một ảnh có độ
phân giải là 1600x900 có tỷ lệ là 16:9.
Các tỷ lệ ảnh phổ biển trên màn hình tivi và máy vi tính: 4x3, 16:9, 16:10, 5:4.

5


Binary image
Ảnh nhị phân là hình ảnh mà giá trị của mỗi pixel chỉ có thể là 0 đại diện cho màu đen và 1
(hoặc 255) đại diện cho màu trắng.

Hình 2.2: Binary image

Grayscale image
Ảnh màu xám là hình ảnh mà giá trị của mỗi pixel mang thông tin về cường độ/sắc thái
(intensity/shade) của màu xám.
Cường độ thông tin được lưu trữ bởi kiểu dữ liệu số nguyên 8-bit, do đó có 2 8 = 256 giá trị
khác nhau trải dài từ màu đen đến màu trắng, và thường được gọi là ảnh trắng đen.

Hình 2.3: Grayscale image

Color image
Ảnh màu là hình ảnh mà giá trị của mỗi pixel là sự kết hợp của 3 màu chính gồm xanh lam,
xanh lục, và đỏ. Từ 3 màu chính, có thể kết hợp lại với nhau để tạo ra được hầu hết tất cả
các màu trong tự nhiên.
Một ảnh màu 24-bit có thể tạo ra được 224 = 16 777 216 màu khác nhau (mắt của con người

255

0
Hình 2.5: Dãy màu thể hiện ảnh 8-bit = 256 sắc thái (shades)

2.3. Thư viện OpenCV
OpenCV là thư viện cài đặt hàng ngàn giải thuật Thị giác máy tính (Computer Vision) và
Máy học (Machine Learning) được phát hành với giấy phép mã nguồn mở BSD. Thư viện
được viết bằng ngôn ngữ C và C++ và có thể chuyển (porting) để sử dụng như ngôn ngữ
Java, Python, MATLAB,...
Do OpenCV được viết bằng C và C++ nên hỗ trợ đa nền tảng (cross platform) như máy tính
(Windows, Linux, Android, MacOS, FreeBSD, OpenBSD) và di động (Android, Maemo,
iOS) và trên các hệ thống nhúng (Embeded System).
Hiện tại, thư viện có hơn 2500 giải thuật được cài đặt tối ưu. Các giải thuật giải thuật này
dùng để phát hiện và nhận dạng khuôn mặt, đối tượng xác định, phân loại hành động của
con người trong video, theo dõi đối tượng trong camera, trích xuất mô hình 3D của đối
tượng,... OpenCV có một cộng đồng lớn với hơn 47 ngàn người và đạt hơn 7 triệu lượt tải.
Thông tin thêm:


Trang chủ:



Tài liệu:

OpenCV được chia theo cấu trúc module:


core: gồm các kiểu dữ liệu và các hàm cơ bản để sử dụng ở các module khác

số đối tượng như khuôn mặt, mắt, miệng, con người, xe hơi,…



ml: gồm các giải thuật máy học như mô hình thống kê, hồi quy, phân loại, gom cụm.

Ngoài ra, còn rất nhiều module khác như flann, gpu, photo, stitching, nonfree, contrib,
legacy, ocl, superres, viz. Trong tài liệu này sẽ giới thiệu một số kiểu dữ liệu, hàm, giải thuật
trong các module theo ngôn ngữ C/C++ có sử dụng trong chương trình.
2.3.1. Sử dụng thư viện
Tất cả các lớp (classes) và hàm (functions) của OpenCV được đặt trong cv namespace, vì
thế để sử dụng các functions cần phải ghi rõ cv:: trước class và function hoặc sử dụng
using namespace.
#include "opencv2/opencv.hpp"
int main(int argc, char const* argv[]) {
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
return 0;
}

hoặc
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char const* argv[]) {
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
return 0;
}

Khi có sự sung đột giữa các class và function của OpenCV với thư viện chuẩn hoặc thư viện
khác, khi đó buộc phải ghi rõ cv::.
2.3.2. Các kiểu dữ liệu cơ bản

template<typename _T> inline _T sqr(_T const &num) {
return num * num;
}
int main(int argc, char const* argv[]) {
// First way to use
Point pt1(-2, 1);
// Second way to use
Point pt2;
pt2.x = 1; pt2.y = 5;
dis = sqrt(sqr((pt2.x - pt1.x)) + sqr((pt2.y - pt1.y)));
cout

Ví dụ 2.2 : Tạo một hằng số chứa thông tin của màu hồng
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
#define PINK_COLOR Scalar(203, 192, 255)
int main(int argc, char const* argv[]) {
cout

– Kiểu ma trận – được biểu thị bởi CV_<depth><U|S|F>C<channel(s)>



depth

và <U|S|F> dựa vào kiểu nguyên thuỷ (primitive type) gồm:

▪ 8-bit unsigned integer (uchar): CV_8U
▪ 8-bit signed integer (schar): CV_8S
▪ 16-bit unsigned integer (ushort): CV_16U
▪ 16-bit signed integer (short): CV_16S
▪ 32-bit signed integer (int): CV_32S
▪ 32-bit floating-point number (float): CV_32F
▪ 64-bit floating-point number (double): CV_64F


channels(s)

– Số kênh của ma trận

▪ Nếu số kênh từ 1 đến 4 có thể sử dụng các hằng số CV_8UC1, … CV_64FC4
11


▪ Nếu nhiều hơn 4 có thể sử dụng các macros:

CV_8UC(n),... CV_64C(n)





Thêm thanh theo dõi (trackbar) vào cửa sổ, hay xử lý sự kiện từ chuột và bàn phím



Đọc và ghi hình ảnh



Đọc video từ camera hoặc file và ghi video

namedWindow
Tạo một cửa sổ để hiển thị như hình ảnh, biểu đồ tần số.
void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE)

Trong đó,


winname



flags

– Tên của cửa sổ, được sử dụng như là định danh để nhận biết cho cửa sổ.

– Cờ chỉ định loại cửa sổ:



winname

– Tên cửa sổ cần đóng được tạo bởi namedWindow

imread
Đọc hình ảnh từ tập tin.
Mat imread(const string& filename, int flags=1)

Trong đó,


filename



flags

– Tên tập tin cần đọc.

– Cờ chỉ định kiểu màu của hình ảnh được đọc



IMREAD_GRAYSCALE:



IMREAD_COLOR:


mat

– Tên cửa sổ để hiển thị

– Hình ảnh được hiển thị

Nếu cửa sổ được tạo với cờ WINDOW_AUTOSIZE, hình ảnh được hiển thị với kích thước gốc.
Ngược lại, hình ảnh sẽ được co giản để khớp với kích thước cửa sổ.
waitKey
Đợi cho đến khi nhấn phím bất kỳ.
int waitKey(int delay = 0)

13



Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status