Nhận dạng dáng điệu của tay (hand-gesture)

Một phần của tài liệu xây dựng hệ thống tương tác giữa người và máy thông qua nhận dạng cử chỉ bàn tay (Trang 67)

2.2.1 Tìm kiếm theo tỉ lệ vàng (Golden Section Search)

Cho f(x) là hàm liên tục và đơn mốt (unimodal) trên [a,b] (hàm f(x) chỉ có duy nhất một cực tiểu trong khoảng [a,b]). Phương pháp Golden Section Search dựa trên ý tưởng của phương pháp chia đôi (bi-section): thu hẹp phạm vi tìm giá trị cực tiểu bằng cách so sánh các giá trị của hàm. Phương pháp này nhắm đến hai mục tiêu chính đó là: có hệ số giảm tối ưu để thu hẹp khoảng tìm kiếm và giảm thiểu số lần gọi hàm.

Mục tiêu thứ nhất dựa vào ý tưởng từ phương pháp chia đôi (bi-section), phương pháp bi-section sẽ tính điểm chính giữa m = (a+b)/2 và hai điểm x1, x2 với x1 = m - δ/2; x2 = m + δ/2, δ rất nhỏ, f(x1) ≠ f(x2). Nếu f(x1) < f(x2), thì giới hạn lại tìm kiếm trong khoảng [a, x1], ngược lại [x2, b]. Dù khoảng tìm kiếm được chia làm hai ở mỗi bước, nhưng chúng ta phải tính lại giá trị của hai hàm (f(x1) và f(x2)) tại mỗi bước nên chưa thật sự tối ưu.

Chúng ta chỉ muốn tính một hàm tại mỗi bước, hơn nữa cần tìm một hệ số giảm c sao cho với x1, x2 thuộc [a, b], chúng ta có hai trường hợp sau:

+ f(x1) < f(x2), thì [a, b] := [a, x2], với mức giảm khoảng giá trị x2 – a = c(b – a) => x2 = a + cb – ca => x2 = (1-c)a + cb

+ f(x1) > f(x2), thì [a, b] := [x1, b], với mức giảm khoảng giá trị b – x1 = c(b-a) => -x1 = cb – ca –b => x1 = ca + (1-c)b

Một khi chúng ta tìm được c, ta sẽ có được vị trí x1, x2. Ta xem xét trường hợp f(x1) < f(x2), [a, b] = [0, 1].

Nếu f(x1) < f(x2), ta gán lại x1 = 1 – c và tìm điểm kế tiếp, nằm bên trái hoặc phải điểm 1 – c.

+ Giả sử điểm kế tiếp nằm bên trái điểm x1 = 1 – c, thì x1 chính là điểm bên phải trong khoảng [0, c] và tính điểm tiếp theo x2 (dùng biểu thức tính x2 ở trên với a = 0, b = c):

1 – c = (1 – c)0 + cc => c2 + c – 1 = 0

Ta tìm được nghiệm dương c =ˆ3 2 √Ø) ≈ 0.6180

+ Giả sửđiểm kế tiếp nằm bên phải điểm x1 = 1 – c, thì x1 là điểm bên trái trong khoảng [0, c], và tính điểm tiếp theo x1 (dùng biểu thức tính x1 ở trên với a = 0, b = c)

1 – c = c0 + (1 – c)c => ( 1 – c )2 = 0

Nghiệm kép c = 1, không giảm khoảng giá trị, ta loại trường hợp này.

Tóm lại ta có hai trường hợp. Nếu f(x1) < f(x2), chúng ta giữ x1, gán x2 bằng x1 và tính x1 mới (x1 = ca + (1-c)b). Nếu f(x1) > f(x2), giữ x2, gán x1 bằng x2, tính x2 mới (x2 = (1 – c)a + cb).

Hình dưới đây miêu tả quá trình Golden Section Search.

Mã matlab của GSS như sau:

function [a,b] = gss(f,a,b,eps,N)

