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

Находим в кадре лица, человеческие фигуры, и т.д. и т.п

Recommended Posts

http://openbiometrics.org/

описание алгоритмов и тесты

http://openbiometrics.org/publications/klontz2013open.pdf

еще 1 либа, судя по всему серьёзная, но похоже только для frontal face.

+встроенная поддержка Stasm.

+поддержка многих датасетов.

-зависит от QT5

на основе или принимая во внимание

http://www.cs.colostate.edu/facerec/algorithms/baselines2011.php

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне кажется легче самому сделать тулзу для распознавания лиц:

- Взять либу IntraFace для поиска особых точек

- В особых точках построить дескриптор:

-- Хороший дескриптор на мой взгляд получается из комбинации LBPH->LDA

-- Так же можно в особых точках обучить глубокую сеть (сверточную сеть, RBM, или сверточную автоассоциатинвую (face++))

Применение LBPH->LDA описано в работе [1]. Компоненты LBP и LDA есть в OpenCV FaceRecogniser.

[1] Chen D. et al. Blessing of dimensionality: High-dimensional feature and its efficient compression for face verification //Computer Vision and Pattern Recognition (CVPR), 2013 IEEE Conference on. – IEEE, 2013. – С. 3025-3032.

PS: Может кто знает С++ либину реализующую более интересный LDA типа PLDA (Probabilistic LDA) или Joint Bayesian. которые рассматривают в [1] (PLDA встречал только на матлабе)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Взять либу IntraFace для поиска особых точек

Ну это называется fiducial points detection, точность проставления и на всех ли картинках будет работать всё равно зависит от кол-ва обучаемых данных(т.е. от обученной модели), но как готовое решение можно.Вроде как в IntraFace может работать с лицами повернутыми на какой то угол.

Еще есть http://cmp.felk.cvut.cz/~uricamic/flandmark/

но опять же их надо прогонять на данных чтобы понять какой лучше.

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

+ еще работа с перекрытием(face\object occlusion) по этой теме я видел только

http://perception.csl.illinois.edu/recognition/Home.html

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

тот же LDA из opencv слишком жирный по памяти, нужен какой то scalable алгоритм, а LBP у OpenBr вроде и так есть.

тем более LBP, просто популярен и наверно быстро считается есть дескрипторы и лучше (но там много тонкостей правда по одному названию судить скорее не получится)

http://vis-www.cs.umass.edu/lfw/results.html

не помню точно, но даже у ProbabilisticPCA используемая память зависит от кол-ва входных данных.

т.е. по хорошему должен быть какой то streaming\out-of-core\online algorithm у которого используемая память постоянная и меньше RAM.

минусы там правда в том, что всё сильно завязано на QT5 и еще в том что это всё работает только для фронтальных лиц, т.е. надо дополнительно их готовить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

+ еще работа с перекрытием(face\object occlusion) по этой теме я видел только

http://perception.csl.illinois.edu/recognition/Home.html

3д модель строит DeepFace (Facebook) и дает топовую точность, но при этом Face++ не используют фронтализацию на основе 3д, но дает ту же точность*

*точность измеряется на базе http://vis-www.cs.umass.edu/lfw/results.html

про перекрытия я тоже думаю что не актуально, IntraFace, который я тестил выдает особые точки на лице человека и при частичном перекрытии, наверное надо отслеживать те точки ошибка для которых велика и не рассматривать их

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

тот же LDA из opencv слишком жирный по памяти, нужен какой то scalable алгоритм, а LBP у OpenBr вроде и так есть.

тем более LBP, просто популярен и наверно быстро считается есть дескрипторы и лучше (но там много тонкостей правда по одному названию судить скорее не получится)

http://vis-www.cs.umass.edu/lfw/results.html

не помню точно, но даже у ProbabilisticPCA используемая память зависит от кол-ва входных данных.

т.е. по хорошему должен быть какой то streaming\out-of-core\online algorithm у которого используемая память постоянная и меньше RAM.

минусы там правда в том, что всё сильно завязано на QT5 и еще в том что это всё работает только для фронтальных лиц, т.е. надо дополнительно их готовить.

Звучит кошмарно если OpenBR вживую работает со всеми 1кк изображениями, а не строит индекс.

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

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

