2009-03-19 35 views
18

Trong môi trường đa chạm, tính năng nhận dạng cử chỉ hoạt động như thế nào? Phương pháp hoặc thuật toán toán học nào được sử dụng để nhận biết hoặc từ chối dữ liệu cho các cử chỉ có thể có?Tính năng nhận dạng cử chỉ hoạt động như thế nào?

Tôi đã tạo một số găng tay phản chiếu retro và một mảng IR LED, kết hợp với điều khiển từ xa Wii. Các điều khiển từ xa không phát hiện blob nội bộ và theo dõi 4 điểm của ánh sáng hồng ngoại và truyền thông tin này vào máy tính của tôi thông qua một dongle bluetooth.

Điều này được dựa trên Johnny Chung Lee's Wii Research. Thiết lập chính xác của tôi là chính xác như các sinh viên tốt nghiệp từ Hà Lan hiển thị here. Tôi có thể dễ dàng theo dõi vị trí của 4 điểm trong không gian 2ngày và tôi đã viết phần mềm cơ bản của mình để nhận và hình dung những điểm này.

alt text http://i40.tinypic.com/x517yg.pngalt text http://i42.tinypic.com/nao9x.pngalt text http://i43.tinypic.com/65d1zp.png

Các sinh viên Hà Lan đã nhận được rất nhiều các chức năng cơ bản ra khỏi pinch-nhấp nhận của họ. Tôi muốn tiến thêm một bước nữa nếu có thể, và thực hiện một số cử chỉ khác.

Nhận dạng cử chỉ thường được triển khai như thế nào? Ngoài bất kỳ điều gì tầm thường, làm cách nào tôi có thể viết phần mềm để nhận dạng và nhận dạng nhiều cử chỉ khác nhau: các lần vuốt khác nhau, chuyển động tròn, theo dõi chữ cái, v.v.

Trả lời

11

Nhận dạng cử chỉ, như tôi đã từng thấy, thường được thực hiện bằng cách sử dụng máy học kỹ thuật tương tự như phần mềm nhận dạng hình ảnh. Here's a cool project on codeproject about doing mouse gesture recognition in c#. Tôi chắc rằng các khái niệm khá giống nhau vì bạn có thể giảm vấn đề xuống không gian 2D. Nếu bạn nhận được một cái gì đó làm việc với điều này, tôi rất muốn nhìn thấy nó. Ý tưởng dự án tuyệt vời!

+0

@ascalonx, cảm ơn vì liên kết! Tôi chắc chắn nó sẽ hữu ích. – mmcdole

+0

Nhận dạng cử chỉ bằng chuột trong ActionScript: http://www.bytearray.org/?p=91 –

8

Một cách để xem nó là sự cố nén/nhận dạng. Về cơ bản, bạn muốn lấy toàn bộ dữ liệu, loại bỏ hầu hết dữ liệu và phân loại phần còn lại. Nếu tôi được làm điều này (từ đầu) tôi có lẽ sẽ tiến hành như sau:

  • làm việc với một cửa sổ lịch sử cán
  • lấy trọng tâm của bốn điểm trong khung hình bắt, lưu nó, và trừ nó ra khỏi tất cả các vị trí trong tất cả các khung.
  • yếu tố mỗi khung thành hai thành phần: hình dạng của chòm sao và chuyển động của CofG so với khung hình cuối cùng.
  • lưu CofG tuyệt đối cho khung cuối cùng quá
  • hàng loạt các thay đổi CofG mang đến cho bạn swipes, sóng vv
  • hàng loạt các chòm sao morphing mang đến cho bạn nhúm vv

Sau khi nhìn thấy ảnh của bạn (hai điểm trên mỗi bàn tay, không phải bốn điểm trên một, doh!) Tôi muốn thay đổi trên như sau:

  • Do tính CofG vào cặp, hãy cẩn thận với rằng:
    • Nếu có bốn điểm có thể nhìn thấy, cặp được chọn để giảm thiểu các sản phẩm của intrapair khoảng cách
    • Nếu có ba điểm có thể nhìn thấy, hai gần nhất là một cặp, một trong những khác là
    • Sử dụng khung trước/sau khác để ghi đè lên khi cần thiết
  • Thay vì chòm sao, bạn đã có cấu trúc lồng nhau của các cặp khoảng cách/hướng (tức là, một D/O giữa hai bàn tay và một cái nữa cho mỗi bàn tay).
  • Chuyển toàn bộ dữ liệu đã giảm xuống cho người nhận dạng cho từng cử chỉ và để họ phân loại những gì họ quan tâm.
  • Nếu bạn muốn nhận được dễ thương, làm một chút DSL để nhận ra các mô hình, và viết những thứ như:

    fire when 
        in frame.final: rectangle(points) 
        and 
        over frames.final(5): points.all (p => p.jerk) 
    

    hoặc

    fire when 
        over frames.final(3): hands.all (h => h.click) 
    
+0

@MarkusQ, cảm ơn nhận xét.Chỉ để tham khảo, thuật toán nhấp chuột của sinh viên Hà Lan hoạt động như sau: nếu wiimote mất dấu vết của một điểm và điểm khác trong cặp của nó nằm trong ngưỡng gần, thì đó là "bấm". – mmcdole

+0

Khi các ngón tay đến với nhau, Wiimote sẽ thấy cả hai ngón tay như một đốm và không còn hai nữa. Vì vậy, nó mất một trong những điểm của nó. Điều này cũng có thể xảy ra khi bàn tay của bạn không còn nhìn thấy được nữa vì vậy ngưỡng gần gũi được sử dụng để ngăn chặn các mặt tích cực sai. – mmcdole

0

Tôi không phải là rất thành thạo trong loại toán học này, nhưng tôi đã đọc ở đâu đó mà đôi khi mọi người sử dụng Markov Chains hoặc Hidden Markov Models để thực hiện Công nhận cử chỉ.

Có lẽ ai đó có ít nền tảng hơn ở khía cạnh này của Khoa học Máy tính có thể chiếu sáng hơn nữa và cung cấp thêm một số chi tiết.

0

Err .. Tôi đã làm việc về nhận dạng cử chỉ trong một năm qua, nhưng tôi không muốn nói quá nhiều vì tôi đang cố gắng sáng chế công nghệ của mình :) Nhưng ... chúng tôi ' đã có một số may mắn với thúc đẩy thích ứng, mặc dù những gì bạn đang làm trông khác nhau về cơ bản. Bạn chỉ có 4 điểm dữ liệu để xử lý, vì vậy tôi không nghĩ bạn thực sự cần "giảm" bất cứ điều gì.

Điều tôi sẽ điều tra là các chương trình như Flash biến vòng tròn được vẽ tự do thành vòng kết nối thực tế như thế nào. Có vẻ như bạn có thể theo dõi các điểm trong khoảng thời gian khoảng một giây, và sau đó "làm mịn" đường đi trong một số thời trang, và sau đó bạn có thể thoát khỏi việc mã hóa cử chỉ của mình (nếu bạn làm cho chúng đủ đơn giản). Nếu không, có, bạn sẽ muốn sử dụng một thuật toán học tập. Lưới thần kinh có thể hoạt động ... Tôi không biết. Chỉ cần tung ra ý tưởng :) Có thể xem cách OCR được thực hiện quá ... hoặc thậm chí Hough transforms. Dường như với tôi như thế này là một vấn đề nhận ra hình dạng nhiều hơn là nhận ra cử chỉ.

+0

Vâng, về cơ bản, vẽ một vòng tròn, một x, hoặc vuốt tất cả 4 điểm theo các hướng khác nhau ~ là cử chỉ ~. Trong thế giới 2d của tôi cử chỉ của tôi là hình dạng. Tôi sẽ phải nhìn sâu hơn vào các thuật toán học tập. – mmcdole

+0

Vâng, vâng, họ * là cử chỉ *, tôi chỉ có nghĩa là nếu bạn có thể tìm ra hình dạng của nó, bạn cũng có thể tìm ra cử chỉ đó là gì. tức là, tôi nghĩ rằng nhận dạng cử chỉ có thể giảm xuống để nhận dạng hình dạng (có thể là một vấn đề dễ giải quyết hơn - ít xác suất hơn). – mpen

0

cụ cử chỉ nhận dạng đơn giản nhất là tôi đã xem xét sử dụng một mẫu vector dựa trên nhận ra chúng. Ví dụ: bạn có thể xác định vuốt sang phải là "0", dấu kiểm là "-45, 45, 45", vòng tròn theo chiều kim đồng hồ là "0, -45, -90, -135, 180, 135, 90, 45, 0 ", v.v.

Các vấn đề liên quan