% Example: [a,b] = gss('myfun',0,1,0.01,20) c = (-1+sqrt(5))/2; x1 = c*a + (1-c)*b; fx1 = feval(f,x1); x2 = (1-c)*a + c*b; fx2 = feval(f,x2); fprintf('---\n'); fprintf(' x1 x2 f(x1) f(x2) b - a\n'); fprintf('---\n'); fprintf('%.4e %.4e %.4e %.4e %.4e\n', x1, x2, fx1, fx2, b-a); for i = 1:N-2 if fx1 < fx2 b = x2; x2 = x1; fx2 = fx1; x1 = c*a + (1-c)*b; fx1 = feval(f,x1); else a = x1; x1 = x2; fx1 = fx2; x2 = (1-c)*a + c*b; fx2 = feval(f,x2); end;

fprintf('%.4e %.4e %.4e %.4e %.4e\n', x1, x2, fx1, fx2, b-a); if (abs(b-a) < eps)

fprintf('succeeded after %d steps\n', i); return;

end; end;

2.2.2 Nhận dạng gesture với DTW và GSS

Phương pháp nhận dạng gesture trong đề tài này dựa trên ý tưởng “$1 Unistroke recognizer” của tác giả Jacob, Andrew D. Wilson và Yang Li [6]. Tuy nhiên tiền xử lý dữ liệu đầu vào và hàm khoảng cách ta dùng phương pháp khác, đó là dựa trên khoảng cách DTW, vốn hiệu quả hơn trong việc so sánh hai chuỗi thời gian.

Để nhận dạng một hand gesture (một dãy tọa độ của vị trí bàn tay lúc chuyển động), ta cần tiến hành các bước tiền xử lý dữ liệu đầu vào. Đầu tiên ta tịnh tiến điểm trung tâm về gốc tọa độ (0,0). Quay góc “bắt đầu” về 0o (góc “bắt đầu” chính là góc giữa trục hoành và đoạn thẳng nối điểm bắt đầu vào điểm trung tâm của gesture path).

Hình 2.1-48: Quay góc khởi đầu về góc 0o

Sau khi thực hiện phép quay, ta dùng phép biến đổi tỉ lệ (scale) về cùng một kích thước hình vuông tham chiếu.

Tất cả các gesture template và mẫu cần nhận dạng đều được tiến hành tiền xử lý, sau đó ta nhận dạng chúng thông qua phương pháp Golden Section Search, quay góc khởi đầu trong khoảng [-θo,θo] để tìm best core dựa trên khoảng cách DTW giữa các chuỗi thời gian này.

Tác phẩm: Ascending and Descending

"It doesn't matter how beautiful our theory is, it doesn't matter how smart we are. If it doesn't agree with experiment, it's wrong" – Richard Feynman

CHƯƠNG 3. THC NGHIM (adsbygoogle = window.adsbygoogle || []).push({});

3.1 Giới thiệu

Ở các chương trên đã giới thiệu những lý thuyết, thuật toán sẽ được sử dụng để xây dựng hệ thống tương tác giữa người và máy thông qua nhận dạng dáng điệu của bàn tay.

Hệ thống được thiết kế trên mô hình Server/Client như:

Hình 3.1-1: Mô hình liên kết của hệ thống

Recognition Sever sẽ nhận hình ảnh từ webcam, tiến hành xử lý và nhận dạng. Sau đó gửi kết quả nhận dạng được theo giao thức UDP trên cổng 16119. Định dạng kết quả được gửi từ server như sau:

H:code:x:y hoc G:code:x:y

Với tiền tố H có nghĩa là Hand Posture, G là Hand Gesture. Code là mã số lớp mà mẫu thuộc về. (x,y) là tọa độ của bàn tay. VD: H:0:3:54

Chương trình hiện tại làm việc với 12 lớp posture (hình dạng tay tĩnh), 6 lớp gesture (đường chuyển động/dáng điệu của tay).

0 1 2 3 4 5 6 7 8 9 10 11

0 1 2 3 4 5

Để thực hiện một gesture, ta dùng posture code 2 để báo hiệu bắt đầu và posture code 0 để kết thúc.

Hình 3.1-2: Cách thực hiện gesture số 0.

Sau khi nhận được kết quả nhận dạng từ chương trình server, chương trình client sẽ dựa vào tập tin cấu hình để phát ra các sự kiện giả lập bàn phím hoặc chuột, nhằm điều khiển một chương trình nào đó.

Hình 3.1-3: Giao diện chương trình Client.

Quá trình nhận dạng của chương trình Server như sau:

