Подтвердить что ты не робот

Как получить "mugshot" с квадратов обнаружения лиц?

Я создаю приложение, которое возьмет изображение одного человека всего тела и произведет "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

как мои каскады.

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

Моя проблема состоит из 3 частей.

  • Мой текущий процесс довольно медленный. Как ускорить процесс обнаружения?
    Изменить: Я нахожу, что время обработки напрямую связано с размером фото. Уменьшение размера фотографий может оказаться полезным.

  • Один каскад не обнаружит всех лиц, с которыми я сталкиваюсь, поэтому я использую их все. Это, конечно, создает множество разнообразных квадратов и несколько ложных срабатываний. Какой метод я могу использовать для определения ложных срабатываний и оставить их вне среднего квадратного вычисления? ех. SandmanWayne
    Изменить: Я реализую среднее значение значений в рамках стандартного отклонения. Скоро будет опубликовать код.

  • Я не совсем уверен в лучшем способе найти mugshot, учитывая квадратные координаты лица. Где я могу найти отношения лица к mugshot?
    Изменить: Решено. Предполагая, что все мои головы имеют отношение к их лицам.

    static public Rectangle GetMugshotRectangle(Rectangle rFace)
    {
        int y2, x2, w2, h2;
    
        //adjust as neccessary
        double heightRatio = 2;
    
        y2 = Convert.ToInt32(rFace.Y - rFace.Height * (heightRatio - 1.0) / 2.0);
        h2 = Convert.ToInt32(rFace.Height * heightRatio);
        //height to width ratio is 1.25 : 1 in mugshots
        w2 = Convert.ToInt32(h2 * 4 / 5);
        x2 = Convert.ToInt32((rFace.X + rFace.Width / 2) - w2 / 2);
    
        return new Rectangle(x2, y2, w2, h2);
    }
    

    Sandman
    Мне просто нужно избавиться от этих ложных срабатываний.

Хорошо сделайте это 4 проблемы.

  • Наша камера, которую мы будем использовать, в настоящее время не работает, поэтому у меня нет способа захвата изображений на данный момент. Где я могу найти полное изображение тела людей, которые не являются чистыми, такими как поиск изображений Google для изображений полного тела? Изменить: "Человек стоит" Делает хороший поиск:)
4b9b3361

Ответ 1

Хорошо, я понял это, но проект на льду на данный момент.
У меня нет источника для вставки, поскольку виртуальная машина берет навсегда загрузку.
Если кто-то действительно заинтересован, сообщите мне, и я отправлю. Если вы видите что-то похожее, то это может быть сделано лучше, дайте мне знать.

Я сделал следующие шаги.

  • Загрузите изображение, если более 500 пикселей по высоте или по ширине сделают новое изображение версии с максимальным размером или шириной 500 пикселей. Сохраните масштаб.
  • Запустите реализацию С# OpenCV на Спросите Эрнеста на всем фронтальном лице Харриксаде в Harrtraining.
  • По какой-то причине прямоугольники, созданные Ask Ernest, должны быть увеличены до 1.3X
  • Сгенерированные прямоугольники используют стандартное отклонение для удаления ложных срабатываний. Я сделал это для каждого угла прямоугольника, нахожу расстояние, на котором каждый прямоугольник был удален от среднего углового положения. Я сделал заметку о любом прямоугольнике, у которого был угол из ударов, и удалил его из списка прямоугольников-кандидатов.
  • Получите средний прямоугольник из оставшихся прямоугольников и примените "GetMugshotRectangle" сверху в вопросе.
  • Масштабируйте прямоугольник mugshot с помощью шкалы, сохраненной на шаге 1.
  • Вырежьте mugshot с исходного изображения и сохраните на нем новое местоположение.

Готово!

Ответ 2

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

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

Ответ 3

Я предлагаю вам использовать каскадный файл верхнего уровня Haar, который вернет вам прямоугольник до плеча. Пожалуйста, найдите каскадный файл головы и плеч на http://alereimondo.no-ip.org/OpenCV/34"