Tải bản đầy đủ (.docx) (16 trang)

Nhận dạng cử chỉ bàn tay bằng phương pháp internalhaar like.

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (289.19 KB, 16 trang )

MỞ ĐẦU
Sự ra đời và phát triển của máy tính đã giúp ích rất nhiều cho công việc và
cuộc sống của con người. Với máy tính, con người có thể làm việc và giải trí theo
nhu cầu sử dụng của cá nhân... Tuy nhiên, việc giao tiếp giữa con người và máy
tính phụ thuộc chủ yếu vào bàn phím và chuột, hầu như con người luôn phải ngồi
thao tác trực tiếp với máy tính. Dần dần, các nhà sản xuất thấy được sự bất tiện và
đã tạo ra bàn phím và chuột không dây với mong muốn mang lại sự tự do hơn cho
người dùng. Tuy nhiên,với bàn phím không dây thì con người vẫn phải tương tác
với máy tính bằng các phím cơ học. Con người chỉ thật sự được thoải mái khi việc
tương tác với máy tính được thực hiện thông qua ngôn ngữ cử chỉ và giọng nói. Đó
chính là vấn đề đặt ra cho bài toán phát hiện bàn tay.
Trong cuộc sống hàng ngày, phát hiện bàn tay có thể giúp cho việc giao tiếp
giữa người với máy tính, vì máy tính sẽ chuyển ngôn ngữ cử chỉ thành chữ viết.
Trong công nghiệp và sản xuất, chỉ cần trang bị cho các robot hệ thống camera,
việc điều khiển robot sẽ trở nên đơn giản hơn bao giờ hết. Trong lĩnh vực đồ họa 3
chiều, ta có thể dùng một số động tác yêu cầu máy tính xoay mô hình theo ý muốn
của mình. Trong công việc văn phòng, phát hiện bàn tay giúp ta có thể yêu cầu
máy tính thực thi một chương trình, mở một bài hát, gửi một lá thư ... chỉ với một
vài cử chỉ ra hiệu từ xa. Trong lĩnh vực giải trí, các trò chơi thực tế ảo (Virtual
Reallity, người chơi sẽ điều khiển hành động nhân vật bằng chính hành động của
mình.
Với những yêu cầu thực tế và ứng dụng đem lại của lĩnh vực phát hiện bàn
tay, mục tiêu của đề tài này là là tìm hiểu về phương pháp phát hiện bàn tay, từ đó
xây dựng được mô hình phù hợp cho bài toán phát hiện bàn tay, áp dụng vào điều
khiển chương trình máy tính. Bố cục của bài bào cáo bao gồm các phần chính sau

1


Mở đầu
Phần mở đầu tập trung phân tích và nêu rõ tính cấp thiết của đề tài, mục tiêu


và đối tượng nghiên cứu của đề tài cũng như giới thiệu lịch sử phát triển của vấn
đề nghiên cứu và trình bày cấu trúc của đề tài.
Chương 1 : Tổng quan về thị giác máy tính.
Chương đầu tiên sẽ giới thiệu tổng quan về thị giác máy tính bao gồm khái
niệm, và ứng dụng thực tế của nhận dạng.
Chương 2 : Phương pháp phát hiện bàn tay Internal Haar-like.
Chương này giới thiệu bài toán phát hiện bàn tay, tổng quan về đặc trưng
của phương pháp phát hiện bàn tay Internal Haar-like và việc áp dụng đặc trưng
Haar-like để phát hiện bàn tay.
Chương 3: Chuẩn bị dữ liệu và tìm hiểu thuật toán Adaboots.
Tìm hiểu và viết chương trình trên phần mềm matlap để lấy dữ liệu cần
thiết nhất cho quá trình huấn luyện.
Chương 4 : Cài đặt thuật toán và xây dựng hệ thống thử nghiệm.
Trình bày chi tiết về sơ đồ hệ thống phát hiện bàn tay và nguyên lý hoạt
động của từng khối trong sơ đồ. Chương này cũng trình bày về quy trình thiết kế
tập cử chỉ tay, tìm hiểu đánh giá các tập cử chỉ tay đã tồn tại, từ đó đề xuất một tập
cử chỉ tay phù hợp cho bài toán phát hiện bàn tay điều khiển chương trình máy
tính. Cuối chương là phần thử nghiệm và đánh giá so sánh kết quả của hệ thống với
một số phương pháp khác trên các tiêu chí của bài toán phát hiện bàn tay.
Chương 5: Kết Luận.
Nhận xét ưu nhược điểm của phương pháp và hướng phát triển.

2


CHƯƠNG I
TỔNG QUAN VỀ THỊ GIÁC MÁY TÍNH
1.1 Giới thiệu về thị giác máy – Computer Vision.
Thị giác máy tình là một lĩnh vực đã và đang phát triển mạnh mẽ trên thế
giới hiện nay.Khái niệm về thị giác máy tính – Computer Vision có lien qua tới

nhiều ngành học và có nhiều hướng nghiên cứu khác nhau.Kể từ những năm 70
của thế kỉ 20 khi mà khả năng tính toàn của các máy tính trở nên mạnh mẽ,nó
có thể giải quyết được những công việc cần tới tốc độ cao như xử lý các tập
ảnh hay các đoạn video thị giác máy tính được nhắc đến,nghiên cứu và phát
triển cho đến nay
Thị giác máy tính là một lĩnh vực rất mới mẻ đối với các nhà nghiên cứu ở
Việt Nam,nó chỉ mới xuất hiện gần đây ở trong các tổ chức quân đội và một số
viện nghiên cứu khác.Việc áp dụng thị giác vào các nghiên cứu khoa học được
coi là một khởi đầu cho chặng đường phát triển của thị giác máy ở các trường
đại học hiện nay.
1.2 Thế nào là thị giác máy ?
Thị giác máy tính bao gồm lý thuyết và các mặt kỹ thuật liên quan nhằm
mục đích tạo ra một hệ thống nhân tạo có thể nhận thông tin từ các hình ảnh
thu được hoặc các tập dữ liệu đa chiều.
Máy móc càng ngày ngày càng thông minh ,nó không chỉ thay con người
làm những công việc nặng nhọc và nhàm chán mà nó còn có một số khả
năng bắt chước động vật và con người.Một trong số những khả năng đó là
nhận biết được thế giới qua “mắt” của nó.bằng việc kết hợp với các mô hình
khác nữa như máy học,mạng nơron..giúp cho chúng dần tiến tới một hệ
3


thống nhân tạo có những quyết định hoạt và chính các hơn.
Lĩnh vực nghiên cứu của thị giác máy rất rộng ,và đặc bđiểm chung
là các bài toán về thị giác đều không có một đề bài chung và cách giải quyết
nhất định cho những trưởng hợp cụ thể.
Ta có thể thấy sự tương quan giữa thị giác máy với các
lĩnh vực khác như sau:
1.3 Các ứng dụng của thị giác máy
Một số ứng dụng của thị giác máy vào các lĩnh vực như sau:



Điều khiển tiến trình(ví dụ : trong các robot công nghiệp,xe tự lái..)



Phát hiện sự thay đổi(ví dụ : các thiết bị giảm sát )



Tổ chức thông tin(ví dụ như chuổi ảnh liên tục)
 Mô



hình hóa đối tượng (ví dụ xử lý ảnh trong y học)

Tương tác (đóng vai trò làm đầu vào cho thiết bị trong quá trình tương tác

giữa người và máy).
1.4 Các thư viện thị giác máy mã nguồn mở.
Chúng ta có thể tận dụng những thành quả của cộng đồng mã nguồn mở
để áp dụng cho ứng dụng thị giác máy của mình.Hiện nay trên thế giới có rất
nhiều thư viện mã nguồn mở cho chúng ta sử dụng như :
- Intel OpenCV
- CMVision
- ImLib3D
- Imalab
- …..v …v


4


1.4.1 Tìm hiểu thư viện Intel OpenCV.

Intel đưa ra phiên bản OpenCV đầu tiên vào năm 1999.Ban
đầu,nó chỉ là thư viện xử lý ảnh của Intel.Về sau,tính lệ thuộc đó
đã được loại bỏ và bây giờ bạn có thể sử sụng OpenCV như một
thư viện độc lập.OpenCV là một thư viện đa nên tảng,nó chấp
nhận cả Window và Linux,hơn thế nữa gần đây còn chấp nhận
thêm Mac OSX.
OpenCV là một một thư viện thị giác máy tính mã nguồn mở của
Intel nó có thể làm đơn giản hóa công việc lập trình thị giác máy
tính của bạn. OpenCV bao gồm nhiều khả năng tiên tiến-tìm,theo
dõi,nhận dạng các bề mặt,lọc Kalman,là sự đa dạng của một hệ
thống trí tuệ nhân tạo. Ngoài ra nó còn cũng cấp các cơ sở thuật
toán thị giác máy tính thông qua các giao diện lập trình ứng dụng
ở mức thấp.Nó được đóng gói và hoàn toàn miễn phí,người dùng
có thể sãn sàng sử dụng cho những mục đích khác nhau của họ.

CHƯƠNG II
PHƯƠNG PHÁP PHÁT HIỆN BÀN TAY INTERNAL HAAR - LIKE

5


1

Tổng quan về đặc trưng Haar-like.
Đặc trưng Haar like là một loại đặc trưng thường được dùng cho bài toán nhận


dạng trên ảnh. Mỗi đặc trưng Haar-like chứa 2, 3 hoặc 4 miền hình học có màu
“trắng” hoặc “đen.” dùng để tính độ chênh lệch giữa các giá trị điểm ảnh trong các
vùng kề nhau. Trong hình 1.1a và 1.1b, giá trị của feature cho bởi một ảnh bằng
hiệu số giữa tổng các điểm ảnh thuộc hai vùng hình chữ nhật sáng và tối. Trong
hình 1.1c thì giá trị feature bằng tổng các điểm ảnh trong hai vùng hình chữ nhật
bên ngoài trừ cho tổng các điểm ảnh trong hình chữ nhật ở giữa. Trong hình 1.1d,
giá trị feature bằng tổng các điểm ảnh nằm trong vùng hai hình chữ nhật màu tối
trừ cho tổng các điểm ảnh nằm trong hai hình chữ nhật màu sáng.

Hình 1.1a - Các đặc trưng cạnh

6


Hình 1.1b - Các đặc trưng đường

Hình 1.1c - Các đặc trưng bao quanh tâm

Hình 1.1d - Đặc trưng đường chéo.

7


Giá trị của một đặc trưng Haar-like chỉ đơn giản là sự khác biệt giữa tổng các giá
trị xám của các pixel trong vùng “đen” với tổng các giá trị xám của các pixel trong
vùng “trắng”:
f(x)=Sumblack rectangle (pixel gray level) – Sumwhite rectangle (pixel gray level)
Nhận thấy ý nghĩa của đặc trưng Haar-like là nó thể hiện được tri thức về
các đối tượng trong ảnh (thông qua việc thể hiện mối quan hệ giữa các bộ phận của

đối tượng.)
Ta tính giá trị của đặc trưng Haar-like rất nhanh thông qua một cách thức được gọi
là “Integral Image.” Ở đây, Integral Image tại vị trí (x, y) có giá trị bằng tổng các
giá trị pixel nằm trong hình chữ nhật được định bởi góc trái trên là (0, 0) và góc
phải dưới là (x, y):

P ( x, y ) =

∑ i( x' , y ' )

x '≤ x , y '≤ y

Từ đây, ta có thể tính được ngay tổng các giá trị pixel của một hình chữ nhật bất kỳ
thông qua Integral Image tại 4 đỉnh của nó.
Ví dụ: Tính D.

8


Trong hình vẽ trên:


A, B, C, D lần lượt là tổng các giá trị pixel của hình chữ nhật tương
ứng.



P1, P2, P3, P4 lần lượt là Integral Image tại 4 đỉnh của hình chữ nhật D.

Có ngay:

P1 = A, P2 = A + B, P3 = A + C, P4 = A + B + C + D
Suy ra:
P1+ P4–P2–P3= A + (A + B + C + D) – (A + B) – (A + C) = D
Vậy ta có: D = P1 + P4 – P2 – P3

2

Hình dung ban đầu về việc áp dụng đặc trưng Haar - Like để phát hiện bàn
tay.
Để phát hiện bản tay ảnh được quét bằng một cửa sổ con chứa một đặc trưng
Haar-like.

9


Ứng với một đặc trưng Haar-like fj ,một bộ phận lớp yếu yj(x) được định nghĩa
như sau:

Trong đó:




x là cửa sổ con.
là ngưỡng.
là hệ số với ý nghĩa là quyết định dấu của bất phương trình.

Ta hiểu công thức này đơn giản như sau : nếu giá trị của đặc trưng Haar-like tại
cửa sổ con x vượt quá một ngưỡng nào đó thì đó là bàn tay, ngược lại thì không
phải là bàn tay.


10


CHƯƠNG 3
CHUẨN BỊ DỮ LIỆU VÀ TÌM HIỂU THUẬT TOÁN ADABOOTS.

I. CHUẨN BỊ DỮ LIỆU.
1.1 Tìm hiểu và viết chương trình lấy dữ liệu trên môi trường matlap.
function getGroundTruth4Images(sourceDir,desDir,result_file,first_time)
finished = 0;
current_file_idx = 1;
if (first_time)
display('Lan 1');
ground_truth.dir_name = desDir;
ground_truth.files = getAllFiles(sourceDir current_file_idx = 1;
else
display('Lam tiep');
load(result_file);
end
if(~finished)
numFiles = size(ground_truth.files,1);
%dirImg = 'D:\MyDocuments\Downloads\learm';
figure('units','normalized','outerposition',[0 0 1 1]);
for i = current_file_idx:numFiles
img=imread(ground_truth.files{i});
fileSave = strrep(ground_truth.files{i}, sourceDir, desDir);
size(img)
imshow(img);
title(strcat('Image:',num2str(i),'/',num2str(numFiles),':',...

ground_truth.files{i}));
set(gcf,'units','normalized','outerposition',[0 0 1 1]);
hRect = imrect;% cho phép tạo và kéo chọn hình chữ nhật.
pause; %tạm dừng chương trình
rect = getPosition(hRect);% lấy tât cả hình chữ nhật.
ground_truth.rects(i,:) = rect(:);%danh sách các hình chữ nhật thứ i..1
hình có 4 thông tin gán vào.

11


croppedImg = imcrop(img, rect); %sao chép dữ liệu
imwrite(croppedImg,fileSave);% ghi kết quả.
current_file_idx = i;% ảnh tiếp theo.
save(result_file, 'ground_truth', 'finished','current_file_idx');% ghi lại
những giá trị hiện tại.
end
close all;
finished = 1;
save(result_file, 'ground_truth', 'finished') % ghi lại kết quả.
end.
1.2 Dữ liệu huấn luyện.
Dữ liệu huấn luyện và kiểm thử được lấy từ cơ sở dữ liệu NUS image
database.

-

Bộ ảnh gốc có: gồm 280 ảnh có kích thước 160x120(pixels) .
Chúng ta tiến hành lấy dữ liệu huấn luyện qua 2 lượt quét hình chữ nhật
chứa đặc trưng Haar-like.


Lượt 1: chúng ta tiến hành quét một hình chữ nhật có kích thước to nhất chứa đặc
trưng Haar-like phía bên trong lòng bàn tay không chứa viền.

Hình ảnh khi quét hình chữ nhật chứa đặc trưng Haar-like.

Kết quả sau khi quét hình chữ nhật chứa đặc trưng Haar-like là dữ liệu để
chúng ta tiến hành huấn luyện ở chương sau.
12


Hình ảnh kết quả .

Lượt 2: chúng ta tiến hành quét một hình chữ nhật có kích thước nhỏ nhất chứa
đặc trưng Haar-like cả bàn tay chứa cả viền.

Hình ảnh khi quét hình chữ nhật chứa đặc trưng Haar-like chứa cả bàn tay.

Kết quả sau khi quét hình chữ nhật chứa đặc trưng Haar-like là dữ liệu để
chúng ta tiến hành huấn luyện ở chương sau.
13


Hình ảnh kết quả.

1.3 Kịch bản huấn luyện.

II.

TÌM HIỂU THUẬT TOÁN ADABOOTS.


1. Thuật toán Adaboost (Adaptive boost) với bộ nhận dạng cử chỉ.
Sơ bộ về ý tưởng: Kỹ thuật Boosting: nguyên tắc cơ bản của Boosting là kết
hợp các bộ phân lớp yếu (hay các bộ phân lớp cơ sở) để tạo nên một bộ phân
lớp mạnh. Các bộ phân lớp yếu này thậm chí chỉ cần nhỉnh hơn phương pháp
random một chút. Bằng cách này, ta nói bộ phân lớp đã được “boost.”
Adaboost là một thuật toán sử dụng kỹ thuật Boosting được đưa ra bởi
Freund và Schapire vào 1996. Thuật toán này được sử dụng rất phổ biến cho
bài toán nhận dạng cử chỉ bàn tay.
Điểm cải tiến của Adaboost là ta sẽ gán cho mỗi mẫu một trọng số. Ý nghĩa
của việc gán trọng số như sau:
14


Ở mỗi vòng lặp của quá trình huấn luyện, khi một bộ phân lớp yếu yi đã
được xây dựng, ta sẽ tiến hành cập nhật trọng số cho các mẫu. Việc cập nhật
này được tiến hành như sau: ta sẽ tăng trọng số của các mẫu bị phân lớp sai
bởi bộ phân lớp yếu yi và giảm trọng số của các mẫu được phân lớp đúng bởi
yi. Bằng cách này, ở vòng lặp kế, ta sẽ xây dựng bộ phân lớp yếu yi+1 theo
hướng: tập trung vào các mẫu bị phân lớp sai bởi bộ phân lớp yếu trước đó.
Cuối cùng, để có được bộ phân lớp mạnh, ta sẽ kết hợp tuyến tính các bộ
phân lớp yếu đã tìm được lại với nhau. Mỗi bộ phân lớp yếu sẽ được đánh
một trọng số tương ứng với độ tốt của bộ phân lớp yếu đó.
Đến đây, có lẽ ta đã hiểu được ý nghĩa của từ “Adaptive” (thích nghi) trong
tên gọi của thuật toán này: các bộ phân lớp yếu tạo thành một chuỗi, trong
đó bộ phân lớp yếu sau sẽ tập trung giải quyết các mẫu bị phân lớp sai bởi
các bộ phân lớp yếu trước đó.

2.Thuật Toán.
Cho tập ảnh huấn luyện (x1, t1), …, (xn, tn) với ti {-1, 1}

1. Khởi tạo hệ số trọng cho mỗi mẫu huấn luyện: với n = 1, 2, …, N.
2. For m = 1, …, M:

(a)Xây dựng bộ phân lớp yếu ym:
+ Với mỗi đặc trưng j, xây dựng một bộ phân lớp yjvới độ lỗi:
(1.0)
với nếu và = 0 nếu ngược lại.
+ Chọn bộ phân lớp yj với độ lỗi nhỏ nhất ta được ym.
(b) Cập nhật trọng số:
+ Tính:
(1.1)
và:
(1.2)
+ Cập nhật trọng số:
(1.3)
3. Bộ phân lớp mạnh cuối cùng:
(1.4)

15


16



×