Ảnh đầu vào được xem như là một mẫu thử, dựa vào các kết quả từ giai đoạn huấn luyện. Chương trình sẽ phân loại xem posture thuộc lớp nào trong 12 lớp đã học được. Nếu chương trình bắt gặp posture code 2 (bắt đầu thực hiện gesture) nó sẽ lưu lại tất cả những vị trí của bàn tay trong lúc di chuyển vào một bộ đệm cho đến khi nhận

sẽ được tiến hành tiền xử lý và nhận dạng gesture bằng phương pháp DTW và GSS ở trên. Bộđệm sau đó sẽđược xóa trắng và lặp lại tiếp tục như trên.

Để nhận dạng hand posture xem nó thuộc về lớp nào trong 12 lớp trên thì chương trình server phải tiến hành một loạt các thao tác xử lý ảnh, các thuật toán học máy (machine learning) như biểu đồ ở dưới đây.

Hình 3.1-4: Quá trình nhận dạng posture của server.

Chương trình server sẽ xây dựng mô hình nền (background model) theo phương pháp Codebook bằng cách quan sát các ảnh đầu vào một thời gian (khoảng vài giây), sau đó dùng mô hình nền này để tách đối tượng cận cảnh (foreground) ra khỏi nền. Tiếp theo ta tiến hành phát hiện vùng màu da (skin detection) bằng phương pháp giới hạn biên ở phần lý thuyết. Việc trừ nền sẽ giúp tăng tốc skin detection vì giới hạn vùng tìm kiếm, đồng thời giúp giảm bớt sai số nhiễu từ môi trường.

Hình 3.1-5: Quá trình trừ nền

Ta dùng các phép lọc theo hình thái (morphological filtering) trên vùng màu da phát hiện ở bước trên để giảm bớt nhiễu. Sau đó, tìm khung bao chữ nhật (bounding rectangle) của nó, dùng khung bao này để lấy được mặt nạ trắng đen của tay. Tiến hành một vài phép biến đổi như tỉ lệ, tịnh tiến, quay nhằm đưa mặt nạ tay vừa khớp vào một hình tròn đơn vị có bán kính bằng 128 pixel.

Hình 3.1-6: Thực hiện morphological filtering, và chuẩn hóa mặt nạ tay thu được bằng các phép biến đổi hình học như quay, tịnh tiến, tỉ lệ.

Tiến hành rút trích đặc trưng trên mặt nạ tay đã chuẩn hóa bằng phương pháp Generic Fourier Descriptor, ta được một dãy các hệ số PFT (vector đặc trưng).

Ta dùng phương pháp tìm K láng giềng gần nhất bằng phép xấp xỉ giữa mẫu thử và các mẫu trong dữ liệu huấn luyện, rồi tính khoảng cách DTW theo vector đặc trưng giữa mẫu thử này và lần lượt K mẫu láng giềng tìm được. Ta tiến hành giảm các khoảng cách DTW này đi 27% (được chọn trong thực nghiệm) nếu mã lớp của nó trùng với mã lớp nhận được từ việc phân loại mẫu bằng phương pháp SVM. Sau đó ta chọn láng giềng có khoảng cách DTW nhỏ nhất, nếu khoảng cách này bé hơn “ngưỡng phân loại” thì lớp nhận dạng được chính là mã lớp của mẫu này, ngược lại nó sẽ trả về mã lớp là -1 (không thuộc lớp nào).

3.2 Công cụ và thiết bị 3.2.1 Phần cứng 3.2.1 Phần cứng

Webcam: Logitech Quickcam Orbit MF Video capture: 320x240 (24 bit depth) Frame rate: 30 frames/s

CPU: Intel Core 2 Duo P8400 2.27Ghz, 2GB RAM

3.2.2 Phần mềm, thư viện và môi trường phát triển

Chương trình Posture/Gesture Recognition Server chủ yếu được xây dựng trên nền tảng những bộ thư viện và các công cụ sau: (adsbygoogle = window.adsbygoogle || []).push({});

Tên Tác giả Giấy phép Mô tả

OpenCV Intel BSD Đây là một thư viện về xử lý

ảnh và thị giác máy rất mạnh. Có rất nhiều tính năng như: Xử lý hình ảnh Video I/O Các hàm toán học Nhận dạng Học máy

ANN Library Mount & Arya

