распознавание лиц в матлабе

Я искал распознавание лиц для Matlab в своем проекте. я нашел один: http://people.kyb.tuebingen.mpg.de/kienzle/fdlib/fdlib.htm

Я скачал исходный код, но это не сработало, я получил эту ошибку от Matlab:

??? Неопределенная функция или метод «fdmex» для входных аргументов типа «uint8».

Ошибка в ==> tinytest на 10 с = fdmex(x', порог);

основной скрипт такой:

x = imread('geeks.jpg');

% decision threshold.
% change this to a smaller value, if too many false detections occur.
% change it to a larger value, if faces are not recognized.
% a reasonable range is -10 ... 10.
threshold = 0; 

imagesc(x); hold on; colormap gray;
s = fdmex(x', threshold);

for i=1:size(s,1)
    h = rectangle('Position',[s(i,1)-s(i,3)/2,s(i,2)-s(i,3)/2,s(i,3),s(i,3)], ...
      'EdgeColor', [1,0,0], 'linewidth', 2);
end    

axis equal; 
axis off

можешь найти ошибку?


person user2299317    schedule 25.06.2013    source источник


Ответы (3)


Обычно, когда я вижу ошибку uint8 и изображение в градациях серого, для меня это красный флаг, который мне нужно сделать.

colorImg=imread('imageName.jpg') 

% Even if the image is grayscale, if its png or jpg, 
% it will load in as a color image almost exclusively

img=rgb2gray(colorImg) 

Если вы посмотрите на вывод img, вы заметите, что теперь он имеет тип double вместо uint8 :)

Если это не сработает, надеюсь, macduffs сработает, мой просто кажется проще, если это действительно все исправит. :)

person Shaun314    schedule 25.06.2013

В зависимости от вашей версии Matlab, он выглядит как fdlib, поставляется с .dll, переименуйте его в .mexw32 или как пожелает ваш хост-компьютер. Вы можете определить это, запустив:

>> mexext

mexw32

в командной строке Matlab. Используйте расширение mex и переименуйте fdmex.dll в fdmex.mexw32 или что-то еще, что возвращает mexext, и все должно работать безупречно.

Если я запущу на своей машине с Windows XP, я увижу вот такую ​​красивую картинку:

введите здесь описание изображения

Однако, если у вас нет 32-битной машины, автор программного обеспечения пишет в ссылка в вопросе:

Обратите внимание, что все сборки были оптимизированы для процессоров Intel Pentium. Если вы хотите запустить его на другой платформе или у вас есть другие вопросы, дайте мне знать.

У него есть ссылка на его профиль и электронная почта, поэтому я рекомендую связаться с ним для получения 64-битной версии исполняемого файла.

person macduff    schedule 25.06.2013
comment
я изменил .dll на .mexw64, но получил другую ошибку: ??? Invalid MEX-file 'C:\ran\Dropbox\IST Project\faceDetection\face\fdmex.mexw64': ‏‏C:\ran\Dropbox\IST Project\faceDetection\face\fdmex.mexw64 אינו חוקי ביישום Win32‏ . Ошибка в ==› tinytest на 11 с = fdmex(x', порог); - person user2299317; 26.06.2013
comment
@ user2299317, если вы используете 64-битные окна, вам понадобится 64-битная dll. fdmex.dll — это 32-битная DLL. Похоже, вам нужно будет перекомпилировать исходный код. - person macduff; 26.06.2013

Если у вас установлена ​​последняя версия Matlab с установленным набором инструментов Computer Vision System Toolbox, вы можете использовать системный объект vision.CascadeObjectDetector для обнаружения лиц на изображениях.

person Dima    schedule 17.12.2013