2013-09-05 50 views
7

Tôi hiện đang làm việc trên một dự án mà tôi phải trích xuất nét mặt của người dùng (chỉ một người dùng tại một thời điểm từ webcam) như buồn hoặc hạnh phúc.Phân loại biểu hiện khuôn mặt trong thời gian thực bằng SVM

Phương pháp của tôi để phân loại nét mặt là:

  • Sử dụng opencv để phát hiện khuôn mặt trong ảnh
  • Sử dụng ASM và stasm để có được những tính năng điểm mặt

facial landmarks

và bây giờ tôi đang cố gắng phân loại biểu hiện trên khuôn mặt

là một lựa chọn tốt cho SVM? và nếu đó là cách tôi có thể bắt đầu với SVM:

cách tôi sẽ đào tạo svm cho mọi cảm xúc bằng cách sử dụng cột mốc này?

+1

Mạng thần kinh sâu luôn tốt hơn SVM. – usamec

+0

do thời gian tôi phải làm việc với SVM, bất kỳ trợ giúp nào !! – TIBOU

+4

@usamec, tuyên bố của bạn không phải lúc nào cũng đúng. Phụ thuộc vào định nghĩa "tốt hơn" để bắt đầu. – Bull

Trả lời

7

Có, SVM đã được hiển thị tốt để thực hiện tốt trong tác vụ này. Đã có hàng chục (nếu không phải là hundread) của các giấy tờ mô tả các thủ tục như vậy.

Ví dụ:

Một số nguồn tin cơ bản của SVMs mình có thể thu được trên http://www.support-vector-machines.org/ (như tiêu đề cuốn sách, phần mềm liên kết vv)

Và nếu bạn chỉ quan tâm đến việc sử dụng chúng thay vì sau đó tìm hiểu bạn có thể nhận được một trong các thư viện cơ bản:

+0

Tôi muốn đào tạo svm để phân loại biểu hiện trên khuôn mặt (hạnh phúc, tức giận, ghê tởm, ...) bằng cách sử dụng các vị trí mốc làm cách nào tôi có thể làm điều đó? – TIBOU

+1

http://stackoverflow.com/questions/18647405/train-svm-to-do-facial-expression-classification – TIBOU

+0

nếu bạn không nhớ tôi hỏi, "Tôi sẽ âm thanh như một noob ở đây" tại sao sử dụng SVM trên hậu cần hồi quy ? đây không phải là khái niệm cơ bản giống nhau sao? – Nour

3

nếu bạn đang sử dụng opencv, tôi đề nghị bạn sử dụng xây dựng trong thực hiện svm, đào tạo/tiết kiệm/tải trong python là như sau. c + + có api tương ứng để làm tương tự trong khoảng cùng một số lượng mã. nó cũng có 'train_auto' để tìm các thông số tốt nhất

import numpy as np 
import cv2 

samples = np.array(np.random.random((4,5)), dtype = np.float32) 
labels = np.array(np.random.randint(0,2,4), dtype = np.float32) 

svm = cv2.SVM() 
svmparams = dict(kernel_type = cv2.SVM_LINEAR, 
         svm_type = cv2.SVM_C_SVC, 
         C = 1) 

svm.train(samples, labels, params = svmparams) 

testresult = np.float32([svm.predict(s) for s in samples]) 

print samples 
print labels 
print testresult 

svm.save('model.xml') 
loaded=svm.load('model.xml') 

và đầu ra

#print samples 
[[ 0.24686454 0.07454421 0.90043277 0.37529686 0.34437731] 
[ 0.41088378 0.79261768 0.46119651 0.50203663 0.64999193] 
[ 0.11879266 0.6869216 0.4808321 0.6477254 0.16334397] 
[ 0.02145131 0.51843268 0.74307418 0.90667248 0.07163303]] 
#print labels 
[ 0. 1. 1. 0.] 
#print testresult 
[ 0. 1. 1. 0.]  

vì vậy bạn cung cấp n dẹt mô hình hình dạng như mẫu và n nhãn và bạn tốt để đi. bạn có lẽ thậm chí không cần phần asm, chỉ cần áp dụng một số bộ lọc nhạy cảm với định hướng như sobel hoặc gabor và nối các ma trận và san bằng chúng sau đó cho chúng ăn trực tiếp vào svm. bạn có thể có thể đạt được độ chính xác 70-90%.

khi người nào đó nói cnn là một thay thế cho svms.here một số liên kết triển khai lenet5. cho đến nay, tôi thấy svms đơn giản hơn nhiều để bắt đầu.

https://github.com/lisa-lab/DeepLearningTutorials/

http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

-edit-

mốc chỉ là n (x, y) vector phải không? vậy tại sao bạn không thử đặt chúng vào một mảng có kích thước 2n và chỉ đơn giản là đưa chúng trực tiếp vào mã ở trên?

ví dụ, 3 mẫu đào tạo 4 điểm đất (0,0),(10,10),(50,50),(70,70)

samples = [[0,0,10,10,50,50,70,70], 
[0,0,10,10,50,50,70,70], 
[0,0,10,10,50,50,70,70]] 

labels=[0.,1.,2.] 

0 = hạnh phúc

1 = giận

2 = ghê tởm

+0

tôi muốn đào tạo svm để phân loại biểu hiện trên khuôn mặt (hạnh phúc, tức giận, ghê tởm, ...) bằng cách sử dụng các vị trí mốc như thế nào tôi có thể làm điều đó? – TIBOU

+0

http://stackoverflow.com/questions/18647405/train-svm-to-do-facial-expression-classification – TIBOU

+0

trong đào tạo tôi có nhiều hình ảnh cho mỗi cảm xúc như thế nào tôi có thể đào tạo svm sau đó !! cho mỗi cảm xúc, xin lỗi tôi không nhận được nó – TIBOU

0

Bạn có thể kiểm tra this mã để có được ý tưởng làm thế nào điều này có thể được thực hiện bằng cách sử dụng SVM.

Bạn có thể tìm thấy thuật toán được giải thích here

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