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

Xây dựng bộ nhận dạng cử chỉ

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 (466.91 KB, 11 trang )

 




XÂY DỰNG BỘ NHẬN DẠNG CỬ CHỈ
4.1. Giới thiệu về bộ nhận dạng
OpenCV có hỗ trợ sẵn các file nhận dạng (file *.xml) cho các tác vụ nhận dạng mặt
người, nhận dạng mắt và nhận dạng thân hình người nhưng không cung cấp các file nhận
dạng cho cử chỉ bàn tay. Vì vậy, ở phần này, ta sẽ tiến hành huấn luyện 7 bộ nhận dạng khác
nhau cho 7 cử chỉ riêng biệt dùng phương pháp HaarTraining. Mỗi bộ nhận dạng này sẽ có
nhiệm vụ kiểm tra xem trong khung hình có chứa cử chỉ tương ứng hay không. Hình bên
dưới là một ví dụ về cấu trúc của bộ nhận dạng cho chữ “A”.
Tương tự, ta cũng sẽ xây dựng các bộ nhận dạng cho các cử chỉ còn lại
4.2. Xây dựng bộ nhận dạng
Sơ đồ thuật toán huấn luyện bộ nhận dạng cử chỉ
 Xây dựng tập mẫu theo đặc trưng Haar:
Tập huấn luyện bao gồm các mẫu positive (đối tượng cần nhận dạng) và mẫu negative
(mẫu không chứa đối tượng).
 Xây dựng bộ phân loại yếu (weak classifiers):
Mỗi bộ phân loại yếu gồm có 1 đặc trưng và 1 ngưỡng:



>
=
khaùc hôïptröôøng

