Điều khiển bằng giọng nói cho Android Mood Light: 11 bước (có hình ảnh)
Điều khiển bằng giọng nói cho Android Mood Light: 11 bước (có hình ảnh)
Anonim
Điều khiển bằng giọng nói Android Mood Light
Điều khiển bằng giọng nói Android Mood Light
Điều khiển bằng giọng nói Android Mood Light
Điều khiển bằng giọng nói Android Mood Light

Tôi cần tạo một lớp học cho Nhóm Maker tại địa phương của chúng tôi. Một thứ gì đó đảm bảo ngay cả những khách truy cập lần đầu tiên sẽ giành được chiến thắng nhất định và phần thưởng lớn mà không cần suy nghĩ, không ồn ào và không cần công cụ hoặc vật liệu chuyên dụng. Các sinh viên cần mang về nhà một thứ gì đó vừa hữu ích vừa thú vị mà họ có thể cho bạn bè xem, làm nó trong một buổi chiều - và nó phải miễn phí. (Và hy vọng mang chúng trở lại để biết thêm, hoặc cho một lớp liên quan) Vì vậy, tôi đã tạo dự án này.

Biến điện thoại hoặc máy tính bảng cũ của bạn thành một bảng trạng thái và đèn theo tâm trạng được điều khiển bằng giọng nói. MIỄN PHÍ!!! Dễ dàng làm trong một buổi chiều - KHÔNG CẦN KINH NGHIỆM (CN, CN)

Bất kỳ ai có thiết bị Android và quyền truy cập vào máy tính đều có thể lập trình ứng dụng điều khiển bằng giọng nói sau một hoặc hai giờ. Nó sử dụng MIT App Inventor miễn phí, vì vậy không có chi phí. Họ có thể dễ dàng tùy chỉnh nó, sau đó thêm sự khéo léo của riêng họ vào một tấm bìa hoặc hộp đựng. Và họ có thể mang điều tương tự trở lại lớp học và tiếp tục mở rộng và cải thiện các dự án của mình trong vài tháng.

Dự án cung cấp một khởi đầu tốt cho việc lập trình, nhưng vẫn chưa đủ để thực sự hài lòng - nó được thiết kế để đưa mọi người quay lại lớp tiếp theo. Ác ma, tôi biết. Nhưng nó dẫn mọi người đến Arduino, dẫn đến Raspberry Pi, dẫn đến điện tử và hàn. Nếu họ hài lòng với ứng dụng cơ bản và không muốn lập trình nữa, họ có thể tạo một trường hợp tùy chỉnh cho ứng dụng đó khi họ quay lại Nhóm Maker để tham gia các lớp học về vải và may, giấy và vẽ, đồ gỗ và khung- làm hoặc thậm chí thiết kế và in 3d.

Những yêu cầu cơ bản

  • Điện thoại hoặc máy tính bảng Android cũ (hiện tại là 2.3 trở lên)
  • Truy cập Internet
  • Tài khoản nhà phát minh ứng dụng (Miễn phí)
  • Tốt hơn là một máy tính có cài đặt trình duyệt Chrome

Sự chuẩn bị

Bạn cần phải làm quen với chương trình Nhà phát minh ứng dụng của MIT. Có rất nhiều Sách hướng dẫn về nó (một số khá nâng cao). Nhưng nơi tốt nhất để học App Inventor là trên trang web của họ và loạt bài hướng dẫn tuyệt vời. Hầu hết mọi người học các khái niệm cơ bản trong vài phút. Rốt cuộc, đây chính là cửa hàng đã tạo ra môi trường lập trình Scratch và ứng dụng lập trình LEGO Mindstorms ban đầu. Nếu bạn quá già để biết về những điều này, hãy nhờ đứa trẻ ở độ tuổi đi học ở địa phương giúp bạn.

Nếu bạn đang giảng dạy lớp học, có lẽ bạn nên làm quen với hầu hết các thành phần và lệnh. Một người nào đó trong lớp gần như được đảm bảo yêu cầu làm điều gì đó khác với những gì được hiển thị trong hướng dẫn này. Bạn có thể bám sát kịch bản và chỉ làm những gì được hiển thị ở đây. Nhưng tôi nhận thấy rằng chúng tôi nhận được tỷ lệ khách truy cập quay lại cao hơn nhiều khi chúng tôi có thể giúp mọi người tạo một phiên bản độc đáo với các tính năng "nâng cao" mà họ có thể hiển thị cho bạn bè của mình.

