User Tools

Site Tools


ru:facedetect

Differences

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

Link to this comparison view

Next revision
Previous revision
ru:facedetect [2014/07/02 16:40] – created adminru:facedetect [2021/04/01 13:55] (current) – [Setup] admin
Line 11: Line 11:
 ===== Setup ===== ===== Setup =====
  
-  * Надо поставить библиотеку OpenCV (есл ине знаете как - попросите админа)+  * Надо поставить библиотеку OpenCV (если не знаете как - попросите админа или google)
   * Скомпилировать программу для определения положения лица. К сожалению в варианте пхп это работает медленно, поэтому есть исходник C++    * Скомпилировать программу для определения положения лица. К сожалению в варианте пхп это работает медленно, поэтому есть исходник C++ 
  
Line 20: Line 20:
 #include <iostream> #include <iostream>
  
-const char* keys = +const char* keys =
 { {
- "{i|input| |The source image}" +        "{input| |The source image}" 
- "{o|outdir| |The output directory}" +        "{outdir| |The output directory}" 
- "{c|cascade| |The cascade file}"+        "{cascade| |The cascade file}"
 }; };
  
 int main(int argc, const char** argv) int main(int argc, const char** argv)
 { {
- cv::CommandLineParser parser(argc, argv, keys); +        cv::CommandLineParser parser(argc, argv, keys); 
- std::string infile = parser.get<std::string>("input"); +        std::string infile = parser.get<std::string>("input"); 
- std::string outdir = parser.get<std::string>("outdir"); +        std::string outdir = parser.get<std::string>("outdir"); 
- std::string cascade_file = parser.get<std::string>("cascade");+        std::string cascade_file = parser.get<std::string>("cascade");
  
- cv::CascadeClassifier cascade; +        cv::CascadeClassifier cascade; 
- if (cascade_file.empty() || !cascade.load(cascade_file)) +        if (cascade_file.empty() || !cascade.load(cascade_file)) 
-+        
- std::cout << cv::format("Error: cannot load cascade file! \n"); +                std::cout << cv::format("Error: cannot load cascade file! \n"); 
- return -1; +                return -1; 
- }+        }
  
- cv::Mat src = cv::imread(infile); +        cv::Mat src = cv::imread(infile); 
- if (src.empty()) +        if (src.empty()) 
-+        
- std::cout << cv::format("Error: cannot load source image!\n"); +                std::cout << cv::format("Error: cannot load source image!\n"); 
- return -1; +                return -1; 
- }+        }
  
- cv::Mat gray; +        cv::Mat gray; 
- cv::cvtColor(src, gray, CV_BGR2GRAY); +        cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY); 
- cv::equalizeHist(gray, gray);+        cv::equalizeHist(gray, gray);
  
- std::vector<cv::Rect> faces; +        std::vector<cv::Rect> faces; 
- cascade.detectMultiScale(gray, faces, 1.2, 3);+        cascade.detectMultiScale(gray, faces, 1.2, 3);
  
- cv::Mat src_copy = src.clone(); +        cv::Mat src_copy = src.clone(); 
- for (int i = 0; i < faces.size(); i++) +        for (int i = 0; i < faces.size(); i++) 
-+        
- std::cout << faces[i]; +                std::cout << faces[i]; 
- }+        }
  
- return 0;+        return 0;
 } }
  
Line 70: Line 70:
  
 <code> <code>
-g++ `pkg-config --cflags --libs opencv` face.cpp `pkg-config --libs opencv` -o face +g++ `pkg-config --cflags --libs opencv4` face.cpp `pkg-config --libs opencv4` -o face 
-<code>+</code>
  
  
Line 86: Line 86:
 --input={FILE}  просто подставляет текущий обрабатываемый файл --input={FILE}  просто подставляет текущий обрабатываемый файл
 </code> </code>
 +
 +
 +===== Face Detect XML =====
 +
 +OpenCV определяет лица по конфигу (xml файл) , по дефолту идет более базовый конфиг, однако можно взять любой из доступных конфигов, которые дадут другие результаты (более или менее хорошие в зависимости от конктента)
 +
 +Примеры конфигов https://github.com/sightmachine/SimpleCV/tree/master/SimpleCV/Features/HaarCascades
  
ru/facedetect.1404319232.txt.gz · Last modified: by admin