Việc nhận diện khuôn mặt được kết hợpvới các biện pháp sinh trắc học khác như: kiểm tra vân tay hay tròng mắt, tạo thành hệthống an ninh đa tầng lớp được nhiều quốc gia trên thế giới sử
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT-HÀN
BÁO CÁO
ĐỒ ÁN CƠ SỞ 4
ĐỀ TÀI: XÂY DỰNG PHƯƠNG PHÁP NHẬN DIỆN
KHUÔN MẶT BẰNG PYTHON VÀ OPENCV
Giảng viên hướng dẫn : THS.LÊ SONG TOÀN
Sinh viên thực hiện : NGUYỄN THỊ NHẬT LỆ
Lớp : 18IT4
Đà Nẵng, ngày 25 tháng 12 năm 2020
Trang 2ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT-HÀN
ĐỒ ÁN CƠ SỞ 4
ĐỀ TÀI: XÂY DỰNG PHƯƠNG PHÁP NHẬN DIỆN
KHUÔN MẶT BẰNG PYTHON VÀ OPENCV
Trang 3Đà Nẵng, ngày 25 tháng 12 năm 2020
MỞ ĐẦU
Trong xã hội hiện đại ngày nay, khuôn mặt của mỗi người đóng vai trò rất quantrọng trong đời sống Nhờ những đường nét, góc cạnh trên gương mặt mà họ có thể đoánđược tuổi tác, thái độ, cảm xúc của người đó Nhờ những biểu cảm trên khuôn mặt,chúng ta có thể biết được họ đang vui hay buồn, đang bực tức hay dễ chịu Và nhờ mỗingười có một gương mặt khác nhau, chúng ta có thể biết được họ là ai
Khuôn mặt đóng vai trò quan trọng như vậy, cộng nghệ nhận diện khuôn mặthiện nay đã được phát triển lên và phổ biến rất nhiều Nhờ có công nghệ nhận diệnkhuôn mặt mà các lĩnh vực trong đời sống đã được cải thiện đáng kể
Cụm từ “công nghệ nhận diện khuôn mặt ” đang ngày càng trở nên phổ biến vàđược nhắc tới nhiều hơn Đây là từ khóa “hot” đang được các nhãn hàng công nghệ lớntrên thế giới như: Apple, Facebook hay Microsoft theo đuổi nghiên cứu và ứng dụng
Hệ thống nhận diện khuôn mặt là một ứng dụng máy tính nhận dạng một ngườinào đó từ một hình ảnh hoặc từ một đoạn video Việc nhận diện khuôn mặt được kết hợpvới các biện pháp sinh trắc học khác như: kiểm tra vân tay hay tròng mắt, tạo thành hệthống an ninh đa tầng lớp được nhiều quốc gia trên thế giới sử dụng để bảo vệ những sựkiện hay địa điểm nhạy cảm
Trên thế giới, công nghệ nhận diện khuôn mặt hay công nghệ nhận diện hình ảnh
đã được nghiên cứu cách đây hàng chục năm Tuy nhiên, tại Việt Nam, đây vẫn là mộtlĩnh vực còn khá mới mẻ Hiện kỹ sư trong nước đã bắt kịp rất nhanh với xu hướng côngnghệ mới này, từ đó cho ra đời những ứng dụng thiết thực trong đời sống như: đảm bảo
an ninh, quản lý nhân sự, hạn chế gian lận trong thi cử, tăng cường bảo mật trong giaodịch
Trong phạm vi báo cáo này, chúng em xin trình bày quá trình thực hiện “Xây dựngphương pháp nhận diện khuôn mặt bằng Python và OpenCv” Cuối cùng, mặc dù đã cốgắng rất nhiều nhưng do thời gian có hạn, khả năng dịch và hiểu tài liệu chưa tốt nên nộidung đồ án này không thể tránh khỏi những thiếu sót, rất mong được sự chỉ bảo, góp ýcủa các thầy cô và các bạn
Trang 4LỜI CẢM ƠN
Trước tiên chúng em xin gửi lời cảm ơn chân thành và sâu sắc nhất đến thầy giáoTHS.Lê Song Toàn đã hướng dẫn, định hướng, giúp đỡ chúng em rất nhiều để chúng em
có thể hoàn thành tốt bài đồ án này
Chúng em xin gửi lời cảm ơn chân thành tới các quý thầy cô giáo trong đoàntrường Đại học Công nghệ Thông tin và Truyền thông Việt – Hàn đã giảng dạy tận tìnhtrong quá trình học tập, thực hành, làm bài tập, giúp chúng em hiểu rõ hơn các nội dunghọc tập
Vì thời gian có hạn và kinh nghiệm vẫn còn hạn chế nên bài đồ án này vẫn chưatránh khỏi những thiếu sót Em mong các quý thầy cô có thể thông cảm để chúng em cóthể khắc phục trong việc học tập, nghiên cứu, thực hiện đồ án này
Chúng em xin chân thành cảm ơn !
Đà Nẵng, ngày 25 tháng 12 năm 2020
Trang 5NHẬN XÉT
(của giảng viên hướng dẫn)
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Chữ ký của giảng viên hướng dẫn
Trang 6MỤC LỤC
Trang 7DANH MỤC HÌNH VẼ
Trang 8CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN
1.1 Tổng quan về nhận diện khuôn mặt
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 địnhkhuôn mặt người từ ảnh đen trắng, xám đến ảnh màu như ngày hôm nay Các nhà nghiêncứu đi từ bài toán đơn giản, mỗi ảnh chỉ có một mặt người nhìn thẳng vào thiết bị thuhình và đầu ở tư thế thẳng đứng trong ảnh đen trắng
Cho đến ngày hôm nay bài toán mở rộng cho ảnh màu, có nhiều khuôn mặt trongcùng một ảnh, có nhiều tư thế thay đổi trong ảnh Không những thế mà còn mở rộng cảphạm vi từ môi trường xung quanh khá đơn giản cho đến môi trường xung quanh rấtphức tạp nhằm đáp ứng nhu cầu của con người
Nhận dạng dựa trên các đặc trưng khuôn mặt là phương pháp nhận dạng khuôn
mặt dựa trên việc xác định các đặc trưng hình học của các chi tiết trên một khuôn mặt(như vị trí, diện tích, hình dạng của mắt, mũi, miệng,…), và mối quan hệ giữa chúng(như khoảng cách của hai mắt, khoảng cách của hai lông mày,…)
Ưu điểm của phương pháp này là nó gần với cách mà con người sử dụng để nhậnbiết khuôn mặt Hơn nữa với việc xác định đặc tính và các mối quan hệ, phương phápnày có thể cho kết quả tốt trong các trường hợp ảnh có nhiều nhiễu như bị nghiêng, bịxoay hoặc ánh sáng thay đổi
Nhược điểm của phương pháp này là cài đặt thuật toán phức tạp do việc xác địnhmối quan hệ giữa các đặc tính đòi hỏi các thuật toán phức tạp Mặt khác, với các ảnhkích thước bé thì các đặc tính sẽ khó phân biệt do đó khó tính toán được các đặc trưngtrên khuôn mặt
Trong những năm gần đây các ứng dụng về trí tuệ nhân tạo ngày càng phát triển vàđược đánh giá cao Một lĩnh vực đang được quan tâm của trí tuệ nhân tạo nhằm tạo racác ứng dụng thông minh, có tính người đó là nhận dạng Trong đề tài này em chọn đốitượng là khuôn mặt
Trang 91.2 Phương pháp và kết quả
1.2.1 Phương pháp triển khai thực hiện đề tài
Trang 10CHƯƠNG 2: NGHIÊN CỨU TỔNG QUAN
2.1 Cơ sở lý thuyết
2.1.1 Ngôn ngữ lập trình Python
Python được biết đến là một loại ngôn ngữ lập trình hướng đối tượng, bậc cao vàmạnh mẽ với mục đích lập trình rất đa năng Ngôn ngữ này được ra đời vào năm 1991bởi Guido Van Rossum Với ưu điểm là dễ đọc, dễ học và dễ nhớ, Python đã dần trởthành một ngôn ngữ phổ biến, được áp dụng rất nhiều trong ngành công nghệ thông tinhiện nay, đặc biệt phù hợp với những ai mới tiếp xúc và theo đuổi ngành công nghệthông tin
Và hiện nay, Python được sử dụng ở rất nhiều mảng khác nhau trong ngành côngnghệ thông tin như là:
Sử dụng trong lĩnh vực lập trình website: Đây là ứng dụng phổ biến nhấtcủa Python và người dùng có thể dễ dàng tạo ra các web app với khả năng
mở rộng thông qua framework và hệ thống quản trị nội dung (CMS) đãđược tích hợp sẵn trong Python Một số nền tảng phổ biến được viết bằngngôn ngữ lập trình Python hiện nay để tạo web app như là Flask, Django,Plone
Sử dụng trong lĩnh vực khoa học tính toán: Hiện nay, có rất nhiều thư việntrong Python được áp dụng cho khoa học, tính toán các số liệu như làNumPy hay SciPy Ngoài ra, còn có một số thư viện khác như là EarthPy
để áp dụng cho khoa học trái đất, AstroPy áp dụng cho thiên văn học,
Python sử dụng trong việc tạo nguyên mẫu cho phần mềm: Mặc dù chậmhơn so với một số ngôn ngữ khác như là Java hay C++ và bị giới hạn vớinhững yêu cầu bắt buộc Tuy nhiên, Python vẫn là sự lựa chọn hoàn hảocho các lập trình viên có thể tạo ra được nguyên mẫu của các phần mềmdùng thử Ví dụ như bạn có thể sử dụng thư viện viết game Pygame và tạonguyên mẫu trước và sau đó nếu cảm thấy phù hợp thì sẽ sử dụng ngônngữ khác để tạo bản dùng thật
Ngoài ra, ngôn ngữ lập trình Python cũng được tạo ra với kiểu động, sử dụng cơchế cấp phát bộ nhớ tự động, cấu trúc cấp dữ liệu vô cùng mạnh mẽ, cách tiếp cận kháđơn giản nhưng lại mang đến hiệu quả rất tốt đối với việc lập trình đối tượng
Trang 112.1.2 Tại sao nên lựa chọn ngôn ngữ lập trình Python
Hiệu nay, Python là loại ngôn ngữ lập trình được nhiều chuyên gia khuyên nêntheo đuổi, đặc biệt là đối với những bạn trẻ mới chập chững bước chân vào ngành côngnghệ thông tin và chưa am hiểu sâu về lĩnh vực thì sẽ cần học ngôn ngữ Python để làmquen và là nền tảng phát triển các loại ngôn ngữ khác Lý do để lựa chọn Python rất đơngiản đó là:
Các cú pháp rất đơn giản, thú vị và bạn có thể dễ dàng hiểu về cách thứchoạt động, có thể code được bằng Python Bởi thực tế, các cú pháp củaPython sẽ khá giống so với ngôn ngữ tự nhiên Do đó, ngay cả khi bạnchưa thực hành lập trình bao giờ thì vẫn có thể dự đoán được các đoạncode
Học ngôn ngữ Python không quá khắt khe và bạn sẽ không cần phải xácđịnh kiểu của một biến trong Python hay không cần thêm dấu chấm phẩyvào cuối câu lệnh Ngôn ngữ Python sẽ buộc các bạn phải tuân thủ theonhững bài tập đã có sẵn với chỉ dẫn chi tiết, cụ thể và điều này sẽ giúp choquá trình học Python của các bạn trở nên dễ dàng hơn
Một ưu điểm nữa ở Python mà các bạn nên lựa chọn theo đuổi đó chính làbạn sẽ không cần phải viết quá nhiều code bởi Python cung cấp đến nhữngchương trình cùng rất nhiều chức năng tốt và ít các dòng code hơn Điềunày sẽ khá phù hợp với những bạn mới học và chưa rành về code
Ngoài ra, Python cũng cung cấp đến cho bạn một cộng đồng hỗ trợ vôcùng lớn với các diễn đàn hoạt động trực tuyến giúp giải đáp những vấn đềthắc mắc khi cần thiết
Trang 122.1.3 Những tính năng nổi bật của ngôn ngữ lập trình Python
Khám phá ngôn ngữ lập trình Python, bạn sẽ phải bất ngờ với những tính năng vôcùng nổi bật, giúp cho quá trình lập trình trở nên nhanh chóng, dễ dàng hơn như là:
Ngôn ngữ lập trình nhập môn rất đơn giản, dễ học với các cú pháp rõ rànghơn rất nhiều so với những loại ngôn ngữ khác như là C++, C#, Java, Đặc biệt, Python sẽ giúp cho việc lập trình của bạn trở nên thú vị và tậptrung vào những giải pháp nhiều hơn chứ không phải những cú pháp
Python hoàn toàn miễn phí và có mã nguồn mở, do đó, bạn có thể thoảimái, tự do sử dụng, phân phối Python hay thậm chí còn có thể sử dụng chomục đích thương mại Và cũng bởi là mã nguồn mở nên bạn không chỉ sửdụng được các phần mềm hay các chương trình trong Python mà còn cóthể tự thay đổi các mã nguồn của nó Python cũng không ngừng được cảithiện, nâng cấp hiện đại, phù hợp với từng giai đoạn, thời kỳ
Ngôn ngữ lập trình Python cung cấp các chương trình có khả năng dichuyển từ nền tảng này sang nền tảng khác một cách đơn giản, dễ dàng.Điều đặc biệt là dù đã di chuyển nhưng nó vẫn sẽ chạy bình thường màkhông có bất kỳ thay đổi nào Hơn nữa, các chương trình cũng chạy rấtliền mạch trên hầu hết toàn bộ các nền tảng như là Linux, Windows,MacOS
Python có tính năng mở rộng và có thể nhúng Cụ thể đó là với một ứngdụng đòi hỏi sự phức tạp cao, bạn vẫn có thể dễ dàng kết hợp các phầncode với nhau thông qua C hay C++, các loại ngôn ngữ khác để đưa vàocode Python Việc này sẽ giúp cho các ứng dụng của bạn có những tínhnăng tốt và chất lượng hơn, có khả năng scripting mà một số loại ngônngữ lập trình khác không hề có
Python mang đến tính năng thông dịch cấp cao và bạn sẽ không còn phải
lo lắng về các nhiệm vụ khó khăn, phức tạp khác như là quản lý bộ nhớhay dọn dẹp bớt những dữ liệu không cần thiết, không có nghĩa, Khichạy code Python, các chương trình sẽ tự động chuyển đổi code sang mộtngôn ngữ máy tính để bạn có thể dễ hiểu hơn, đồng thời không cần phải lolắng về bất kỳ một hoạt động cấp thấp nào
Trang 13 Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng Lập trình
hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cáchtrực quan Với OOP, bạn có thể phân chia những vấn đề phức tạp thànhnhững tập nhỏ hơn bằng cách tạo ra các đối tượng
Một tính năng nữa khá nổi bật của Python đó chính là mang đến một thưviện tiêu chuẩn lớn để có thể giải quyết được những vấn đề nghiêm trọng,giúp quá trình của bạn trở nên đơn giản, dễ dàng hơn bởi bạn sẽ không cầnphải tự viết toàn bộ code Ví dụ như bạn cần phải thực hiện kết nối các cơ
sở dữ liệu MySQL trên Web server thì có thể ngay lập tức nhập vào thưviện đó để sử dụng mà không cần lo lắng sẽ bị hỏng code
Tính năng cuối cùng của Python đó chính là mọi thứ đều hướng đối tượnghay còn được gọi là lập trình đối tượng Tính năng này sẽ giúp giải quyếtđược toàn bộ những vấn đề phức tạp theo cách trực quan nhất có thể Hơnnữa, với lập trình hướng đối tượng, bạn có thể phân chia được những vấn
đề phức tạp đó thành những tập con nhỏ hơn theo phương pháp tạo ra cácđối tượng khác
2.1.4 Python được sử dụng ở đâu
Lập trình ứng dụng web: Bạn có thể tạo web app có khả năng mở rộng
(scalable) được bằng cách sử dụng framework và CMS (Hệ thống quản trị nội dung)được tích hợp trong Python Vài nền tảng phổ biến để tạo web app là: Django, Flask,Pyramid, Plone, Django CMS Các trang như Mozilla, Reddit, Instagram và PBS đềuđược viết bằng Python
Khoa học và tính toán: Có nhiều thư viện trong Python cho khoa học và tính
toán số liệu, như SciPy và NumPy, được sử dụng cho những mục đích chung chungtrong tính toán Và, có những thư viện cụ thể như: EarthPy cho khoa học trái đất,AstroPy cho Thiên văn học, Ngoài ra, Python còn được sử dụng nhiều trong machinelearning, khai thác dữ liệu và deep learning
Tạo nguyên mẫu phần mềm: Python chậm hơn khi so sánh với các ngôn ngữ
được biên dịch như C++ và Java Nó có thể không phải là lựa chọn tốt nếu nguồn lực bịgiới hạn và yêu cầu về hiệu quả là bắt buộc Tuy nhiên, Python là ngôn ngữ tuyệt vời đểtạo những nguyên mẫu (bản chạy thử - prototype)
Trang 142.1.5 Hướng dẫn cài đặt và cấu hình Python
2.1.5.1 Tải Python về máy
Để tải Python, hãy truy cập vào địa chỉ http://www.python.org/downloads/
Hình 1 Tùy chọn các phiên bản để tải cho phù hợp.
Hình 2 Chọn phiên bản phù hợp với cấu hình máy tính.
Trang 16Hình 6 Chọn thư mục cần lưu
Hình 7 Nhấn close để đóng
Trang 172.1.5.3 Khởi chạy Python
Hình 8 Chọn thư mục IDLE(Python)
Hình 9
Hình 10
Hình 11
Trang 182.1.6.2 Lợi ích của phần mềm Pycharm
Một khía cạnh quan trọng của chương trình là hiểu được nền tảng mã mà bạnđang đưa vào PyCharm đảm bảo bạn có thể khám phá dự án của bạn chỉ với một vàithao tác trên phím, nó cung cấp cho bạn một cái nhìn tổng quan về cấu trúc dự án và chophép bạn truy cập vào các tài liệu có liên quan ngay từ trình soạn thảo Hiểu được mộtnền tảng code nhanh hơn có nghĩa là thúc đẩy nhanh hơn quá trình phát triển của bạn
2.1.6.3 Các tính năng chính của Pycharm
Hỗ trợ Windows, macOS và Linux
Hỗ trợ mã hoàn thiện thông minh, điều hướng bằng một cú nhấp chuột vàkiểm tra kiểu PEP8
Tái cấu trúc an toàn và tự động trong dự án của bạn
Tự động phát hiện các vấn đề mã: ví dụ: phân tích mã không sử dụng
Trình gỡ lỗi hiệu suất cao
Chế độ mô phỏng Vim
2.1.6.4 Cài đặt Pycharm và sử dụng Pycharm
Truy cập đường link: https://www.jetbrains.com/pycharm/ để tải Pycharm
Đối với các dự án cá nhân thì bản Community đã hoàn toàn đầy đủ tính năng Hãy tải
Hình 12 Download PyCharm trên trang chủ JetBrains
Trang 19Sau khi download thành công, PyCharm sẽ được lưu tại một thư mục Download của máy tính.
Ta click đúp lên file bộ cài, để tiến hành cài đặt PyCharm
Màn hình chào mừng được hiển thị, ta nhấn Next để tiếp tục
Hình 13 Bắt đầu cài đặt PyCharm lên máy
Hình 14 Giao diện cài Đặt PyCharm đầu tiên - Chọn Next
Trang 20Sau đó, ta chọn đường dẫn thư mục chứa bộ cài nói trên.
Hình 15 Chọn đường dẫn lưu PyCharm - Để mặc định
Tiếp theo, ta chọn các tùy chọn cho việc cài đặt
Nếu máy chưa cài đặt Java thì ta tích vào tất cả các tùy chọn trên màn hình này
Hình 16 Chọn cài Tùy chọn Cài Đặt - Lựa chọn Như Hình nếu chưa cài Java, OS 64 Bit
Trang 21Sau đó ta chọn Install trong màn hình tiếp theo, để bắt đầu tiến hành cài đặt PyCharm
Sau khi cài đặt xong, PyCharm sẽ hỏi ta có muốn khởi động lại máy luôn hay không Ta có thể chọn RebootNow để khởi động lại máy tính nhằm hoàn tất quá trình cài đặt
Hình 17 Lựa chọn Install để cài đặt PyCharm
Hình 18 Chọn Reboot Now để khởi động lại và hoàn tất cài đặt PyCharm