Vì vậy, hãy tự làm quen với những điều cơ bản, sau đó quay lại hướng dẫn từng bước.

Bước 1: Thiết kế và Thiết lập

Image
Image
Thiết kế và Thiết lập
Thiết kế và Thiết lập

Tạo một Canvas

  • Trong chế độ "Nhà thiết kế", hãy chuyển đến bảng màu "Vẽ và Hoạt ảnh".
  • Kéo "Canvas" vào màn hình.
  • Đặt chiều rộng và chiều cao của canvas thành "Fill Parent"
  • Chúng tôi sẽ tạo mã để thay đổi màu của canvas trong các bước sau.

Tạo nhận dạng giọng nói

  • Từ bảng "Phương tiện", kéo "SpeechRecognizer" vào màn hình.
  • Đây là thành phần sẽ lắng nghe các lệnh thoại của chúng ta.
  • Chúng tôi sẽ cấu hình mục này sau.

Tạo khả năng nói

  • Cũng từ bảng "Phương tiện", kéo một đối tượng "TextToSpeech" vào màn hình.
  • Chúng tôi sẽ sử dụng thành phần này để tạo lời nhắc bằng giọng nói cho người dùng.
  • Mục này cũng sẽ được định cấu hình sau trong hướng dẫn.

Chúng tôi vừa cài đặt các thành phần cơ bản cho ứng dụng của mình - tất cả chỉ trong vài giây. Bây giờ chúng ta chuyển sang cấu hình và mã hóa chúng. Để làm được điều đó, chúng ta cần chuyển sang chế độ "Blocks". Nhìn vào góc trên bên phải của màn hình và nhấp vào nút Blocks. Nếu bạn cần quay lại chế độ Designer, chỉ cần nhấp vào nút Designer.

Bước 2: Khởi động SpeechRecognizer

Khởi động SpeechRecognizer
Khởi động SpeechRecognizer

GHI NHỚ: Chuyển sang Chế độ "BLOCKS": Đảm bảo chuyển sang chế độ chặn bằng cách nhấp vào nút ở góc trên bên phải của màn hình. Một bộ bảng màu mới sẽ xuất hiện. Chúng tôi sẽ sử dụng các bảng và khối này để lập trình ánh sáng tâm trạng.

Chúng tôi muốn bắt đầu lắng nghe các lệnh ngay khi ứng dụng mở ra. Để làm điều đó, chúng tôi sẽ "gọi" đối tượng SpeechRecognizer khi màn hình đầu tiên "khởi tạo". AppInventor đã tự động tạo một "màn hình" cho chúng ta. Mỗi ứng dụng đều có ít nhất một màn hình, một số có một số màn hình. Chúng tôi chỉ cần cái mặc định.

Khởi tạo màn hình

  • Nhấp vào đối tượng Màn hình trong menu bên trái.
  • Từ menu bay ra, hãy kéo đối tượng "Khi màn hình được khởi tạo do" vào vùng hiển thị.

Khởi động Trình nhận dạng giọng nói

  • Nhấp vào đối tượng "SpeechRecognizer" ở menu bên trái
  • Kéo đối tượng "call SpeechRecognizer getText" lên vùng hiển thị
  • Cắm lệnh này bên trong khối Khởi tạo màn hình

Bây giờ, chương trình sẽ tự động bắt đầu nghe lệnh thoại (getText) ngay khi màn hình đầu tiên tải (khởi chạy). Tiếp theo, chúng tôi yêu cầu máy tính phải làm gì khi nó nghe lệnh.

Bước 3: Tạo cây quyết định

Tạo cây quyết định
Tạo cây quyết định
Tạo cây quyết định
Tạo cây quyết định
Tạo cây quyết định
Tạo cây quyết định

Máy tính hiện đang nghe lệnh bằng giọng nói, vì vậy, tiếp theo, chúng ta cần chỉ định những việc cần làm sau khi nó nghe thấy một số từ nhất định. Trong dự án này, chúng tôi sẽ chủ yếu sử dụng các tên màu như Xanh lam, Xanh lục và Vàng. Khi máy tính nghe thấy những từ đó, nó sẽ thay đổi màu sắc của đối tượng Canvas.

