Я создаю приложение, которое будет делать снимок всего тела одного человека и создавать для него «mugshot».
] Mugshot означает изображение всего лица, шеи, волос и ушей человека того же размера, что и другой снимок.
В настоящее время я использую
http://askernest.com/archive/2008/05/ 03 / face-detection-in-c.aspx
для реализации OpenCV, и я использую
harrcascade_frontalface_default.xml
harrcascade_frontalface_alt.xml
harrcascade_frontalface_alt2.xml
harrcascade_frontalface_alt_tree.xml
в качестве своих каскадов.
Я использую все каскады, потому что один не обнаружит все мои лица. После того, как я получу все лица, обнаруженные всеми каскадами, я нахожу свой средний квадрат и использую его для окончательного предположения о том, какой высоты и ширины должен быть снимок.
Моя проблема состоит из трех частей.
Мой текущий процесс довольно медленно. Как я могу ускорить процесс обнаружения?
Изменить: Я обнаружил, что время обработки напрямую связано с размером фотографии. Уменьшение размера фотографий может оказаться полезным.
Один каскад не обнаружит все лица, с которыми я сталкиваюсь, поэтому я использую их все. Это, конечно, дает множество различных квадратов и несколько ложных срабатываний. Какой метод я могу использовать для выявления ложных срабатываний и исключения их из расчета среднего квадрата? напр.
Изменить: I ' m реализует среднее значение в пределах стандартного отклонения. Скоро отправлю код.
Я не совсем уверен, как лучше всего найти фотографию, учитывая квадратные координаты лица. Где я могу найти соотношение лица и фотографии?
Редактировать: Решено. Предполагая, что все мои головы - это пропорции их лиц.
static public Rectangle GetMugshotRectangle (Rectangle rFace)
{
int y2, x2, w2, h2;
// настраиваем по мере необходимости
двойной heightRatio = 2;
y2 = Convert.ToInt32 (rFace.Y - rFace.Height * (heightRatio - 1.0) / 2.0);
h2 = Convert.ToInt32 (rFace.Height * heightRatio);
// отношение высоты к ширине на фотографиях 1,25: 1
w2 = Convert.ToInt32 (h2 * 4/5);
x2 = Convert.ToInt32 ((rFace.X + rFace.Width / 2) - w2 / 2);
вернуть новый прямоугольник (x2, y2, w2, h2);
}
Мне просто нужно избавиться от этих ложных срабатываний.
Хорошо, сделайте 4 проблемы.