User Tools

Site Tools


ru:facedetect

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
ru:facedetect [2021/04/01 13:54]
admin [Setup]
ru:facedetect [2021/04/01 13:55] (current)
admin [Setup]
Line 1: Line 1:
 +====== FaceDetect ======
 +
 +Проблема при автоматическом нарезании горизонтальных тумб из вертикальных исходников (или наоборот) в том, что часто тумба попадает в такое место исходного изображения, которое не несет основной смысловой нагрузки. Проще говоря, на тумбе попадается часть живота и все. Примеры этого можно видеть тут [[http://demo.smartcj.com/category/Regular%20Links%202%20FHG/]]
 +
 +Причем такая проблема может возникать и в случае создания например вертикальных тумб из вертикальных исходников, но если голова находится где-то не по центру картинки.
 +
 +Дабы решить эту проблемы мы определяем где находится лицо на фотографии и если оно не попадает в тумбу, то стараемся сдвинуть границы тумбы таким образом, дабы лицо попало туда.
 +
 +Результат автоматической нарезки можно видеть тут [[http://demo.smartcj.com/category/FHG%20and%20Facedetect/]] - это теже галереи что и по ссылке выше, но нарезанные с включенной функцией определения лица.
 +
 +===== Setup =====
 +
 +  * Надо поставить библиотеку OpenCV (если не знаете как - попросите админа или google)
 +  * Скомпилировать программу для определения положения лица. К сожалению в варианте пхп это работает медленно, поэтому есть исходник C++ 
 +
 +<code>
 +#include <opencv2/imgproc/imgproc.hpp>
 +#include <opencv2/objdetect/objdetect.hpp>
 +#include <opencv2/highgui/highgui.hpp>
 +#include <iostream>
 +
 +const char* keys =
 +{
 +        "{input| |The source image}"
 +        "{outdir| |The output directory}"
 +        "{cascade| |The cascade file}"
 +};
 +
 +int main(int argc, const char** argv)
 +{
 +        cv::CommandLineParser parser(argc, argv, keys);
 +        std::string infile = parser.get<std::string>("input");
 +        std::string outdir = parser.get<std::string>("outdir");
 +        std::string cascade_file = parser.get<std::string>("cascade");
 +
 +        cv::CascadeClassifier cascade;
 +        if (cascade_file.empty() || !cascade.load(cascade_file))
 +        {
 +                std::cout << cv::format("Error: cannot load cascade file! \n");
 +                return -1;
 +        }
 +
 +        cv::Mat src = cv::imread(infile);
 +        if (src.empty())
 +        {
 +                std::cout << cv::format("Error: cannot load source image!\n");
 +                return -1;
 +        }
 +
 +        cv::Mat gray;
 +        cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
 +        cv::equalizeHist(gray, gray);
 +
 +        std::vector<cv::Rect> faces;
 +        cascade.detectMultiScale(gray, faces, 1.2, 3);
 +
 +        cv::Mat src_copy = src.clone();
 +        for (int i = 0; i < faces.size(); i++)
 +        {
 +                std::cout << faces[i];
 +        }
 +
 +        return 0;
 +}
 +
 +</code>
 +
 +
 +  * Компиляция 
 +
 +<code>
 +g++ `pkg-config --cflags --libs opencv4` face.cpp `pkg-config --libs opencv4` -o face
 +</code>
 +
 +
 +  * Это создаст файл face, который и будет определять положение лица. 
 +  * Для работы в кроп профайл надо добавить в поле Face Detect
 +
 +<code>
 +/FULL/PATH/TO/face --input={FILE} --cascade=/FULL/PATH/TO/scj/includes/conf/face.xml
 +
 +где /FULL/PATH/TO/face  - это только что собранная программа face 
 +
 +/FULL/PATH/TO/scj/includes/conf/face.xml - это набор положений для определния лица, он автоматически есть в каждой инсталяции скрипта, однако вы можете его поменять при желании
 +
 +--input={FILE}  просто подставляет текущий обрабатываемый файл
 +</code>
 +
 +
 +===== Face Detect XML =====
 +
 +OpenCV определяет лица по конфигу (xml файл) , по дефолту идет более базовый конфиг, однако можно взять любой из доступных конфигов, которые дадут другие результаты (более или менее хорошие в зависимости от конктента)
 +
 +Примеры конфигов https://github.com/sightmachine/SimpleCV/tree/master/SimpleCV/Features/HaarCascades
  
ru/facedetect.txt · Last modified: 2021/04/01 13:55 by admin