Chúng tôi thực hiện việc này bằng cách kiểm tra xem lệnh thoại có khớp với bất kỳ từ nào mà chúng tôi đã chỉ định hay không. Nếu lệnh thoại khớp với một từ được xác định trước thì chúng tôi muốn máy tính thực hiện các hành động nhất định - như thay đổi màu canvas và đưa ra một số phản hồi bằng lời nói. Nếu không tìm thấy kết quả phù hợp nào, chúng tôi cần thông báo cho người dùng biết có điều gì đó không ổn.

Chúng tôi bắt đầu bằng cách tạo một khung trống để chứa tất cả các bài kiểm tra và hành động.

Việc cần làm sau khi nhận được lệnh thoại

  • Nhấp vào SpeechRecognizer ở menu bên trái
  • Kéo Khối "Sau khi Nhận Văn bản" lên màn hình
  • (Đặt khối trực tiếp lên sân khấu, KHÔNG bên trong khối trước đó)

Tạo vùng kiểm tra

  • Nhấp vào Điều khiển trong phần Tích hợp của menu bên trái
  • Kéo khối lệnh If-Then lên vùng hiển thị
  • Cắm khối If-then vào bên trong khối afterGettingText
  • Nhấp vào biểu tượng bánh răng màu xanh lam trên khối If-then
  • Từ cửa sổ bật lên xuất hiện, hãy kéo một số khối phụ Khác-Nếu vào khối if-then chính
  • Đồng thời kéo một khối con khác vào cuối danh sách

Trong bước tiếp theo, chúng tôi sẽ bắt đầu lấp đầy những chỗ trống này bằng các bài kiểm tra và hành động - trung tâm của chương trình.

Bước 4: Kiểm tra các trận đấu

Kiểm tra các trận đấu
Kiểm tra các trận đấu
Kiểm tra các trận đấu
Kiểm tra các trận đấu
Kiểm tra các trận đấu
Kiểm tra các trận đấu
Kiểm tra các trận đấu
Kiểm tra các trận đấu

Ứng dụng đang nghe các lệnh bằng giọng nói và có một khuôn khổ để thực hiện các bài kiểm tra đối với các lệnh thoại đó. Vì vậy, bây giờ, chúng ta hãy xác định các bài kiểm tra. Đầu tiên, chúng tôi yêu cầu máy tính kiểm tra xem hai đối tượng có bằng nhau hay không, sau đó xác định đối tượng đầu tiên là lệnh thoại và đối tượng thứ hai là một đoạn văn bản. Chúng tôi sẽ chỉ tạo một bài kiểm tra ở đây, nhưng kỹ thuật tương tự được sử dụng để tạo sáu hoặc mười hoặc một trăm bài kiểm tra. Nếu lần kiểm tra đầu tiên là một trận đấu thì chương trình sẽ thực hiện một hành động, nếu không nó sẽ chuyển sang lần kiểm tra tiếp theo, v.v.

Tạo Kiểm tra Bình đẳng

  • Nhấp vào Logic trong phần Tích hợp của menu bên trái
  • Kéo một kiểm tra = (bằng) lên màn hình

Đặt mục đầu tiên thành kết quả thoại

  • Nhấp vào SpeechRecognizer ở menu bên trái
  • Kéo khối Kết quả lên vùng hiển thị
  • Cắm SpeechRecognizer. Result vào vị trí bên trái của khối kiểm tra Bình đẳng

Đặt mục thứ hai thành một khối văn bản

  • Nhấp vào Văn bản trong phần Tích hợp của menu bên trái
  • Kéo khối trường văn bản cơ bản lên vùng hiển thị
  • Trong khối văn bản đó, hãy nhập từ bạn muốn kiểm tra
  • Cắm khối văn bản vào khe bên phải của khối kiểm tra Bình đẳng

Đặt bài kiểm tra vào đúng nơi

  • Bây giờ, hãy cắm toàn bộ khối Equals-Test vào IF Slot của cây quyết định
  • Trong các bước tiếp theo, chúng tôi sẽ chỉ định một số hành động để thực hiện khi kiểm tra là đúng

