7. Những nội dung và kết quả nghiên cứu được trong đề tài
1.4.4. Phá bỏ các rào cản ứng dụng của Android
Android phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo. Ví dụ, một nhà phát triển có thể kết hợp thông tin từ các trang web với dữ liệu trên điện thoại di động của một cá nhân – ví dụ như địa chỉ liên hệ của người dùng, lịch, hoặc vị trí địa lý – để cung cấp một trải nghiệm người dùng có liên quan hơn. Với Android, một nhà phát triển có thể xây dựng một ứng dụng cho phép người dùng xem vị trí của bạn bè của họ và được cảnh báo khi họ đang có trong vùng phụ cận nhằm cho họ một cơ hội để kết nối.
SVTH: Phan Thanh Ngọc Trang 28/ 103 1.4.5. Với Android tốc độ nhanh và phát triển ứng dụng dễ dàng
Android cung cấp truy cập đến một loạt các thư viện công cụ hữu ích và có thể được sử dụng để xây dựng các ứng dụng phong phú. Ví dụ, Android cho phép các nhà phát triển dễ có được vị trí của điện thoại, và cho phép các thiết bị dễ giao tiếp với nhau tạo điều kiện cho đồng đẳng. Ngoài ra, Android bao gồm một tập hợp đầy đủ công cụ đã được xây dựng từ mặt đất lên, cùng với việc cung cấp nền tảng phát triển, với năng suất cao và cái nhìn sâu vào các ứng dụng của họ.
1.5. Tìm hiểu về Linux
1.5.1. Lịch sử phát triển của Linux
Giữa năm 1960, AT&T Bell Laboratories và một số số trung tâm khác thực hiện dự án Multics (Multiplexed Information and Computing Service). Sau một thời gian thực hiện, dự án tỏ ra không khả thi. Tuy vậy Ken Thompson, Dennis Ritchie … thuộc Bell Labs đã không bỏ cuộc. Thay vì xây dựng một hệ điều hành làm nhiều việc một lúc như Multics, họ quyết định phát triển một hệ điều hành đơn giản chỉ làm tốt một việc là chạy chương trình (run program). Peter Neumann đặt tên cho hệ điều hành “đơn giản” này là Unix.
Khoảng 1977 bản quyền của UNIX được giải phóng và hệ điều hành UNIX trở thành một thương phẩm. Hai dòng UNIX: System V của AT&T, Novell và Berkeley Software Distribution (BSD) của Đại học Berkeley.
Sau đó IEEE đã thiết lập chuẩn "An Industry-Recognized Operating Systems Interface Standard based on the UNIX Operating System." Kết quả cho ra đời POSIX.1 (cho giao diện C ) và POSIX.2 (cho hệ thống lệnh trên Unix)
Năm 1991 Linus Torvalds bắt đầu xem xét Minix, một phiên bản của Unix với mục đích nghiên cứu cách tạo ra một hệ điều hành Unix chạy trên máy PC với bộ vi xử lý Intel 80386. Ngày 25/8/1991, Linus cho ra version 0.01 và thông báo trên comp.os.minix của Internet về dự định của mình về Linux.Vào tháng 1/1992, Linus cho ra version 0.12 với shell và C compiler. Linus không cần Minix nữa để recompile hệ điều hành của mình. Linus đặt tên hệ điều hành của mình là Linux.Năm 1994, phiên bản chính thức 1.0 được phát hành.
SVTH: Phan Thanh Ngọc Trang 29/ 103
trên PC với CPU Intel 80386 trở lên, hay các bộ vi xử lý trung tâm tương thích AMD, Cyrix. Linux ngày nay còn có thể chạy trên các máy Macintosh hoặc SUN Sparc.Linux thỏa mãn chuẩn POSIX.1.
Quá trình phát triển của Linux được tăng tốc bởi sự giúp đỡ của dự án GNU (GNU’s Not Unix), đó là chương trình phát triển các Unix có khả năng chạy trên nhiều platform. Đến cuối 2001, phiên bản mới nhất của Linux kernel là 2.4.2-2, có khả năng điều khiển các máy đa bộ vi xử lý và rất nhiều các tính năng khác.
1.5.2. Giới thiệu về Fedora 15
Windows OS hay Mac OS là 2 hệ điều hành đang được rất nhiều người trong chúng ta sử dụng nhưng ngược lại, khá ít người dùng chọn Linux cho chiếc máy tính của mình. Trong đa số các bản phân phối Linux thì Ubuntu vẫn phổ biến nhất bởi tính đơn giản và dễ dùng nếu bạn là "lính mới". Tuy nhiên, một khi bạn đã sử dụng thành thạo Linux và muốn khám phá những giới hạn bên ngoài Linux thì Fedora là một bản phân phối rất đáng để quan tâm. Song song với việc Canonical phát hành Ubuntu 11.04 (Natty Narwhal) thì mới đây, RedHat cũng đã cho ra mắt phiên bản Fedora 15 (Lovelock) với một vẻ ngoài hoàn toàn khác.
Hình 1.9 Giao diện của Fedora 15
Môi trường desktop GNOME 3: Với Fedora 13 (Goddard) hay 14 (Laughlin), giao diện của 2 phiên bản này vẫn là GNOME 2 đơn điệu và không khác nhiều với Ubuntu 9.10 (Karmic Koala) hay 10.10 (Maverick Meerkat). Tuy nhiên, Fedora 15 lại được trang bị GNOME 3 - được cho là "thế hệ mới của
SVTH: Phan Thanh Ngọc Trang 30/ 103
GNOME với một giao diện hoàn toàn khác.GNOME 3 thực sự khác biệt, hiện đại và được thiết kế dành cho cả người dùng bình thường lẫn cao cấp."
Giao diện của Fedora 15 rất đẹp, rất lạ mắt và độc đáo.Các biểu tượng được phóng lớn, nút Application thường thấy đã được thay bằng nút Activities nằm gọn gàng trên góc trái và bạn cũng có thể mở Menu ứng dụng chỉ với việc kéo con trỏ chuột lên góc trái màn hình. Bên cạnh đó, nhóm các thông báo và biểu tượng ứng dụng quen thuộc như Pidgin (chương trình chat đa giao tiếp), Stardict (từ điển đa ngôn ngữ) lại nằm trên một thanh ẩn và để mở thanh này bạn phải kéo chuột về góc phải dưới cùng màn hình.
Ứng dụng cho người dùng cuối tốt hơn: Trước tiên phải kể đến bộ ứng dụng văn phòng LibreOffice. Trong khi hầu hết các bản phân phối Linux đều sử dụng OpenOffice thì Fedora lại dùng LibreOffice và đây được xem là một phiên bản cải tiếng của OpenOffice. Giao diện và cách sử dụng LibreOffice không khác OpenOffice nhưng nhanh hơn, khắc phục hầu hết các lỗi thường gặp và đặc biệt tương thích với các định dạng văn bản của Microsoft Office tốt hơn. Một điều quan trọng là Oracle đã không còn hỗ trợ OpenOffice trong khi LibreOffice vẫn là gói công cụ văn phòng nguồn mở đang được đầu tư phát triển. Tiếp theo, Fedora 15 đã được cài đặt sẵn trình duyệt Firefox 4 hiển nhiên là tốt hơn phiên bản cũ Firefox 3.x trên Fedora 14 vốn hay treo khi duyệt những trang có quá nhiều yếu tố hoạt hoá (Flash). Ngoài Firefox 4 thì bạn vẫn có thể cài thêm các trình duyệt nổi tiếng khác như Opera 11 hay Google Chrome.
Hỗ trợ môi trường ảo: Giao thức đơn giản dành cho các môi trường máy tính độc lập (Simple Protocol for Independent Computing Environments - SPICE) đang dần hỗ trợ cho Red Hat. Trên Fedora 15, SPICE đã được tích hợp trực tiếp vào trình quản lý ảo hóa.
Bộ quản lý gói RPM 4.9.0: RPM 4.9.0 - bộ quản lý gói phần mềm của Fedora 15 và Red Hat Enterprise Linux đã được cải tiến thật sự. Thay vì chậm chạp trong quy trình tìm kiếm và cài đặt như trước đây, RPM 4.9.0 cho phép bạn cài đặt nhanh chóng và dễ dàng những phần mềm ưa thích trên Fedora. Ngoài ra, RPM 4.9.0 còn bổ sung một số tính năng hữu ích khác như tăng cường khả năng bảo mật trong quy trình xử lý các lỗi SELinux với giao diện GUI dễ dùng và hỗ trợ mã hóa đường dẫn gốc tốt hơn. Còn rất nhiều tính năng mới chưa khám phá
SVTH: Phan Thanh Ngọc Trang 31/ 103
hết trên Fedora 15 tên mã Lovelock. Nếu là một tín đồ của Linux hay đơn giản chỉ muốn "đổi gió" thì Fedora 15 thực sự là một bản phân phối rất đáng để chúng ta dùng thử.
1.5.3. Vì sao lại dùng Linux thay cho Windows?
So với Windows, những ưu điểm nổi trội của Linux bao gồm: Linux nổi tiếng là một hệ điều hành tin cậy, tính bảo mật rất cao, tốc độ nhanh hơn, không đòi hỏi cấu hình máy cao, hỗ trợ một dải rất rộng các nền tảng phần cứng, ít gặp rắc rối với virus, quản lý bộ nhớ rất chặt chẽ và hoàn toàn miễn phí.
SVTH: Phan Thanh Ngọc Trang 32/ 103 CHƯƠNG 2: CÁC THUẬT TOÁN DÒ TÌM VÀ NHẬN DẠNG KHUÔN
MẶT
2.1. Dò tìm khuôn mặt nhanh theo phương pháp AdaBoost 2.1.1. Giới thiệu 2.1.1. Giới thiệu
Hơn một thập kỷ qua, có rất nhiều công trình nghiên cứu về bài toán xác định khuôn mặt người từ ảnh đen trắng, ảnh xám, đến ảnh màu như ngày nay. Các nghiên cứu đi từ bài toán đơn giản là ảnh chỉ chứa một khuôn mặt người nhìn thẳng vào thiết bị thu hình và đầu ở tư thế thẳng đứng, cho đến ảnh màu với nhiều khuôn mặt người trong cùng ảnh, khuôn mặt có quay một góc nhỏ, hay bị che khuất một phần, và với ảnh nền của ảnh phức tạp (ảnh chụp ngoài thiên nhiên) nhằm đáp ứng nhu cầu thật sự cần thiết của con người.
Bài toán xác định khuôn mặt người (Face detection) là một kỹ thuật máy tính để xác định các vị trí và các kích thước của khuôn mặt trong ảnh bất kỳ (ảnh kỹ thuật số). Kỹ thuật này nhận biết các đặc trưng khuôn mặt và bỏ qua những thứ khác như: toà nhà, cây cối, cơ thể...
Một số ứng dụng của bài toán xác định khuôn mặt là: hệ thống tương tác giữa người và máy (điều khiển máy tính qua các cử động của khuôn mặt), hệ thống nhận dạng người (giúp cho các cơ quan an ninh quản lý con người), hệ thống quan sát theo dõi, hệ thống quản lý việc ra vào cho các cơ quan và công ty, hệ thống kiểm tra người lái xe có ngủ gật hay không, hệ thống phân tích cảm xúc trên khuôn mặt, và hệ thống nhận dạng khuôn mặt cho các máy ảnh kỹ thuật số...
Hiện nay có rất nhiều phương pháp nhận dạng khuôn mặt người, dựa vào các tính chất của các phương pháp, ta có thể chia ra làm bốn hướng tiếp cận chính như sau: Hướng tiếp cận dựa trên tri thức: mã hoá hiểu biết của con người về các loại khuôn mặt và tạo ra các tập luật để xác định khuôn mặt. Hướng tiếp cận dựa trên đặt tả không thay đổi: mục tiêu các thuật toán tìm ra các đặt trưng mô tả cấu trúc khuôn mặt người (các đặc trưng không thay đổi với tư thế, vị trí đặt thiết bị thu hình, độ sáng tối thay đổi...). Hướng tiếp cận dựa trên so khớp mẫu: dùng các mẫu chuẩn hay các đặc trưng của khuôn mặt người. Hướng tiếp cận dựa trên diện mạo: phương pháp học từ một tập ảnh huấn luyện mẫu để xác định khuôn mặt người.
SVTH: Phan Thanh Ngọc Trang 33/ 103
Chương trình xác định vị trí khuôn mặt người trong bài viết này sử dụng hướng tiếp cận dựa trên mẫu, sử dụng bộ phân loại mạnh AdaBoost là sự kết hợp của các bộ phân loại yếu dựa trên các đặt trưng Haar-like để xác định khuôn mặt. Tốc độ xử lý khá nhanh và tỷ lệ chính xác hơn 80% trên ảnh xám. Mã nguồn được dựa trên thư viện mã nguồn mở OpenCV của Intel để cài đặt.
Thuật toán học máy Adaboost được phát triển thuật toán Boosting, do đó tôi sẽ trình bày một chút về thuật toán Boosting trước khi trình bày về AdaBoost.
2.1.2. Tiếp cận Boosting
Về lịch sử, boosting bắt nguồn từ câu hỏi nổi tiếng được đưa ra bởi Kearns vào năm 1989 : “Liệu có thể tạo ra một strong classifier từ một tập các bộ phân
loại yếu?”. Năm 1990, Robert Schapire đưa ra thuật toán boosting đầu tiên, tiếp
đến năm 1993 thì nó được Drucker, Schapire và Simard kiểm nghiệm trong trong các chương trình nhận dạng ( OCR application ). Freund đã tiếp tục các nghiên
cứu của Schaprire, và đến năm 1995 thì ông cùng với Schapire phát triển boosting thành adaboost.
Như vậy, nguyên lý cơ bản của boosting là sự kết hợp các weak classifiers thành một strong classifier. Trong đó, weak classifier là các bộ phân loại đơn giản chỉ cần có độ chính xác trên 50%. Bằng cách này, chúng ta nói bộ phân loại đã được “boost”.
Để 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
SVTH: Phan Thanh Ngọc Trang 34/ 103
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
Hình 2.1 Boosting
2.2. Các yếu tố ảnh hưởng đến việc dò tìm khuôn mặt trên hình ảnh
Hình ảnh là những file phức tạp được lưu trữ trong máy tính với các định dạng như: JPG, PNG, PGM,… Mỗi loại định dạng có cách tổ chức, lưu trữ và phục vụ cho từng mục đích khác nhau. Do đó việc dò tìm khuôn mặt trên hình ảnh bị rất nhiều yếu tố ảnh hưởng đến như:
Định dạng của hình ảnh (JPG, PNG, PGM,...). Kích thước của hình ảnh. Bình thường để một thuật toán xử lý nhanh một hình ảnh, kích cở phù hợp nhất là từ 100x100 đến 500x500 pixel. Đối với việc dò tìm khuôn mặt trên hình ảnh, kích thước của hình ảnh rất quan trọng. Nếu quá nhỏ sẽ không dò tìm được khuôn mặt, còn nếu quá lớn sẽ ảnh hưởng đến tốc độ xử lý.
Biến đổi mặt phẳng ảnh (quay, hướng,... của khuôn mặt). Các vị trí của khuôn mặt trên hình ảnh thường là những vị trí sau.
SVTH: Phan Thanh Ngọc Trang 35/ 103 Chính giữa
Hình 2.2 Khuôn mặt chính giữa Quay sang trái
Hình 2.3 Khuôn mặt bên phải
Các vị trí trên có thể dò tìm khuôn mặt một cách dể dàng. Tuy nhiên nếu quay sang trái hay sang phải quá nhiều thì việc dò tìm khuôn mặt có thể không được.
Biến đổi độ sáng tối và ngữ cảnh. Việc thay đổi độ sáng tối và ngữ cảnh trên hình ảnh chỉ ảnh hưởng rất nhỏ đến việc dò tìm khuôn mặt trên hình ảnh. Tuy nhiên nó chỉ ít ảnh hưởng ở một mức độ nào đó. Nếu quá sáng hoặc quá tối hay ngữ cảnh dễ nhầm lẫn, nó sẽ dẫn đến việc dò tìm khuôn mặt không chính xác.
Biến đổi hình dáng của khuôn mặt (các sắc thái khác nhau của khuôn mặt). Khuôn mặt thường hay có những sắc thái, cảm xúc khác nhau (cười, nhắm mắt, mở mắt, ….) những sắc thái này thường ít ảnh hưởng đến việc dò tìm khuôn mặt trên hình ảnh.
Hình 2.4 Biến đổi sắc thái của khuôn mặt
Ngoài ra việc dò tìm khuôn mặt trên hình ảnh còn phụ thuộc vào nhiều yếu tố khác như thuật toán dùng để xử lý hay là hướng tiếp cận.
SVTH: Phan Thanh Ngọc Trang 36/ 103 2.3. AdaBoost
Như đã biết, 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 weak classifier dựa trên các đặc trưng Haar- Line để hình thành một strong classifier.
Để có thể kết hợp các bộ phân loại yếu, Adaboost sử dụng một trọng số (weight) để đánh dấu các mẫu khó nhận dạng. Trong quá trình huấn luyện, cứ mỗi weak classifier được xây dựng, 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 weak classifier tiếp theo: 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 weak classifier vừa xây dựng. Bằng cách này, các weak classifier sau có thể tập trung vào các mẫu mà các weak classifier trước đó chưa thực hiện tốt. Sau cùng các weak classifier sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng để tạo nên