7. Những nội dung và kết quả nghiên cứu được trong đề tài
1.4. Hệ điều hành Android
1.4.1. Giới thiệu
Android ™ cung cấp một bộ đầy đủ các phần mềm cho các thiết bị di động: Android là gì? là một hệ thống điều hành, middleware và các ứng dụng di động chủ chốt. Các Android Software Development Kit (SDK) bây giờ đã có. Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD, HD Player, TV) phát triển bởi Google và dựa trên nền tảng Linux. Trước đây, Android được phát triển bởi công ty liên hợp Android ( sau đó được Google mua lại vào năm 2005).
Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đích tạo nên một chuẩn mở cho điện thoại di động trong tương lai.
SVTH: Phan Thanh Ngọc Trang 27/ 103 1.4.2. Tính năng mở của hệ điều hành Android là gì?
Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó được xây dựng để được thực sự mở. Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cho người dùng. Android được xây dựng trên Linux Kernel. Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng trong một môi trường di động. Android là mã nguồn mở, nó có thể được tự do mở rộng. Nền tảng này sẽ tiếp tục tiến triển như cộng đồng nhà phát triển công việc cùng nhau để xây dựng các ứng dụng di động sáng tạo.
1.4.3. Tất cả các ứng dụng có thể được tạo ra từ Android
Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba. Tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một người cung cấp cho người sử dụng điện thoại với một dải rộng các ứng dụng và dịch vụ. Với các thiết bị xây dựng trên hệ điều hành Android, người dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ. Họ có thể trao đổi trên màn hình của điện thoại, những phong cách của quay số, hoặc bất kỳ ứng dụng. Họ thậm chí có thể hướng dẫn điện thoại của họ để sử dụng hình ảnh ưa thích, xem các ứng dụng để xử lý, xem tất cả các hình ảnh.
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à