VÍ DỤ: Nếu người dùng nói "blue", chương trình sẽ thu từ đó vào thùng "result". Sau đó, nó sẽ kiểm tra xem từ kết quả đó (màu xanh lam) có khớp với từ bạn đã nhập bên trong khối văn bản hay không. Nếu nó khớp, chương trình sẽ thực hiện các hành động trong phần "then" của khối (chúng tôi sẽ xác định các hành động trong các bước tiếp theo). Nếu lệnh thoại không khớp với văn bản, thì chương trình sẽ chuyển sang bài kiểm tra tiếp theo cho đến khi tìm thấy lệnh khớp hoặc đạt được câu lệnh else cuối cùng "có gì đó không ổn".

LƯU Ý: Lệnh thoại không nhất thiết phải có màu. Trong mã ví dụ, chúng tôi sử dụng các từ "tối" và "sáng" để kích hoạt màu đen và trắng. Chúng ta có thể dễ dàng sử dụng các từ như:

  • Mẹ / Bố / Billy / Suzy
  • Hạnh phúc / Buồn / Giận dữ / Đói
  • Ngủ / Đang học / Phát thanh / Bữa tiệc

Bước 5: Đưa ra phản hồi bằng lời nói

Đưa ra phản hồi bằng lời nói
Đưa ra phản hồi bằng lời nói
Đưa ra phản hồi bằng lời nói
Đưa ra phản hồi bằng lời nói

Bây giờ chúng ta cần tạo một số hành động khi lệnh thoại khớp với bài kiểm tra. Đầu tiên, chúng tôi sẽ cho người dùng biết màu mà chương trình cho rằng nó đã tìm thấy màu phù hợp.

Nói khối làm điều của bạn

  • Nhấp vào đối tượng TextTo Speech ở menu bên trái
  • Kéo khối Speak. Message lên màn hình

Nhập những gì bạn muốn nó nói

  • Nhấp vào khối Văn bản trong phần tích hợp của menu bên trái
  • Kéo một khối văn bản trống cơ bản lên vùng hiển thị
  • Nhập cụm từ bạn muốn nó nói

Lắp ráp các bộ phận

  • Cắm khối văn bản đã điền vào khối Speak. Message
  • Cắm Speak. Messageblock đã lắp ráp vào khe Then

Bây giờ, khi chương trình phát hiện khớp với khẩu lệnh, chương trình sẽ nói cụm từ bạn vừa

đã đánh máy. Hãy sáng tạo nếu bạn muốn:

  • Fred phải nói, Nó màu đỏ
  • Boo hoo hoo, nó màu xanh lam
  • Màu xanh lá cây, thực sự? Đó không phải là màu sắc của bạn.

Bước 6: Đặt màu Canvas

Đặt màu canvas
Đặt màu canvas
Đặt màu canvas
Đặt màu canvas
Đặt màu canvas
Đặt màu canvas

Bây giờ, cuối cùng chúng ta sẽ thay đổi màu của canvas để phù hợp với lệnh đã nói.

Đặt màu nền canvas

  • Nhấp vào đối tượng Canvas ở menu bên trái
  • Kéo khối SetCanvasBackgroundColorTo vào vùng hiển thị

Chọn một mẫu màu

  • Nhấp vào đối tượng Màu trong phần Tích hợp của menu bên trái
  • Kéo một mẫu màu lên sân khấu

Lắp ráp các bộ phận

  • Cắm mẫu màu vào khối SetBackgroundColor
  • Cắm khối đã lắp ráp vào khe Then của câu lệnh If-then (bên dưới khối speak)

Lót, rửa sạch, lặp lại

Đây có lẽ là thời điểm tốt để kiểm tra xem chương trình hoạt động như thế nào. Tải nó vào thiết bị Android của bạn và kiểm tra nó trước khi bạn sao chép các lệnh 10 lần.

Bây giờ bạn đã biết mã cơ bản hoạt động, hãy nhân bản thử nghiệm và hành động cho từng màu mà bạn muốn có thể chọn.

Bạn vừa tạo khung cơ bản cho chương trình. Khi chương trình phát hiện khớp lệnh thoại, chương trình sẽ nói cụm từ được chỉ định, sau đó thay đổi màu của canvas thành màu được chỉ định. Bạn cũng có thể chỉ định các giá trị RGB và alpha riêng lẻ, vì vậy bạn có thể tạo một lệnh như, nhiều màu xanh hơn và ít màu đỏ hơn. Bạn cũng có thể tạo một lệnh để đặt một màu ngẫu nhiên, để các màu xung quanh và mờ dần hoặc chuyển động qua cầu vồng.

