Перейти к содержимому
Compvision.ru

Flame

Пользователи
  • Количество публикаций

    34
  • Зарегистрирован

  • Посещение

  • Days Won

    1

Сообщения, опубликованные пользователем Flame


  1. Идентификация личности с использованием алгоритмов сравнения изображений.

    Короче задача типа следить за студентом который проходит тестовое задание. одна камера постоянно находит его лицо и сравнивает с изображением в бд, вторая смотрит чтобы рядом никого небыло:)


  2. Для борьбы с разной освещенностью иногда помогает функция cvEqualizeHist.

    JoQeR, свою реализацию придумали или сделали как на хабре?

    я то что в 56м посте писал плохо работает на других базах, переделал, стало лучше :)

    На паспортном контроле вроде используется метод с отношением расстояний между ключевыми точками лица (забыл как называются они); ну типа расстояние между зрачками, носом, ртом, и т п...


  3. ага, вроде разобрался.

    dctSize - Размер окна в котором будем находить коэффициенты ДКП

    obsSize - Количество значимых коэффициентов.

    delta - А вот это сдвиг (в пикселях?)

    только я не совсем понял, в дефолтных параметрах размер сдвига 4 на 4, тоесть всего лишь по 4 пикселя раждый раз?

    и еще непонятно почему в исходниках #define MAX_DCT_SIZE 32

    тоесть максимум окно может быть 32 х 32 пикселя.

    Тоесть не получится сканировать например прямоугольным окном чисто по вертикали.

    Видимо создатели библиотеки посчитали 32 максимально оптимальным


  4. Кто может примерно обьяснить что и какой из этих параметров значат и что дают для обучения и распознавания?

    И обязательно ли ставить одинаковые параметры для обучения и распознавания?

    
    const int OBS_WIDTH = 12;
    
    const int OBS_HEIGHT = 12;
    
    
    const int NO_DCT_COEFF_X = 4;
    
    const int NO_DCT_COEFF_Y = 4;
    
    
    const int STEP_X = 4;
    
    const int STEP_Y = 4;
    
    
    const int MAX_ITER = 80;
    
    const double STOP_STEP_ITER = 0.01;
    
    


  5. Попробовал так сделать, значения слишком большие получаются

    Вот для изначальной реализации взятой из вашей программы на билдере:

    2WZCfX1h.jpg

    Соответственно минимальные значения для каждой тестовой фотки:

    
    Мои:         Хабр:
    
    0.0329157    0.49
    
    0.109273     0.85
    
    0.0582627    0.47
    
    0.16966      2.08
    
    
    Если добавить деление на сумму всех чисел для собсвенных векторов:
    
    float summ_eigen = 0;
    
    
        for(int i = 0; i < N_People * N_Samples; i++)
    
        {
    
            summ_eigen += EigenVals->data.fl[i];
    
        }
    
    
        for(int i = 0; i < N_People * N_Samples; i++)
    
        {
    
            EigenVals->data.fl[i] = EigenVals->data.fl[i] / summ_eigen;
    
        }
    
    

    Получается так: (значения min):

    75V2iAXr.jpg

    Видимо буду тогда делать по своему алгоритму с суммами, там все лучше получается


  6. я тут другое придумал:

    1. Обучаем алгоритм например по 4 фотки для каждого человека. Условие: Фотки одного человека должны идти по порядку.

    2. Загружаем тестовое фото любого человека из выборки, которое не использовалось в обучении, например 7.

    3. Находим расстояния в пространстве от вектора тестовой фотки до всех других объектов по порядку.

    4. Складываем расстояния до обьектов одного человека.

    5. Полученную сумму сравниваем с другими такими суммами. Она будет меньше чем другие.

    А если тестовое фото будет вообще другого человека не из выборки, то сумма будет больше той суммы в пункте 5.

    таким образом можно и отбрасывать левых человек получается

    Вроде так алгоритм должен лучше работать, как думаете?


  7. Ребята, подскажите, вот у меня получается максимальное расстояние от вектора до других обьектов не превышает 2, а вот в статье на хабре

    15.png

    тут получается аж 21, если мы подаем незнакомое лицо.

    с чем это может быть связано? у меня если даже незнакомое подаешь на проверку всеравно там не больше 2х...

    Если много фоток взять в обучающую выборку, то соответственно и расстояния уменьшаются до вектора...

    Никак не могу понять как задать порог для отсеивания неизвестных лиц, может кто нибудь делал?

    Ну тоесть с увеличением обучающей выборки порог всегда разный..


  8. А кто нибудь реализовывал порог отсечения левых лиц в этой проге? по статье на хабре там порог 2.2 у него а у меня что то расстояния редко больше 2х получаются...

    или в данном коде

    
    for (i=0; i < nEigens; i++)
    
            {
    
                float d_i = projectedTestFace[i] - coeffs[iTrain][i];
    
                distSq += d_i * d_i/EigenVals->data.fl[i];
    
            }
    
    

    считается эвклидово расстояние? а в статье я так понял расстояние Махаланобиса. Кто знает как его посчитать?

    Я так понял что по PCA проще сделать порог отсечения, чем по марковским моделям


  9. Да там надо просто директорию указать, там будет что то типа Include files или типа того, указываешь ему директории где заголовочные файлы лежать и все.

    Либо кинь все заголовочные файлы *.h в директорию где у тебя экзешник будет уже скомпилированый, а в обьявлении заменяешь

    #include <highgui.h> на #include "highgui.h"


  10. скомпилил на с++ в студии, скорость сравнима с тем что на линуксе :) правда не сразу понял как файлы из папки грузить, но вот сделал так, вдруг кому интересно станет:

    
    char a[] = "C://faces//s";
    
    char b[] = "//";
    
    char c[] = ".pgm";
    
    
    char filenames[20];
    
    
    for (int j=0;j<N_People;j++) // Цикл по разным людям
    
    	{
    
    		for (int i=0;i<N_Samples;i++) // Цикл по фотографиям
    
    		{
    
    			sprintf(filenames, "%s%d%s%d%s", a, j+1, b, i+1, c);
    
    			img_load = cvLoadImage(filenames);
    
    

    Я в итоге реализовал на С++, а на С# написал враппер на некоторые функции. На плюсах действительно все быстрее работает, главное избегать утечек памяти

    А я с тем ковырялся добавил тока ему нейм спейс еще чтобы использовать совместно с враппером OpenCVSharp потому как у последнего все удобнее сделано но там нет марковских моделей почему то. а добавить их туда я че-то не осилил. Там есть PCA, он работает быстро. может если туда добавить Марковские модели будет быстрее :)

    Вы писали с нуля враппер именно для марковских моделей чтобы использовать их в С#?

    Кстати по поводу утечек памяти в студии есть такая штука gcnew, для борьбы с утечками


  11. Smorodov, щас ваш проект билдеровский скомпилировал под рабочим компом с линуксом (opensuse 12.1 kde 4.8)в консольном QT проекте на чистом C++, и что то оно гораздо быстрее работает с теми же самыми выборками, чем у меня дома в винде на си шарпе с использованием того враппера что ShurikEV предлагал. Прям в разы.

    А дома комп гораздо быстрее :) что то тут не то :) попробую дома скомпилить под C++ в студии.

    Правда под линем библиотека 2.4 а дома 2.3.1, и и на лине консольный проект а дома виндовый под GUI.

    Неужели сишный код настолько быстрее :)

    может еще дело в том что на винде используются динамические библиотеки а в линухе статические :) или может то что я под линухом сам библиотеку собрал а в винде уже собраные использую, но это врятли так то

×