Haar-like Features là giải thuật máy học được áp dụng trong đề tài để trích các đặc trưng của đối tượng cần dò tìm, kết hợp với bộ phân tầng Cascade of Boosted Classifiers nhằm nhận dạn
Trang 1LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NGHIÊN CỨU THƯ VIỆN OPENCV
ỨNG DỤNG NHẬN DẠNG KHUÔN MẶT NGƯỜI
MSSV : 1111540
Cần Thơ, 2015 KHOA CNTT & TT
BỘ MÔN TIN HỌC ỨNG DỤNG
Trang 2LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NGHIÊN CỨU THƯ VIỆN OPENCV
ỨNG DỤNG NHẬN DẠNG KHUÔN MẶT NGƯỜI
MSSV : 1111540
Cán bộ phản biện 1.Ths.Huỳnh Phụng Toàn 2.Ks.Phạm Phương Hồng Ngân
Luận văn được bảo vệ tại: Hội đồng chấm luận văn tốt nghiệp Bộ môn Tin học Ứng dụng Khoa CNTT & TT, Trường Đại học Cần Thơ vào ngày 14 tháng 5 năm 2015
Có thể tìm hiểu luận văn tại:
-Trung tâm Học liệu, Trường Đại học Cần Thơ
-Website: http://www.lrc.ctu.edu.vn/
Cần Thơ, 2015 KHOA CNTT & TT
BỘ MÔN TIN HỌC ỨNG DỤNG
Trang 3LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời tri ân đến quý Thầy Cô Khoa Công nghệ thông tin & Truyền thông nói chung và Thầy Cô Bộ môn Tin học ứng dụng nói riêng, những người
đã giảng dạy, cung cấp những kiến thức và tạo điều kiện để em thực hiện đề tài
Đặc biệt, em xin gửi lời cảm ơn sâu sắc đến Thầy Ths Nguyễn Đức Khoa người
đã tận tình hướng dẫn, truyền đạt kinh nghiệm, kiến thức và chỉ bảo em trong suốt quá trình thực hiện đề tài
Con xin gửi lời biết ơn sâu sắc và kính trọng đến cha mẹ - gia đình đã giúp con
có được những thành quả ngày hôm nay
Sau cùng, xin chân thành gửi lời cảm ơn đến các bạn bè đã đóng góp ý kiến, giúp
đỡ và động viên tôi trong những lúc khó khăn và tiếp thêm cho tôi động lực để hoàn thành đề tài
Cần thơ, ngày 4 tháng 5 năm 2015
1111540 - Nguyễn Hoàng Phúc
Trang 4MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI 1
1.1 Đặt vấn đề 1
1.2 Một số nghiên cứu trước đây 1
1.3 Phạm vi đề tài 2
1.4 Phương pháp nghiên cứu 3
1.5 Bố cục và nội dung 3
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 4
2.1 Bài toán dò tìm khuôn mặt 4
2.1.1 Định nghĩa bài toán 4
2.1.2 Những yếu tố ảnh hưởng bài toán 4
2.1.3 Các phương pháp dò tìm khuôn mặt 4
2.2 Giới thiệu đặc trưng Haar-Like 5
2.2.1 Đặc trưng Haar-Like 7
2.2.2 Trích đặc trưng Harr-Like từ ảnh 8
2.2.3 Mô hình Cascades of Boosted Classifiers 11
2.2.4 Adaboost 12
2.2.4.1 Tổng quan về Adaboost 12
2.2.4.2 Sơ lược Boosting 12
2.2.4.3 Kỹ thuật Adaboost – nhận dạng đối tượng 14
2.3 Định vị đối tượng 21
2.4 Tổng quan về thư viện OpenCV 22
2.4.1 Tổng quan 22
2.4.2 Cấu trúc và ứng dụng của OpenCV 23
2.4.3 Những đặc trưng của OpenCV 25
2.5 Thư viện Emgu CV 26
2.6 GSMComm 28
CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU 29
Trang 53.1 Quy trình cơ bản của hệ thống 29
3.2 Phát hiện và nhận dạng đối tượng với đặc trưng Haar-Like 29
3.2.1 Huấn luyện dữ liệu 29
3.2.2 Hệ thống nhận dạng đối tượng 35
3.3 Thực nghiệm hệ thống 36
3.3.1 Huấn luyện dữ liệu 36
3.3.2 Thực nghiệm nhận dạng đối tượng với Emgu CV: 39
KẾT LUẬN VÀ ĐỀ NGHỊ 47
PHỤ LỤC 49
TÀI LIỆU THAM KHẢO 58
Trang 6DANH MỤC HÌNH
Hình 2.1: Dò tìm khuôn mặt 4
Hình 2.2: Đặc trưng Haar-Like 6
Hình 2.3: Tính toán vùng S dựa trên các vùng trước đó 7
Hình 2.4: Các đặc trưng Haar-Like cơ bản 7
Hình 2.5: Các đặc trưng mở rộng từ đặc trưng Haar-like cơ sở 8
Hình 2.6: Cách tính Integral Image của ảnh 9
Hình 2.7: Cách tính nhanh vùng D với tổng các điểm ảnh trên ảnh 9
Hình 2.8: Cách tính nhanh tổng điểm ảnh D trên ảnh với các đặc trưng xoay 45o 10
Hình 2.9: Cách trích đặc trưng Haar-like 10
Hình 2.10: Cấu trúc phân tầng với N giai đoạn 11
Hình 2.11: Kỹ thuật Boosting 14
Hình 2.12: Nguyên tắc Adaboost 15
Hình 2.13: Kỹ thuật Adaboost 16
Hình 2.14: Lược đồ huấn luyện nhận dạng đối tượng 18
Hình 2.15: Ưu tiên trọng số lớn để phân hoạch 19
Hình 2.16: Adaboost và Cascades of Boosted Classifier 20
Hình 2.17: Dò tìm đối tượng với Haar Like Features - Cascade of Boosted Classifiers 21
Hình 2.18: Thư viện OpenCV 22
Hình 2.19: Lịch sử các phiên bản OpenCV 23
Hình 2.20: Cấu trúc cơ bản của OpenCV 23
Hình 2.21: Các khía cạnh và ứng dụng của OpenCV 25
Hình 2.22 Thư viện Emgu CV 26
Hình 2.23: Cấu trúc của Emgu CV 27
Hình 2.24: Sơ đồ cơ bản hệ thống GSM 28
Hình 3.1: Quy trình hệ thống 29
Hình 3.2: Thư mục chứa ảnh và các tập tin liên quan 30
Trang 7Hình 3.3: Thu ảnh thông qua Webcam 30
Hình 3.4: Ảnh chứa đối tượng – Positives 31
Hình 3.5: Ảnh không có đối tượng – Negatives 31
Hình 3.6: Đánh dấu vị trí đối tượng và lưu vào tập tin Positive.txt 31
Hình 3.7: Ghi nhận ảnh không có đối tượng vào tập tin Negatives.txt 32
Hình 3.8: Gói thư viện tạo vectơ với Positives 33
Hình 3.9: Cấu trúc phân tầng tập tin Xml 34
Hình 3.10: Đánh dấu vị trí đối tượng 36
Hình 3.11: Lưu ảnh không đối tượng 36
Hình 3.12: Tạo file vectơ 37
Hình 3.13: Các bước huấn luyện 37
Hình 3.14: Các Stage (tầng) được tạo ra 38
Hình 3.15: File Xml sau khi ghép lại 38
Hình 3.16: Giao diện chương trình 43
Hình 3.17: Nhận dạng đối tượng 43
Hình 3.18: Chụp ảnh đối tượng 44
Hình 3.19: Thanh trackbar 45
Hình 3.20: Lưu thành công video 45
Hình 3.21: Kết nối và gửi tin nhắn 46
Trang 8DANH MỤC KÝ HIỆU VÀ VIẾT TẮT
AdaBoost Adaptive Boost
GSMComm Global System for Mobile Communications
OpenCV Open Source Computer Vision Library
Trang 9TÓM TẮT
Tóm Tắt: Luận văn này sẽ tìm hiểu về OpenCV - thư viện xử lý ảnh mã nguồn mở và
các giải thuật để nhận dạng, phát hiện đối tượng trên thời gian thực Các giải thuật máy
học được áp dụng kết hợp với thư viện Emgu (nền tảng từ OpenCv được triển khai trên ngôn ngữ C#) để xây dựng ứng dụng phát hiện đối tượng (đối tượng cụ thể là khuôn mặt người) Haar-like Features là giải thuật máy học được áp dụng trong đề tài để trích các
đặc trưng của đối tượng cần dò tìm, kết hợp với bộ phân tầng Cascade of Boosted Classifiers nhằm nhận dạng, phát hiện đối tượng trên mặt phẳng ảnh thông qua giải thuật Adaboost để phân lớp Đề tài đã thu thập 6000 ảnh (trong đó: 1500 ảnh có đối tượng,
4500 ảnh không có đối tượng) Ứng dụng sẽ thực thi phát hiện, khoanh vùng, lưu ảnh đối tượng hoặc lưu lại đoạn phim khi đối tượng bị nhận dạng Sử dụng hệ thống GSM
để gửi tin nhắn SMS vào điện thoại nhằm báo cáo về thời gian đối tượng bị phát hiện, đồng thời phát ra tín hiệu báo động
Abstract: The purpose of this research is study about OpenCV – the open source image
processing library and algorithms to identify and detect objects in real time The machine learning algorithms are applied in conjunction with Emgu library (which is derived from OpenCv and deployed on the C# language) to create object-detecting applications (the specific objects are human faces) Haar-like Features - a machine learning algorithm is applied in the study for extracting features of the object to be detected, combined with Boosted Cascade of Classifiers to identify, detect objects on the image plane via algorithms AdaBoost for classification A total of 6,000 photos (1,500 contained object images and 4,500 did not contain object images) were collected for study The application will discover, zone, and save images or clips whenever the objects are identified The use of GSM system is to send an SMS to a cellphone to report the time that the objects are detected, and to give an alarm
Từ khoá (Keyword): Haar-Like feature, Adaboost, Cascade of Booted Classsifier, nhận dạng đối tượng, Emgu, OpenCV
Trang 10CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
1.1 Đặt vấn đề
Trong thời kỳ phát triển mạnh mẽ của công nghệ thông tin, con người đang dần
áp dụng các ứng dụng khoa học máy tính để phục vụ các công việc hằng ngày Trong
đó, những ứng dụng bảo mật an ninh dựa vào hệ thống thị giác máy tính để thực hiện việc phát hiện, nhận dạng xuất hiện ngày càng nhiều với những đối tượng ngày càng phong phú, đa dạng Hiện nay, các ứng dụng nhận dạng khuôn mặt được xây dựng và phát triển trên rất nhiều thiết bị cũng như hệ thống nhằm giúp con người thuận tiện hơn trong việc quản lý, bảo mật, giám sát hoặc tìm kiếm Các ứng dụng nhận diện khuôn mặt, nụ cười trong máy ảnh hoặc smartphone dần trở nên quen thuộc với mọi người
Nhận thấy sự cần thiết trong nghiên cứu nhằm giúp con người dễ dàng quản lý
và an tâm hơn trong việc bảo vệ tài sản, kèm theo đó là tiền đề cho việc phát triển và nghiên cứu nâng cao về hệ thống thị giác máy tính, ứng dụng nhận dạng đối tượng Đề
tài với tên gọi: “Nghiên cứu thư viện Opencv – Ứng dụng nhận dạng khuôn mặt người”
được thực hiện với mong muốn khai thác những khía cạnh về phát hiện và nhận dạng đối tượng Có thể nói, đây là hướng nghiên cứu nhằm phục vụ tốt nhu cầu của xã hội hiện nay
1.2 Một số nghiên cứu trước đây
Có rất nhiều nghiên cứu sử dụng các phương pháp khác nhau để giải quyết bài toán nhận dạng khuôn mặt, hai cách phổ biến nhất là nhận dạng dựa trên các phần tử của khuôn mặt (Feature based face recognition) và nhận dạng dựa trên xét tổng thể của khuôn mặt (Appearance based face recognition) Nhìn chung, các phương pháp đều có
ưu nhược điểm nhằm giải quyết bài toán nhận dạng mặt người [2,tr.1-2]
Những năm 1960, Woody Bledsoe, Helen Chan Wolf, và Charles Bisson đã cho
ra đời hệ thống nhận dạng khuôn mặt bán tự động đầu tiên Hệ thống yêu cầu người quản trị xác định vị trí các đặc trưng như: mắt, tai, mũi và miệng trên các tấm ảnh Sau đó, hệ thống sẽ tính khoảng cách và tỷ lệ đến một điểm tham chiếu chung Cuối cùng là so sánh với kho dữ liệu lưu trữ
Năm 1970, Goldstein, Harmon và Lesk sử dụng 21 dấu hiệu chủ quan như: màu tóc và độ dày môi để nhận dạng tự động Giống như ở giải pháp trước, các phép
đo và các vị trí được tính bằng tay nên đòi hỏi nhiều thời gian
Năm 1988, Kirby và Sirovich áp dụng phương pháp phân tích thành phần chính (PCA), phương pháp này sử dụng chuẩn đại số tuyến tính cho vấn đề nhận dạng
Trang 11khuôn mặt Đây được coi là cột mốc quan trọng vì nó cho thấy ít hơn một trăm giá trị cần thiết để nhận dạng một khuôn mặt được chuẩn hoá
Năm 1991, Turk và Pentland sử dụng thuật toán eigenfaces để nhận dạng khuôn mặt tự động trên thời gian thực Dù phương pháp này một phần nào bi hạn chế bởi yếu tố môi trường nhưng nó cũng góp phần đáng kể cho sự phát triển của công nghệ nhận dạng khuôn mặt
Năm 2001, Paul Viola và Michael J.Jones đã cho ra đời đặc trưng Haar-Like, đó
là những đặc trưng ảnh số cũng với phương pháp tích phân ảnh (integral images)
để nâng cao khả năng rút trích đặc trưng trên thời gian thực
Tháng 7-2003, Trần Phước Long và Nguyễn Văn Lượng dùng mạng Neural để
dò tìm khuôn mặt trên ảnh, kết hợp phương pháp phân tích thành phần chính và biến đổi Cosine rời rạc để rút ra Vector đặc trưng làm đầu vào cho hai bộ nhận dạng SVM và HMM Hệ thống tiếp cận từ các phương pháp học mạnh, nhưng nhiều trường hợp tối ưu cần thử nghiệm nhiều lần với nhiều bộ tham số khác nhau
Năm 2005, Trần Lê Hồng Dũ sử dụng các đặc trưng lòi lõm để phát hiện khuôn mặt trên ảnh nhưng còn hạn chế về độ sáng, quan hệ hình học và các đặc trưng cùng mức
Năm 2007, Lê Hồng Chuyên đã sử dụng mạng Neural để phát hiện khuôn mặt trên ảnh Hệ thống đã nhận dạng được những khuôn mặt ở các tư thế: thẳng đứng, không thẳng đứng hoặc bị che mất một phần Nhưng kết quả dò tìm không cao trong môi trường ảnh có nhiều người
Năm 2013, Mã Trường Thành thực hiện đề tài “Điều khiển Robot Pioneer
P3-DX bám sát đối tượng” đã sử dụng đặc trưng Haar-Like, bộ phân tầng Cascades
of Boosted Classifiers và thuật toán Adaboost để nhận dạng đối tượng
Năm 2013, Châu Ngân Khánh đã sử dụng đặc trưng Haar-Like, bộ phân tầng Cascades of Boosted Classifiers và thuật toán Adaboost để nhận dạng đối tượng bằng cách so khớp SIFT Nhưng cơ sở dữ liệu không bao quát được hết sự thay đổi của khuôn mặt con người trên thời gian thực
1.3 Phạm vi đề tài
Đề tài tập trung nghiên cứu gói thư viện mã nguồn mở OpenCV để giải quyết bài toán quan sát, phát hiện và nhận dạng đối tượng theo thời gian thực bằng đặc trưng Haar-Like Features – Cascades of Boosted Classifiers
Triển khai nghiên cứu bằng việc thu thập ảnh, huấn luyện và giải quyết bài toán thực tế về nhận dạng khuôn mặt người với các tác vụ cơ bản như: lưu hoạt động của đối tượng dưới dạng ảnh và video thông qua Webcam; thực hiện tác vụ chống trộm với nhiều hình thức khác nhau (đề xuất thông qua tin nhắn và báo động tại chỗ)
Trang 121.4 Phương pháp nghiên cứu
Nghiên cứu gói thư viện OpenCv – cụ thể là gói thư viện Emgu với ngôn ngữ được sử dụng là C# (C Sharp)
Sử dụng các hàm trong thư viện OpenCV bằng việc kết hợp đặc trưng Like với thuật toán Adaboost và mô hình Cascades of Boosted Classifiers để thực hiện dò tìm đối tượng trên mặt phẳng ảnh theo thời gian thực để triển khai giải quyết bài toán đặt ra
Haar-1.5 Bố cục và nội dung
Luận văn sẽ thực hiện nghiên cứu về việc phát hiện nhận dạng mặt người với
OpenCV (cụ thể là phiên bản C# – EmguCV) với những nội dung sau:
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
Giới thiệu tổng quan về đề tài, xác định vấn đề, bối cảnh và nội dung bài toán cần giải quyết Trình bày về lịch sử giải quyết vấn đề, các nghiên cứu và thành quả của những người đi trước trong cùng lĩnh vực, phạm vi và phương pháp nghiên cứu đề tài
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
Giới thiệu về bài toán dò tìm khuôn mặt, đặc trưng Haar-Like Features, thuật toán AdaBoost và bộ phân tầng Cascade of Boosted Classifier Tổng quan về gói thư viện OpenCV để nghiên cứu về nhận dạng mặt người, thư viện Emgu nền tảng của OpenCV trên nền ngôn ngữ C# và hệ thống gửi tin nhắn GSMComm
CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU
Thể hiện cách giải quyết bài toán thông qua hệ thống thực nghiệm Xây dựng một
bộ huấn luyện nhằm nhận dạng khuôn mặt người trên mặt phẳng ảnh Nêu lên các thiết
kế về chương trình và trình bày về thực nghiệm chương trình kèm theo hướng dẫn
Trang 13CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Bài toán dò tìm khuôn mặt
2.1.1 Định nghĩa bài toán
Dò tìm, xác định mặt người là một kỹ thuật máy tính dùng để xác định kích thước
và vị trí của các khuôn mặt trong ảnh, video hay từ camera Kỹ thuật này nhận biết các đặc trưng của khuôn mặt bỏ qua các yếu tố ngoại cảnh khác như cây cối, nhà cửa v.v
Hình 2.1: Dò tìm khuôn mặt
2.1.2 Những yếu tố ảnh hưởng bài toán
Có nhiều yếu tố ảnh hưởng đến việc nhận dạng đối tượng như [1,tr.7]:
- Tư thế, góc chụp: hướng của khuôn mặt trong ảnh có thể thay đổi nhiều do vị trí
của máy ảnh, camera, webcam, v.v, như nhìn thẳng, nhìn nghiêng, hay nhìn từ trên xuống Với các tư thế khác nhau các thành phần trên khuôn mặt như mắt, mũi, miệng có thể bị khuất một phần hoặc thậm chí khuất hết
- Sự xuất hiện hoặc thiếu một số thành phần: sự có mặt của các chi tiết không
phải là đặc trưng riêng của khuôn mặt người, như mắt kính, râu, v.v Vấn đề này càng làm cho bài toán trở nên khó hơn rất nhiều
- Sự che khuất: mặt người có thể bị che khuất bởi các đối tượng khác
- Sự biểu cảm của khuôn mặt: sự biểu cảm có thể làm thay đổi đáng kể các đặc
trưng và thông số của khuôn mặt, ví dụ như khuôn mặt của một người sẽ rất khác khi người đó cười, tức giận hay sợ hãi, v.v
- Sự phức tạp của hình nền: hình nền phức tạp sẽ khiến việc xác định khuôn mặt
trở nên khó khăn
- Điều kiện của ảnh: ảnh được chụp trong các điều kiện khác nhau về: chiếu sáng,
về tính chất (máy ảnh kỹ thuật số, webcam, v.v) ảnh hưởng rất nhiều đến chất lượng ảnh khuôn mặt
2.1.3 Các phương pháp dò tìm khuôn mặt
Có bốn phương pháp xác định khuôn mặt trên ảnh, tương ứng với bốn hướng tiếp cận khác nhau [1,tr.7-8]:
Trang 14 Hướng tiếp cận dựa trên tri thức: Dựa vào các thuật toán, mã hóa các đặc trưng và
quan hệ giữa các đặc trưng của khuôn mặt thành các luật Những luật này thường là các mối quan hệ giữa các thành phần trên khuôn mặt Trong hướng tiếp cận này, các luật sẽ phụ thuộc rất lớn vào tri thức của những tác giả nghiên cứu Một vấn đề phức tạp khác khi dùng hướng tiếp cận này là làm sao chuyển từ tri thức con người sang các luật một cách hiệu quả Nếu các luật quá chi tiết thì khi dò tìm khuôn mặt sẽ có thể sót các đối tượng, vì những đối tượng này không thỏa tất cả các luật được đưa ra Nhưng các luật quá tổng quát thì có thể gây ra nhận dạng lầm một vùng nào đó không phải khuôn mặt mà lại dò tìm là khuôn mặt;
Hướng tiếp cận dựa trên đặc trưng bất biến: Xây dựng các thuật toán để tìm các
đặc trưng của khuôn mặt mà các đặc trưng này không phụ thuộc tư thế khuôn mặt hay vị trí đặt máy ảnh, camera (webcam) thay đổi, điều kiện chiếu sáng, và các khó khăn khác Vấn đề của các thuật toán theo hướng tiếp cận này là cần phải điều chỉnh cho phù hợp điều kiện ánh sáng, nhiễu, và bị che khuất… đôi khi bóng của đối tượng
sẽ tạo thêm cạnh mới, mà cạnh này lại rõ hơn cạnh thật sự của nó, vì thế nếu dùng cạnh để xác định đối tượng sẽ gặp khó khăn;
Hướng tiếp cận dựa trên so sánh khớp mẫu: Dùng các mẫu chuẩn của khuôn mặt
(các mẫu này đã được chọn và lưu trữ) để mô tả các khuôn mặt hay các đặc trưng của khuôn mặt (các mẫu này được chọn tách biệt theo tiêu chuẩn đã được các tác giả đề
ra để so sánh) Các mẫu này được dùng để phát hiện khuôn mặt bằng cách quét nó qua ảnh và tính toán giá trị tương đồng cho mỗi vị trí Việc xuất hiện khuôn mặt tại
vị trí nào đó trong ảnh phụ thuộc vào giá trị tương đồng của điểm đó so với mẫu chuẩn Hướng tiếp cận này có lợi thế là rất dễ cài đặt, nhưng không đạt hiệu quả khi
tỷ lệ, tư thế, và hình dáng thay đổi;
Hướng tiếp cận dựa trên diện mạo: Trái ngược với hướng tiếp cận dựa trên so sánh
khớp mẫu, các mô hình (hay các mẫu) sẽ được học từ một tập ảnh huấn luyện mà thể hiện tính chất tiêu biểu của sự xuất hiện của mặt người trong ảnh Nói cách khác, các thuật toán dùng các kỹ thuật phân tích thống kê và máy học để xấp xỉ một hàm phân lớp tuyến tính Sau đó hệ thống (mô hình) sẽ xác định mặt người Phương pháp này còn được biết đến với tên gọi tiếp cận theo các phương pháp học máy
2.2 Giới thiệu đặc trưng Haar-Like
Đặc trưng Haar-Like của Viola và Jones là những đặc trưng ảnh số được sử dụng trong nhận dạng đối tượng Những đặc trưng cơ bản Haar-Like thường dùng để dò tìm khuôn mặt, do đó Haar-Like là sự lựa chọn phù hợp cho mục đích nhận dạng nhanh chóng và chính xác trong thời gian thực [7,tr.27-40]
Trong lịch sử, hầu như các tương tác nhận dạng đều làm việc trên cường độ sáng tối của ảnh, cụ thể là làm việc trên từng điểm (pixel) trong ảnh, đòi hỏi người dùng phải
Trang 15làm việc trên mức độ tính toán lớn Để giải quyết được bài toán “tính toán lớn trên từng điểm ảnh”, Viola và Jones đã phát triển và điều chỉnh ý tưởng sử dụng những đặc trưng
cơ bản Haar-Like với việc dùng những hình chữ nhật lân cận tại một địa điểm cụ thể trong cửa sổ dò tìm nhằm thực hiện việc phát hiện đối tượng Song đó, tính năng phổ biến của Haar-Like để dò tìm đối tượng là tập hợp của các hình chữ nhật liền kề và định
vị vị trí của các hình chữ nhật liên quan được xác định nhằm mục đích là bao quanh đối tượng cần tìm trên cửa sổ phát hiện đối tượng
Đặc trưng Haar-Like sẽ được trích bằng cách: di chuyển cửa số kích thước trên ảnh và được tính toán cụ thể trên từng vùng ảnh nhỏ, sau đó được so sánh với một ngưỡng học được phân biệt là không phải đối tượng từ đối tượng đó trên ảnh Ưu điểm chính của việc trích đặc trưng Haar-Like so với hầu hết cách trích đặc trưng khác là tốc
độ tính toán Do sử dụng cách tính tích phân ảnh (integral images) nên đặc trưng
Haar-Like có thể trích bất kì kích thước nào trong thời gian liên tục
Đặc trưng Haar-Like sẽ phản ánh sự tương phản giữa các mối liên hệ của đối tượng mà Haar-Like trích đặc trưng Những đối tượng cần dò và phát hiện có thể được
xác định bởi một bộ những đặc trưng này thông qua những liên hệ không gian giữa
chúng
Hình 2.2: Đặc trưng Haar-Like
Để có thể huấn luyện bộ phân lớp (Classifier), Viola-Jones đã sử dụng việc phân
tầng với các bộ phân lớp được nâng cao dần, được huấn luyện với vài trăm các mẫu đối
tượng cần dò và phát hiện Chúng sử dụng những mẫu có đối tượng trong ảnh (những mẫu này có thể co giãn với kích thước 20x20) – được gọi là mẫu khẳng định (Positive)
và những mẫu không có đối tượng cần phát hiện – gọi là mẫu phủ định (Negative) Song
đó, bộ phân lớp sẽ làm nhiệm vụ là xuất ra giá trị một nếu vùng đó giống như đối tượng
mà chúng ta quan tâm và ngược với đối tượng không phải đối tượng cần tìm thì bộ phân
lớp sẽ trả về giá trị không Chúng ta sẽ di chuyển cửa sổ tìm kiếm dọc theo ảnh nhằm
mục đích và xác định trên từng vị trí bởi việc sử dụng bộ phân lớp để tìm kiếm đối tượng trong toàn bộ bức ảnh thu được từ Camera Bên cạnh đó, đối với trường hợp tìm kiếm
Trang 16những đối tượng chưa biết cụ thể kích thước, chúng ta cần phải có một thuật toán quét qua ảnh trong nhiều lần với tỷ lệ co giãn khác nhau để tìm được đối tượng mà chúng ta quan tâm
- Ảnh tích phân (Integral image):
Để nâng cao khả năng rút trích đúng, chính xác và nhanh chóng những đặc trưng Haar – Like, Viola và Jones đã sử dụng ảnh tích phân Đây là ảnh đã được xử lý trước nhằm tăng cường khả năng rút trích
Tại mỗi điểm (i, j) trong ảnh gốc, chúng ta tính tổng giá trị tất cả những điểm ảnh phía bên trái và ở trên so với điểm (i, j):
Hình 2.3: Tính toán vùng S dựa trên các vùng trước đó
Hình 2.4: Các đặc trưng Haar-Like cơ bản
Ngoài 4 đặc trưng cơ bản trên, để xác định các góc cạnh và cụ thể là các đường cong thì rất khó để xác định chính xác Do đó, với bài toán khó như nhận dạng mặt người
thì Viola và Jones đã mở rộng ra 3 tập (nhóm) đặc trưng sau :
Trang 171 Đặc trưng cạnh (edge features):
2 Đặc trưng đường (line features):
3 Đặc trưng xung quanh tâm (center-surround features):
Hình 2.5: Các đặc trưng mở rộng từ đặc trưng Haar-like cơ sở
2.2.2 Trích đặc trưng Harr-Like từ ảnh
Đặc trưng Haar-like sẽ diễn đạt được tri thức về các đối tượng trong ảnh (bởi vì
nó biểu diễn mối liên hệ giữa các bộ phận của đối tượng), điều mà bản thân từng điểm
ảnh không diễn đạt được – dựa trên việc co giãn của khung cửa sổ tìm kiếm Để tính giá trị các đặc trưng Haar-Like, ta tính sự chênh lệch giữa tổng của các pixel của các vùng đen và các vùng trắng như trong công thức:
thực(run-time) trực tiếp từ Camera (hay Webcam trên Laptop) Do đó Viola và Jones đề
xuất một khái niệm gọi là “tích phân ảnh” (Integral Image) để tính toán nhanh cho các
đặc trưng cơ bản của Haar-like
Tuy rằng “tích phân ảnh” đã chinh phục nhiều nhà nghiên cứu trên cộng đồng
thị giác máy tính, nhưng để tính toán cho các đặc trưng có góc xoay 45o thì việc tính toán từ các đặc trưng trên sẽ rất khó Do vậy, Lienhart đã kế thừa Viola-Jones trong khái
niệm tích phân ảnh và phát triển nhằm đưa ra thêm khái niệm RSAT – Rotated Summed
(2.1)
Trang 18Area Table Tích phân ảnh được định nghĩa bằng một mảng 2 chiều với kích thước bằng
với kích thước ảnh cần tính
Mỗi phần tử của mảng trong đạo hàm ảnh được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, bên phải của ảnh, để thực hiện tính toán nhanh chóng – chúng đơn thuần chỉ dựa trên phép cộng số nguyên đơn giản
𝑃(𝑥, 𝑦) = ∑ 𝑖(𝑥′, 𝑦′)
𝑥 ′ ≤𝑥,𝑦 ′ ≤𝑦
Hình 2.6: Cách tính Integral Image của ảnh
Sau khi đã tính được tích phân ảnh, việc tính tổng điểm ảnh của một vùng bất kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau:
Tính toán với các đặc trưng căn bản:
Hình 2.7: Cách tính nhanh vùng D với tổng các điểm ảnh trên ảnh
Trang 19 Sử dụng RSAT – tính toán đặc trưng xoay
Hình 2.8: Cách tính nhanh tổng điểm ảnh D trên ảnh với các đặc trưng xoay 45 o
Với các đặc trưng Haar-like xoay 45o của tích phân ảnh tại một điểm (x, y) được tính theo công thức (Lienhart):
Sum (D ) = P4 - P2 – P3 + P1
Do cách tính là sự kết hợp giữa các phép toán cộng (+), trừ (-) nên độ phức tạp cho mỗi phép toán là O(1) Tốc độ tính toán với các điểm trên ảnh nhanh hơn Áp dụng tốt cho các bài toán tính theo thời gian thực
Hình 2.9: Cách trích đặc trưng Haar-like
RSAT(x,y)
B A C
P2 P4
P1 P3
Trang 202.2.3 Mô hình Cascades of Boosted Classifiers
Ta thấy trong quá trình huấn luyện, bộ phân loại phải duyệt qua tất cả các đặc trưng của các mẫu trong tập huấn luyện dẫn đến tốn rất nhiều thời gian Tuy nhiên, trong các mẫu đưa vào, không phải mẫu nào cũng thuộc loại khó nhận dạng, có những mẫu
nền rất dễ nhận ra (ta gọi đây là những mẫu đơn giản) Đối với những mẫu này, ta chỉ
cần xét một hay vài đặc trưng đơn giản là có thể nhận diện được chứ không cần xét tất
cả các đặc trưng Nhưng đối với các bộ phân loại thông thường thì cho dù mẫu cần nhận dạng là dễ hay khó thì nó vẫn sẽ xét tất cả các đặc trưng mà nó rút ra được trong quá trình học Do đó, chúng tốn thời gian xử lý một cách không cần thiết
Cấu trúc phân tầng (Cascade of Classifiers) được xây dựng chính là nhằm rút ngắn thời gian xử lý, giảm thiểu nhận dạng lầm (false alarm) cho bộ phân loại Cascade tree gồm nhiều stage (hay còn gọi là layer), mỗi stage của cây sẽ là một stage classifier Một mẫu để được phân loại là đối tượng thì nó cần phải đi qua hết tất cả các stages của cây Các stage classifiers ở stage sau được huấn luyện bằng những mẫu không có đối tượng (negative) mà stage classifier trước nó nhận dạng sai, tức là nó sẽ tập trung học
từ các mẫu nền khó hơn, do đó sự kết hợp các stage classifiers này lại sẽ giúp bộ phân loại có false alarm thấp Với cấu trúc này, những mẫu nền dễ nhận diện sẽ bị loại ngay
từ những stages đầu tiên, giúp đáp ứng tốt nhất đối với độ phức tạp gia tăng của các mẫu
đưa vào, đồng thời giúp rút ngắn thời gian xử lý
- Minh họa thuật toán Cascade training:
Hình 2.10: Cấu trúc phân tầng với N giai đoạn
Hình trên minh họa huấn luyện của một tầng (cascade) gồm N giai đoạn (stages)
Ở mỗi giai đoạn, bộ phân lớp yếu tương ứng sẽ được huấn luyện sao cho độ chính xác
của nó là h và false alarm bằng f (tỷ lệ nhận dạng lầm)
Trang 21- Thuật toán Cascade training:
2.2.4 Adaboost
2.2.4.1 Tổng quan về Adaboost
Với hướng tiếp cận dựa trên diện mạo chính là cách mà chúng ta cho dữ liệu học theo Adaboost, Viola và Jones đã dùng AdaBoost kết hợp với cascade để xác định đối tượng, mà cụ thể là khuôn mặt người với việc sử dụng trích các đặc trưng dạng Haar-
like Có được tốc độ xử lý nhanh (như trình bày ở trên) và tỷ lệ chính xác hơn 80% trên
ảnh xám
Adaboost, thuật toán máy học được phát triển dựa trên nền tảng thuật toán máy học Boosting
2.2.4.2 Sơ lược Boosting
Kearns người đã khơi nguồn cho giải thuật Boosting với câu hỏi nổi tiếng: “Liệu
có thể tạo ra một bộ phân lớp mạnh hơn từ một tập các bộ phân lớp yếu” Năm 1990,
Robert Schapiređưa ra thuật toán boosting đầu tiên Sau đó, được phát triển, áp dụng, kiểm nghiệm vào những năm 1993 trong các chương trình nhận dạng do Drucker, Schapire và Simard thực hiện Yoav Freund đã cùng Robert Schaprire tiếp tục nghiên
1 Gọi:
F là giá trị false alarm
d là độ chính xác của weak classifier ở mỗi stage
F target: Giá trị max false alarm
P, N là số lượng mẫu positive và negative
P i , N i là tập positive và negative cho bộ phân lớp ở tầng thứ i
F i , D i : Giá trị false alarm và độ chính xác của cascade trước khi đến tầng thứ i
2 Khởi tạo i=0; F0=1.0; D0 = 1.0
N = { số mẫu sai ở stage hiện tại phân loại sai }
P = { số mẫu positive mà stage hiện tại phân loại dúng }
Trang 22cứu và phát triển, và đến năm 1995 thì ông cùng với Schapire phát triển boosting thành AdaBoost
Dựa vào câu nói của Kearns đã cho ta có thể biết được nguyên lý hoạt động cơ
bản của Boosting là sự kết hợp bộ phân lớp yếu (weak classifier) thành một phân lớp mạnh hơn (strong classifier) Với những gì mà Freund và Schaprire đã phát triển thì bộ
phân lớp yếu chỉ cần có độ chính xác trên 50% là có thể áp dụng “boost” được
Để hiểu cách hoạt động của thuật toán boosting, ta xét một bài toán phân loại 2
lớp (mẫu cần nhận dạng chỉ thuộc một trong hai lớp) với D là tập huấn luyện gồm có n mẫu Trước tiên, chúng ta sẽ chọn ngẫu nhiên ra n1 mẫu từ tập D (n1<n) để tạo tập D1 Sau đó, chúng ta sẽ xây dựng weak classifier đầu tiên C1 từ tập D1 Tiếp theo, chúng ta xây dựng tập D2 để huấn luyện bộ phân loại C2 D2 sẽ được xây dựng sao cho một nửa
số mẫu của nó được phân loại đúng bởi C1 và nửa còn lại bị phân loại sai bởi C1 Bằng cách này, D2 chứa đựng những thông tin bổ sung cho C1 Bây giờ chúng ta sẽ xây huấn luyện C2 từ D2
Tiếp theo, chúng ta sẽ xây dựng tập D3 từ những mẫu không được phân loại tốt bởi sự kết hợp giữa C1 và C2: những mẫu còn lại trong D mà C1 và C2 cho kết quả khác nhau Như vậy, D3 sẽ gồm những mẫu mà C1 và C2 hoạt động không hiệu quả Sau cùng, chúng ta sẽ huấn luyện bộ phân loại C3 từ D3
Bây giờ chúng ta đã có một strong classifier: sự kết hợp C1, C2 và C3 Khi tiến hành nhận dạng một mẫu X, kết quả sẽ được quyết định bởi sự thỏa thuận của 3 bộ C1, C2 và C3: Nếu cả C1 và C2 đều phân X vào cùng một lớp thì lớp này chính là kết quả phân loại của X; ngược lại, nếu C1 và C2 phân X vào 2 lớp khác nhau, C3 sẽ quyết định
X thuộc về lớp nào
Trang 23Hình 2.11: Kỹ thuật Boosting
2.2.4.3 Kỹ thuật Adaboost – nhận dạng đối tượng
AdaBoost (Adaptive Boost) là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cận boosting được Freund và Schapire đưa ra vào năm 1995 Adaboost hoạt
động trên nguyên tắc kết hợp tuyến tính các phân lớp yếu (weak classifier) dựa trên dữ liệu đầu vào là các đặc trưng Haar- Like để hình thành một phân lớp mạnh hơn (strong classifier)
Adaboost thực hiện sử dụng một trọng số (weight) để đánh dấu các mẫu khó
nhận dạng khi kết hợp các bộ phân lớp yếu Trong quá trình huấn luyện, cứ mỗi phân
lớp yếu (weak classifier) được xây dựng thì thuật toán sẽ tiến hành cập nhật lại trọng số
để chuẩn bị cho việc xây dựng phân lớp yếu (weak classifier) tiếp theo Theo nguyên
tắc: “tăng trọng số của các mẫu bị nhận dạng sai và giảm trọng số của các mẫu được
nhận dạng đúng bởi phân lớp yếu (weak classifier) vừa xây dựng” Bằng cách này,
phân lớp yếu sau có thể tập trung vào các mẫu mà các phân lớp yếu trước đó chưa thực hiện tốt Sau cùng, các phân lớp yếu sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng
để tạo nên một phân lớp mạnh hơn
Trang 24Hình 2.12: Nguyên tắc Adaboost
Ý tưởng chính của Boosting là thực hiện lặp lại nhiều lần quá trình học của bộ phân lớp yếu nghĩa là tập trung học lại các phần tử bị phân lớp sai Tại mỗi giai đoạn
(stages) của Cascades of Boosted Classifiers được huấn luyện là một Adaboost
Các weak classifiers hk(x) là các bộ phân loại yếu được lấy từ việc trích các đặc
trưng Haar-like, được biểu diễn như sau:
fk: giá trị của đặc trưng Haar-like; (2.1)
pk: hệ số quyết định chiều của bất phương trình (a parity indicating the direction of the inequality sign)
Bộ phân lớp mạnh ℎ𝑚ạ𝑛ℎ(𝑥) được tạo ra bằng cách kết hợp tuyến tính N bộ phân loại yếu (2.7) Vấn đề cốt lõi là thực hiện chọn các trọng số α1,…,αn thích hợp
ℎ𝑚ạ𝑛ℎ(𝑥) = 𝑠𝑖𝑔𝑛 ∑ 𝛼𝑘 ℎ𝑘𝑦ế𝑢(𝑥)
𝑁
𝑘=1Công thức trên (2.7) có thể diễn giải như sau: Nếu giá trị đặc trưng của mẫu cho
bởi hàm đánh giá của bộ phân loại vượt qua một ngưỡng θ cho trước thì mẫu đấy là đối
tượng (gọi là object : đối tượng cần nhận dạng ), ngược lại thì mẫu là background (không phải là đối tượng)
(2.7)
(2.8)
Trang 25Các mẫu thử vừa bị phân
loại sai sẽ được tăng độ
lớn trọng số
Bộ phân lớp yếu
h2(x)
Bộ phân lớp yếu h3(x)
Tiếp tục đánh trọng số lớn hơn cho các mẫu thử vừa bị phân loại sai ở bước 2
Trang 26- Thuật toán AdaBoost:
1 Cho một tập gồm n mẫu có đánh dấu (x1,y1), (x2,y2),… (xn,yn) với xk ∈ (xk1, xk2,
… , xkm) là vector đặc trưng và yk ∈ (-1, 1) là nhãn của mẫu (1 ứng với object,
-1 ứng với background)
2 Khởi tạo trọng số ban đầu cho tất cả các mẫu: với m là số mẫu đúng (ứng với
object và y = 1) và l là số mẫu sai (ứng với background và y = -1)
𝑤1,𝑘 = 1
2𝑚,
12𝑙
3 Xây dựng T weak classifiers
Lặp t = 1, …, T
Với mỗi đặc trưng trong vector đặc trưng, xây dựng một weak classifier
hj với ngưỡng θj và lỗi εj
𝑍𝑡: Hệ số dùng để đưa 𝑊𝑡+1 về đoạn [0,1] (normalization factor)
4 Strong classifier được xây dựng :
𝐻(𝑥) = 𝑑ấ𝑢 (∑ ∝𝑡 ℎ𝑡(𝑥)
𝑇
𝑡=1
)
Trang 27Sơ đồ khối:
Hình 2.14: Lược đồ huấn luyện nhận dạng đối tượng
Quá trình huấn luyện bộ phân loại được thực hiện bằng một vòng lặp mà ở mỗi bước lặp, thuật toán sẽ chọn ra weak classifier ht thực hiện việc phân loại với lỗi εt nhỏ
nhất (do đó sẽ là bộ phân loại tốt nhất) để bổ sung vào strong classifier Mỗi khi chọn
được một bộ phân loại ht, Adaboost sẽ tính giá trị αt theo công thức 2.10, αt cũng được chọn trên nguyên tắc làm giảm thiểu giá trị lỗi εt
Hệ số αt nói lên mức độ quan trọng của ht:
Trong công thức của bộ phân loại H(x):
𝐻(𝑥) = 𝑑ấ𝑢 (∑ ∝𝑡 ℎ𝑡(𝑥)
𝑇
𝑡=1
)
Tất cả các bộ phân loại ht đều có đóng góp vào kết quả của bộ phân loại H(x),
và mức độ đóng góp của chúng phụ thuộc vào giá trị αt tương ứng: ht với αt càng lớn thì
nó càng có vài trò quan trọng trong H(x)
Khởi tạo tập đặc trưng ban đầu
Xác định các đặc trưng trong từng mẫu, xây dựng các bộ phân loại
yếu tương ứng
Đặc trưng haar-like
Tính toán giá trị lỗi cho mỗi đặc trưng
(false alarm)
Xác định ngưỡng
Chọn weak classifier h t có giá trị lỗi bé nhất ε t
Lưu weak classifier được chọn
False alarm ≤ max false alarm
Trang 28Giá trị αt tỉ lệ nghịch với εt Bởi vì ht được chọn với tiêu chí đạt εt nhỏ nhất, do
đó nó sẽ đảm bảo giá trị αt lớn nhất
Sau khi tính được giá trị αt, Adaboost tiến hành cập nhật lại trọng số của các mẫu: tăng trọng số các mẫu mà ht phân loại sai, giảm trọng số các mẫu mà ht phân loại đúng Bằng cách này, trọng số của mẫu phản ánh được mức độ khó nhận dạng của mẫu đó và
ht+1 sẽ ưu tiên học cách phân loại những mẫu này
Hình 2.15: Ưu tiên trọng số lớn để phân hoạch [https://alliance.seas.upenn.edu/~cis520/wiki/index.php?n=lectures.boosting]
Trang 29Vòng lặp xây dựng strong classifier sẽ dừng lại sau T lần lặp Trong thực tế cài
đặt (thư viện OpenCV của Intel), người ta ít sử dụng giá trị T vì không có công thức nào
đảm bảo tính được giá trị T tối ưu cho quá trình huấn luyện Thay vào đó, người ta sử
dụng giá trị max false positive hay max false alarm (tỉ lệ nhận dạng sai tối đa các mẫu background) Tỉ lệ này của bộ phân loại cần xây dựng không được phép vượt quá giá trị này Khi đó, qua các lần lặp, false alarm của strong classifier Ht(x) xây dựng được (tại
lần lặp thứ t) sẽ giảm dần, và vòng lặp kết thúc khi tỉ lệ này thấp hơn max false alarm
Phương pháp Adaboost (Adaptive boost): là một cải tiến của hướng tiếp cận
boosting, sử dụng khái niệm trọng số (weight) để đánh dấu các mẫu khó nhận dạng trong quá trình huấn luyện, mẫu càng khó trọng số càng cao
- Kết hợp huấn luyện Adaboost và phân tầng Cascades of Boosted Classifiers với
các đặc trưng được trích từ Haar - Like
Hình 2.16: Adaboost và Cascades of Boosted Classifier
Trang 302.3 Định vị đối tượng
Mô hình dò tìm đối tượng [1,tr.25]:
Hình 2.17: Dò tìm đối tượng với Haar Like Features - Cascade of Boosted Classifiers
Trong sơ đồ trên (Hình 2.17), từ ảnh gốc tính nhanh giá trị của đặc trưng
Haar-Like nhờ vào tích phân ảnh (Intergral Image), kết quả tính được sẽ được đưa qua bộ
điều chỉnh AdaBoost để loại bỏ bớt các đặc trưng không cần thiết nhằm làm giảm số
lượng các đặc trưng Các đặc trưng còn lại (các đặc trưng được chọn) sẽ được đưa qua
bộ phân lớp để quyết định xem có phải mặt người hay không
Ảnh gốc
AdaBoost
Bước N
Tính nhanh các đặc trưng (Đặc trưng hình chữ nhật)
Tính các đặc trưng
Chọn các đặc trưng
Phân lớp mạnh
Cập nhật trọng số Các đặc trưng Haar-Like
Quyết định kết quả
Trang 31Cấu trúc cascade đạt tốc độ nhận dạng nhanh chính là nhờ sớm loại bỏ được các mẫu sai (background) đơn giản (thường có số lượng lớn hơn nhiều so với các mẫu đúng (object) – các mẫu chứa khuôn mặt cần tiến hành nhận dạng) Bên cạnh đó, hệ thống của Viola và Jones cũng đạt được độ chính xác khá cao nhờ vào thuật toán cascade training, các bộ nhận dạng được huấn luyện bằng AdaBoost với đặc trưng Haar-Like
mô tả tốt thông tin đối tượng, cùng với cách tính tích phân ảnh (Integral Image) tính nhanh các đặc trưng, không làm giảm tốc độ nhận dạng của hệ thống
Như vậy, mô hình Haar Like Features - Cascade of Boosted Classifiers thật sự
là một cách tiếp cận tốt cả về tốc độ lẫn khả năng nhận dạng, rất phù hợp với bài toán định vị mặt người
2.4 Tổng quan về thư viện OpenCV
2.4.1 Tổng quan
OpenCV (Open Source Computer Vision Library) là thư viện mã nguồn mở về
thị giác máy tính và ngôn ngữ máy học của Intel Được giới thiệu tháng 01 năm 1999
và đến tháng 2006 phiên bản 1.0 được ra đời
Hình 2.18: Thư viện OpenCV
Gói thư viện gồm hơn 500 hàm và trên 2500 thuật toán tối ưu được viết bằng ngôn ngữ C/C++ tương thích với các hệ điều hành Windows, Linux, Android…Các thuật toán này có thể được sử dụng để phát hiện, nhận dạng khuôn mặt, theo dõi chuyển động con người trên thời gian thực OpenCV đưa ra một hệ thống đơn giản, dễ sử dụng giúp mọi người tiếp cận xây dựng ứng dụng một cách nhanh chóng và nâng cao hiệu quả tính toán Từ lúc ra đời đến nay OpenCV đã thu hút rất nhiều nhà nghiên cứu phát triển, trong đó có các công ty lớn như: Google, Yahoo, Microsoft, IBM, Sony…và nhiều cộng đồng mạng được thành lập cho việc tham khảo và tra cứu
Trang 32Rất nhiều phiên bản ra đời góp phần to lớn vào công cuộc phát triển của cộng đồng thị giác máy tính Những phiên bản sau này được bổ sung nhiều hơn các giải thuật đáp ứng được nhu cầu thực tại, phiên bản 3.0 RC1 được phát hành ngày 24-04-2015 là phiên bản mới nhất, hỗ trợ trên Windows, Linux/Mac và iOS
Hình 2.19: Lịch sử các phiên bản OpenCV
https://www.safaribooksonline.com/library/view/learning-opencv/9780596516130/ch01s04.html
2.4.2 Cấu trúc và ứng dụng của OpenCV
Cấu trúc của OpenCV gồm có năm phần chính [7,tr.12-14]:
Hình 2.20: Cấu trúc cơ bản của OpenCV
Trong đó:
- Phần CV&CVAUX bao gồm các thư viện cơ bản về xử lý ảnh và các giải thuật về
thị giác máy tính Phần này sẽ thực hiện hỗ trợ các chức năng cấp cao (nhận dạng đối
bộ phân cụm, phân loại thống kê
HighGUI
Các hàm và thủ tục làm việc với file ảnh
và file video
IPP
Mã lệnh tối ưu cho Intel CPUs
Trang 33tượng, hiệu chỉnh Camera/Webcam), xử lý, phân tích các chuyển động Trong đó thì nội dung CV sẽ là các phương thức, hàm xử lý đã ổn định, còn CVAUX sẽ gồm các chức năng thử nghiệm để đưa vào phiên bản kế tiếp Phần CVAUX này bao gồm các thư viện cho việc phát hiện, theo dõi và nhận dạng đối tượng (khuôn mặt, mắt …);
- Phần MLL là bộ thư viện về các thuật toán học máy, bao gồm rất nhiều bộ phân cụm
và phân loại thống kê;
- Phần HighGUI chứa đựng những thủ tục vào ra, các chức năng về lưu trữ cũng như
đọc các file ảnh và video;
- Phần CxCore dùng để tổ chức dữ liệu cơ sở, thực hiện các thuật toán (các phép tính
– các phép tính ma trận), hỗ trợ tài liệu XML, các thao tác cơ bản, vẽ, chú thích;
- Phần cuối cùng IPP là module thương mại cung cấp các đoạn mã mở rộng đã được
tối ưu hóa cho các phần cứng của Intels giúp tăng tốc trong xử lý các ứng dụng lớn
Đi kèm gói thư viện là tài liệu hướng dẫn thể hiện các chức năng của OpenCV, các chức năng tập trung vào thu thập, xử lí ảnh và các thuật toán phân tích dữ liệu ảnh bao gồm:
Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim;
Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi, xâu
và cây;
Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu, phóng
to thu nhỏ, và hiệu chỉnh Histograms;
Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu
bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa giác, ellipse, đường thẳng;
Phân tích dữ liệu ảnh: nhận dạng đối tượng - thực thể, theo dõi các chi tiết và phân
tích chuyển động;
Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để chỉnh
thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets);
Chức năng vẽ, chú thích lên ảnh: Chức năng này thường áp dụng cho các bài toán
nhận dạng mặt người trong ảnh Hiện nay thấy rõ nhất là các chức năng trên ứng dụng mạng xã hội Facebook