Bước 7: Bắt lỗi Không tìm thấy

Bắt lỗi Không tìm thấy Đối sánh
Bắt lỗi Không tìm thấy Đối sánh

Nhưng điều gì sẽ xảy ra nếu lệnh thoại không tìm thấy kết quả phù hợp - thay vào đó bạn bỏ lỡ hoặc hắt hơi? Đó là những gì tuyên bố cuối cùng của Else. Khi tất cả các thử nghiệm khác không thành công, chương trình sẽ thực hiện hành động trong câu lệnh else này. Bạn tạo câu lệnh này giống như bạn đã làm các câu lệnh trước (ngoại trừ không cần kiểm tra).

  • Cắm trường văn bản vào khối SpeakMessage và cắm trường văn bản đó vào vị trí khác cuối cùng.
  • Nói với người dùng rằng, "Rất tiếc, tôi không biết bạn đang muốn nói gì - vui lòng thử lại."

Bạn gần như đã hoàn thành. Chỉ còn một số bước nữa để thực hiện ngay bây giờ.

Bước 8: Bắt đầu nhận dạng giọng nói theo cách thủ công

Bắt đầu nhận dạng giọng nói theo cách thủ công
Bắt đầu nhận dạng giọng nói theo cách thủ công

Khi lệnh thoại đã được kiểm tra và các hành động thích hợp đã được thực hiện, chương trình sẽ ngừng nghe các lệnh khác. Có rất nhiều cách để giải quyết vấn đề này, nhưng hầu hết đều phức tạp đối với người mới bắt đầu. Vì vậy, chúng tôi sẽ gắn bó với một cái gì đó đơn giản - chạm vào màn hình để chương trình bắt đầu nghe lại.

  • Nhấp vào đối tượng Canvas ở menu bên trái
  • Kéo khối whenCanvasTouchDown vào vùng hiển thị (dưới dạng một đối tượng riêng biệt, không nằm trong bất kỳ khối nào khác)
  • Nhấp vào đối tượng SpeechRecognizer ở menu bên trái
  • Kéo một khối callSpeechRecognizer. GetText vào vùng hiển thị và cắm nó vào khối whenCanvasTouchDown

Bây giờ, bất cứ khi nào màn hình được chạm vào, chương trình sẽ bắt đầu nghe lệnh thoại.

Bước 9: Toàn bộ chương trình trông như thế nào

Chương trình đầy đủ trông như thế nào
Chương trình đầy đủ trông như thế nào

Bạn đã hoàn tất - bạn vừa tạo một ứng dụng Andoid điều khiển bằng giọng nói có thể biến điện thoại hoặc máy tính bảng cũ của bạn thành một chiếc đèn chiếu sáng theo tâm trạng. Nếu bạn gặp bất kỳ sự cố nào để nó hoạt động, hãy tải xuống phiên bản có kích thước đầy đủ của hình ảnh trong bước này. Hình ảnh đó cho thấy toàn bộ chương trình cộng với một số tính năng bổ sung.

Nhưng như bạn có thể thấy, toàn bộ chương trình thực sự chỉ

  • một cuộc gọi bắt đầu
  • một loạt các thử nghiệm và hành động
  • sau đó khởi động lại.

Chương trình này chỉ làm xước bề mặt của những gì bạn có thể làm với MIT App Inventor. Có rất nhiều lệnh khác, và thậm chí các lệnh mà chúng tôi đã sử dụng trong dự án này có các tùy chọn mà chúng tôi chưa khám phá. Hãy sử dụng chương trình cơ bản này và xây dựng trên nó để tạo ra ánh sáng tâm trạng, bảng trạng thái hoặc bảng hiển thị tùy chỉnh của riêng bạn.

Bước 10: Mở rộng và mở rộng

Mở rộng và mở rộng
Mở rộng và mở rộng
Mở rộng và mở rộng
Mở rộng và mở rộng
Mở rộng và mở rộng
Mở rộng và mở rộng
Mở rộng và mở rộng
Mở rộng và mở rộng

