Linux 에서 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++
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.