0
)(1
)(


kk
k
xf
xh
θ
Trong đó: θ: Ngưỡng, f
k
: đặc trưng của mẫu.
Công thức trên có ý nghĩa như sau: nếu giá trị vector đặc trưng của mẫu cho bởi hàm
lượng giá trị của bộ phân loại vượt qua một ngưỡng cho trước thì mẫu là object (đối
tượng cần nhận dạng), ngược lại thì mẫu là background (không phải đối tượng).
Bộ phân loại yếu được xây dựng bằng thuật toán AdaBoost như sau:
1. Cho một tập huấn luyện gồm n mẫu (x,y) với x ∈ X, y ∈{-1,+1}
2. Chọn trước giá trị nhỏ nhất phân loại đúng mẫu dương tính (min detection rate) và
giá trị lớn nhất nhận dạng sai của mẫu âm tính (max false alarm)
3. Xây dựng tập đặc trưng Haar-like và tính toán các bảng SAT cho tất cả các mẫu
trong tập huấn luyện.
4. Khởi tạo trọng số ban đầu cho tất cả các mẫu
n
w
kt
1
,
=
5. Tạo bộ phân loại yếu
• Với mỗi đặc trưng trong tập đặc trưng, xây dựng một bộ phân loại yếu h
j
với ngưỡng
j
θ

và tính
giá trị lỗi
i
ε
của bộ phân loại này:
kkj
n
k
ktj
yxhw
−=

)(
,
ε
• Từ các h
j
đã có, chọn ra h
j

i
ε
nhỏ nhất, ta được h
t
:
RXxfgxh
tttt
→=
:)),(()(
θ

• Cập nhật lại trọng số:




=
×=

+
kkt
kkt
t
kt
kt
yxhe
yxhe
Z
w
w
t
t
)(,
)(,
,
,1
α
α
Trong đó:










=
j
j
t
ε
ε
α
1
ln
2
1

 !

"!

#!

$!

%!

&!


'!

(!
)*+,!
-! .//0,-1233%
với

+
=
k
ktt
wZ
,1
là hệ số tiêu chuẩn (normalization factor)
Giá trị ngưỡng
θ
:
Giá trị ngưỡng θ được chọn nhờ vào giá trị min dection rate (min hit rate). Min
detection rate là tỉ lệ nhận dạng đúng tối thiểu các mẫu dương tính mà bộ phân loại phải
đạt được, giá trị do chúng ta xác lập khi bắt đầu quá trình huấn luyện. Bằng cách sắp xếp
các mẫu dương tính x
k
theo F
t
(x
k
) tăng dần:
Chọn ngưỡng
θ

dựa vào min Dectection Rate các mẫu positive
Trong hình trên, tỉ lệ nhận dạng đúng tối thiểu các mẫu positive được chọn là
0,995. Do đó, phần tử được chọn làm ngưỡng là mẫu đầu tiên trong danh sách sắp tăng.
c Ghép tầng bộ phân loại yếu thành bộ phân loại mạnh:
Bộ nhận dạng mặt người là một cấu trúc ghép tầng gồm K tầng, f
i
, d
i
lần lượt là tỉ
lệ nhận dạng sai tối đa mẫu âm tính (max fasle alarm) và tỉ lệ nhận dạng đúng tối thiểu
mẫu dương tính (min detection rate) của bộ phân loại tầng thứ i, max false alarm và min
detection rate của cây ghép tầng sẽ lần lượt là:

=
=
K
i
i
fF
1

=
=
K
i
i
dD
1
Thủ tục ghép tầng:
• Xác lập max false alarm f, min dectection rate d cho các bộ phân loại ở mỗi tầng

và số tầng tối đa bộ phân loại sẽ có.(d = 0.997, f = 0.5)
• Tính False Alarm F cho bộ phân loại chính
• F
0
= 0, i = 0
• P, N là số lượng mẫu dương tính và âm tính.
• P
0
,N
0
là tập dương tính và âm tính cho bộ phân lớp H
o
ở tầng đầu tiên
• Trong khi F
i
> F
 Huấn luyện bộ phân loại H
i
từ tập P
i
và N
i
với dection rate d và max false
alarm f (tạo bộ phân loại - classifier)
 Thêm H
i
vào cây phân lớp
 Dùng cây phân lớp hiện có để tính F
i+1
: Duyệt qua N mẫu âm tính cho đến khi

nào tìm đủ n mẫu mà cây phân lớp hiện có phân loại sai
N
n
F
i
=
+
1
 Nếu F
t+1
>F, đưa n mẫu âm tính trên vào N
i+1
; xây dựng P
i+1
với tối đa p mẫu
dương tính mà cây phân lớp hiện có phân loại đúng.
1+← ii
Qua thuật toán trên ta thấy, các mẫu âm tính trong tập huấn luyện của bộ phân loại tầng
sau sẽ là những mẫu âm tính mà bộ phân loại tầng trước đó nhận sai. Như vậy, nó có điều
kiện tập trung học những mẫu background khó.
4.3. Hoạt động của bộ nhận dạng
Khi hình ảnh được lấy vào từ webcam, một khung ảnh sẽ quét để trích tất cả các vùng
ảnh ở các kích thước khác nhau và đưa vào bộ nhận dạng. Kích thước ban đầu của khung ảnh
được quy định trước cho từng cử chỉ khác nhau. Các khung ảnh sẽ được dịch theo chiều
ngang và chiều dọc một lượng 1 hoặc 2 pixel từ góc trên bên trái cho đến khi dừng lại ở góc
dưới bên phải. Ở lượt quét kế tiếp, khung ảnh sẽ được mở rộng ra theo tỉ lệ tăng (scale
factor) được chọn trong chương trình và tiếp tục mở rộng ở các lượt quét kế cho đến khi phủ
kín ảnh cần nhận dạng.
Các khung ảnh mở rộng ra sau mỗi lượt quét với tỉ lệ tăng 1.05
Hai thông số kích thước ban đầu và tỉ lệ tăng ảnh hưởng khá lớn đến kết quả nhận dạng.

Nếu ta chọn hai thông số này quá nhỏ thì tốc độ nhận dạng của hệ thống sẽ giảm đi đáng kể,
ảnh hưởng đến tiêu chí thời gian thực của ứng dụng. Nếu chọn quá lớn sẽ gây khó khăn trong
việc phát hiện cử chỉ dẫn đến giảm Dectection Rate của hệ thống. Trong luận văn này, các
thông số được chọn để cho ra kểt quả nhận dạng tốt nhất, kích thước ban đầu bằng kích
thước huấn luyện và tỉ lệ tăng bằng 1.2 cho các khung ảnh.
Thông số tiếp theo là min_neighbors được chọn để làm giảm False Alarm của việc nhận
dạng. Một cử chỉ thật sự sẽ được phát hiện trong nhiều lần quét khác nhau của khung ảnh, ta
chỉ công nhận một vùng ảnh là cử chỉ nếu số lần nó được phát hiện lớn hơn số
min_neighbors. Trong thiết kế, ta đặt số này bằng 2, việc đặt cao quá sẽ làm giảm Dectection
Rate của hệ thống.
Dùng OpenCV, ta có thể lựa chọn một trong nhiều phương pháp khác nhau để phát hiện vật
thể. Có hai phương pháp đáng chú ý nhất:
• Phương pháp CV_HAAR_DO_CANNY_PRUNING: Dùng thuật toán phát hiện đường
biên Canny để loại bỏ những vùng ảnh chứa quá nhiều hoặc quá ít biên, không có khả
năng chứa vật thể. Một ngưỡng thích hợp được đặt vào sẽ giúp tăng tốc độ nhận dạng
đáng kể.
• Phương pháp CV_HAAR_FIND_BIGGEST_OBJECT: Cho phép chương trình dừng
quét để chuyển qua khung hình tiếp khi đã phát hiện được vật thể cần nhận dạng
trong ảnh đưa vào. Quá trình này làm tăng tốc độ nhận dạng lên hơn 10 lần so với các
phương pháp cổ điển trước đây. Trong bài toán phát hiện cử chỉ bàn tay của luận văn
này, ta chỉ cần phát hiện một cử chỉ tại một thời điểm nên phương pháp này được
chọn để tăng tốc nhận dạng ở chế độ thời gian thực. Phương pháp này được hỗ trợ
trong các phiên bản OpenCV từ 1.1pre1a trở về sau.
4.4. Thu thập ảnh mẫu và huấn luyện
Các ảnh không tích cực (không chứa hình đối tượng) được học viên lấy từ nguồn dữ liệu
có sẵn với các dạng hình phong cảnh thiên nhiên, hình chân dung, động thực vật, nội thất,
kiến trúc,… Các ảnh không tích cực, không chứa đối tượng (negative image) được sưu
tầm dễ dàng từ các nguồn ảnh có sẵn.
Các ảnh tích cực trong luận văn này được chụp lại bằng máy ảnh , sao đó lựa chọn những
ảnh có chất lượng tốt để đem huấn luyện. Việc sưu tầm và tìm kiếm ảnh mẫu phục vụ cho

công tác học huấn luyện cho máy tính đòi hỏi tiêu tốn nhiều thời gian.
Với mỗi cơ sở dữ liệu được tạo thành, học viên đã sử dụng hơn 550 hình tích cực (hình
có chứa đối tượng - positive image) khoảng 1500 hình không tích cực (không chứa đối
tượng - negative image) dùng cho huấn luyện.
Trong công cụ huấn luyện OpenCV của Intel có sẵn lệnh Objectmarker.
Lệnh này dùng để đánh dấu vùng có chứa đặc trưng của đối tượng có trong ảnh bằng
cách dùng hình chữ nhật để đánh dấu khoanh vùng chứa đặc trưng.
Cũng sử dụng công cụ đã nói ở trên, sử dụng lệnh Createsamples và Haartrainning để
huấn luyện tạo cơ sở dữ liệu đặc trưng và xuất cơ sở dữ liệu đó ra dạng file .xml phục vụ
trong mã lệnh chương trình phần mềm nhận dạng của luận văn.
 createsamples.exe
Để tạo mẫu huấn luyện positive, ta dùng chương trình createsamples.exe. Dùng
chương trình này, ta có thể tạo tập các mẫu positive từ một hình đơn hoặc từ tập hợp
nhiều hình đã được đánh dấu sẵn vật thể.
Nếu ta chọn chế độ tạo tập mẫu từ một hình đơn, chương trình createsamples.exe sẽ
tiến hành các thao tác xử lí như xoay ảnh hoặc thay đổi mức xám ngẫu nhiên để tạo
thành một tập hợp các mẫu huấn luyện.
Các tham số của chương trình huấn luyện gồm có:
- vec <vec_file_name>
Tên của file xuất chứa các mẫu positive dùng để huấn luyện.
- img <image_file_name>
Ảnh gốc vật thể (VD: logo của một công ty…)
- bg <background_file_name>
File mô tả background
- num <number_of_samples>
Số lượng mẫu positive muốn phát sinh ra.
- bgcolor <background_color>
Màu background
- bgthresh <background_color_threshold>
- inv

Nếu được khai báo, màu sắc trong các mẫu sẽ bị đảo ngược
- randinv
Nếu được khai báo, màu sắc sẽ bị đảo ngược ngẫu nhiên.
- maxidev <max_intensity_deviation>
Độ thay đổi cường độ tối đa ở những pixel của mẫu positive.
- maxxangle <max_x_rotation_angle>,
- maxyangle <max_y_rotation_angle>,
- maxzangle <max_z_rotation_angle>
Góc xoay tối đa, tính theo radian
-show
Nếu được khai báo, mỗi mẫu tạo thành sẽ được hiện lên. Nhấn Esc sẽ tiếp
tục quá trình tạo mẫu không kèm theo hiện hình mẫu.
- w <sample_width>
Chiều rộng tính bằng pixel của kích thước huấn luyện mẫu positive.
- h <sample_height>
Chiều cao tính bằng pixel của kích thước huấn luyện mẫu positive.
 haartraining.exe
Sau khi tạo xong các mẫu huấn luyện, ta tiến hành huấn luyện dùng chương trình
haartraining.exe có các tham số như sau:
- data <dir_name>
Tên đường dẫn đến tập tin chứa kết quả huấn luyện
- vec <vec_file_name>
Tên file chứa các mẫu positive (đã được tạo trước bởi createsamples.exe)
- bg <background_file_name>
File mô tả background
- npos <number_of_positive_samples>,
- nneg <number_of_negative_samples>
Số lượng ảnh positive hay negative dùng trong huấn luyện.
- nstages <number_of_stages>
Số lượng stage muốn huấn luyện

- mem <memory_in_MB>
Kích thước bộ nhớ dành cho tính toán huấn luyện (đơn vị MB). Dành nhiều bộ
nhớ sẽ giúp tăng tốc quá trình huấn luyện.
- sym (mặc định),
- nonsym
Cho biết vật thể trong huấn luyện có đối xứng theo trục đứng hay không. Tính
đối xứng sẽ giúp giảm thời gian huấn luyện. Ví dụ như mặt người là một hình
đối xứng qua trục đứng.
- minhitrate <min_hit_rate>
Detection Rate nhỏ nhất cho mỗi stage.
- maxfalsealarm <max_false_alarm_rate>
False Alarm cao nhất cho mỗi stage
- mode <BASIC (mặc định) | CORE | ALL>
Lựa chọn tập hợp các đặc trưng Haar-like sẽ sử dụng trong huấn luyện. BASIC
chỉ dùng những đặc trưng cơ bản, ALL sẽ dùng tất cả đặc trưng bao gồm cả các
đặc trưng được xoay 45 độ.
- w <sample_width>,
- h <sample_height>
Chiều rộng và chiều cao của kích thước huấn luyện.
Hình ảnh minh họa cho quá trình huấn luyện chữ E:
- Thu thập hình ảnh chứa cử chỉ E (positive) cần huấn luyện: ở đây tác giả
dung phương pháp quay clip cử chỉ E rồi dùng phần mềm cắt ra từng ảnh
một rồi chọn lọc các ảnh có chất lượng tốt để huấn luyện. ở đây ta thu được
772 ảnh cử chỉ E.
- Sau khi thu thập xong ảnh ta tiến hành khoanh vùng ảnh cần nhận dạng
dùng file objectmaker.exe được hỗ trợ bởi Intel.

- Sau đó ta tiến hành thu thập ảnh không chứa cử chỉ E, những hình này
ta có thể download trên mạng hoặc chụp .Ở cử chỉ E ta thu thập 1380
hình negative.

- Dùng create_list.bat để tạo file infofile.txt .
- Chạy chương trình createsamples.exe để gôm các ảnh đã được khoanh
vùng phía trên thành 1 file có đuôi .vec .
- Chạy chương trình haartraining.exe với các thông số đã được định
nghĩa ở phần trên. Sau khi chạy xong chương trình này sẽ tạo ra các
file cascade. Sau đó dùng chương trình haarconv.exe sẽ ghép các
cascade đó thành 1 file có đuôi .xml. Lúc này file này có thể dùng để
nhận dạng kí hiệu E.
- Tương tự cho các kí hiệu còn lại.
- 4.5. Kết quả thu được
- 4ươ05600ạ708.97:4;<Core 2 Duo""=>?
@A"=0ềB7BCượ 1ộậạớDếEBảBấ
FB7ệưảGBH
-
Bộ
nhận
dạng
Kích
thước
Số ảnh
positive
Số lượng
classfier
Detection
rate
(%)
T 32 x32 696 12 98.8
R 27 x34 968 17 97
A 26 x34 760 14 97.2
I 35 x27 812 15 98.3

P 24 x32 708 13 97.8
H 36 x26 742 14 98.8
L 32 x32 786 14 97.7
U 34 x34 772 12 98
O 34 x28 698 12 98.3
RS 35 x28 802 13 98.9
Trung bình 774 14 98.1

×