Được rồi, hãy làm một việc nữa, cho vui thôi. Thay vì chỉ thay đổi màu của màn hình, hãy hiển thị một bức ảnh. Bạn cũng có thể hiển thị video, trang web hoặc tin nhắn văn bản. Chơi xung quanh và vui chơi.

  • Thay đổi trở lại chế độ Designer bằng cách nhấp vào nút ở góc trên bên phải của màn hình
  • Nhấp vào Canvas trong menu bên trái
  • Cũng nhấp vào Canvas trong menu Thành phần (bảng điều khiển thứ hai từ bên phải)
  • Thao tác này sẽ hiển thị bảng Thuộc tính cho Canvas
  • Trong bảng Thuộc tính (ngoài cùng bên phải), nhấp vào Hình nền
  • Tải ảnh bằng hộp thoại bật lên
  • Chuyển về chế độ Chặn
  • Thêm một câu lệnh if-then bổ sung
  • Thêm một bài kiểm tra cho lệnh hình ảnh
  • Thêm một khối setBackgroundImageTo vào cây quyết định - sử dụng tên của ảnh
  • Đồng thời thêm một setBackgroundImageTo khối Touchdown khởi động lại - đặt tên thành "none"

Và bùng nổ, bây giờ bạn có thể tải ảnh cũng như thay đổi màu sắc. Bạn có thể muốn thử với kích thước hình ảnh. Hoặc thử tải trong một đối tượng video. Bạn có thể vẽ các hình dạng trên canvas hoặc tạo hoạt ảnh. Bạn có thể hiển thị số, từ, đồ thị - hoặc tạo một số bức tranh sơn dầu cho nhiều mục.

Bạn cũng có thể tạo các chương trình để truy cập các cảm biến tích hợp trên điện thoại của mình. Bạn có thể kết nối với các ứng dụng khác trên điện thoại của mình, kết nối với web và lấy thông tin từ đó và kết nối với các thiết bị khác bằng Bluetooth hoặc WiFi.

Hoặc sử dụng IFTT cực kỳ tiện dụng để nhờ Alexa hoặc trợ lý khác đặt bảng tâm trạng của bạn hoặc kiểm soát tất cả các thiết bị cũ của bạn..

Bạn mới bắt đầu với MIT App Inventor, nhưng bạn có thể thấy nó dễ sử dụng và mạnh mẽ như thế nào. Vì vậy, hãy khám phá và tạo bảng hiển thị của riêng bạn.

Bước 11: Vỏ và vỏ

Vỏ và Bìa
Vỏ và Bìa
Vỏ và Bìa
Vỏ và Bìa
Vỏ và vỏ
Vỏ và vỏ

Vì vậy, đó là rất nhiều niềm vui, lập trình một ứng dụng kích hoạt bằng giọng nói. Nhưng nó vẫn trông giống như một chiếc điện thoại hoặc máy tính bảng cũ - thật nhàm chán. Tại sao không thêm một lớp vỏ hoặc vỏ vào thiết bị để làm cho thiết bị trông thực sự được làm theo yêu cầu. Chỉ có một số cân nhắc cần tính đến:

Nếu bạn che màn hình, vật liệu phải:

  • Có đủ lỗ để cho phép ngón tay của bạn chạm vào màn hình
  • Hoặc đủ dẫn điện để truyền cảm ứng của bạn đến bề mặt máy tính bảng

Lựa chọn tốt là vải lưới hoặc ren. Cả hai đều thay đổi giao diện của điện thoại, nhưng cho phép da của bạn tiếp xúc với màn hình. Một số loại giấy mỏng và nhựa loại Mylar cho phép đủ điện để đăng ký khi chạm vào.

  • Nếu bạn đặt một khung xung quanh nó, hãy đảm bảo chừa đủ chỗ cho dây điện.
  • Đảm bảo thiết bị được gắn chắc chắn nếu bạn đặt thiết bị trên tường. Nó có thể cũ và lỗi thời, nhưng nó vẫn hoạt động - vì vậy đừng phá vỡ nó ngay bây giờ vì bạn biết cách lập trình nó.

Nhưng đây là một môn học hoàn toàn khác, một lớp học đáng giá và đầy đủ và hoàn toàn có thể hướng dẫn được. Và đó là một cách tuyệt vời để thu hút khách truy cập mới trở lại không gian tạo của bạn. Vì vậy, hãy nhớ nói với tất cả họ rằng "Hãy quay lại phần thứ hai của lớp học."

Chúc các bạn vui vẻ và trở nên xuất sắc với nhau.

Đề xuất: