Linux 에서 python 과 C++dlib 를 사용 하여 얼굴 검 사 를 실현 합 니 다.

python 과 C+dlib 얼굴 검사 결 과 를 비교 하여 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
설명:
프로젝트 수요 에 따라 Linux 에서 c+dlib 를 사용 하여 얼굴 검 측 과 python 에서 dlib 검 측 을 실시 하여 얻 은 결과 의 차이 가 비교적 크다 는 것 을 발 견 했 기 때문에 테스트 사례 를 썼 는데 결과 에 영향 을 주 는 원인 은 다음 과 같 지만 이에 국한 되 지 않 는 다.
1.dlib 버 전이 다 릅 니 다.
2.dlib 얼굴 검사 에서 detector()두 번 째 매개 변수의 설정 테스트 결 과 는 다음 과 같다.

python
PDlib.py:

# -*- coding: utf-8 -*-

import sys
import cv2 
import dlib

from skimage import io
detector = dlib.get_frontal_face_detector()
win = dlib.image_window()

for f in sys.argv[1:]: 
  img = io.imread(f)

  dets = detector(img,1) #  detector      

  for i, d in enumerate(dets):
    x = d.left()
    y = d.top()
    w = d.right()
    h = d.bottom()   
    cv2.rectangle(img, (x, y), (w, h), (0, 255, 0))
    print("({},{},{},{})".format( x, y, (w-x), (h-y)))

  win.set_image(img)
  io.imsave('./P_Dlib_test.jpg',img)

  #    
  dlib.hit_enter_to_continue()
C++
CDlib.cpp:

#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/opencv.h>
#include "opencv2/opencv.hpp"
#include <iostream>

using namespace dlib;
using namespace std;

cv::Rect Detect(cv::Mat im)
{
  cv::Rect R;
  frontal_face_detector detector = get_frontal_face_detector();
  array2d<bgr_pixel> img; 
  assign_image(img, cv_image<uchar>(im));
  std::vector<rectangle> dets = detector(img);//    

  //     
  if (dets.size() != 0)
  {
    int Max = 0;
    int area = 0;
    for (unsigned long t = 0; t < dets.size(); ++t)
    {      
      if (area < dets[t].width()*dets[t].height())
      {
        area = dets[t].width()*dets[t].height();
        Max = t;
      }
    }

    R.x = dets[Max].left();
    R.y = dets[Max].top();
    R.width = dets[Max].width();
    R.height = dets[Max].height();
    cout<<"("<<R.x<<","<<R.y<<","<<R.width<<","<<R.height<<")"<<endl;
  }
  return R;
}

int main(int argc, char** argv)
{
  if (argc != 2) {
    fprintf(stderr, "       
"); return 1; } string path = argv[1]; try { cv::Mat src, dec; src = cv::imread(path); src.copyTo(dec); cv::cvtColor(dec, dec, CV_BGR2GRAY); cv::Rect box; box = Detect(dec); cv::rectangle(src, box, cv::Scalar(0, 0, 255), 1, 1, 0); cv::imshow("frame", src); cv::imwrite("./C_Dlib_test.jpg", src); cv::waitKey(0);// } catch (exception& e) { cout << e.what() << endl; } }
프로젝트 컴 파일 및 실행
python
스 크 립 트 python PDlib.py G:\\DlibTest\\data\bush.jpg 실행
C++
  • 컴 파일 폴 더 mkdir cbuild 만 들 기
  • 컴 파일 디 렉 터 리 cd cbuild
  • 로 전환
  • makefile 파일 cmake 생 성..
  • 컴 파일 항목 make
  • 실행 가능 한 파일 을 실행 합 니 다./dlibTest G:\DlibTest\\data\bush.jpg
  • Demo: 다운로드 클릭
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기