Но думаю если дальше буду этим заниматься, то обязательно посмотрю OpenBR, а то испорченный телефон получается

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Написал я свои классификатор для HOG - 1.txt. Мне его теперь нужно поместить в код, пишу на с++, для с# есть функция ReadAllText().

Какая аналогичная функция есть для с++ ? Лучше всего наглядный пример.

Вот код:

        HOGDescriptor hog;

	//поиск объекта на изображении метод hog+svm

	hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

	namedWindow("people detector",1 );//CV_WINDOW_AUTOSIZE

	fflush(stdout);

	vector<Rect> found, found_filtered;

	double t = (double)getTickCount();

	// детекрирование объектов с параметрами по умолчанию

	hog.detectMultiScale(gray, found, 0, Size(8, 8), Size(160,160), 1.001, 1.01);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут есть описание с примером:

http://www.cplusplus.com/reference/istream/istream/read/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А нет ни у кого наглядного примера, как свой классификатор добавить в Hog ну или в каскад Хаара?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так у тебя по совету Смородова не получилось? Надо открыть файл, узнать его размер, создать std::vector, расширить его до размера файла, считать туда, закрыть файл. А std::vector с данными из файла отдать на setSVMDetector.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Написал код, по инструкции Nuzhny. Все компилится, но людей не находит, хотя в правильности классификатора уверен

std::ifstream clas ("1.txt", std::ifstream::binary);


	//if (clas)

	//{

		//узнаем длину фаила

		clas.seekg(0, clas.end);

		int length = clas.tellg();

		clas.seekg(0, clas.beg);


		char * buffer = new char[length];

		cout << "Reading " << length << " characters... ";

		//считывание данных в виде блока

		clas.read(buffer, length);


		if (clas)

			std::cout << "all characters read successfully.\n";

		else

			std::cout << "error: only " << clas.gcount() << " could be read";

		//clas.close();


		// текст ХОГа

		HOGDescriptor hog;

		//записываем  1.txt в вектор found

		vector<Rect> found, found_filtered;

		vector<int> vec;

		//copy(istream_iterator<Rect>(clas), istream_iterator<Rect> (),back_inserter(found));

		std::copy( 

			std::istream_iterator<int>(clas),

			std::istream_iterator<int>(),

			std::inserter(vec,vec.begin()));


		hog.setSVMDetector(vec);


		fflush(stdout);

		double t = (double)getTickCount();


		Size padding(Size(32, 32));

		Size winStride(Size(4, 4));


		hog.detectMultiScale(gray, found, 0.9, winStride, padding, 1.03, 4);


		delete[] buffer;

		t = (double)getTickCount() - t;

		printf("tdetection time = %gms\n", t*1000. / cv::getTickFrequency());


		std::cout << "found: " << found.size() << std::endl;


		size_t i, j;

		for (i = 0; i < found.size(); i++)

		{

			Rect r = found[i];

			for (j = 0; j < found.size(); j++)

			if (j != i && (r & found[j]) == r)

				break;

			if (j == found.size())

				found_filtered.push_back(r);

		}

		for (i = 0; i < found_filtered.size(); i++)

		{

			Rect r = found_filtered[i];

			r.x += cvRound(r.width*0.1);

			r.width = cvRound(r.width*0.8);

			r.y += cvRound(r.height*0.07);

			r.height = cvRound(r.height*0.8);

			rectangle(gray, r.tl(), r.br(), cv::Scalar(0, 255, 0), 3);

		}

		imshow("people detector", gray);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Убери buffer вообще. Классификатор HOG - это набор floatов. Создай std::vector<float>, считай туда весь файл (прямо туда, без ненужных промежуточных штук). И подавай его в setSVMDetector.

Или выложи свой обученный классификатор, чтобы я мог написать пример и проверить его на твоём файле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот классификатор

https://www.dropbox.com/s/3tk7g1u2e160tyc/1.txt

и изображение

https://www.dropbox.com/s/40p5ccqskqfrzbm/15.jpg

а вто оптимальные характеристики

hit 0.9

scale 1.03

win 4*4

pad 32*32

thresh 4

blockStride 4*4

blocksize 8*8

cellsize 8*8

Nbins 9

winsigma -1

Detiv Aperature 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот загрузка:

int main()

{

    std::ifstream clas ("1.txt");


    vector<float> vec;

    for(std::string line; std::getline(clas, line); )   //read stream line by line

    {

        std::istringstream in(line);      //make a stream for the line itself

        for (double x;; )

        {

            if (in >> x)

            {

                std::cout << "x = " << x << std::endl;

                vec.push_back(x);

            }

            else

            {

                break;

            }

        }

    }

    std::cout << "detector size = " << vec.size() << std::endl;



    // текст ХОГа

    HOGDescriptor hog;

    //записываем  1.txt в вектор found

    vector<Rect> found, found_filtered;


    hog.setSVMDetector(vec);


    cv::Mat gray = cv::imread("15.jpg", 0);


    Size padding(Size(32, 32));

    Size winStride(Size(4, 4));


    double t = (double)getTickCount();

    hog.detectMultiScale(gray, found, 0.9, winStride, padding, 1.03, 4);

    t = (double)getTickCount() - t;

    std::cout << "tdetection time = " << t*1000. / cv::getTickFrequency() << " ms" << std::endl;


    std::cout << "found: " << found.size() << std::endl;


    size_t i, j;

    for (i = 0; i < found.size(); i++)

    {

        Rect r = found[i];

        for (j = 0; j < found.size(); j++)

            if (j != i && (r & found[j]) == r)

                break;

        if (j == found.size())

            found_filtered.push_back(r);

    }

    for (i = 0; i < found_filtered.size(); i++)

    {

        Rect r = found_filtered[i];

        r.x += cvRound(r.width*0.1);

        r.width = cvRound(r.width*0.8);

        r.y += cvRound(r.height*0.07);

        r.height = cvRound(r.height*0.8);

        rectangle(gray, r.tl(), r.br(), cv::Scalar(0, 255, 0), 3);

    }

    imshow("people detector", gray);


    cv::waitKey(0);


    return 0;

}

Однако у меня классификатор не задаётся, пишет, что что-то не так с размерами. Ты с какими параметрами обучал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

параметры были следующие: winsize 32*32, blockStride 4*4, blocksize 8*8, cellsize 8*8, hit 0.9,scale 1.03, thresh 4.0

все остальные стандартные параметры, ничего не менял.

Возможно все дело в классификаторе. я его делал через программку, которую isseks написал, здесь на форуме есть ссылка на нее.

Вот результат работы:

https://www.dropbox.com/s/xuqie16k1eaqd53/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202014-04-14%2016.34.18.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

winSize при классиификации тебе надо бы сделать 32х64.

А так вроде всё верно.

попробуй запустить у себя код, вроде все параметры правильно выставил:

int main()

{

    std::ifstream clas ("1.txt");


    vector<float> vec;

    for(std::string line; std::getline(clas, line); )   //read stream line by line

    {

        std::istringstream in(line);      //make a stream for the line itself

        for (double x;; )

        {

            if (in >> x)

            {

                std::cout << "x = " << x << std::endl;

                vec.push_back(x);

            }

            else

            {

                break;

            }

        }

    }

    std::cout << "detector size = " << vec.size() << std::endl;



    // текст ХОГа

    cv::Size winSize(32, 32);

    cv::Size blockSize(8, 8);

    cv::Size blockStride(4, 4);

    cv::Size cellSize(8, 8);

    cv::Size padding(32, 32);


    int nBins = 9;

    double scale = 1.03;

    int grThreshold = 4.0;

    double hitThreshold = 0.9;

    bool useMeanshiftGrouping = false;

    int derivAperture = 1;

    double winSigma = -1;

    int histogramNormType = cv::HOGDescriptor::L2Hys;

    double L2HysThreshold = 0.2;

    bool gammaCorrection = false;

    int nlevels = 64;


    HOGDescriptor hog(winSize, blockSize, blockStride, cellSize, nBins, derivAperture, winSigma, histogramNormType, L2HysThreshold, gammaCorrection, nlevels);

    //записываем  1.txt в вектор found

    vector<Rect> found, found_filtered;


    hog.setSVMDetector(vec);


    cv::Mat gray = cv::imread("15.jpg", 0);


    double t = (double)getTickCount();

    hog.detectMultiScale(gray, found, hitThreshold, blockStride, padding, scale, grThreshold, useMeanshiftGrouping);

    t = (double)getTickCount() - t;

    std::cout << "tdetection time = " << t * 1000. / cv::getTickFrequency() << " ms" << std::endl;


    std::cout << "found: " << found.size() << std::endl;


    size_t i, j;

    for (i = 0; i < found.size(); i++)

    {

        Rect r = found[i];

        for (j = 0; j < found.size(); j++)

            if (j != i && (r & found[j]) == r)

                break;

        if (j == found.size())

            found_filtered.push_back(r);

    }

    for (i = 0; i < found_filtered.size(); i++)

    {

        Rect r = found_filtered[i];

        r.x += cvRound(r.width*0.1);

        r.width = cvRound(r.width*0.8);

        r.y += cvRound(r.height*0.07);

        r.height = cvRound(r.height*0.8);

        rectangle(gray, r.tl(), r.br(), cv::Scalar(0, 255, 0), 3);

    }

    imshow("people detector", gray);


    cv::waitKey(0);


    return 0;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибка вылетает.

https://www.dropbox.com/s/oulvn5uhi9xqk2x/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202014-04-14%2017.26.03.png

а именно ругается на 89 строку в hog.cpp: CV_Assert( checkDetectorSize() );

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, и это весьма удивительно.

С твоими параметрами: descriptorSize = 441.

А в текстовике с натренированным классификатором всего 64 числа, то есть: detectorSize = 64. Это очень мало.

Может быть так, что натренированный детектор не правильно залился/сохранился?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну не знаю, в программке, где я писал классификатор он работает, вот ниже ссылка на него

Моя ссылка

Я так понимаю, что проблему можно избежать, если накидать больше примеров в классификатор?

оттуда и взял txt. А как еще можно классификатор создать, покидайте ссылки

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я правильно понимаю, что у тебя тоже все 64 значения в файле? Если есть исходники программы, в которой ты распознаёшь, то посмотри в них, какие параметры и куда передаются.

Ну и попробуй всё таки обучить на размерах 32х64, люди же квадратные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://blog.mashape.com/list-of-50-face-detection-recognition-apis/

 

50+ библиотек и апи для детектирования и обнаружения лиц.

 

  1. Face Recognition – Stephen here from Lambda Labs. For sample code and a graphical demo, check out http://api.lambdal.com/docs. Our API provides face recognition, facial detection, eye position, nose position, mouth position, and gender classification. If you have any questions ask! Just send an email to s@lambdal.com. Happy Hacking! -Stephen
  2. Face (Detection) – A computer vision api for facial recognition and facial detection that is a perfect face.com replacement. We currently have a free api for face detection.
  3. Animetrics Face Recognition – The Animetrics Face Recognition API can be used to detect human faces in pictures. Information on facial features or “landmarks” is returned as coordinates on the image.. Animetrics Face Recognition will also detect and return the orientation, or “pose” of faces along 3 axes.
  4. Skybiometry Face Detection and Recognition – An easy to use Face Detection and Recognition API. You must have an application created in your account at SkyBiometry to use it (sign up at if you don’t have account yet).
  5. ImageVision Face Detection – Beta Release A better Face detection service! ImageVision is a computer vision company improving technology that determines the locations and sizes of human faces in arbitrary (digital) images.
  6. Face++ – Face++ uses the cutting-edge technology of computer vision and data mining to provide 3 core vision services (Detection, Recognition and Analysis). Our API provides the detection and analysis of Landmark (23points), Landmark (81 points), Attributes: Age,Gender, Glasses, Race, etc.
  7. FaceMark – FaceMark is a powerful API for facial feature detection. It finds 68 points for a frontal face and 35 for a profile one. FaceMark detects landmarks for faces on the image specified by URL or uploaded as a file and produces JSON output containing a vector of facial landmarks and orientation for each face found.
  8. EmoVu by Eyeris – Artificially Intelligent emotion recognition software that allows cameras to “look back” and read people’s facial micro-expressions, gender and age group in real time as they watch videos on their computers or mobile devices.
  9. Face and scene recognition by Rekognition.com – Face.com alternative! Our fast, robust and scalable rekognition engine can do facial detection, crawling, recognition, scene understanding! It can be automatically trained using images and tags on Facebook!
  10. FaceRect – FaceRect is a powerful and free API for face detection. It finds faces (both frontal and profile) on the image specified by URL or uploaded as a file and is able to find multiple faces on a single photo, producing JSON output with a bounding box for each face found.
  11. Infatics Face Detection – Simple face detection API
  12. OpenCV Face Recognizer – OpenCV (Open Source Computer Vision Library: http://opencv.org) is an open-source BSD-licensed library that includes several hundreds of computer vision algorithms.
  13. Libface – Libface is a library aimed at bringing face recognition technology to the open source community. It is written in C++ and maintained on Sourceforge. The library uses OpenCV 2.0 and aims to be a middleware for developers that don’t have to include any OpenCV code in order to use face recognition and face detection detection.
  14. Automatic naming of characters in video - The objective of this work is to label television or movie footage with the names of the people present in each frame of the video.
  15. CCV – a modern computer vision library
  16. OpenBR – Open Source Biometric Recognition
  17. Flandmark – open source implementation of facial landmark detector
  18. Computer Expression Recognition Toolbox (CERT) – an end-to-end system for fully automated facial expression recognition that operates in real-time.
  19. Nviso 3D facial imaging technology – Analyze human emotions from facial expressions. More direct and automatic than by any other method.
  20. FaceReader – FaceReader is the world’s first tool that is capable of automatically analyzing facial expressions, providing users with an objective assessment of a person’s emotion.
  21. Affdex – Affdex reads emotional states such as liking and attention from facial expressions using a webcam… to give marketers faster, more accurate insight into consumer response to brands and media.
  22. Faceware – Analyzer takes in a video of an actor’s facial performance and produces an .IMPD file for use in Retargeter™. It accomplishes this through the combination of simple user input on the front end, and complex computer vision algorithms on the back end.
  23. Face detection in iOS
  24. Face-Recognition-SDK – add face recognition to your apps
  25. Oddcast face detection API – The Face Tracking API allows Flash developers to harness advanced technology previously available only in high end video games.
  26. BioID – world’s first webcam-based personal recognition
  27. Betaface API – face detection and recognition
  28. Discrete Area Filters Face Detector – detect 15 face points, 4 face parts, multiple face, occluded faces
  29. Face detection using Support Vector Machine – this program is the clone of ‘Face Detection System’ in MATLAB but instead of Neural Networks, it is based on SVM.
  30. fdlib – is a face detection library for C/C++ and Matlab. It allows you to detect frontal faces in images.
  31. Visage – a human computer interface that aims to replace the traditional mouse with the face. Using a webcam and Visage the movement of the face becomes the movement of the mouse pointer. Left/right Eye blinks fire left/right mouse click events.
  32. Face tracking Project (Carnegie Mellon) – the Advanced Multiple Processing (AMP) offers face tracking using color matching combined with deformable templates.  Both DLL for Windows and static library for Linux
  33. Real-time face detection program – Demo from the Fraunhofer institute IIS, Germany.  Shows face tracking and detection using edge orientation matching.
  34. Evaluation of Face Recognition Algorithms – Resource for all researchers developing face recognition algorithms from Colorado State University.  It provides a standard set of well known algorithms and established experimental protocols.
  35. Computer Vision Source Code – useful collection of image processing code
  36. Acsys biometrics SDK – allows third-party developers to implement advanced facial biometric technology with their own security applications
  37. Cognitec SDK – develops market-leading face recognition technologies and applications for enterprise and government customers around the world.
  38. KeyLemonFaceSDK – integrates recognition technology into major operating systems.
  39. FaceIT SDK -
  40. FaceSDK – FaceSDK enables Microsoft Visual C++, C#, VB, Java, and Delphi developers to build 32-bit and 64-bit applications for Web, Windows, Linux, and MacOS X with face recognition and face-based biometric identification functionality
  41. Verilook SDK – allows rapid development of biometric applications using functions from the VeriLook algorithm that ensure fast and reliable face identification.
  42. Beyond Reality Face SDK – calculates the position and 3D angles of a face in a single picture of a webcam stream.  This information can be used to place 3D objects onto the image or to control an app via head movements
  43. Sightcorp – cutting edge face analysis technologies, targeting individual or crowd analysis
  44. Visage FaceDetect SDK – contains powerful techniques to find faces and facial features in still images in form of a well-documented C++ Software Development Kit
  45. Microsoft Research Face SDK Beta – integrates the latest face technologies from Microsoft research teams.
  46. How To: Kinect for Windows SDK Face Recognition
  47. Bayometric FaceIt Face Recognition SDK – combines traditional facial geometry techniques with skin biometrics
  48. FacePhi FaceRecognition SDK – consists of a set of libraries developerd for .NET and Silverlight
  49. 360Biometrics Face SDK – highly advanced face recognition system that is designed to work with the embedded or linked face images in your existing database.
  50. Hunter TrueID – web-enabled face recognition
  51. IMRSV – a real world, real time perceptive computing software that measures gender, age, attention time, dwell, glances and more for up to 25 people, 25 ft away using a basic webcam. It has a REST API as well.
  52. Bob – Bob is a signal-processing and machine learning toolbox originally developed by the Biometrics Group at Idiap, in Switzerland. Bob is primarily developed through GitHub.
  53. KeyLemon – KeyLemon provides a new way to access your computer. Instead of typing your password, you just need to smile to the webcam and KeyLemon will recognize you
  54. Flash AS3 face detection and recognition library – Oskar Wicha’s ActionScript 3 library allow us to do both things using Eigenfaces concept, basically some patterns which should match a human face.
  55. Stupeflix – Return an array of positions of detected faces, with type and confidence.
  56. EyeFace – Enables face detection, landmark estimation and age / gender recognition in images.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Делаю уточнялку контура рта, вот один из методов который попробовал, работает не всегда хорошо, но в некоторых случаях вполне приемлем.

 

Пока более менее работает детект верхней линии.

 

Вот о чем речь:

post-1-0-87393100-1411831026_thumb.png

 

Вот исходник:

main.cpp

 

Описалово на англ. : lip_shape_detection2.pdf

 

Думаю применять после ASM, так как ASM довольно плохо ловит детали.

 

Метод инициализируется точкой, показана на скрине зеленой окружностью.

Из этой точки растет змейка, затем змейка "прыгает".

Метод так и называется называется "прыгающая змейка".

 

Может кто-нибудь встречал что-то лучше ?

 

 

ЗЫ: Думаю все-таки отдельную ASM обучать.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ClasterFaces.PNG

 

архив для примера

 

Какие есть варианты для кластеризации лиц? т.е. по сути мы должны выявить самый большой кластер, а остальные выкинуть.

 

Так же в этой задаче мы можем получить отношения между всеми парами и составить квадратную матрицу, вхождение матрицы степень похожести от 0 до 1, и потом на основании этого как то разделить вхождения.

 

тут нашел нечто похожее

A Face Annotation Framework with Partial Clustering and Interactive Labeling

но у меня он не открывается, нашел тут

 

вот просто через кластеризацию средствами opencv

http://bitsearch.blogspot.ru/2013/02/unsupervised-face-clustering-with-opencv.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обзор методов обнаружения людей в кадре (некоторые исходники тоже присутствуют):

 

http://rodrigob.github.io/

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

О, эту статью у него я ещё не читал. Очень полезная!

Добавлю: у этого Родриго есть отличный открытый проект doppia. Я его тестировал для целей обнаружения пешеходов для автомобильной камеры и doppia показала наилучшие результаты из всех опробованных детекторов. Причём тестировалась работа по одной камере, а автор утверждает, что по двум камерам работать будет намного быстрее и качественней.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

День добрый! Я новичок в этом деле.... Вообщем есть задача поиска определенных предметов на изображении в режиме real time. Нужен простой в реализации, однако довольно устойчивый  к помехам, алгоритм классификации. Пока что остановилась на дескрипторах Фурье и методе Виолы Джонса (но сомневаюсь, что он подходит для этой задачи). Не подскажите, что еще можно посмотреть? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×