LGPL Approximate Nearest

Neighbor Searching Library.

LibSVM Chih-Jen Lin BSD Support vector machine

library

LBImproved Lemire GPLv3 Thư viện tính DTW

Integrated Performance Primitives

Intel Commercial IPP là một thư viện mở rộng khai thác các tính năng multi- core giúp tăng tốc các hệ thống digital media và data- processing

Math Kernel Library Intel Commercial Math Kernel Library cung

cấp các API liên quan đến tính toán đã được tối ưu hóa trên các hệ thống CPU Intel.

Intel Vtune Intel Commercial Bộ công cụ giúp tối ưu hóa

chương trình thông qua profiling và tìm hotspot trong mã nguồn.

Intel C/C++ Compiler Intel Commercial Trình biên dịch C/C++ của Intel, giúp khai tác tối đa hiệu năng của hệ thống CPU Intel (đặc biệt Core 2 Duo).

Bảng 3.2-1: Thư viện và công cụ dùng để phát triển

3.3 Thiết kế và phát triển

Chương trình được xây dựng trên ngôn ngữ C/C++ được môđun hóa với các chức năng riêng biệt và sử dụng một số thư viện như trong bảng 3.2-1. Hình dưới đây chính là UML sequence diagram của chương trình:

3.4 Mục đích và phương pháp

Sau khi xây dựng thành công chương trình, ta cần thử nghiệm khả năng nhận dạng của nó. Với 12 lớp posture, ở mỗi lớp ta thử 10 lần ở các vị trí, góc độ nhìn khác nhau để xác định khả năng bất biến với phép quay, tịnh tiến, tỉ lệ trong việc nhận như miêu tả trong phương pháp mô tả hình dạng Generic Fourier Descriptor [12]. Với 6 lớp gesture, ta cũng tiến hành tương tự, 10 lần thử mỗi lớp.

Cuối cùng ta tiến hành thử tổng thể chương trình, nhằm xác định khả năng, thời gian đáp ứng, sự liên lạc đồng bộ giữ Server – Client thông qua việc điều khiển chương trình giải trí đa truyền thông Windows Media Center như trong mô hình 3.1-1.

3.5 Kết quả thu được

Kết quả của việc thử 10 lần trên mỗi lớp posture và gesture như sau:

0 1 2 3 4 5 6 7 8 9 10 11 100% 90% 100% 90% 90% 100% 80% 90% 90% 80% 100% 90% Độ chính xác trung bình là 91.67% 0 1 2 3 4 5 90% 80% 80% 90% 80% 70% Độ chính xác trung bình là 81.67%

Sử dụng hệ thống để điều khiển chương trình Windows Media Center. Với tập tin cấu hình như sau:

Hand code Giả lập keyboard Enter Esc Up Down Left Right Page up Page down

Pop-up menu Open Music Back

Page down Page up

Bảng 3.5-1: Thông tin cấu hình để giả lập sự kiện bàn phím (adsbygoogle = window.adsbygoogle || []).push({});

Kết quả thu được rất khả quan, các posture được nhận diện với độ chính xác có thể chấp nhận được (trên 90%), các gesture thì khó khăn hơn một chút (gần 80%).

Thời gian đáp ứng trung bình là 35ms/frame (khoảng 28 FPS). Dưới đây là một vài screenshot từ demo video:

Hình 3.5-2: Ra hiệu “Left” để chuyển qua mục Picture Library bên trái Play favorites

“Life is like riding a bicycle. To keep your balance you must keep moving”

– Albert Einstein

KT LUN

Trong luận văn này, em đã xây dựng một hệ thống tương tác giữa người và máy thông qua nhận dạng dáng điệu của bàn tay trên cơ sở những thuật toán, lý thuyết đã tìm hiểu được.

Đểđạt được những kết quả tuy còn một vài hạn chế như trên là một quá trình làm việc và nghiên cứu hết sức nỗ lực bên cạnh sự hướng dẫn tận tình của thầy Đào Văn Tuyết. Một lần nữa em xin chân thành cảm ơn đến các thầy cô, gia đình, bạn bè và những người đã hỗ trợ em trong suốt thời gian thực hiện đề tài này.

1. Kết qu đạt được

Sau đây là một số kết quảđã đạt được trong quá trình thực hiện đề tài trên:

