"
Trí tuệ nhân tạo và khoa học dữ liệu
🔙 Quay lại trang tải sách pdf ebook Trí tuệ nhân tạo và khoa học dữ liệu
Ebooks
Nhóm Zalo
Lê Trọng Nhân - Lê Phương Nam Nguyễn Văn Hạnh - Băng Ngọc Bảo Tâm
Trang 2 The Dariu Foundation
Mục lục
I Video AI với Teachable Machine 7
Chương 1. Học máy với Google - Teachable Machine 9 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Bắt đầu với Học Máy Google . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Huấn luyện dữ liệu sai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4 Xuất kết quả huấn luyện . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5 Lưu dự án vào Google drive . . . . . . . . . . . . . . . . . . . . . . . . . . 16 6 Mở dự án từ Google drive . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 7 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Chương 2. Học máy Google trên Python 19 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2 Tích hợp học máy Google vào PyCharm . . . . . . . . . . . . . . . . . . 20 3 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Chương 3. Tích hợp Webcam để nhận diện hình ảnh trên Python 25 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2 Tích hợp Webcam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3 Tích hợp trợ lý ảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
II Nhận dạng âm thanh với Teachable Machine 33
Chương 4. Huấn luyện âm thanh trên Teachable Machine 35 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2 Huấn luyện hệ thống âm thanh . . . . . . . . . . . . . . . . . . . . . . . 36 3 Xuất kết quả huấn luyện . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4 Lưu dự án vào Google drive . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5 Mở dự án từ Google drive . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Chương 5. AI và Robot trên Scratch 3.0 45 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2 Scratch 3.0 trực tuyến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3 Trí tuệ nhân tạo trên Scratch 3.0 . . . . . . . . . . . . . . . . . . . . . . . 47
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 3
3.1 Kích hoạt trí tuệ nhân tạo . . . . . . . . . . . . . . . . . . . . . . 47 3.2 Bắt đầu việc nhận dạng . . . . . . . . . . . . . . . . . . . . . . . . 48 4 Kết nối với Robot Microbit . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Chương 6. Tích hợp Micro để nhận dạng âm thanh trên Python 51 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2 Tích hợp Micro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
III Khoa học dữ liệu 65
Chương 7. Khoa học Dữ liệu cùng Python 67 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 2 Thư viện thường được sử dụng . . . . . . . . . . . . . . . . . . . . . . . . 68
2.1 Numpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 2.2 Pandas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 2.3 Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.4 SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 2.5 Scikit-Learn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3 Thu thập và xử lý dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.1 Thu thập dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.2 Xử lý dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.2.1 Thêm dữ liệu vào chương trình . . . . . . . . . . . . . 72 3.2.2 Trích xuất, chia nhỏ dữ liệu . . . . . . . . . . . . . . . 73 4 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Chương 8. Vẽ đồ thị biểu diễn dữ liệu trực quan 77 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 2 Vẽ biểu đồ bằng thư viện Matplotlib . . . . . . . . . . . . . . . . . . . . 78
2.1 Biểu đồ đường . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 2.2 Biểu đồ cột . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 2.3 Biểu đồ tròn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3 Biểu diễn kết quả thống kê bằng khuôn hình . . . . . . . . . . . . . . . 85 4 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Chương 9. Dự đoán tương lai gần bằng thuật toán Hồi Quy Tuyến Tính 89 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 2 Xử lý dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 3 Biểu diễn số liệu dưới dạng đồ thị . . . . . . . . . . . . . . . . . . . . . . 90 4 Sử dụng thuật toán Hồi Quy Tuyến Tính trong việc dự đoán tương
lai gần . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
IV Robotics với Python - Ứng dụng Google Home 95
Chương 10. Trợ lý ảo trên Điện thoại 97 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 2 Cài đặt Giọng nói - Văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Trang 4 The Dariu Foundation
3 Cài đặt ứng dụng Trợ lý ảo . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4 Hướng dẫn sử dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.1 Đặt tên cho Trợ lý ảo . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.2 Cấu hình lệnh cho trợ lý ảo . . . . . . . . . . . . . . . . . . . . . 100 5 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Chương 11. Tích hợp Microbit vào Trợ lý ảo 103 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 2 Cài đặt phần mềm Mu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 3 Chương trình đầu tiên . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4 Hiện thực chương trình cho Microbit . . . . . . . . . . . . . . . . . . . 107
4.1 Nhận dữ liệu từ điện thoại . . . . . . . . . . . . . . . . . . . . . . 107 4.2 Gửi dữ liệu lên điện thoại . . . . . . . . . . . . . . . . . . . . . . 108 5 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Chương 12. Điều khiển ngoại vi qua giao tiếp không dây 111 1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 2 Nhận dữ liệu không dây . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 3 Đóng/Mở công tắc Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 4 Giám sát cảm biến và gửi cảnh báo . . . . . . . . . . . . . . . . . . . . . 114 5 Câu hỏi ôn tập . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 5
Trang 6 The Dariu Foundation
Phần I
Video AI với Teachable Machine Trí tuệ nhân tạo - Khoa học dữ liệu Trang 7
CHƯƠNG 1
Học máy với Google - Teachable Machine
1 Giới thiệu
Trong thời đại bùng nổ của cuộc cách mạng công nghệ 4.0, chắc hẳn chúng ta đã nghe nói nhiều về khái niệm Trí tuệ nhân tạo, hay còn gọi là AI (Artificial Intelli gence). Tuy nhiên để có thể hiểu nó một cách cơ bản và trực quan không phải là một điều dễ dàng. Vì vậy, từ năm 2017 Google đã xây dựng một công cụ trực tuyến, có tên gọi là Teachable Machine, để mang lại cho mọi người một cái nhìn tổng quan nhất về trí tuệ nhân tạo. Chỉ cần rất ít thao tác, ở mọi lứa tuổi, chúng ta có thể cảm nhận được trí tuệ nhân tạo gồm có những khái niệm cơ bản nào, nó có thể làm được gì.
Teachable Machine ban đầu chỉ là một trang web trực tuyến, với mục đích chính là cho người dùng trải nghiệm với các sản phẩm của trí tuệ nhân tạo, như nhận diện hình ảnh hay nhận diện âm thay. Tuy nhiên hiện nay, với phiên bản 2.0, Teachable Machine đã trở thành một công cụ trong việc thiết kế một ứng trí tuệ nhân tạo cho chúng ta. Công cụ này đã hỗ trợ nhiều nền tảng lập trình khác nhau, như Scratch (ngôn ngữ cho học sinh) và Python, ngôn ngữ lập trình rất mạnh mẽ cho các ứng dụng thời đại mới. Ngoài ra, rất nhiều các nền tảng AI khác đang dựa trên lõi trung tâm là Google Teachable Machine.
Trong bài hướng dẫn này, chúng tôi sẽ giới thiệu các thao tác cơ bản trên Teachable Machine, trước khi chúng ta bắt đầu việc lập trình kết nối giữa Python và Teachable Machine. Chúng tôi cũng tập trung vào hướng dẫn công cụ đầu tiên, là nhận diện bằng hình ảnh (Image Classifier). Các công cụ khác sẽ được trình bày trong những bài tiếp theo. Các mục tiêu chính trong bài đầu tiên được liệt kê như sau:
• Hiểu được các thành phần cơ bản của AI
• Sử dụng được công cụ Teachable Machine của Google
• Trải nghiệm Học Máy với Google trên trang web
• Lưu dự án AI trên công cụ Google Drive
Trong phần còn lại của hướng dẫn, chúng tôi sẽ xài thuật ngữ việt hóa cho Teach able Machine là "Học Máy Google" cho thuận tiện với bạn đọc.
2 Bắt đầu với Học Máy Google
Học Máy Google đã được xây dựng thành một công cụ trực tuyến. Chúng ta bắt đầu bằng việc vào đường dẫn https://teachablemachine.withgoogle.com/, giao diện sau đây sẽ hiện ra:
Trang 10 The Dariu Foundation
Hình 1.1: Trang web online của Học máy Google
Tại trang web này, chúng ta có thể xem trước một số hình ảnh cũng như video giới thiệu của Google về công nghệ Học máy. Tiếp theo, nhấn vào nút Get Started để bắt đầu, giao diện của công cụ học máy với Google được hiện ra như sau:
Hình 1.2: Công cụ Học máy với Google - Image Project
Chúng ta chọn tiếp vào Image Project, công cụ để phân nhận diện hình ảnh. Hai công cụ còn lại (Nhận dạng âm thanh và Nhận dạng dáng người) sẽ được trình bày sau. Giao diện sau đây sẽ được hiện ra:
Hình 1.3: Giao diện để huấn luyện hình ảnh
Để mô hình AI có thể hoạt động, chúng ta phải huấn luyện (train) nó trước. Bạn có thể đặt tên cho đối tượng mà bạn muốn nhận diện bằng cách nhấn vào biểu tượng thay đổi bên cạnh tên mặc định Class1 và Class2. Thao tác này còn có một tên gọi khác là gán nhãn cho đối tượng.
Bước tiếp theo là cung cấp dữ liệu cho từng đối tượng. Google hỗ trợ 2 phương pháp khác nhau để cung cấp dữ liệu hình ảnh. Chúng ta sẽ bắt đầu trước với việc
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 11
sử dụng webcam để cung cấp hình ảnh. Khi nhấn vào biểu tượng webcam, giao diện sau đây sẽ hiện ra:
Hình 1.4: Chụp hình ảnh từ webcam
Chúng ta sẽ nhấn nút Hold To Record để bắt đầu chụp hình, như minh họa ở Hình 1.4. Càng có nhiều hình cho đối tượng, việc nhận diện sẽ càng chính xác, tuy nhiên thời gian huấn luyện sẽ lâu hơn. Ở đây, chúng tôi chọn mẫu khoảng 10 hình, nhưng bạn hoàn toàn có thể tăng lên 50 hình nếu muốn.
Khi muốn xóa một hình mà bạn không ưng ý, chỉ cần rê chuột vào tấm hình, biểu tượng xóa sẽ xuất hiện để bạn có thể nhấn vào.
Trong một số trường hợp, việc chụp ảnh từ webcam của máy tính không thuận tiện, chúng ta có thể chọn công cụ thứ 2 để cung cấp hình ảnh cho hệ thống trí tuệ nhân tạo. Tắt công cụ webcam đi (nhấn vào dấu X ở góc bên phải khung hình). Khi chọn vào công cụ Upload, giao diện sau đây sẽ hiện ra:
Hình 1.5: Tải thêm hình ảnh từ máy tính
Chọn vào công cụ đầu tiên, bạn đã có thể tải hình ảnh từ máy tính lên hệ thống huấn luyện của Google. Chúng ta sẽ làm tương tự cho nhóm thứ 2, như minh họa ở hình sau đây:
Trang 12 The Dariu Foundation
Hình 1.6: Tải dữ liệu cho nhóm thứ 2
Cuối cùng, chúng ta nhấn vào nút Train Model để hệ thống bắt đầu quá trình huấn luyện dựa trên tập dữ liệu hình ảnh mà chúng ta cung cấp. Ngay sau khi quá trình huấn luyện kết thúc, hệ thống AI sẽ bắt đầu chạy để nhận dạng. Kết quả của việc nhận dạng là xác suất trùng với các đối tượng đã được huấn luyện, như minh họa ở hình bên dưới:
Hình 1.7: Huấn luyện và chạy thử AI
3 Huấn luyện dữ liệu sai
Đây là một khái niệm vô cùng quan trọng trong hệ thống trí tuệ nhân tạo. Bên cạnh việc huấn luyện nhận đúng, bạn cũng phải cần huấn luyện các ngữ cảnh không thuộc các đối tượng nhận dạng mong đợi. Ví dụ như trong hình Hình 1.7, mặc dù hình ảnh thực tế hoàn toàn khác xa với tập dữ liệu, hệ thống AI vẫn đang nhận diện là đối tượng "Phan Phan". Một ví dụ khác cho hiện tượng này là khi chúng ta làm một hệ thống điểm danh tự động. Trong hệ thống đã được huấn luyện trước 10 người thật chẳng hạn. Tuy nhiên trong quá trình vận hành, camera có thể quay vào một khoảng không và hệ thống AI vẫn nhận dạng đây là một ai đó.
Một kĩ thuật đơn giản để khắc phục hiện tượng này là huấn luyện thêm các ngữ cảnh không mong muốn. Từ Hình 1.7, nhấn vào lựa chọn Add a class để thêm một đối tượng mới và cũng cung cấp hình ảnh cho đối tượng này như bình thường. Ở đây, chúng tôi thêm dữ liệu gọi là Ảnh nền, như minh họa bên dưới:
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 13
Hình 1.8: Thêm đối tượng ảnh nền cho hệ thống
Trong trường hợp muốn xóa một đối tượng, chúng ta nhấn vào biểu tượng option ở góc bên phải (bước 1), và chọn tiếp Delete class (bước 2), như minh họa ở hình bên dưới:
Hình 1.9: Xoá một đối tượng khỏi hệ thống AI
Lưu ý: Mỗi khi thay đổi hình hoặc hoặc thêm/bớt đối tượng, phải huấn luyện lại hệ thống.
4 Xuất kết quả huấn luyện
Đây là bước cuối cùng, để chúng ta có thể tích hợp kết quả của việc huấn luyện vào các ngôn ngữ lập trình khác như Scratch hay Python. Bằng cách nhấn vào nút Export Model, giao diện sau đây sẽ hiện ra:
Trang 14 The Dariu Foundation
Hình 1.10: Xuất kết quả huấn luyện
Chúng ta sẽ chọn vào mục Upload my model, và chờ cho đến khi tác vụ này hoàn tất. Khi việc tải dữ liệu lên server của Google hoàn tất, chúng ta sẽ có một đường dẫn trong mục Your sharable link. Bạn hãy sao chép đường dẫn này lại để dùng trong việc lập trình trên Scratch 3.0.
Chuyển sang tab Tensorflow, chúng ta tải về một file được mã hóa cho dữ liệu nhận dạng, gọi là file h5, bằng cách nhấn vào nút Download my model, như minh họa ở hình bên dưới. Đây sẽ là file cần thiết cho việc lập trình trên Python trong những bài hướng dẫn tiếp theo.
Hình 1.11: Xuất kết quả huấn luyện ra file h5
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 15
5 Lưu dự án vào Google drive
Với những hỗ trợ toàn diện từ phía Google, hệ thống AI của bạn có thể được lưu lại trực tuyến trên Google drive. Bằng các trở lại màn hình chính và làm theo 4 bước hướng dẫn ở hình bên dưới như: Chọn Save project to Drive, Đặt tên cho project và cuối cùng nhấn nút Next.
Hình 1.12: Lưu dự án vào Google drive
6 Mở dự án từ Google drive
Trong trường hợp muốn mở lại dự án cũ để cập nhật hoặc làm tiếp, từ trang chủ của Học Máy Google, chúng ta chọn Open existing project from Drive rồi lựa chọn trong danh sách các dự án đã lưu, như minh họa ở hình bên dưới.
Hình 1.13: Mở một dự án từ Google drive
Trang 16 The Dariu Foundation
7 Câu hỏi ôn tập
1. Công cụ Học máy với Google có tên là gì?
A. Teachable Machine
B. Artificial Intelligence
C. Deep Learning
D. Machine Learning
2. Hiện tại có bao nhiêu công cụ AI đang được hỗ trợ sẵn bởi Google? A. 1
B. 2
C. 3
D. Tất cả đều sai
3. Dữ liệu để huấn luận cho hệ thống nhận dạng bằng ảnh có thể được lấy từ nguồn nào?
A. Trực tiếp từ webcam
B. Tải ảnh từ máy tính lên
C. Ảnh từ Google Drive của người dùng
D. Tất cả các nguồn ảnh trên
4. Sau khi huấn luấn luyện, kết quả thực thi của hệ thống trí tuệ nhân tạo là gì? A. Một hình ảnh dưới dạng xem trực tiếp (live view)
B. Xác suất tính theo phần trăm tỉ lệ nhận dạng được
C. Một định danh (ID) cho đối tượng nhận dạng
D. Tất cả đều đúng
5. Để loại bỏ việc nhận dạng ảnh nền thành một hình nào đó trong danh sách các đối tượng, chúng ta cần:
A. Thêm nhiều đối tượng hơn để loại bỏ ảnh nền
B. Huấn luyện thêm một đối tượng là ảnh nền
C. Huấn luyện lại ảnh cho đối tượng nhiều lần
D. Không cần xử lý vì Google đã hỗ trợ
6. Mô hình huấn luyện của Học máy Google hỗ trợ cho những môi trường lập trình nào sau đây?
A. Scratch 2.0
B. Scratch 3.0
C. Python
D. Scratch 3.0 và Python
7. Để có thể sử dụng mô hình Học máy Google trên môi trường lập trình trên Python, chúng ta cần:
A. Lưu lại đường dẫn trực tuyến của mô hình
B. Lưu lại file Tensorflow
C. Lưu lại file h5
D. Tất cả các bước trên
Đáp án
1. A 2. C 3. D 4. B 4. D 5. B 6. D 7. C
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 17
Trang 18 The Dariu Foundation
CHƯƠNG 2
Học máy Google trên Python
1 Giới thiệu
Trong phần hướng dẫn này, chúng ta sẽ sử dụng kết quả huấn luyện ở bài trước và hiện thực một chương trình nhận dạng bằng ngôn ngữ Python. Sở dĩ chúng ta phải làm điều này là vì trang web trực tuyến của Google chỉ là công cụ để kiểm tra hệ thống trí tuệ nhân tạo và chúng ta không thể thêm các chức năng khác vào trang web này.
Trong bài này chúng ta sẽ hiện thực một chương trình bằng ngôn ngữ Python trên PyCharm để làm chủ công nghệ Học máy của Google, trước khi chúng ta tích hợp thêm các chức năng mới, như trợ lý ảo chẳng hạn. Các mục tiêu chính của bài hướng dẫn này như sau:
• Tích hợp kết quả huấn luyện của Google vào PyCharm
• Sử dụng được mã nguồn mở cung cấp bởi Google
• Hiện thực được chương trình xử lý nhận dạng ảnh tĩnh bằng Python 2 Tích hợp học máy Google vào PyCharm
Bước 1: Khởi động phần mềm PyCharm, tạo một dự án mới bằng cách chọn File/New Project, như minh họa ở hình bên dưới:
Hình 2.1: Tạo một dự án mới trên PyCharm
Bước 2: Chép file h5 đã tải ở bài trước vào cùng thư mục với file main.py. Để làm được việc này, chúng ta nhấn chuột phải vào file main.py, rồi chọn Show in Ex plorer. Trình duyệt thư mục sẽ được mở ra, chúng ta chép file h5 vào thư mục này. Kết quả của bước này, chúng ta sẽ có thêm thư viện keras_model.h5 cùng cấp với file main.py, như minh họa ở hình bên dưới:
Trang 20 The Dariu Foundation
Hình 2.2: Chép file h5 vào cùng thư mục
Bước 3: Chép chương trình sau đây vào file main.py. Thực ra, đây là chương trình mẫu được hỗ trợ trên trang chủ Học máy với Google, như sau:
1 import tensorflow . keras
2 from PIL import Image , ImageOps
3 import numpy as np
4
5 # Disable scientific notation for clarity
6 np . set_printoptions ( suppress = True )
7
8 # Load the model
9 model = tensorflow . keras . models . load_model (’keras_model .h5 ’ )
10
11 # Create the keras model
12 data = np . ndarray ( shape =(1 , 224 , 224 , 3) , dtype = np . float32 ) 13
14 # Replace this with the path to your image
15 image = Image . open (’test_photo . jpg ’)
16
17 # resize the image to a 224 x224
18 size = (224 , 224)
19 image = ImageOps . fit ( image , size , Image . ANTIALIAS ) 20
21 # turn the image into a numpy array
22 image_array = np . asarray ( image )
23
24 # display the resized image
25 image . show ()
26
27 # Normalize the image
28 normalized_image_array = ( image_array . astype ( np . float32 ) / 127.0) - 1
29
30 # Load the image into the array
31 data [0] = normalized_image_array
32
33 prediction = model . predict ( data )
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 21
34 print ( prediction )
Chương trình 2.1: Chương trình mẫu từ trang chủ Học máy với Google
Bước 4: Cài đặt thêm thư viện cho chương trình. Thực ra, để chạy chương trình này, chúng ta phải cài đặt thêm 3 thư viện tensorflow, PIL và numpy, như chỉ định ở 3 dòng đầu tiên của chương trình. Bằng cách rê chuột vào thư viện đang bị báo lỗi, chương trình sẽ tự động gợi ý như minh họa ở hình bên dưới. Chúng ta chỉ cần chọn vào Install package tensorflow để cài đặt thêm.
Hình 2.3: Cài đặt thư viện theo gợi ý của PyCharm
Lưu ý: Trong quá trình cài đặt thư viện, hãy chú ý tới các thông báo của PyCharm. Nếu quá trình cài đặt thành công, phần import thư viện sẽ không còn báo lỗi và sẽ có thông báo Packages installed successfully. Khi cài đặt xong thư viện tensor flow, thì thư viện numpy cũng đã tự động cài đặt thêm.
Bước 5: Chúng ta tiếp tục làm tương tự để cài đặt thư viện PIL. Tuy nhiên, lần này việc cài đặt sẽ bị báo lỗi. Đây cũng là điều thường xuyên xảy ra khi làm việc với mã nguồn mở trên Python, do việc xung đột phiên bản hoặc phiên bản cũ không còn tồn tại. Đối với trường hợp này, chúng ta sẽ chọn More actions để xem các gợi ý khác của PyCharm, như minh họa ở hình bên dưới:
Hình 2.4: Cài đặt lại thư viện PIL bằng cách chọn More actions...
Bước 6: Thêm một ảnh vào cùng thư mục với main.py và sửa lại câu lệnh ở dòng 15 của chương trình. Trong hướng dẫn bên dưới, chúng tôi chép vào một hình có tên là test1.jpg và sửa lại chương trình trong file main.py, như minh họa ở hình bên dưới:
Hình 2.5: Đưa file ảnh test1.jpg vào để nhận diện
Trang 22 The Dariu Foundation
Đến đây, chúng ta đã có thể chạy chương trình. Ở lần đầu tiên, việc cài đặt sẽ tốn thời gian. Sau khi chạy thành công, hình ảnh nhận diện sẽ hiện lên cùng với độ tin cậy của việc nhận dạng, được tính theo phần trăm, như minh họa ở hình bên dưới:
Hình 2.6: Kết quả thực thi của chương trình
Ở đây, mô hình Học máy với Google của chúng ta có 3 đối tượng là "Quỳnh Anh", "Phan Phan" và "Ảnh nền". Do đó, kết quả xuất ra của việc nhận dạng là một mảng có 3 phần tử, tương ứng với xác suất nhận dạng của 3 đối tượng. Chúng ta sẽ hiện thực thêm một đoạn chương trình nhỏ để tìm ra tỉ lệ nhận dạng tốt nhất trong các đối tượng đã huấn luyện, và in ra kết quả thân thiện hơn. Bạn đọc có thể tham khảo đoạn chương trình bên dưới để tích hợp vào trong chương trình của mình.
1 name = [" Quynh Anh ", " Phan Phan ", " Anh nen"]
2 index = -1
3 max_value = -1
4 for i in range (0 , len( prediction [0]) ) :
5 if max_value < prediction [0][ i ]:
6 max_value = prediction [0][ i ]
7 index = i
8 print ("Ket Qua: ", name [ index ])
9 print (" Chinh Xac: ", max_value )
Chương trình 2.2: Chương trình mẫu từ trang chủ Học máy với Google
Chương trình ở trên thực chất chỉ là tìm số lớn nhất trong mảng. Tuy nhiên ở đây chỉ có thêm một chức năng là số lớn nhất đó đang nằm ở đâu trong mảng (lưu trong biến index) để chúng ta có thể lấy ra nhãn của đối tượng tương ứng (lưu trong biến name).
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 23
3 Câu hỏi ôn tập
1. Mô hình nhận dạng ảnh có tên là gì?
A. Tensorflow
B. Keras
C. Techable machine
D. Machine Learning
2. Kết quả trả về (biến prediction) là:
A. Biến đơn kiểu số thực
B. Biến đơn kiểu số nguyên
C. Mảng 1 chiều
D. Mảng 2 chiều
3. Số lượng phần tử chiều thứ nhất của prediction là bao nhiêu? A. 0
B. 1
C. Tùy thuộc vào số lượng đối tượng huấn luyện
D. Tất cả đều sai
4. Số lượng phần tử chiều thứ hai của prediction là bao nhiêu? A. 0
B. 1
C. Tùy thuộc vào số lượng đối tượng huấn luyện
D. Tất cả đều sai
5. Độ tin cậy được tính theo đơn vị gì?
A. Phần trăm
B. Độ chính xác
C. Không đơn vị
D. Tất cả đều sai
6. Trước khi bắt đầu việc nhận dạng, hình ảnh được đổi thành kích thước bao nhiêu?
A. 100x100
B. 224x224
C. Tùy thuộc vào ảnh đầu vào
D. Tất cả đều sai
7. Ảnh đầu vào để nhận dạng cần có kích thước bao nhiêu?
A. 224x224
B. Lớn hơn 224x224
C. Bao nhiêu cũng được
D. Tất cả đều đúng
Đáp án
1. B 2. D 3. B 4. C 5. A 6. B 7. B
Trang 24 The Dariu Foundation
CHƯƠNG 3
Tích hợp Webcam để nhận diện hình ảnh trên Python
1 Giới thiệu
Trong bài hướng dẫn trước, chúng ta đã có thể chạy chương trình nhận dạng từ một ảnh tĩnh. Tuy nhiên để có thể xây dựng nên một dự án sinh động hơ, chúng ta cần phải lấy ảnh động từ webcam có sẵn trên máy tính. Ý tưởng ở đây là định kì chụp ảnh rồi mới nhận dạng. Quá trình này sẽ diễn ra liên tục cho đến khi hệ thống bị tắt hoặc dừng lại. Thêm nữa, khi nhận dạng thành công một đối tượng đã được huấn luyện, chúng ta sẽ dùng loa của máy tính để thông báo, thay vì chỉ in kết quả ra màn hình.
Bài hướng dẫn này sẽ tập trung vào 2 kĩ thuật chính. Thứ nhất là tích hợp việc chụp ảnh động từ Webcam cho việc nhận dạng. Tiếp theo, là hiện thực chương trình phát ra giọng nói bằng tiếng Việt, để tăng tính thân thiện của chương trình với người dùng. Các kĩ năng chính của bài hướng dẫn này được tóm tắt như sau:
• Thêm thư viện - Cài đặt thư viện cho dự án
• Đóng gói chương trình thành hàm
• Tích hợp chụp ảnh từ Webcam
• Tích hợp giọng nói tiếng Việt
2 Tích hợp Webcam
Bước 1: Thêm thư viện cv2 và hiện thực hàm captureImage, như gợi ý sau đây:
1 import cv2
2
3 cam = cv2 . VideoCapture (0)
4
5 def capture_image () :
6 ret , frame = cam . read ()
7 cv2 . imwrite (’img_detect .png ’, frame )
Chương trình 3.1: Thêm thư viện cv2 và chụp ảnh từ Webcam
Để có thể thêm thư viện cv2 thành công, bạn cũng cần phải cài đặt nó. Bằng cách rê chuột vào tên thư viện trong câu lệnh import, gợi ý cài đặt sẽ được PyCharm hiện ra. Cũng như việc cài đặt PIL ở bài trước, với cv2 bạn cũng phải chọn vào More actions để có thể cài đặt một thư viện khác tương đương.
Tiếp theo, hàm captureImage() chỉ đơn giản là chụp một hình từ webcam và lưu nó lại dưới tên img_dectect.png.
Bước 2: Đóng gói chương trình ở bài trước thành hàm face_detection, kết quả của chương trình sẽ như sau:
1 def face_detection () :
2 # Disable scientific notation for clarity 3 np . set_printoptions ( suppress = True )
Trang 26 The Dariu Foundation
4
5 # Load the model
6 model = tensorflow . keras . models . load_model (’keras_model .h5 ’)
7
8 # Create the keras model
9 data = np . ndarray ( shape =(1 , 224 , 224 , 3) , dtype = np . float32 )
10
11 # Replace this with the path to your image 12 image = Image . open (’ img_dectect . png ’)
13
14 # resize the image to a 224 x224
15 size = (224 , 224)
16 image = ImageOps . fit ( image , size , Image . ANTIALIAS ) 17
18 # turn the image into a numpy array
19 image_array = np . asarray ( image )
20
21 # display the resized image
22 image . show ()
23
24 # Normalize the image
25 normalized_image_array = ( image_array . astype ( np . float32 ) / 127.0) - 1
26
27 # Load the image into the array
28 data [0] = normalized_image_array
29
30 prediction = model . predict ( data )
31 print ( prediction )
32
33 name = [" Quynh Anh ", " Phan Phan ", " Anh Nen "] 34 index = -1
35 max_value = -1
36 for i in range (0 , len( prediction [0]) ) :
37 if max_value < prediction [0][ i ]:
38 max_value = prediction [0][ i ]
39 index = i
40 print ("Ket Qua: ", name [ index ])
41 print (" Chinh Xac: ", max_value )
Chương trình 3.2: Đóng gói chương trình thành hàm face_detection
Lưu ý: Trong chương trình trên, chúng ta cần phải sửa lại tên hình ảnh để nhận dạng thành img_detect.png
Bước 3: Hiện thực thêm chương trình thực thi, gồm 2 bước là chụp hình và nhận dạng, như sau:
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 27
1 while True :
2 capture_image ()
3 face_detection ()
Chương trình 3.3: Hoàn thiện chương trình
Ở bước này, chúng ta có thể thấy một đặc trưng vô cùng quan trọng của một dự án: nó cần một vòng lặp vô tận. Bởi đơn giản, chương trình kết thúc cũng có nghĩa là ứng dụng đã dừng. Trong các dự án thực tế, chương trình phải luôn luôn chạy cho đến khi nào người dùng chủ động tắt nó đi (ví dụ như tắt nguồn điện chẳng hạn). Đây là điều khác biệt rất lớn đối với các chương trình mang tính chất nghiên cứu, khi chương trình chỉ cần chạy một lần rồi thôi.
3 Tích hợp trợ lý ảo
Bước 1: Cài đặt thư viện hỗ trợ. Để có thể phát ra giọng nói tiếng Việt, chúng ta phải cài đặt khá nhiều thư viện, như liệt kê bên dưới:
1 import os
2 import playsound
3 import wikipedia
4 from gtts import gTTS
5 from webdriver_manager . chrome import ChromeDriverManager Chương trình 3.4: Thư viện cho giọng nói tiếng Việt
Trừ thư viện cuối cùng, các thư viện còn lại bạn đọc có thể tận dụng gợi ý từ Py Charm. Sau đó chuyển sang cửa sổ Terminal để cài đặt thư viện cuối cùng bằng câu lệnh pip install webdriver-manager. Bạn đọc hãy lưu ý dấu - trong câu lệnh pip install.
Bước 2: Hiện thực các câu lệnh khởi tạo cho giọng nói tiếng Việt. Các câu lệnh này có thể đặt phía sau câu lệnh khởi tạo Camera ở phần trước, như sau:
1 wikipedia . set_lang (’vi ’)
2 language = ’vi ’
3 path = ChromeDriverManager () . install ()
Chương trình 3.5: Khởi tạo giọng nói tiếng Việt
Bước 3: Hiện thực hàm speak, nhận tham số đầu vào là một chuỗi, và phát âm ra tiếng Việt, như sau:
1 tts = gTTS ( text = text , lang = language , slow = False ) 2 tts . save (" sound . mp3")
3 playsound . playsound (" sound . mp3", True )
4 os . remove (" sound .mp3 ")
Chương trình 3.6: Hiện thực hàm phát âm tiếng Việt
Ở đây, phần phát ra âm tiếng Việt sử dụng thư viện của Google (thư viện gtts - Google Text To Speech). Cuối cùng, chúng ta sẽ gọi hàm này ở cuối hàm face_detect,
Trang 28 The Dariu Foundation
sau khi nhận dạng ra vật thể. Ở lần đầu tiên chạy chương trình, có thể sẽ phải mất thời gian để PyCharm thiết lập môi trường ảo. Sau đó, chương trình sẽ chạy nhanh hơn. Hình ảnh toàn bộ chương trình lúc này của chúng ta như sau:
1 import tensorflow . keras
2 from PIL import Image , ImageOps
3 import numpy as np
4
5 import cv2
6
7 import os
8 import playsound
9 import wikipedia
10 from gtts import gTTS
11 from webdriver_manager . chrome import ChromeDriverManager 12
13 wikipedia . set_lang (’vi ’)
14 language = ’vi ’
15 path = ChromeDriverManager () . install ()
16
17 def speak ( text ) :
18 tts = gTTS ( text = text , lang = language , slow = False ) 19 tts . save (" sound . mp3")
20 playsound . playsound (" sound . mp3", True )
21 os . remove (" sound .mp3 ")
22
23
24 cam = cv2 . VideoCapture (0)
25
26 def capture_image () :
27 ret , frame = cam . read ()
28 cv2 . imwrite (’img_detect .png ’, frame )
29
30
31 def face_detection () :
32 # Disable scientific notation for clarity 33 np . set_printoptions ( suppress = True )
34
35 # Load the model
36 model = tensorflow . keras . models . load_model (’keras_model .h5 ’)
37
38 # Create the array of the right shape to feed into the keras model
39 data = np . ndarray ( shape =(1 , 224 , 224 , 3) , dtype = np . float32 )
40
41 # Replace this with the path to your image 42 image = Image . open (’img_detect . png ’)
43
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 29
44 # resize the image to a 224 x224 with the same strategy as in TM2 :
45 # resizing the image to be at least 224 x224 and then cropping from the center
46 size = (224 , 224)
47 image = ImageOps . fit ( image , size , Image . ANTIALIAS ) 48
49 # turn the image into a numpy array
50 image_array = np . asarray ( image )
51
52 # display the resized image
53 image . show ()
54
55 # Normalize the image
56 normalized_image_array = ( image_array . astype ( np . float32 ) / 127.0) - 1
57
58 # Load the image into the array
59 data [0] = normalized_image_array
60
61 # run the inference
62 prediction = model . predict ( data )
63 print ( prediction )
64
65 name = [" Quynh Anh ", " Phan Phan ", " Anh nen "] 66 index = -1
67 max_value = -1
68 for i in range (0 , len( prediction [0]) ) :
69 if max_value < prediction [0][ i ]:
70 max_value = prediction [0][ i ]
71 index = i
72 print ("Ket Qua: ", name [ index ])
73 print (" Chinh Xac: ", max_value )
74
75 speak ("Xin chao " + name [ index ])
76
77 while True :
78 capture_image ()
79 face_detection ()
Chương trình 3.7: Dự án nhận dạng khuôn mặt - Giọng nói tiếng Việt
Bạn đọc có thể dựa vào dự án này để phát triển thêm nhiều dự án tương tự chẳng hạn như phân loại cà chua đã chín và còn sống, rau sạch và rau đang bị sâu. Độ chính xác của hệ thống sẽ phụ thuộc vào tập dữ liệu nhận dạng. Bạn đọc cần lưu ý khi chọn lọc dữ liệu cho việc huấn luyện, đặc biệt là dữ liệu sai.
Trang 30 The Dariu Foundation
4 Câu hỏi ôn tập
1. Việc nhận dạng khuôn mặt từ Webcam được xây dựng dựa trên ý tưởng nào? A. Nhận dạng trực tiếp từ video của Webcam
B. Tận dụng khả năng tự focus vào khuôn mặt của Webcam
C. Chụp từng hình rồi nhận dạng
D. Tất cả đều sai
2. Thư viện cho việc lấy hình ảnh từ Webcam là gì?
A. webcam2
B. cv2
C. opencv
D. gtts
3. Thư viện cho việc chính cho việc phát ra âm tiếng Việt là gì? A. webcam2
B. cv2
C. opencv
D. gtts
4. Nguyên nhân chính ảnh hưởng đến tốc độ thực thi của chương trình là gì? A. Máy tính cấu hình thấp
B. Camera độ phân giải thấp
C. Môi trường ảo PyCharm có hiệu suất thấp
D. Tất cả các nguyên nhân trên
5. Các ứng dụng tiềm năng của kĩ thuật phân loại hình ảnh là gì? A. Phân biệt cà chua sống và cà chua chín
B. Phân biệt rau sạch và rau bị sâu
C. Phân biệt củ khoai tây tới hạn và khoai tây còn non
D. Tất cả các ứng dụng trên
Đáp án
1. C 2. B 3. D 4. C 5. D
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 31
Trang 32 The Dariu Foundation
Phần II
Nhận dạng âm thanh với Teachable Machine
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 33
CHƯƠNG 4
Huấn luyện âm thanh trên Teachable Machine
1 Giới thiệu
Công cụ thứ 2 trong bộ công cụ Học máy với Google liên quan đến nhận dạng âm thanh. Đây thực sự là một công nghệ rất cập nhật mà Google cung cấp cho chúng ta. Sử dụng công cụ này, chúng ta có thể cho hệ thống nhận dạng những lệnh ngắn, dưới 2 giây, để làm một tác vụ nào đó.
Ban đầu, bạn đọc có thể nghĩ rằng 2 giây là quá ít để ghi âm điều gì đó. Tuy nhiên, đây là công nghệ để xây dựng nên từ lệnh cho các hệ thống nhà thông minh (Google Home) hoặc trợ lý ảo (Google Assistant) trên điện thoại. Khi cần kích hoạt những hệ thống này, bạn thường hay nói "OK Google".
Hiện tại, đa phần các thiết bị điện từ, từ máy tính cho tới tivi thông minh, đều rất ít khi được tắt nguồn hoàn toàn. Nó chỉ ở chế độ chờ (stand by) và sẽ kích hoạt trở lại khi có tín hiệu gửi đến. Do đó, giọng nói theo kiểu ra lệnh sẽ là hướng tiếp cận cho các ứng dụng như vậy.
Bài hướng dẫn này sẽ tập trung vào các mục tiêu sau đây:
• Sử dụng được công cụ Học máy với Google liên quan tới âm thanh • Hiểu được các khái niệm âm thanh nền, âm thanh lệnh
• Huấn luyện và chạy thử nghiệm một hệ thống trí tuệ nhân tạo về âm thanh 2 Huấn luyện hệ thống âm thanh
Học Máy Google đã được xây dựng thành một công cụ trực tuyến. Chúng ta bắt đầu bằng việc vào đường dẫn https://teachablemachine.withgoogle.com/, giao diện sau đây sẽ hiện ra:
Hình 4.1: Trang web online của Học máy Google
Trang 36 The Dariu Foundation
Tại trang web này, chúng ta có thể xem trước một số hình ảnh cũng như video giới thiệu của Google về công nghệ Học máy. Tiếp theo, nhấn vào nút Get Started để bắt đầu, giao diện của công cụ học máy với Google được hiện ra như sau:
Hình 4.2: Công cụ Học máy với Google - Audio Project
Lần này, chúng ta sẽ chọn vào Audio Project để bắt đầu xây dựng hệ thống trí tuệ nhân tạo cho âm thanh. Giao diện sau đây sẽ hiện ra:
Hình 4.3: Giao diện để huấn luyện âm thanh
Bước 1: Cung cấp âm thanh nền
Ở giao diện này, trước khi huấn luyện âm thanh, chúng ta cần phải cung cấp âm thanh nền (Background Noise), hay còn gọi là âm nhiễu. Thực sự đây là điều không dễ dàng vì âm nhiễu thường không thể xác định và cũng không có quy luật. Tuy nhiên đó là trường hợp khi chúng ta muốn phát hiện ra âm khi nói nhỏ. Trong trường hợp nói lớn hơn một chút thì ảnh hưởng của âm nền sẽ giảm đi.
Chúng ta cũng có 2 cách để cung cấp âm thanh nền: Thu âm trực tiếp từ micro hoặc là tải âm nền đã có lên hệ thống huấn luyện. Đối với âm thanh, việc tải một âm có sẵn lên hệ thống sẽ không tối ưu để huấn luyện, đơn giản nó sẽ khác rất nhiều với âm thu từ micro của hệ thống. Với cách thứ nhất, giao diện sau đây sẽ hiện lên như sau:
Mặc định, hệ thống sẽ ghi âm 20 giây cho âm nền. Bạn chỉ cần nhấn vào nút Record for 20 second là hệ thống bắt đầu ghi âm. Trong trường hợp muốn ghi âm nhiều hơn, bạn có thể nhấn vào nút Setting ở bên cạnh để thay đổi.
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 37
Hình 4.4: Cung cấp dữ liệu cho âm thanh nền
Sau khi ghi âm xong, bạn phải nhấn thêm vào nút Extract Sample để phân tách âm nền ra nhiều mẫu âm thanh nhỏ, mỗi âm thanh là 1 giây, như kết quả ở hình bên dưới:
Hình 4.5: Hoàn thành dữ liệu cho âm nền
Tiếp theo, chúng ta sẽ cung cấp âm thanh cho từ lệnh cần huấn luyện. Các thao tác ở bước này hoàn toàn tương tự như âm thanh nền, chỉ khác là lần này chúng ta sẽ thu mỗi 2 giây, và lưu ý là phải nhấn vào nút Extract Sample thì dữ liệu mới được lưu lại cho việc huấn luyện, như minh họa ở hình bên dưới:
Hình 4.6: Cung cấp dữ liệu cho từ khóa Tới
Bước 2: Cung cấp dữ liệu cho từ lệnh
Bạn đọc có thể làm tương tự, để xây dựng hệ thống âm thanh gồm có 4 từ lệnh là Tới, Lui, Trái và Phải. Ở đây, theo kinh nghiệm của chúng tôi, bạn hãy nói từ lệnh khớp trong khung hình 1 giây để việc nhận dạng sau này sẽ chính xác và nhạy hơn. Khác với hình ảnh, âm thanh có sự liên quan giữa dữ liệu trước và sau. Do đó, việc thu từ lệnh ngắn sẽ giảm tải rất nhiều cho hệ thống lúc vận hành. Kết quả cho
Trang 38 The Dariu Foundation
đến bước này sẽ như minh hoạt ở hình bên trên.
Hình 4.7: Toàn bộ hệ thống với 4 từ lệnh Tới, Lui, Trái và Phải
Bước 3: Huấn luyện hệ thống
Nhấn nút Train để bắt đầu huấn luyện tập dữ liệu âm thanh. Sau khi quá trình này kết thúc, bạn đã có thể dùng thử hệ thống, như minh họa ở hình bên dưới:
Hình 4.8: Kiểm tra hệ thống nhận diện âm thanh
3 Xuất kết quả huấn luyện
Tương tự như phần huấn luyện hình ảnh, chúng ta cũng cần phải xuất kết quả huấn luyện ra những định dạng khác để có thể tích hợp vào nhiều nền tảng khác nhau, như lập trình trên Scratch hoặc Python chẳng hạn. Bằng cách nhấn vào nút Export Model, giao diện sau đây sẽ hiện ra:
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 39
Hình 4.9: Tải kết quả huấn luyện lên server Google
Chúng ta sẽ chọn vào mục và chọn Upload (sharable link) và chọn tiếp vào Up load my model như minh họa ở hình bên dưới. Chức năng này sẽ tải toàn bộ kết quả huấn luyện lên server của Google và trả về cho chúng ta một đường dẫn để lập trình trong môi trường Scratch. Khi việc tải lên hoàn tất, màn hình dưới đây sẽ hiện ra và bạn có thể sao chép lại đường dẫn ở mục Your shareable link.
Hình 4.10: Hệ thống đã được tải thành công lên servero Google
Cuối cùng, để có thể sử dụng mô hình vào các ngôn ngữ lập trình cấp cao khác như Python, chúng ta cần phải tải về dưới dạng file và dùng offline. Hướng dẫn cho quá trình này được minh họa như hình bên dưới:
Trang 40 The Dariu Foundation
Hình 4.11: Tải mô hình về dưới dạng file nén
File nén tải về sẽ được sử dụng khi chúng ta lập trình nhận dạng âm thanh bằng Python. Cần lưu ý là với dự án Audio, Google không hỗ trợ định dạng Tensorflow. Do đó, khi sử dụng với ngôn ngữ Python, chúng ta phải chuyển file nén này thêm một bước nữa. Các thao tác này sẽ được hướng dẫn sau.
4 Lưu dự án vào Google drive
Với những hỗ trợ toàn diện từ phía Google, hệ thống AI của bạn có thể được lưu lại trực tuyến trên Google drive. Bằng các trở lại màn hình chính và làm theo 4 bước hướng dẫn ở hình bên dưới như: Chọn Save project to Drive, Đặt tên cho project và cuối cùng nhấn nút Next.
Hình 4.12: Lưu dự án vào Google drive
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 41
5 Mở dự án từ Google drive
Trong trường hợp muốn mở lại dự án cũ để cập nhật hoặc làm tiếp, từ trang chủ của Học Máy Google, chúng ta chọn Open existing project from Drive rồi lựa chọn trong danh sách các dự án đã lưu, như minh họa ở hình bên dưới.
Hình 4.13: Mở dự án từ Google drive
Trang 42 The Dariu Foundation
6 Câu hỏi ôn tập
1. Công cụ huấn luyện âm thanh có tên là gì?
A. Teachable Machine
B. Artificial Intelligence
C. Video Project
D. Audio Project
2. Đối tượng đầu tiên trong công cụ huấn luyện audio là gì?
A. Âm thanh nền (Background Noise)
B. Class 1
C. Class 2
D. Tất cả đều sai
3. Dữ liệu để huấn luận cho hệ thống nhận dạng bằng ảnh có thể được lấy từ nguồn nào?
A. Trực tiếp từ micro của máy tính
B. Tải âm thanh từ máy tính lên
C. Ảnh từ Google Drive của người dùng
D. Tất cả các nguồn âm thanh trên
4. Trong các nguồn âm thanh dưới đây, nguồn âm nào là tốt nhất để huấn luyện hệ thống?
A. Micro của máy tính
B. Tải âm thanh từ máy tính lên
C. Ảnh từ Google Drive của người dùng
D. Không thể so sánh được
5. Đường dẫn trực tuyến của mô hình huấn luyện âm thanh hỗ trợ cho môi trường lập trình nào sau đây?
A. Scratch 2.0
B. Scratch 3.0
C. Python
D. Scratch 3.0 và Python
6. Các từ lệnh trong hệ thống huấn luyện âm thanh có độ dài tốt nhất là: A. 1 giây
B. 2 giây
C. 20 giây
D. Tất cả đều sai
7. Khi huấn luyện âm thanh nền, mặc định hệ thống cần bao nhiêu giây? A. 1 giây
B. 2 giây
C. 20 giây
D. Tất cả đều sai
Đáp án
1. D 2. A 3. D 4. A 5. B 6. A 7. C
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 43
Trang 44 The Dariu Foundation
CHƯƠNG 5
AI và Robot trên Scratch 3.0
1 Giới thiệu
Mô hình huấn luyện với Google có độ tương thích tốt với nhiều hệ thống lập trình, đặc biệt là trong giáo dục. Trong bài hướng dẫn này, chúng ta sẽ kết hợp mô hình huấn luyện Google với Scratch 3.0 phiên bản trực tuyến. Thực ra, Scratch 3.0 đang là mã nguồn mở cho rất nhiều tổ chức và cá nhân tùy biến lại môi trường lập trình của nó, để tích hợp thêm nhiều công cụ mới theo thời đại 4.0.
Trong bài hướng dẫn này, chúng tôi chọn Scratch 3.0 được phát triển bởi học viện MIT, với những tích hợp sẵn về Học máy với Google và Robot sử dụng mạch Mi crobit. Chúng ta sẽ viết một chương trình điều khiển bằng giọng nói để điều khiển việc di chuyển của một Robot ảo trên môi trường lập trình và thậm chí là một robot thật. Các mục tiêu của bài hướng dẫn này như sau:
• Làm quen với môi trường Scratch 3.0 trực tuyến của MIT
• Tìm hiểu và áp dụng công cụ Học máy với Google
• Kết nối với Robot Microbit
• Viết chương trình tổng hợp các công nghệ trên
2 Scratch 3.0 trực tuyến
Lý do chính để chúng tôi giới thiệu với bạn độc về phần mềm trực tuyến là vì các hỗ trợ thêm của nó về các công nghệ mới liên quan đến Robot và Trí tuệ nhân tạo. Để bắt đầu, chúng ta sẽ vào đường dẫn sau đây:
https://mitmedialab.github.io/prg-extension-boilerplate/httyr/ Giao diện về phần mềm Scratch 3.0 sẽ được hiện ra như sau:
Hình 5.1: Giao diện lập trình Scratch 3.0 trực tuyến
Điều khác biệt đầu tiên là giao diện này sẽ truy cập trực tiếp vào webcam và cả micro của máy tính. Do đó, trong lần đầu mở lên, sẽ có thông báo để người dùng cho phép quyền truy cập vào thiết bị này. Trong trường hợp bạn lỡ tay không cho phép, chỉ cần tắt trang web này đi và truy cập lại lần nữa. Hiện tại, trang lập trình
Trang 46 The Dariu Foundation
trực tuyến này hỗ trợ tốt nhất trên trình duyệt Chrome.
Thứ 2, bên cạnh những khối lập trình cơ bản của Scratch 3.0, giao diện lập trình này tự động thêm vào 2 khối lập trình mới, là Cảm biến Video và Microbit Robot, như minh họa ở hình bên dưới:
Hình 5.2: Các câu lệnh liên quan tới Trí tuệ nhân tạo và Robot
Đây là những cập nhật rất mới, giúp chúng ta tiếp cận với công nghệ trí tuệ nhân tạo cũng như Robotics. Thuật ngữ Cảm biến Video thực chất là Học máy với Google mà chúng ta đã huấn luyện ở các bài trước.
3 Trí tuệ nhân tạo trên Scratch 3.0
3.1 Kích hoạt trí tuệ nhân tạo
Với tiêu chí lập trình đơn giản, Scratch 3.0 hỗ trợ tích hợp hệ thống Trí tuệ nhân tạo chỉ với 1 câu lệnh là use model, với tham số là đường link của hệ thống mà bạn đã huấn luyện ở bài trước. Chúng ta hãy bắt đầu với sự kiện lá cờ màu xanh, như minh họa ở hình bên dưới:
Hình 5.3: Liên kết với mô hình trí tuệ nhân tạo
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 47
Ở đây, chúng tôi xài mô hình đã được huấn luyện sẵn và lưu trữ ở đường dẫn sau đây, với 4 từ khóa là Tới, Lui, Trái và Phải đã được huấn luyện:
https://teachablemachine.withgoogle.com/models/NRghmyzXL/
Một đặc điểm vô cùng thuận tiện là bạn có thể huấn luyện lại mô hình này và đường dẫn của nó vẫn không thay đổi. Bạn hãy nhấn vào lá cờ để thực thi câu lệnh này. Khi câu lệnh này thực thi, bạn sẽ thấy hình ảnh trên giao diện bị dừng lại một chút. Khoảng dừng này là để tải mô hình huấn luyện này về máy. Đây là điều quan trọng để chúng ta bước sang phần thứ 2.
3.2 Bắt đầu việc nhận dạng
Khi câu lệnh ở phần trên được thực thi thành công, câu lệnh tiếp theo mới có thể được sử dụng. Các đối tượng được huấn luyện lúc này mới xuất hiện trong tùy chọn của câu lệnh, như minh họa ở hình bên dưới:
Hình 5.4: Các đối tượng được huấn luyện xuất hiện trong tùy chọn
Trong trường hợp mà câu lệnh của bạn chưa đúng với mong muốn, hãy kiên nhẫn khoảng 5 giây rồi nhấn vào lá cờ màu xanh để liên kết lại. Cuối cùng, một chương trình gợi ý cho việc di chuyển của Robot bằng giọng nói sẽ như sau:
Trang 48 The Dariu Foundation
Hình 5.5: Điều khiển di chuyển của Robot bằng giọng nói
Đến đây, bạn có thể thử nói để điều khiển Robot di chuyển. Trong trường hợp cảm thấy việc nhận dạng không tốt, bạn đọc có thể huấn luyện lại mô hình.
4 Kết nối với Robot Microbit
Scratch 3.0 hỗ trợ kết nối với một Robot sử dụng mạch Microbit qua kết nối Blue tooth. Chuẩn kết nối Bluetooth 4.0 này sẽ đặt biệt hơn nhiều so với kết nối cũ: bạn không cần phải ghép đôi 2 thiết bị. Thoạt nhìn ban đầu, bạn sẽ nghĩ điều này không bảo mật. Tuy nhiên, mức độ bảo mật của nó cao hơn rất nhiều và chỉ có thể kết nối được bằng phần mềm chuyên dụng. Thêm nữa, cơ chế giao tiếp mới cho phép việc gửi dữ liệu không dây xa hơn và ổn định hơn.
Để kết nối với Robot, chúng ta sẽ nhấn vào nút Connect Robot sau đó chọn và danh sách tên của Robot và nhấn nút Pair, như hướng dẫn bên dưới:
Hình 5.6: Kết nối với Robot Microbit
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 49
Lưu ý: Khi vừa khởi động Robot, tên của nó sẽ xuất hiện trên màn hình 25 đèn. Bạn hãy ghi lại tên của nó để kết nối cho đúng trong trường hợp có nhiều Robot xuất hiện trong danh sách.
Cuối cùng, chúng ta sẽ bổ sung thêm các lệnh di chuyển liên quan đến Robot, để một Robot thật có thể di chuyển mỗi khi chúng ta ra lệnh bằng giọng nói. Gợi ý chương trình cho bạn đọc sẽ như sau:
Hình 5.7: Thêm các câu lệnh di chuyển cho Robot
Tất nhiên, việc di chuyển của Robot có chính xác hay không phụ thuộc rất nhiều vào kết cấu cơ khí của nó. Ở đây, chúng tôi chỉ tinh chỉnh việc di chuyển của nó bằng yếu tố thời gian. Ý nghĩa ở đây là robot sẽ xoay trái trong 0.1 giây, và chúng ta mong đợi là sau 0.1 giây, nó sẽ hướng về bên trái. Những sai số chắc chắn sẽ có và sẽ thay đổi. Chỉ với những cơ khí Robot phức tạp mới có những cảm biến, ví dụ như la bàn, hay cảm biến góc xoay, thì lúc đó nó mới có thể di chuyển chính xác được.
Chương trình minh họa trong bài hướng dẫn này chủ yếu để bạn đọc có thể nắm được kiến trúc của toàn hệ thống. Thực ra, việc xử lý trí tuệ nhân tạo sẽ được xử lý trên máy tính và gửi dữ liệu Bluetooth tới mạch Microbit. Dựa trên kiến trúc này, không phải là một Robot, mà là một thiết bị thông minh, chẳng hạn như đèn hay quạt, có thể điều khiển được thông qua giọng nói.
Trang 50 The Dariu Foundation
CHƯƠNG 6
Tích hợp Micro để nhận dạng âm thanh trên Python
1 Giới thiệu
Trong bài hướng dẫn này, chúng ta sẽ sử dụng kết quả huấn luyện ở bài trước và hiện thực một chương trình nhận dạng âm thanh bằng ngôn ngữ Python. Tương tự như bài toán ở chương 3 , trong bài này, chúng ta sẽ lấy audio động từ Micro có sẵn trên máy tính. Ý tưởng ở đây là định kì ghi âm 2s rồi mới nhận dạng. Quá trình này sẽ diễn ra liên tục cho đến khi hệ thống bị tắt hoặc dừng lại. Khi nhận dạng thành công một đối tượng đã được huấn luyện, kết quả sẽ được xuất ra màn hình.
Tuy nhiên việc nhận dạng âm thanh là tương đối phức tạp so với việc nhận dạng hình ảnh, cụ thể ở các điểm như sau:
1. Khác với hệ thống nhận diện hình ảnh, Teachable Machine không cung cấp sẵn các đoạn lệnh phục vụ cho việc nhận dạng âm thanh trên python. Do đó, chúng ta cần phải hiểu được mô hình và tự đưa dữ liệu vào.
2. Đối với hệ thống nhận diện hình ảnh, chúng ta đơn giản chỉ cần đưa một bức hình vào mô hình là nó có thể nhận dạng được ngay. Còn đối với âm thanh, do một số đặc thù về tính chất nên chúng ta cần phải thực hiện thêm nhiều thao tác tiền xử lý dữ liệu. Mục đích để dữ liệu đầu vào được tốt hơn, từ đó mô hình có thể dự đoán chính xác hơn.
3. Ngoài ra, mô hình kết quả của hệ thống nhận diện âm thanh trên Teachble machine chỉ hỗ trợ cho ngôn ngữ web (.json) mà không hỗ trợ cho ngôn ngữ Python. Nên chúng ta cần phải thêm một bước chuyển đổi mô hình về đúng dạng file ".h5" để các thư viện trên Python có thể hiểu và chạy được.
Các kĩ năng chính của bài hướng dẫn này được tóm tắt như sau: • Thêm thư viện - Cài đặt thư viện cho dự án.
• Đóng gói chương trình thành hàm.
• Tích hợp ghi âm từ Micro.
2 Tích hợp Micro
Bước 1: Thêm thư viện sounddevice và thư viện write từ scipy.io.wavfile và thực hiện hàm recordAudio, như gợi ý sau đây:
1 import sounddevice
2 from scipy . io . wavfile import write
3
4 def recordAudio () :
5 fs = 44100
6 seconds = 2
7 print ("Bat dau")
8 myrecording = sounddevice . rec (int( seconds * fs ) , samplerate = fs , channels =2)
9 sounddevice . wait ()
Trang 52 The Dariu Foundation
10 print ("Ket thuc ")
11 write (’audio . wav ’, fs , myrecording )
Chương trình 6.1: "Thêm các thư viện cần thiết để tiến hành thu âm từ Micro"
Nếu bạn chưa có thư viện sounddevice và scipy.io.wavfile thì bạn có thể cài nó bằng cách rê chuột vào tên thư viện trong câu lệnh import, gợi ý cài đặt sẽ được PyCharm hiện ra.
Tiếp theo, hàm recordAudio() sẽ được thực thi như sau:
• Đầu tiên chúng ta phải cung cấp thông tin về tần số lấy mẫu (số lần lấy mẫu trên một giấy, có đơn vị là Hz) thông qua biến fs. Và thời gian ghi âm (giây) thông qua biến seconds.
• Trước khi bắt đầu ghi ấm, chương trình sẽ xuất hiện dòng chữ "Bat dau" để bạn biết được khi nào bắt đầu ghi âm. Và chờ đến khi việc ghi âm hoàn tất thì thông báo cho người dùng biết bằng cách hiển thị dòng "Ket thuc" ra màn hình.
• Cuối cùng là lưu đoạn ghi âm đó lại dưới tên audio.wav.
Bước 2: Tiền xử lý dữ liệu:
Không đơn giản như dữ liệu cho hệ thống nhận diện hình ành, đoạn audio thu được ở Bước 1 được biểu diễn dưới dạng biên độ dao động theo miền thời gian (như hình 6.1). Đối với dạng dữ liệu này thì mô hình không thể đọc và phân loại được. Cho nên, chúng ta cần áp dụng biến đổi Fourier để chuyển đổi dữ liệu về miền tần số trước khi đưa dữ liệu vào mô hình để nhận diện.
Ngoài ra, do đặc tính của âm thanh mà dữ liệu rất dễ bị nhiễu. Điều đó làm cho mô hình nhận diện âm thanh khó có thể nhận diện một cách chính xác được. Vậy nên, trong quá trình chuyển đổi dữ liệu về miền tần số, chúng ta phải áp dụng một số kỹ thuật tiền xử lý tín hiệu âm thanh để lọc nhiễu và làm cho dữ liệu thu được tốt hơn.
Hình 6.1: Dữ âm thanh được biểu diễn dựa trên biên độ theo thời gian
Sau đây là đoạn chương trình dùng để tiền xử lý dữ liệu như lọc nhiễu âm thanh, tách phần âm im lặng ra khỏi đoạn audio và chuyển đổi dữ liệu về miền tần số.
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 53
1 def read_mfcc ( input_filename ) :
2 sample_rate , audio = wf . read ( input_filename ) 3 audio = ( audio [: , 0] + audio [: , 1]) / 2 # Convert to Mono
4 energy = np .abs ( audio )
5 silence_threshold = np . percentile ( energy , 95) 6 offsets = np . where ( energy > silence_threshold ) [0] 7
8 vad = VoiceActivityDetection ()
9 vad . process ( audio )
10 voice_samples = vad . get_voice_samples ()
11 audio_voice_only = voice_samples
12
13 mfcc = mfcc_fbank ( audio_voice_only , sample_rate ) 14 return mfcc
15
16
17 # Apply to remove silence
18 class VoiceActivityDetection :
19
20 def __init__ ( self ) :
21 self . __step = 160
22 self . __buffer_size = 160
23 self . __buffer = np . array ([] , dtype = np . int16 ) 24 self . __out_buffer = np . array ([] , dtype = np . int16 ) 25 self . __n = 0
26 self . __VADthd = 0.
27 self . __VADn = 0.
28 self . __silence_counter = 0
29
30 def vad ( self , _frame ) :
31 frame = np . array ( _frame ) ** 2.
32 result = True
33 threshold = 0.1
34 thd = np . min ( frame ) + np . ptp ( frame ) * threshold 35 self . __VADthd = ( self . __VADn * self . __VADthd + thd ) / float ( self . __VADn + 1.)
36 self . __VADn += 1.
37
38 if np . mean ( frame ) <= self . __VADthd :
39 self . __silence_counter += 1
40 else :
41 self . __silence_counter = 0
42
43 if self . __silence_counter > 20:
44 result = False
45 return result
46
47 # Push new audio samples into the buffer . Trang 54 The Dariu Foundation
48 def add_samples ( self , data ) :
49 self . __buffer = np . append ( self . __buffer , data ) 50 result = len( self . __buffer ) >= self . __buffer_size 51 return result
52
53 # Pull a portion of the buffer to process 54 # ( pulled samples are deleted after being 55 # processed
56 def get_frame ( self ) :
57 window = self . __buffer [: self . __buffer_size ] 58 self . __buffer = self . __buffer [ self . __step :] 59 return window
60
61 # Adds new audio samples to the internal
62 # buffer and process them
63 def process ( self , data ) :
64 if self . add_samples ( data ) :
65 while len ( self . __buffer ) >= self . __buffer_size : 66 # Framing
67 window = self . get_frame ()
68 # print ( ’ window size %i ’% window . size ) 69 if self . vad ( window ) : # speech frame 70 self . __out_buffer = np . append ( self . __out_buffer , window )
71 # print ( ’ __out_buffer size %i ’% self . __out_buffer . size )
72
73 def get_voice_samples ( self ) :
74 return self . __out_buffer
75
76
77 def pad_mfcc ( mfcc , max_length ) : # num_frames , nfilt =64. 78 if len( mfcc ) < max_length :
79 mfcc = np . vstack (( mfcc , np . tile ( np . zeros ( mfcc . shape [1]) , ( max_length - len( mfcc ) , 1) ) ) )
80 return mfcc
81
82
83 def mfcc_fbank ( signal : np . array , sample_rate : int) : # 1D signal array .
84 # Returns MFCC with shape ( num_frames , n_filters , 3). 85 filter_banks , energies = fbank ( signal , samplerate = sample_rate , nfilt = NUM_FBANKS )
86 frames_features = normalize_frames ( filter_banks ) 87 return np . array ( frames_features , dtype = np . float32 ) # Float32 precision is enough here .
88
89
90 def normalize_frames (m , epsilon =1 e -12) :
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 55
91 return [( v - np . mean ( v )) / max( np . std ( v ) , epsilon ) for v in m ]
Chương trình 6.2: Đoạn chương trình hỗ trợ việc đọc và tiền xử lý dữ liệu
Bởi vì đoạn chương trình trên dùng khá nhiều kỹ thuật phức tạp liên quan đến xử lý tín hiệu, các phép toán học máy để tiền xử lý dữ liệu. Để có thể hiểu được hết các kỹ thuật này, đòi hỏi phải nắm vững kiến thức về học máy, mô hình học máy cũng như sử dụng thuần thục các thư viện tính toán trong Python.
Do đó, trong phạm vi của bài viết này, chúng ta sẽ không đi sâu vào tìm hiểu chi tiết các kỹ thuật đó được hiện thực như thế nào. Mà chỉ cần nắm được cách gọi hàm để tiền xử lý dữ liệu và chuyển đổi dữ liệu về đúng định dạng để mô hình nhận diện âm thanh có thể nhận diện được.
Bạn chỉ cần gọi hàm read_mfcc() với tham số truyền vào chính là đường dẫn đến file audio mà chúng ta cần xử lý dữ liệu. Gán kết quả trả về vào một biến cụ thể để bước tiếp theo có thể dễ dàng truyền dữ liệu vào mô hình.
1 audio = read_mfcc (" audio . wav ")
Chương trình 6.3: Câu lệnh tiền xử lý dữ liệu
Và dữ liệu nhận được sẽ như sau:
Hình 6.2: Kết quả dữ liệu âm thanh sau khi đã qua bước tiền xử lý
Còn đây là dữ liệu khi chúng ta đưa vào để xây dựng hệ thống nhận diện âm thanh trên Teachable Machine. Có thể thấy, hình ảnh về dữ liệu sau khi thực hiện lệnh read_mfcc() và hình ảnh trên Teachble Machine khá tương đồng với nhau. Tất cả đều được biểu diễn dưới dạng tần số.
Trang 56 The Dariu Foundation
Hình 6.3: Dữ liệu khi huấn luyện mô hình nhận dạng âm thanh Bước 3: Load mô hình nhận dạng âm thanh từ Teachable Machine
Hiện tại, TensorFlow chính là thư viện mã nguồn mở cho các dự án về trí tuệ nhân tạo nổi tiếng nhất thế giới, được phát triển bởi các nhà nghiên cứu từ Google. Thư viện này giúp việc tiếp cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn nhiều.
Bên cạnh đó, ở chương trình mẫu từ trang chủ Học máy với Google cho hệ thống hệ thống nhận diện hình ảnh ở chương 3 cũng sử dụng thư viện TensoFlow này. Và mô hình được dùng để tích hợp với Tensorflow trong mô hình có kiểu .h5, cụ thể là keras_model.h5.
Tuy nhiên, mô hình kết quả của hệ thống nhận diện âm thanh từ Teachable Ma chine lại có kiểu là .json, một kiểu dữ liệu hỗ trợ lập trình trên nền tảng web. Do vậy, để có thể sử dụng được mô hình nhận diện âm thành này, chúng ta cần phải cài đặt và thêm một thư viện có tên là tensorflowjs vào chương trình. Cách cài đặt được thực hiện tương tự như các thao tác cài đặt thư viện ở các bước trên.
Sau đó, chúng ta chép cả 3 file: metadata.json, model.json và weights.bin đã tải ở bài trước vào cùng thư mục với file main.py. Kết quả của bước này, chúng ta sẽ có thêm các thư viện cùng cấp với file main.py, như minh họa ở hình 6.4:
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 57
Hình 6.4: Chép các file của mô hình nhận diện âm thanh vào cùng thư mục
Sau đây là đoạn lệnh mẫu để tải mô hình có kiểu .json vào chương trình:
1 import tensorflowjs
2 model = tensorflowjs . converters . load_keras_model (" model . json ")
Chương trình 6.4: Tải mô hình nhận diện âm thanh vào chương trình Bước 4: Đưa dữ liệu về đúng kích thước đầu vào của mô hình
Sau khi đã chuyển đổi dữ liệu về dạng tần số ở bước 2. Để mô hình có thể nhận diện được, chúng ta còn còn cần phải đưa dữ liệu về đúng kích thước dữ liệu đầu vào của mô hình.
Để tìm được đúng kích thước của dữ liệu đầu vào, chúng ta phải xem tóm lược các thông số của mô hình nhằm tìm ra được các dữ liệu cần thiết phục vụ cho bài toán. Cụ thể ta sẽ tải mô hình lên theo cách ở bước 3 và dùng hàm summary() kết hợp với hàm print() để hiển thị các thông số của mô hình:
1 import tensorflowjs
2 model = tensorflowjs . converters . load_keras_model (" model . json ")
3 print ( model . summary () )
Chương trình 6.5: Các thông số của
Trong phần kết quả hiển thị ra màn hình, chúng ta chỉ cần quan tâm đến giá trị "Output Shape" ở dòng "InputLayer" được khoanh đỏ như trong hình 6.6. None có nghĩa là giá trị nào cũng được nhưng thường khi chuyển đổi, ta hay để giá trị là 1.
Trang 58 The Dariu Foundation
Hình 6.5: Một phần kết quả hiển thị sau khi thực hiện câu lệnh summary()
Giả sử chúng ta đã có đoạn code tiền xử lý dử liệu ở bước 2, và chỉ cần gọi hàm read_mfcc() để thực hiện việc tiền xử lý dữ liệu. Sau đó, để chuyển đổi kích thước của file audio và lưu kết quả nhận được vào biến batch. Chúng ta hiện thực như sau:
1 import numpy as np
2
3 audio = read_mfcc (" audio . wav ")
4 print ( audio . shape )
5
6 input_data = np . expand_dims ( audio [: LENGTH ] , -1) 7 batch = np . empty ((1 , 43 , 232 , 1) , dtype = np . float32 ) 8 batch [0] = input_data
9 print ( batch . shape ) ;
Chương trình 6.6: Các thông số của
Trong đoạn code trên, chúng ta dùng thêm hàm print() kết hợp với shape để xem kích thước trước và sau khi chuyển đổi của file audio. Kết quả được hiển thị như sau:
Hình 6.6: Kích thước của file audio trước và sau khi chuyển đổi
Dòng đầu tiên là kích thước của file audio trước khi chuyển đổi. Dòng thứ hai là kích thước của file audio sau khi chuyển đổi. So sánh với kích thước đầu vào mà mô hình yêu cầu ở hình 6.6, chúng ta có thể thấy 2 kích thước đã khớp với nhau. Tới đây chúng ta đã có thể đưa dữ liệu vào mô hình để mô hình nhận ra kết quả.
Bước 5: Hiện thực thêm chương trình thực thi, gồm 2 bước là ghi âm và nhận dạng, như sau:
1 import sounddevice
2 import tensorflowjs
3 from scipy . io . wavfile import write
4 import scipy . io . wavfile as wf
5 import numpy as np
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 59
6 from python_speech_features import fbank
7
8 LENGTH = 43
9 NUM_FBANKS = 232
10 EXT = ’wav ’
11
12 def recordAudio () :
13 fs = 44100 # Sample rate
14 seconds = 2 # Duration of recording
15 print (" start ")
16 myrecording = sounddevice . rec (int( seconds * fs ) , samplerate = fs , channels =2)
17 sounddevice . wait () # Wait until recording is finished 18 print (" finish ")
19 write (’audio . wav ’, fs , myrecording ) # Save as WAV file 20
21 def read_mfcc ( input_filename ):
22 sample_rate , audio = wf . read ( input_filename ) 23 audio = ( audio [: , 0] + audio [: , 1]) / 2 # Convert to Mono
24 energy = np .abs ( audio )
25 silence_threshold = np . percentile ( energy , 95) 26 offsets = np . where ( energy > silence_threshold ) [0] 27
28 vad = VoiceActivityDetection ()
29 vad . process ( audio )
30 voice_samples = vad . get_voice_samples ()
31 audio_voice_only = voice_samples
32
33 mfcc = mfcc_fbank ( audio_voice_only , sample_rate ) 34 return mfcc
35
36
37 # Apply to remove silence
38 class VoiceActivityDetection :
39
40 def __init__ ( self ) :
41 self . __step = 160
42 self . __buffer_size = 160
43 self . __buffer = np . array ([] , dtype = np . int16 ) 44 self . __out_buffer = np . array ([] , dtype = np . int16 ) 45 self . __n = 0
46 self . __VADthd = 0.
47 self . __VADn = 0.
48 self . __silence_counter = 0
49
50 def vad ( self , _frame ) :
51 frame = np . array ( _frame ) ** 2.
52 result = True
Trang 60 The Dariu Foundation
53 threshold = 0.1
54 thd = np . min ( frame ) + np . ptp ( frame ) * threshold 55 self . __VADthd = ( self . __VADn * self . __VADthd + thd ) / float ( self . __VADn + 1.)
56 self . __VADn += 1.
57
58 if np . mean ( frame ) <= self . __VADthd :
59 self . __silence_counter += 1
60 else :
61 self . __silence_counter = 0
62
63 if self . __silence_counter > 20:
64 result = False
65 return result
66
67 # Push new audio samples into the buffer . 68 def add_samples ( self , data ) :
69 self . __buffer = np . append ( self . __buffer , data ) 70 result = len( self . __buffer ) >= self . __buffer_size 71 # print (’ __buffer size %i ’% self . __buffer . size ) 72 return result
73
74 # Pull a portion of the buffer to process 75 # ( pulled samples are deleted after being 76 # processed
77 def get_frame ( self ) :
78 window = self . __buffer [: self . __buffer_size ] 79 # print ( self . __buffer )
80 self . __buffer = self . __buffer [ self . __step :] 81 # print (’ __buffer size %i ’% self . __buffer . size ) 82 return window
83
84 # Adds new audio samples to the internal
85 # buffer and process them
86 def process ( self , data ) :
87 if self . add_samples ( data ) :
88 while len ( self . __buffer ) >= self . __buffer_size : 89 # Framing
90 window = self . get_frame ()
91 # print ( ’ window size %i ’% window . size ) 92 if self . vad ( window ) : # speech frame 93 self . __out_buffer = np . append ( self . __out_buffer , window )
94 # print ( ’ __out_buffer size %i ’% self . __out_buffer . size )
95
96 def get_voice_samples ( self ) :
97 return self . __out_buffer
98
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 61
99
100 def pad_mfcc ( mfcc , max_length ) : # num_frames , nfilt =64. 101 if len ( mfcc ) < max_length :
102 mfcc = np . vstack (( mfcc , np . tile ( np . zeros ( mfcc . shape [1]) , ( max_length - len( mfcc ) , 1) ) ) )
103 return mfcc
104
105
106 def mfcc_fbank ( signal : np . array , sample_rate : int) : # 1D signal array .
107 # Returns MFCC with shape ( num_frames , n_filters , 3). 108 filter_banks , energies = fbank ( signal , samplerate = sample_rate , nfilt = NUM_FBANKS )
109 frames_features = normalize_frames ( filter_banks ) 110 # delta_1 = delta ( filter_banks , N =1)
111 # delta_2 = delta ( delta_1 , N =1)
112 # frames_features = np. transpose (np. stack ([ filter_banks , delta_1 , delta_2 ]) , (1 , 2 , 0))
113 return np . array ( frames_features , dtype = np . float32 ) # Float32 precision is enough here .
114
115
116 def normalize_frames (m , epsilon =1 e -12) :
117 return [( v - np . mean ( v )) / max( np . std ( v ) , epsilon ) for v in m ]
118
119 def audio_detection () :
120 audio = read_mfcc (" audio . wav ")
121 model = tensorflowjs . converters . load_keras_model (" model . json ")
122 input_data = np . expand_dims ( audio [: LENGTH ] , -1) 123 batch = np . empty ((1 , 43 , 232 , 1) , dtype = np . float32 ) 124 batch [0] = input_data
125
126 prediction = model . predict ( batch )
127 name = [" Tap am", "Tam Bang ", " Nhan le"]
128 index = -1
129 max_value = -1
130 for i in range (0 , len( prediction [0]) ) :
131 if max_value < prediction [0][ i ]:
132 max_value = prediction [0][ i ]
133 index = i
134
135 print ("Ket Qua: ", name [ index ])
136 print (" Chinh Xac: ", max_value )
137
138 while ( True ):
139 recordAudio ()
Trang 62 The Dariu Foundation
140 audio_detection ()
Chương trình 6.7: Hoàn thiện chương trình
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 63
3 Câu hỏi ôn tập
1. Việc nhận dạng âm thanh từ Micro được xây dựng dựa trên ý tưởng nào? A. Nhận dạng trực tiếp âm thanh từ micro.
B. Ghi âm từng đoạn âm thanh với thời gian cho trước rồi nhận dạng. C. Ghi âm một đoạn âm thanh bất kỳ với thời gian bất kỳ.
D. Tất cả đều sai
2. Thư viện cho việc thu âm từ Micro và ghi dữ liệu xuống máy tính là gì? A. webcam2
B. cv2
C. sounddevice
D. sounddevice và thư viện write từ scipy.io.wavfile
3. Thư viện cho việc tải mô hình nhận dạng âm thanh từ Teachable Machine là gì?
A. tensorflow
B. keras
C. tensorflowjs
D. numpy
4. Tại sao chúng ta cần tiền xử lý dữ liệu âm thanh trước khi đưa vào mô hình? A. Dữ liệu âm thanh thường bị nhiễu.
B. Dữ liệu âm thanh thu được có chất lượng kém
C. Dữ liệu âm thanh không phù hợp với mô hình nhận dạng âm thanh. D. Tất cả đều đúng.
5. Nguyên nhân chính ảnh hưởng đến tốc độ thực thi của chương trình là gì? A. Máy tính cấu hình thấp
B. Micro thu âm dữ liệu không tốt
C. Môi trường ảo PyCharm có hiệu suất thấp
D. Tất cả các nguyên nhân trên
6. Để xem kích thước dữ liệu đầu vào của một mô hình chúng ta dùng lệnh print() kết hợp với lệnh nào?
A. summary()
B. predict()
C. sum()
D. range()
7. Để mô hình có thể tính toán và nhận dạng được dữ liệu đầu vào, chúng ta dùng lệnh nào?
A. summary()
B. predict()
C. sum()
D. range()
Đáp án
1. B 2. B 3. C 4. D 5. C 6. A 7. B
Trang 64 The Dariu Foundation
Phần III
Khoa học dữ liệu
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 65
CHƯƠNG 7
Khoa học Dữ liệu cùng Python
1 Giới thiệu
Thế giới đang trải qua cuộc cách mạng công nghiệp 4.0 với đặc trưng là Dữ liệu lớn (Big data), Trí tuệ nhân tạo (AI), Internet vạn vật (IoT), Điện toán đám mây (Cloud computing) và đặc biệt là Khoa học dữ liệu (Data Science). Hiểu một cách đơn giản, Khoa học dữ liệu là khoa học về việc quản trị và phân tích dữ liệu, trích xuất các giá trị từ dữ liệu để tìm ra các hiểu biết, các tri thức hành động, các quyết định dẫn dắt hành động. Mục đích chính của khoa học dữ liệu là biến đổi một lượng lớn dữ liệu chưa qua xử lý, làm thế nào để định vị được thành mô hình kinh doanh, từ đó giúp đỡ các tổ chức tiết giảm chi phí, gia tăng hiệu quả làm việc, nhìn nhận cơ hội, rủi ro trên thị trường và làm gia tăng lợi thế cạnh tranh của doanh nghiệp.
Khoa học dữ liệu gồm có ba phần chính: Tạo ra và quản trị dữ liệu, phân tích dữ liệu và chuyển kết quả phân tích thành giá trị của hành động. Việc phân tích và dùng dữ liệu lại dựa vào ba nguồn tri thức: toán học (thống kê toán học), công nghệ thông tin (máy học) và tri thức của lĩnh vực ứng dụng cụ thể.
Trong lĩnh vực công nghệ thông tin, mặc dù có rất nhiều ngôn ngữ lập trình cao cấp, Python vẫn là ngôn ngữ lập trình tiêu biểu đối với các chuyên gia làm việc trong lĩnh vực khoa học dữ liệu (Data Science). Nhu cầu ngày càng tăng đối với các Nhà khoa học dữ liệu có tay nghề cao trong ngành công Nghệ Thông Tin và Python đã phát triển như ngôn ngữ lập trình ưa thích nhất. Với sự trợ giúp của hướng dẫn này về Python cho khoa học dữ liệu, bạn sẽ hiểu tại sao Python được coi là ngôn ngữ ưa thích nhất.
Tại sao sử dụng Python cho Khoa học Dữ liệu? Vì sự sẵn có của nhiều thư viện Khoa học dữ liệu / Phân tích dữ liệu như Pandas, StatsModels, NumPy, SciPy và Scikit-Learn, là một số thư viện nổi tiếng có sẵn cho những người tham gia trong cộng đồng Khoa học dữ liệu.
2 Thư viện thường được sử dụng
2.1 Numpy
NumPy là một thư viện Python cơ bản dành cho khoa học điện toán. Nó đi kèm với sự hỗ trợ cho một đối tượng mảng N-Chiều mạnh mẽ và các chức năng broad casting.
Mục đích của thư viện NumPy:
• Mục đích chính: Dành cho Học máy.
• Mục đích phụ: Biểu thị hình ảnh, sóng âm thanh dưới dạng một mảng các số thực trong mảng N chiều, binary raw stream.
2.2 Pandas
Pandas cung cấp các cấu trúc dữ liệu có ý nghĩa, nhanh chóng và linh hoạt. Pandas nhằm mục đích thực hiện phân tích dữ liệu trong thế giới thực bằng Python. Một
Trang 68 The Dariu Foundation
Hình 7.1: Thư viện Numpy trong Python.
trong những tính năng mạnh mẽ nhất của Pandas là đơn giản hóa các thao tác dữ liệu phức tạp chỉ bằng một hoặc hai lệnh. Ngoài ra, thư viện này có rất nhiều các phương thức tích hợp dành cho kết hợp, lọc và nhóm dữ liệu. Nó cũng có tính năng time-series.
Hình 7.2: Thư viện Pandas trong Python.
Mục đích chính: Phân tích dữ liệu trong thế giới thực thành dữ liệu có ích.
Điểm nổi bật của thư viện Pandas:
• Khả năng thực hiện các loại thao tác tùy chỉnh.
• Đảm bảo rằng toàn bộ quá trình thao tác dữ liệu dễ dàng hơn.
• Cung cấp chức năng và tính linh hoạt cao khi được sử dụng với các công cụ và thư viện Python khác.
• Có thể chọn đầu ra phù hợp nhất cho phương thức áp dụng. • Hỗ trợ các phép gộp, ghép, lặp, lập chỉ mục lại và các thao tác trực quan hóa.
2.3 Matplotlib
Matplotlib là một thư viện mô phỏng hai chiều cho ngôn ngữ lập trình Python. Nó có khả năng tạo ra các số liệu có giá trị cao và môi trường đa nền tảng tương tác. Theo trang web chính thức của Matplotlib mô tả thư viện Python này cố gắng
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 69
"Làm những thứ dễ dàng thành dễ làm và những thứ khó khăn thành những thứ có thể". Thư viện này cho phép tạo biểu đồ thanh, biểu đồ lỗi, biểu đồ phân tán... với ít dòng code hơn.
Hình 7.3: Thư viện Matplotlib trong Python.
Mục đích của thư viện Matplotlib:
• Mục đích chính: Vẽ đồ thị 2D.
• Mục đích phụ: Trực quan hóa dữ liệu.
Điểm nổi bật của Matplotlib:
• Kiểm soát hoàn toàn các thuộc tính trục, thuộc tính phông chữ, kiểu đường kẻ, v.v. thông qua interface hướng đối tượng.
• Thư viện huyền thoại cho sơ đồ phân tán.
• Hỗ trợ trục x / y thứ cấp.
• Hoạt động rất tốt với một số hệ thống đồ họa và hệ điều hành.
2.4 SciPy
SciPy là thư viện Python đi kèm với một lượng module cho đại số tuyến tính, và số liệu thống kê. Các nguồn mở thư viện Python cho phép các lập trình viên và kỹ sư làm việc với biến đổi Fourier, ODE solvers, xử lý tín hiệu và xử lý ảnh... NumPy arrays được dùng như một cấu trúc dữ liệu cơ bản của SciPy. Tất cả các chức năng cung cấp bởi các module con của SciPy cũng có tài liệu rất tốt. Do đó, rất dễ dàng để bắt đầu với thư viện máy học này.
Mục đích của thư viện SciPy:
• Mục đích chính: Học máy, nghiên cứu khoa học.
• Mục đích phụ: Giải Quyết toán học chức năng.
Điểm nổi bật của thư viện SciPy:
• Dễ xử lý các hoạt động toán học.
• Cung cấp giải pháp hiệu quả cho tích phân, nội suy, tối ưu hóa... • Hỗ trợ xử lý tín hiệu.
Trang 70 The Dariu Foundation
Hình 7.4: Thư viện SciPy trong Python.
2.5 Scikit-Learn
Được coi là một trong những thư viện Python tốt nhất để làm việc với dữ liệu phức tạp, Scikit-Learn được xây dựng dựa trên các thư viện Matplotlib, NumPy và SciPy. Thư viện học máy này có những tính năng đơn giản đơn giản nhưng hiệu quả để hoàn thành các nhiệm vụ phân tích và khai phá dữ liệu. Scikit-Learn là một trong những thư viện Python phát triển nhanh nhất. Ngoài ra, Scikit-Learn có một số thuật toán để thực hiện các nhiệm vụ khai thác dữ liệu và học máy, đáng chú ý là phân loại, phân cụm, lựa chọn mô hình, reduce và hồi quy.
Hình 7.5: Thư viện Scikit-Learn trong Python.
Mục đích chính của Scikit-Learn: Dành cho Phân tích và Khai phá dữ liệu. Điểm nổi bật của Scikit-Learn:
• Khả năng trích xuất các đặc trưng từ hình ảnh và văn bản.
• Tái sử dụng trong một số hoàn cảnh.
• Một số phương thức để kiểm tra tính chính xác của các mô hình được giám sát trên dữ liệu chưa thấy.
• Một loạt các thuật toán, bao gồm phân cụm, phân tích nhân tố, phân tích thành phần chính cho các mạng thần kinh không giám sát.
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 71
3 Thu thập và xử lý dữ liệu
3.1 Thu thập dữ liệu
Thực ra, thu thập dữ liệu là một trong những phần khó nhất và cũng là phần mang lại nhiều giá trị nhất của lĩnh vực khoa học dữ liệu. Điểm khó ở đây, là dữ liệu của bạn sẽ cần phải thu thập từ nhiều nguồn khác nhau được chia sẻ trên mạng, chứ nó thường không nằm tập trung tại một server. Thêm nữa, bạn cần phải trích lọc thông tin cần thiết, và loại bỏ các thông tin thừa để tăng tốc cho quá trình xử lý trong tương lai.
Trong phạm vi hướng dẫn của giáo trình này, chúng tôi cung cấp dữ liệu đã thông qua xử lý cho bạn đọc. Điều này sẽ tạo ra cảm giác đơn giản cho các bạn mới bắt đầu, và có thể tập trung vào chức năng phân tích dữ liệu có sẵn. Dữ liệu sử dụng là kết quả thi đại học năm 2020, có thể được tải ở đường dẫn sau đây:
https://ubc.sgp1.cdn.digitaloceanspaces.com/PythonData/diemthidhqg2020.csv
Bạn đọc có thể tự tìm dữ liệu cho riêng mình, ví dụ như kết quả thi học kì ở trường, để áp dụng vào các kĩ thuật phân tích dữ liệu được trình bày trong bài hướng dẫn này.
3.2 Xử lý dữ liệu
3.2.1 Thêm dữ liệu vào chương trình
Trước khi bắt đầu xử lý dữ liệu, ta tiến hành thêm các thư viện cần thiết như Numpy, Pandas như trong đoạn code sau:
1 import pandas as pd
2 import numpy as np
3 import warnings
4 warnings . filterwarnings (" ignore ")
Chương trình 7.1: Thêm thư viện
Sau đó, ta sẽ đọc dữ liệu từ tập tin csv. Để kiểm tra nội dung dữ liệu, ta sẽ in ra 5 dòng đầu của dữ liệu.
1 data = pd . read_csv (’ diemthidhqg2020 . csv ’)
2 print ( data . head (5) )
Chương trình 7.2: Đọc dữ liệu từ tập tin CSV
Chúng ta sẽ thấy được kết quả như hình dưới, Python sẽ xuất ra 5 dòng dữ liệu đầu tiên và các cột dữ liệu.
Ngoài ra, ta có thể kiểm tra các thông tin khác của dữ liệu bằng lệnh 1 print ( data . info () )
Kết quả sẽ in ra bao gồm:
• Cột đầu tiên: số thứ tự các trường dữ liệu (cột) trong dữ liệu.
• Cột thứ hai: các tên của từng trường dữ liệu (tên của từng cột trong dữ liệu) Trang 72 The Dariu Foundation
Hình 7.6: Lấy 5 dòng dữ liệu đầu tiên.
• Cột thứ ba: là cột đếm số lượng các phần tử không phải là phần tử rỗng (tức là các phần tử có giá trị xác định)
• Cột cuối cùng: đây là cột kiểu dữ liệu của mỗi trường, đa phần sẽ có các kiểu dữ liệu thường gặp như int64, float64, object ...
Hình 7.7: Thông tin của dữ liệu.
3.2.2 Trích xuất, chia nhỏ dữ liệu
Sau khi đã thêm dữ liệu thành công vào chương trình, biến pd sẽ chứa toàn bộ dữ liệu. Tuy nhiên, để thuận tiện cho việc xử lý, phân tích, đánh giá dữ liệu thì ta cần phải chia nhỏ dữ liệu ra nhiều phần khác nhau, tùy theo mục đích của việc đánh giá.
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 73
Trong bài này, ta sẽ đánh giá sự phân bổ điểm của từng môn thi (ví dụ 3 môn: Toán, Ngữ Văn, Tiếng Anh).
Ta sẽ sử dụng câu lệnh bên và gán cho biến toan tất cả các dữ liệu về điểm thi môn Toán. Để lấy chính xác cột dữ liệu, ta sẽ dựa vô các tên trường dữ liệu mà ta tìm thấy được ở cột thứ hai như Hình 7.7.
1 toan = data [’toan_hoc ’]
Tuy nhiên, sẽ có một vấn đề là do một số em học sinh không thi môn Toán nên trong dữ liệu sẽ bị cập nhật rỗng (NaN). Các dữ liệu này sẽ ảnh hưởng rất nhiều, thậm chí làm sai lệch kết quả phân tích, đánh giá dữ liệu. Vậy nên, ta sẽ giải quyết bằng cách sử dụng hàm:
1 toan = data [’toan_hoc ’]. dropna ()
Sau khi loại bỏ các phần tử rỗng, ta sẽ kiểm tra lại số lượng phần tử hiện tại (74205) có giá trị khác rỗng so với ban đầu là 74453 (bao gồm cả phần tử rỗng).
1 toan = data [’toan_hoc ’]
2 print ( len( toan ) ) # 74453
3
4 toan = data [’toan_hoc ’]. dropna ()
5 print ( len( toan ) ) # 74205
Chương trình 7.3: Kiểm tra số lượng phần tử
Tương tự như trên, ta sẽ tạo ra 3 biến chứa dữ liệu của 3 môn Toán, Ngữ Văn, Tiếng Anh:
1 toan = data [’toan_hoc ’]. dropna ()
2 print ( len( toan ) ) # 74205
3
4 van = data [’ngu_van ’]. dropna ()
5 print ( len( van ) ) # 72648
6
7 anh = data [’tieng_anh ’]. dropna ()
8 print ( len( anh ) ) # 65898
Chương trình 7.4: Tạo các biến chứa dữ liệu
Trang 74 The Dariu Foundation
4 Câu hỏi ôn tập
1. Để hiển thị 10 dòng đầu của dữ liệu d at a, ta dùng câu lệnh nào? A. print(data(10))
B. print(data.head())
C. print(data.head(10))
D. data.head(10)
2. Câu lệnh sau đây có chức năng gì?
1 print ( data . info () )
A. Hiển thị các thông tin thuộc tính (tên, số lượng phần tử, kiểu dữ liệu) của dữ liệu
B. Hiển thị dữ liệu
C. Hiển thị dòng chữ "data.info()"
D. Hiển thị 5 dòng đầu của dữ liệu
3. Để đọc nội dung từ file csv, thư viện nào sẽ được sử dụng?
A. pandas
B. numpy
C. warnings
D. Tất cả các thư viện trên
4. Để xóa các phần tử rỗng, ta dùng câu lệnh nào?
A. dropna()
B. print()
C. head()
D. info()
5. Để kiểm tra số lượng phần tử của biến toan, chúng ta sẽ dùng câu lệnh gì? A. print(toan)
B. lenght(toan)
C. len(toan)
D. Tất cả đều sai
6. Kiểu dữ liệu int64 có nghĩa là gì?
A. Kiểu số nguyên, giá trị lớn nhất là 64
B. Kiểu số nguyên, có 64 bit dữ liệu
C. Kiểu số nguyên, có 64 byte dữ liệu
D. Tùy vào ngữ cảnh, các câu trả lời trên đều đúng
7. Kiểu dữ liệu float64 có nghĩa là gì?
A. Kiểu số thực, giá trị lớn nhất là 64
B. Kiểu số thực, có 64 bit dữ liệu
C. Kiểu số thực, có 64 byte dữ liệu
D. Tùy vào ngữ cảnh, các câu trả lời trên đều đúng
Đáp án
1. C 2. A 3. A 4. A 5. C 6. B 7. B
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 75
Trang 76 The Dariu Foundation
CHƯƠNG 8
Vẽ đồ thị biểu diễn dữ liệu trực quan
1 Giới thiệu
Trong chương vừa rồi, ta đã tìm hiểu sơ lược về khoa học dữ liệu và các thư viện phục vụ cho việc xử lý và phân tích dữ liệu. Vấn đề dữ liệu luôn là một vấn đề nhạy cảm và để thu thập dữ liệu cũng là một thử thách khó khăn. Vậy nên, chúng ta sẽ sử dụng những dữ liệu được công khai trên mạng Internet.
Sau khi đã có được dữ liệu và xử lý chúng, để cho mọi người hình dung được sự trừu tượng và đặc tính của dữ liệu, ta nên biểu thị chúng dưới dạng hình ảnh trực quan (đồ thị). Ta sẽ sử dụng thư viện Matplotlib để vẽ các biểu đồ, và trong chương này ta sẽ hiện thực 3 loại biểu đồ cơ bản:
• Biểu đồ đường
• Biểu đồ cột
• Biểu đồ tròn
Các công cụ giới thiệu trong bài hướng dẫn này rất hữu hiệu để phân tích dữ liệu có kích thước lớn. Nó sẽ cho chúng ta những cái nhìn trực quan hơn và rút trích được nhiều thông tin ý nghĩa hơn. Dữ liệu sử dụng trong bài này là kết quả thi đại học năm 2020, đã được chúng tôi sưu tầm và có thể tải được từ đường dẫn sau đây:
https://ubc.sgp1.cdn.digitaloceanspaces.com/PythonData/diemthidhqg2020.csv
2 Vẽ biểu đồ bằng thư viện Matplotlib
Ở bài trước, ta đã trích xuất dữ liệu lớn thành các dữ liệu điểm nhỏ (Toán, Ngữ Văn, Tiếng Anh). Trong bài này, ta sẽ sử dụng các dữ liệu điểm nhỏ đó để tiến hành vẽ đồ thị và phân tích dữ liệu. Trước tiên cần phải thêm thư viện để vẽ biểu đồ:
1 import matplotlib . pyplot as plt
Chương trình 8.1: Thêm thư viện vẽ đồ thị
2.1 Biểu đồ đường
Ta sẽ dùng dữ liệu điểm thi của môn Toán để vẽ biểu đồ đường.
Trước tiên, ta cần thực hiện việc đếm số lần xuất hiện của dữ liệu điểm trong dữ liệu, tức là với mỗi điểm số sẽ có bao nhiêu thí sinh đạt được. Để thống kê, ta sẽ sử dụng hàm:
1 value_counts ()
Trang 78 The Dariu Foundation
Hình 8.1: Dữ liệu sau khi được thống kê.
Khi sử dụng hàm thống kê số lần xuất hiện của điểm, các điểm này sẽ bị sắp xếp lung tung, không có thứ tự, để sắp xếp lại điểm theo thứ tự từ thấp đến cao, ta sẽ sử dụng hàm:
1 sort_index ()
Sau khi đã sắp xếp dữ liệu điểm theo thứ tự, ta tiến hành vẽ biểu đồ đường như sau:
1 plt . plot ( toan . value_counts () . sort_index () )
2 plt . show ()
Chương trình 8.2: Vẽ biểu đồ đường
Trí tuệ nhân tạo - Khoa học dữ liệu Trang 79
Kết quả của việc vẽ đồ thị sẽ như hình bên dưới.
Hình 8.2: Đồ thị biểu diễn điểm thi môn Toán.
Tuy nhiên, để thêm phần sinh động cho đồ thị, ta sẽ thêm các thuộc tính khác như màu, kiểu đường đồ thị, lưới đồ thị, gắn thêm chú thích...
1 plt . plot ( toan . value_counts () . sort_index () , color =’red ’, linestyle = ’:’, marker =’.’, markersize =10)
2 plt . grid ( True )
3 plt . legend ([ ’Mon Toan ’])
4 plt . xlabel (’Diem ’)
5 plt . ylabel (’So luong ’)
6 plt . title (’Thong ke diem mon Toan ’)
7 plt . show ()
Chương trình 8.3: Vẽ biểu đồ có sử dụng thêm thuộc tính
Hình 8.3: Đồ thị hiển thị thêm thông tin, chú thích.
Từ biểu đồ trên, ta có thể đưa ra nhận xét chung rằng khoảng điểm mà nhiều thí sinh đạt được là từ 6 đến 9, và khoảng điểm được nhiều thí sinh đạt được nhất (trên 5000 thí sinh) là từ 7.5 đến 8.1.
Trang 80 The Dariu Foundation
"""