Hướng dẫn về tác vụ nhận dạng cử chỉ

Tác vụ Trình nhận dạng cử chỉ MediaPipe cho phép bạn nhận dạng cử chỉ tay theo thời gian thực và cung cấp kết quả cử chỉ tay đã được nhận dạng cùng với các điểm mốc của tay đã phát hiện. Bạn có thể sử dụng tác vụ này để nhận dạng các cử chỉ tay cụ thể của người dùng và gọi các tính năng của ứng dụng tương ứng với các cử chỉ đó.

Tác vụ này hoạt động trên dữ liệu hình ảnh bằng mô hình học máy (ML) và chấp nhận dữ liệu tĩnh hoặc luồng liên tục. Nhiệm vụ này sẽ tạo ra các điểm mốc trên tay trong toạ độ hình ảnh, điểm mốc trên tay trong toạ độ thế giới, tay thuận (tay trái/phải) và danh mục cử chỉ tay của nhiều tay.

Hãy dùng thử!

Bắt đầu

Hãy bắt đầu sử dụng tác vụ này bằng cách làm theo một trong những hướng dẫn triển khai sau cho nền tảng mục tiêu của bạn. Các hướng dẫn dành riêng cho nền tảng này sẽ hướng dẫn bạn cách triển khai cơ bản của tác vụ này, sử dụng mô hình được đề xuất và cung cấp các ví dụ về mã cùng với các tùy chọn cấu hình được đề xuất:

Thông tin chi tiết về việc cần làm

Phần này mô tả các tính năng, dữ liệu đầu vào, đầu ra và tuỳ chọn cấu hình của tác vụ này.

Tính năng

  • Xử lý hình ảnh đầu vào – Xử lý bao gồm việc xoay hình ảnh, đổi kích thước, chuẩn hoá và chuyển đổi không gian màu.
  • Ngưỡng điểm số – Lọc kết quả dựa trên điểm dự đoán.
  • Gắn nhãn danh sách cho phép và danh sách từ chối – Chỉ định danh mục cử chỉ mà mô hình nhận dạng.
Dữ liệu đầu vào của việc cần làm Kết quả đầu ra của nhiệm vụ
Trình nhận dạng cử chỉ chấp nhận dữ liệu đầu vào của một trong các loại dữ liệu sau:
  • Hình ảnh tĩnh
  • Khung video đã được giải mã
  • Trang video trực tiếp
Trình nhận dạng cử chỉ đưa ra các kết quả sau:
  • Danh mục cử chỉ tay
  • Vẫy tay của những bàn tay đã phát hiện
  • Mốc quan trọng về bàn tay được phát hiện trong toạ độ hình ảnh
  • Địa danh có bàn tay được phát hiện trong toạ độ thế giới

Lựa chọn về cấu hình

Tác vụ này có các chế độ cấu hình sau:

Tên lựa chọn Nội dung mô tả Khoảng giá trị Giá trị mặc định
running_mode Đặt chế độ chạy cho tác vụ. Có 3 chế độ:

IMAGE: Chế độ nhập một hình ảnh.

VIDEO: Chế độ khung hình đã giải mã của video.

LIVE_STREAM: Chế độ phát trực tiếp dữ liệu đầu vào, chẳng hạn như từ máy quay. Ở chế độ này, bạn phải gọi resultsListener để thiết lập trình nghe nhằm nhận kết quả không đồng bộ.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands GestureRecognizer có thể phát hiện số lượng tay tối đa. Any integer > 0 1
min_hand_detection_confidence Điểm số tin cậy tối thiểu để tính năng phát hiện tay được coi là thành công trong mô hình phát hiện lòng bàn tay. 0.0 - 1.0 0.5
min_hand_presence_confidence Điểm số tin cậy tối thiểu về điểm số có mặt kim trong mô hình phát hiện điểm mốc trên kim đồng hồ. Ở chế độ Video và chế độ phát trực tiếp của Trình nhận dạng cử chỉ, nếu điểm số tự tin về sự có mặt của tay trong mô hình điểm mốc trên tay thấp hơn ngưỡng này, thì điểm số này sẽ kích hoạt mô hình phát hiện tì tay. Nếu không, một thuật toán theo dõi kim nhẹ sẽ được dùng để xác định vị trí của(các) kim nhằm phát hiện điểm mốc tiếp theo. 0.0 - 1.0 0.5
min_tracking_confidence Điểm số tin cậy tối thiểu để theo dõi tay được coi là thành công. Đây là ngưỡng IoU hộp giới hạn giữa các kim trong khung hiện tại và khung cuối cùng. Ở chế độ Video và chế độ Luồng của Trình nhận dạng cử chỉ, nếu quá trình theo dõi không thành công thì Trình nhận dạng cử chỉ sẽ kích hoạt tính năng phát hiện tay. Nếu không, tính năng phát hiện tay sẽ bị bỏ qua. 0.0 - 1.0 0.5
canned_gestures_classifier_options Các tuỳ chọn để định cấu hình hành vi của thuật toán phân loại cử chỉ soạn trước. Các cử chỉ soạn trước là ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Ngôn ngữ của tên hiển thị: ngôn ngữ dùng cho tên hiển thị được chỉ định thông qua Siêu dữ liệu mô hình TFLite, nếu có.
  • Số kết quả tối đa: số lượng tối đa các kết quả phân loại có điểm cao nhất cần trả về. Nếu < 0, hàm sẽ trả về tất cả kết quả hiện có.
  • Ngưỡng điểm: điểm số mà kết quả bị từ chối dưới dạng điểm số. Nếu đặt là 0, hàm sẽ trả về tất cả kết quả hiện có.
  • Danh sách cho phép của danh mục: danh sách cho phép của các tên danh mục. Nếu không trống, kết quả phân loại có danh mục không nằm trong tập hợp này sẽ bị lọc ra. Loại trừ lẫn nhau bằng danh sách từ chối.
  • Danh sách từ chối danh mục: danh sách từ chối chứa tên danh mục. Nếu không trống, kết quả phân loại có danh mục nằm trong tập hợp này sẽ bị lọc ra. Loại trừ lẫn nhau bằng danh sách cho phép.
    • Ngôn ngữ của tên hiển thị: any string
    • Số kết quả tối đa: any integer
    • Ngưỡng điểm số: 0.0-1.0
    • Danh mục được cho phép: vector of strings
    • Danh sách từ chối danh mục: vector of strings
    • Ngôn ngữ của tên hiển thị: "en"
    • Số kết quả tối đa: -1
    • Ngưỡng điểm số: 0
    • Danh mục được cho phép: trống
    • Danh sách từ chối danh mục: trống
    custom_gestures_classifier_options Các tuỳ chọn để định cấu hình hành vi của thuật toán phân loại cử chỉ tuỳ chỉnh.
  • Ngôn ngữ của tên hiển thị: ngôn ngữ dùng cho tên hiển thị được chỉ định thông qua Siêu dữ liệu mô hình TFLite, nếu có.
  • Số kết quả tối đa: số lượng tối đa các kết quả phân loại có điểm cao nhất cần trả về. Nếu < 0, hàm sẽ trả về tất cả kết quả hiện có.
  • Ngưỡng điểm: điểm số mà kết quả bị từ chối dưới dạng điểm số. Nếu đặt là 0, hàm sẽ trả về tất cả kết quả hiện có.
  • Danh sách cho phép của danh mục: danh sách cho phép của các tên danh mục. Nếu không trống, kết quả phân loại có danh mục không nằm trong tập hợp này sẽ bị lọc ra. Loại trừ lẫn nhau bằng danh sách từ chối.
  • Danh sách từ chối danh mục: danh sách từ chối chứa tên danh mục. Nếu không trống, kết quả phân loại có danh mục nằm trong tập hợp này sẽ bị lọc ra. Loại trừ lẫn nhau bằng danh sách cho phép.
    • Ngôn ngữ của tên hiển thị: any string
    • Số kết quả tối đa: any integer
    • Ngưỡng điểm số: 0.0-1.0
    • Danh mục được cho phép: vector of strings
    • Danh sách từ chối danh mục: vector of strings
    • Ngôn ngữ của tên hiển thị: "en"
    • Số kết quả tối đa: -1
    • Ngưỡng điểm số: 0
    • Danh mục được cho phép: trống
    • Danh sách từ chối danh mục: trống
    result_callback Thiết lập trình nghe kết quả để nhận kết quả phân loại một cách không đồng bộ khi trình nhận dạng cử chỉ đang ở chế độ phát trực tiếp. Chỉ có thể sử dụng khi bạn đặt chế độ chạy thành LIVE_STREAM ResultListener Không áp dụng Không áp dụng

    Mô hình

    Trình nhận dạng cử chỉ sử dụng một gói mô hình có hai gói mô hình đóng gói sẵn: gói mô hình điểm mốc cho bàn tay và gói mô hình phân loại cử chỉ. Mô hình điểm chuẩn phát hiện sự hiện diện của hình dạng bàn tay và bàn tay. Đồng thời, mô hình nhận dạng cử chỉ sẽ nhận dạng các cử chỉ dựa trên hình học của bàn tay.

    Tên mẫu thiết bị Hình dạng dữ liệu đầu vào Loại lượng tử hoá Thẻ mô hình Phiên bản
    HandGestureClassifier 192 x 192, 224 x 224 số thực 16 thông tin Mới nhất

    Tác vụ này cũng hỗ trợ sửa đổi gói mô hình bằng Trình tạo mô hình. Để biết thêm thông tin về cách sử dụng Trình tạo mô hình để tuỳ chỉnh các mô hình cho nhiệm vụ này, hãy xem trang Tuỳ chỉnh các mô hình cho Trình nhận dạng cử chỉ.

    Gói mô hình điểm mốc trên bàn tay

    Gói mô hình điểm mốc kim phát hiện điểm bản địa hoá điểm chính của 21 toạ độ khớp tay trong các vùng bàn tay đã phát hiện. Mô hình này được huấn luyện dựa trên khoảng 30 nghìn hình ảnh thực tế, cũng như một số mô hình bàn tay tổng hợp kết xuất được đặt trên nhiều loại nền. Hãy xem định nghĩa về 21 mốc dưới đây:

    Gói mô hình điểm mốc kim đồng hồ chứa mô hình phát hiện lòng bàn tay và mô hình phát hiện điểm mốc trên tay. Mô hình phát hiện lòng bàn tay bản địa hoá vùng tay thông qua toàn bộ hình ảnh đầu vào, còn mô hình phát hiện điểm mốc trên bàn tay sẽ tìm thấy các mốc trên hình ảnh bàn tay bị cắt do mô hình phát hiện lòng bàn tay xác định.

    Vì mô hình phát hiện lòng bàn tay tốn nhiều thời gian hơn nhiều, nên ở chế độ Video hoặc chế độ Phát trực tiếp, Trình nhận dạng cử chỉ sẽ sử dụng hộp giới hạn xác định bằng các dấu hiệu kim phát hiện được trong khung hình hiện tại để bản địa hoá vùng tay trong khung hình tiếp theo. Điều này giúp giảm số lần Trình nhận dạng cử chỉ kích hoạt mô hình phát hiện tì tay. Chỉ khi mô hình điểm mốc trên bàn tay không còn xác định đủ số lượng tay cần có, hoặc tính năng theo dõi tay không thành công, thì mô hình phát hiện lòng bàn tay mới được gọi để điều chỉnh vị trí tay.

    Gói mô hình phân loại cử chỉ

    Gói mô hình Phân loại cử chỉ có thể nhận ra các cử chỉ tay phổ biến sau:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

    Nếu mô hình phát hiện thấy tay nhưng không nhận ra cử chỉ, thì công cụ nhận dạng cử chỉ sẽ trả về kết quả là "Không có". Nếu mô hình này không phát hiện thấy tay, thì trình nhận dạng cử chỉ sẽ trả về trạng thái trống.

    Gói mô hình phân loại cử chỉ chứa quy trình mạng nơron 2 bước với một mô hình nhúng cử chỉ, theo sau là một mô hình phân loại cử chỉ. Xem thêm thông tin chi tiết trong Thẻ mô hình phân loại cử chỉ.

    Mô hình nhúng cử chỉ mã hoá các tính năng hình ảnh thành một vectơ tính năng, còn mô hình phân loại là một thuật toán phân loại cử chỉ gọn nhẹ lấy vectơ tính năng làm đầu vào. Gói mô hình phân loại cử chỉ được cung cấp chứa thuật toán phân loại cử chỉ soạn trước giúp phát hiện 7 cử chỉ tay phổ biến được giới thiệu ở trên. Bạn có thể mở rộng gói mô hình để nhận dạng nhiều cử chỉ hơn bằng cách huấn luyện thuật toán phân loại cử chỉ tuỳ chỉnh của riêng mình. Xem thêm thông tin chi tiết trong phần Mô hình tuỳ chỉnh sau.

    Trình nhận dạng cử chỉ có cả thuật toán phân loại cử chỉ soạn trước và thuật toán phân loại cử chỉ tuỳ chỉnh ưu tiên cử chỉ tuỳ chỉnh nếu cả hai thuật toán phân loại nhận ra cùng một cử chỉ trong danh mục. Nếu chỉ có một thuật toán phân loại cử chỉ nhận ra cử chỉ, thì Trình nhận dạng cử chỉ sẽ trực tiếp đưa ra cử chỉ được nhận dạng.

    Điểm chuẩn nhiệm vụ

    Dưới đây là các điểm chuẩn tác vụ cho toàn bộ quy trình dựa trên các mô hình được huấn luyện trước ở trên. Kết quả về độ trễ là độ trễ trung bình trên Pixel 6 khi sử dụng CPU / GPU.

    Tên mô hình Độ trễ của CPU Độ trễ của GPU
    GestureRecognizer 16,76 mili giây 20,87 mili giây

    Mô hình tuỳ chỉnh

    Nếu muốn cải thiện hoặc thay đổi khả năng của các mô hình được cung cấp trong tác vụ này, bạn có thể sử dụng Model Maker để sửa đổi các mô hình hiện có. Mô hình tuỳ chỉnh được sử dụng với MediaPipe phải ở định dạng .task, đây là tệp gói mô hình. Bạn nên cân nhắc sử dụng Trình tạo mô hình để sửa đổi các mô hình được cung cấp cho tác vụ này trước khi xây dựng mô hình của riêng mình.

    Để biết thêm thông tin về cách tuỳ chỉnh một mô hình cho tác vụ này, hãy xem bài viết Tuỳ chỉnh mô hình cho Trình nhận dạng cử chỉ.