1. Nắm bắt được phương pháp, thuật toán xử lý ảnh, máy học liên quan đến vấn đề nhận dạng dáng điệu bàn tay trong phần lý thuyết và vận dụng một cách hợp lý vào thực tiễn.

2. Tăng độ chính xác của phương pháp nhận dạng dáng điệu One-Dollar[6] qua việc kết hợp với DTW.

3. Sử dụng các thư viện, chương trình tối ưu hóa để tăng khả năng đáp ứng cho chương trình (thời gian xử lý trung bình mỗi frame là 35 mili giây). 4. Xây dựng hoàn tất chương trình thực thi các kết quả đã tìm hiểu được

với khả năng nhận dạng tốt (độ chính xác gần 90%).

2. Hướng phát trin

Những kết quảđạt được trong đồ án này vẫn chỉ ở mức nghiên cứu và thử nghiệm. Hệ thống vẫn còn rất nhạy cảm với sự biến đổi của môi trường xung quanh (ánh sáng, nền…), để hoạt động được tốt nó cần có một môi trường tương đối lý tưởng. Tuy nhiên điều này không phải lúc nào cũng có được trong thực tế, vì vậy đểứng dụng vào thực tiễn vẫn còn rất nhiều việc phải làm nhằm tăng độ chính xác của chương trình đó là:

- Tìm hiểu các cách tiếp cận và thuật toán khác của các tác giả cùng nghiên cứu về chủđề này (tiếp cận trên mô hình nhận dạng ba chiều).

- Sử dụng phương pháp stereo vision (dùng hai camera) để lấy độ sâu của ảnh, từ đó giảm thiểu sai số trong việc trừ nền và phân đoạn vùng bàn tay.

- Tìm hiểu việc kết hợp với các phần cứng hỗ trợ như Camera 3D…

TÀI LIU THAM KHO

Tiếng việt

[1] Nguyễn Thị Bạch Kim, Giáo trình các phương pháp tối ưu, lý thuyết và thuật toán, NXB Bách Khoa Hà Nội.

Tiếng Anh

[2] D. Chai và K. N. Ngan, “Face segmentation using skin colour map in videophone applications”, IEEE Transactions on Circuits and Systems for Video Technology 9 (4) (1999) 551-564.

[3] David M. Mount, Sunil Arya, ”An Optimal Algorithm for Approximate Nearest Neighbor Searching in Fixed Dimensions”, ACM-SIAM, 1994, pp. 573-582

[4] Francesca Gasparini, Raimondo Schettini, “Skin Detection using Color Pixel Classification with Application”.

[5] John Shawe-Taylor, Nello Cristianini, Support Vector Machines and other kernel- based learning methods, Cambridge University Press, 2000

[6] Jacob O. Wobbrock, Andrew D. Wilson , Yang Li, “Gestures without Libraries, Toolkits or Training: A $1 Recognizer for User Interface Prototypes”.

[7] Mathias Kölsch, Vision Based Hand Gesture Interfaces for Wearable Computing and Virtual Environments, Ph. D. Dissertation, August 2004.

[8] Martin Ester, Hans-Peter Kriegel, Jörg Sander, Xiaowei Xu, “A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise”. (adsbygoogle = window.adsbygoogle || []).push({});

[9] Shahzad Malik, “Real-time Hand Tracking and Finger Tracking for Interaction”. [10] Stan Salvador và Philip Chan, “FastDTW: Toward Accurate Dynamic Time Warping in Linear Time and Space”.

[11] V. Vapnik, “Nature of statistical learning theory”, Springer-Verlag, 2000.

[12] Zhang Dengsheng, Guojun Lu, “Generic Fourier Descriptor for Shape-based Image Retrieval”.

Website

OpenCV Library, http://sourceforge.net/projects/opencvlibrary/

Approximate Nearest Neighbor Library, http://www.cs.umd.edu/~mount/ANN/

Fast Dynamic Time Warping Library, http://code.google.com/p/lbimproved/

Library for Support Vector Machine, http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Intel Math Kernel Library, http://software.intel.com/en-us/intel-mkl/

Một phần của tài liệu xây dựng hệ thống tương tác giữa người và máy thông qua nhận dạng cử chỉ bàn tay (Trang 67)