티스토리 뷰

해당 내용을 하기 전에 opencv를 적용시켜야합니다. 아직 VisualStudio에 opencv를 적용 안시키신 분들은 아래 링크로 들어가서 적용시키시기 바랍니다.


VisualStudio에 OpenCV 적용시키기



#1 개발환경


- Windows 10 Professional K 64bit

- Opencv 3.2.0

- Dlib 19.2


#2 Dlib 설치


dlib 19.2버전 다운로드


원하는 경로에 우선 다운로드를 하자.




다운로드 한 폴더에 build라는 새폴더를 생성하자.



#3 CMake 설지


CMake 다운로드

자신에게 맞는 버전으로 원하는 경로에 다운로드를 하면 된다.







위와 같이 경로를 설정해주고






configure를 누르면 된다. 한 두번정도 누르면 화면이 붉은색에서 흰색으로 변할것이다.






마지막으로 generate를 누르면 끝!!!







그러면 위 처럼 project.sln 프로젝트파일이 생겼을것이다. 이것을 더블클릭해서 들어가자.






위와 같이 설정을 하고






솔루션 빌드를 하면 끝~




#4 VisualStudio에 Dlib 적용시키기


이제 원래 개발중이던 Test_Project 프로젝트로 넘어가자.











포함 디렉터리에 위에 경로를 넣어주자.






그러면 이렇게 적용된것을 볼 수 있다.





링커 -> 입력으로 들어서 추가 종속성에 아래와 같이 경로를 입력해주자.
















위와 같이 입력해주면 경로 설정은 끝.


추가적으로 이번에는 Debug로 빌드를 할게 아니가 Release로 빌드를 할것이다. 그래서 분명 dll 파일이 없다는 에러가 발생할 것이다. 따라서 dll 파일이 없다는 에러가 뜨는것을 방지하기 위해서 설정을 하나만 더 해주자.




opencv 가 설치되어있는 위에 경로로 가서 해당 파일 3개를 복사해서 아래 프로젝트 폴더 경로에다가 붙여넣기를 해주면 된다.






#5 소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*
This example program shows how to find frontal human faces in an image and
estimate their pose.  The pose takes the form of 68 landmarks.  These are
points on the face such as the corners of the mouth, along the eyebrows, on
the eyes, and so forth.
This example is essentially just a version of the face_landmark_detection_ex.cpp
example modified to use OpenCV's VideoCapture object to read from a camera instead
of files.
Finally, note that the face detector is fastest when compiled with at least
SSE2 instructions enabled.  So if you are using a PC with an Intel or AMD
chip then you should enable at least SSE2 instructions.  If you are using
cmake to compile this program you can enable them by using one of the
following commands when you create the build project:
cmake path_to_dlib_root/examples -DUSE_SSE2_INSTRUCTIONS=ON
cmake path_to_dlib_root/examples -DUSE_SSE4_INSTRUCTIONS=ON
cmake path_to_dlib_root/examples -DUSE_AVX_INSTRUCTIONS=ON
This will set the appropriate compiler options for GCC, clang, Visual
Studio, or the Intel compiler.  If you are using another compiler then you
need to consult your compiler's manual to determine how to enable these
instructions.  Note that AVX is the fastest but requires a CPU from at least
2011.  SSE4 is the next fastest and is supported by most current machines.
*/
 
#include <dlib/opencv.h>
#include <opencv2/highgui/highgui.hpp>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>
 
using namespace dlib;
using namespace std;
 
int main()
{
    try
    {
        cv::VideoCapture cap(0);
        if (!cap.isOpened())
        {
            cerr << "Unable to connect to camera" << endl;
            return 1;
        }
 
        image_window win;
 
        // Load face detection and pose estimation models.
        frontal_face_detector detector = get_frontal_face_detector();
        shape_predictor pose_model;
        deserialize("shape_predictor_68_face_landmarks.dat">> pose_model;
 
        // Grab and process frames until the main window is closed by the user.
        while (!win.is_closed())
        {
            // Grab a frame
            cv::Mat temp;
            cap >> temp;
            // Turn OpenCV's Mat into something dlib can deal with.  Note that this just
            // wraps the Mat object, it doesn't copy anything.  So cimg is only valid as
            // long as temp is valid.  Also don't do anything to temp that would cause it
            // to reallocate the memory which stores the image as that will make cimg
            // contain dangling pointers.  This basically means you shouldn't modify temp
            // while using cimg.
            cv_image<bgr_pixel> cimg(temp);
 
            // Detect faces 
            std::vector<rectangle> faces = detector(cimg);
            // Find the pose of each face.
            std::vector<full_object_detection> shapes;
            for (unsigned long i = 0; i < faces.size(); ++i)
                shapes.push_back(pose_model(cimg, faces[i]));
 
            // Display it all on the screen
            win.clear_overlay();
            win.set_image(cimg);
            win.add_overlay(render_face_detections(shapes));
        }
    }
    catch (serialization_error& e)
    {
        cout << "You need dlib's default face landmarking model file to run this example." << endl;
        cout << "You can get it from the following URL: " << endl;
        cout << "   http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2" << endl;
        cout << endl << e.what() << endl;
    }
    catch (exception& e)
    {
        cout << e.what() << endl;
    }
}
cs



해당 소스코드를 main.cpp에다가 붙여넣기 해주자.




opencv Test 할때와는 달리 Release로 빌드 설정을 해주고 빌드한 후 로컬 Windows 디버커를 선택해주면





위와 같이 잠깐 뭔가 켜진가 싶더니 프로그램이 종료가 된다. 그 이유는




소스코드에 보면 해당 경로를 통해 얼굴을 인식하는것인데 해당 파일이 존재하지 않으므로 해당 파일을 넣어주면 된다.


shape_predictor_68_face_landmarks.dat.bz2 다운로드




다운로드 받은 파일을 아래 경로에 붙여넣기 해주자





그러면 아래와 같이 얼굴을 인식하는 영상이 보여질것이다.








'C++ > OpenCV & Dlib' 카테고리의 다른 글

VisualStudio 2015에 opencv 적용시키기  (0) 2018.03.30
Comments