SVM情绪识别

一、硬件环境

开发情绪识别系统时的硬件环境配置:联想E40笔记本,操纵系统windows764位操作系统,i5处理器,4G内存,双显卡AMD Radeon™ R5 M330和Intel HD Graphics 5500(推荐使用NVIDIA的显卡进行加速)

二、安装VS2015 Community 版本。

按照教程进行安装,Visual Studio各版本下载网址https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2015-version-history

三、OpenCV3.1.0+VS2015开发环境配置

按照教程在VS2015中配置Opencv,使用版本为opencv3.1.0,官方网址http://opencv.org/,下载地址https://opencv.org/releases.html

https://www.cnblogs.com/linshuhe/p/5764394.html

到OpenCV的官网(http://opencv.org/)下载最新版本的OpenCV安装包,由于OpenCV针对不同平台都有安装程序,所以我们只需要根据当前开发环境选择合适的平台版本即可,这里我们是在win7 64bit操作系统下进行开发,所以应该下载OpenCV for Windows:

我们选择了版本为3.1,下载完毕后,我们得到其安装文件:opencv-3.1.0.exe

1、安装:

双击打开下载好的opencv-3.1.0.exe文件,进行安装(其实是解压),选择安装目录:

安装完毕之后,在其安装目录下可以看到两个文件夹:build和sources,其中build是OpenCV使用时要用到的一些库文件,而sources中则是OpenCV为我们提供的一些demo示范源码:

2.环境变量配置:

上面步骤只是完成了安装,但是要能够正常使用OpenCV来进行开发,我们还需要进行环境变量的配置,我的电脑—>属性—>高级系统设置—>环境变量,找到Path变量,选中并点击编辑:

 

64位系统的需要在path添加“;opencv安装路径\build\x64\vc14\bin”(注:英文输入法中的“;”是分割符,用于与前面其他软件的配置参数分开),例如我的配置参数应该为:; D:\private files\opencv310\opencv\build\x64\vc14\bin。在之前的opencv版本中的配置时,32位系统应配置路径“;opencv安装路径\build\x86\vc14\bin”,但是3.1.0版本的OpenCV已经将x86这个目录删除了,也就是说在VS2015环境下不能进行32位的OpenCV编译。

 

还有一个要注意的就是x64文件夹下分为vc12和vc14两个文件夹,他们对应于VS的版本,例如VS2013应使用vc2012,而这里我们使用的是VS2015,所以应该使用vc14文件目录:

补充:vc8 = VisualStudio 2005,vc9 = Visual Studio 2008,vc10 = Visual Studio2010,vc11 = Visual Studio 2012,vc12 = Visual Studio2013,vc14 = Visual Studio 2015

 

注意:环境变量配置完毕之后,需要重启电脑才能生效!

3.VS 2015配置:

我们知道要在VS中使用外部的类库的话,需要进行引入的一下配置,这个配置就包括:外部库目录指定和外部包含文件指定。

 

    打开VS 2015,新建一个空白的win32的控制台工程:

选择语言为C++,Win32类型中的控制台工程,并设置工程名称:

指定建立的工程为空白工程:

建立完工程之后,我们选中解决方案栏中的ResourceFiles目录(即源码目录),然后新建一个C++源码文件:

 

设置源码的文件名,例如:Main,然后创建此源码文件到工程中:

在VS中有个叫做“属性管理器”的工具,用于进行VS整体参数的配置,配置一次之后,以后所有新建项目都能应用改配置,不用再一一进行配置操作,使用起来也非常方便。点击工具栏中的:View—>Other Windows—>Property Manger打开属性管理器:

 

 

在新出现的属性管理器栏中,展开目录,选中Debug|Win64中的Microsoft.Cpp.x64.user,并右键点击属性(Properties)进入属性界面:

1)配置包含目录:

在通用属性(CommonProperties)—>VC ++目录—>包含目录,然后点击右侧三角标志选中Edit进入编辑:

向其中添加下面路径:

D:\private files\opencv310\opencv\build\include

2)配置库文件目录:

 

       完成上面的包含目录配置之后,我们还需要进行库文件的配置:回到属性界面,选择包含目录下面的Library Directories(库文件目录):

向库文件目录下添加OpenCV的库文件目录:E:\OpenCV\opencv\build\x64\vc14\lib,这个目录根据每个人自己在第一步安装OpenCV中选择的目录进行选定

3)配置动态链接库:

 

       我们可以查看步骤2)中添加的库文件目录下面.lib文件列表,发现在3.1.0版本的OpenCV中,仅剩下两个库文件,分别是:opencv_world310.lib和opencv_world310d.lib,这里两个库文件的区别就是:opencv_world310.lib是Release模式版本,而opencv_world310d.lib是Debug模式版本:

跟上述两个步骤相似,在属性界面中打开Linker(链接库)—>Input(输入)—>Additional Dependencies(添加依赖):

将我们刚刚在OpenCV库文件目录下看到的两个库文件其中一个添加到这里(根据模式需求Release模式或Debug模式):

3、实践:

 

在完成了上述所有配置工作之后,我们需要进行一次实测,用于验证以上配置是否成功。这里我们的测试demo功能很简单,就是在一个窗口中显示我们指定的一张图片。在之前的Main.cpp文件中添加以下代码:

#include<iostream> 

#include<opencv2/core/core.hpp> 

#include<opencv2/highgui/highgui.hpp> 

 

using namespacecv; 

 

int main(){ 

    // 读入一张图片(游戏原画)   

    Mat img = imread("pic.jpg"); 

    // 创建一个名为 "游戏原画"窗口   

    namedWindow("游戏原画"); 

    // 在窗口中显示游戏原画   

    imshow("游戏原画",img); 

    // 等待6000 ms后窗口自动关闭   

    waitKey(6000); 

}

 

将图片pic.jpg复制到工程目录下面,与源码位于同一目录:

 

运行工程,假如一切都正常的话,会出现如下结果:

4、可能出现的问题:   

 

1.运行程序时,发现编译不通过,报一下错误:

这个错误出现的原因是:我们之前说过在VS2015中不能进行32位的OpenCV的编译,而且我们整个配置过程都是针对于64位系统而进行的,那么我们要如何才能让VS 2015运行64的调试模式呢,其实很简单,在工具栏中切换一下就好:

2.无法加载图片,提示指针越位:

 

 

出现这个问题一般可能有两个原因:

一是图片后缀名不对或者是目录存放位置不正确;

二是属性配置中的动态库配置中,带d和不带d的两个库文件配置情况与当前调试模式不对应,可以在解决方案中直接选中当前工程,右键进入属性面板,然后修改其Linker中的Additional Dependencies:

四、Dlib在VS2015上的详细安装教程

过程一:生成dlib.lib库文件

参考博客https://blog.csdn.net/dawnfox/article/details/77282246

Dlib库(官网http://dlib.net/)是一个基于C++开发的机器学习算法的工具库,广泛应用在机器人、嵌入式设备、移动手机和高性能计算设备中,以用于解决实际问题。

1、准备工作,去dlib官网下载最新库,因为库需要C++11的支持,如果vs2015是老版本也需要更新一下,只有最新的版本支持的才算好,我用的版本为Update3版本。

2、下载CMake版本为cmake-3.9.1-win64-x64

3、解压下载的库文件我是放在D:\privatefiles\dlibMake19.8

图1

4、进入正题,使用CMAKE来生成dlib.lib库,运行cmake-gui出现下面窗口。

标注1为dlib源码文件中的dlib文件夹。如我在此处选择D:\private files\dlibfiles\dlib-19.8

标注2为选择将源码文件编译后的文件的位置。D:\private files\dlibMake19.9

完成标注1和2后,选中标注3。出现图3。

图2

图3

5、图3中标注5可进行选择编译器,此处选择已安装好的visual studio2014 64位,默认不选择的话是visual studio32位。32位版本也是在此处选择,重复64位的安装步骤即可。下面配置选择默认,不更改。

等待配置结束出现图4红字。

 

图4

 

6、图4中的底部信息会有部分警告文字,不影响。不改动红色字体参数设置。

点击图4的Generate等待直至红色字变成黑白字体。出现图5。

图5

 

运行结束后可能会提示CUDA没找到,有一些示例用到,目前我的还没用我就没管,如果想安装也可以cuda_9.1.85_win10.exe比较大有点心理准备呵呵,这个是软件使用显卡加速。

 

7、进入刚才自己创建的编译目录,眼前一亮吧

图6

点击图5的open project。调用visualstudio2015打开配置完成后的项目工程。

 

出现图7左侧小图。图6右侧小图为编译后的工程图。

图7

如果文件夹下没有vs2015的工程文件,可直接点击cmake打开工程即可会自动生成。

8、点击dlib属性页。需要注意的地方有两处。

一是配置属性》c/c++》常规中的附加包含目录,需要添加dlib解压文件dlib目录中external中的libjpeg,libpng,zlib三个文件目录。如

图8

二是配置属性》c/c++》预处理器中的预处理器定义。需要注意是否存在

DLIB_JPEG_SUPPORT

DLIB_PNG_SUPPORT

DLIB_JPEG_STATIC

这三个参数。如图9

图9

9、完成上述操作后。重新编译项目生成dlib.lib文件,在release或debug下生成了dlib.ilb库文件名字可以自己随便改,推荐使用release模式,程序在运行过程中更加流畅。

 

 

过程二:验证dlib.lib是否正确

期待结果:写个c程序,调用dlib库文件,检测图片人脸的特征点。

 

10、下面开始建立示例工程

 

使用vs2015 新建win32控制台应用程序,C++空的项目,然后新建源文件main.cpp。

11、工程-右键-属性添加dlib目录

D:\private files\dlibfiles\dlib-19.8

D:\privatefiles\dlibfiles\dlib-19.8\dlib\external\libpng

D:\privatefiles\dlibfiles\dlib-19.8\dlib\external\libjpeg

D:\privatefiles\dlibfiles\dlib-19.8\dlib\external\zlib

12、C/C++预处理器添加定义

DLIB_PNG_SUPPORT

DLIB_JPEG_SUPPORT

DLIB_JPEG_STATIC

 

13、链接器将输入添加dlib.lib,并把dlib.lib考入工程的目录中

14、到此所有配置已完毕直接编译示例即可。

示例1:

#include"dlib\image_processing\frontal_face_detector.h"

#include "dlib\image_io.h"

using namespace dlib;

 

void TestFaceDetect(const char *filename)

{

         frontal_face_detectordetector = get_frontal_face_detector();

         array2d<unsignedchar> img;

         load_image(img,filename);

         std::vector<rectangle>dets = detector(img);

         printf("Numberof face detectd:%d\n",dets.size());

}

int main()

{

         constchar *filename = "1.jpg";

         TestFaceDetect(filename);

         system("pause");

         return0;

}

示例2:

#pragmacomment(linker, "/subsystem:windows/entry:mainCRTStartup")//去除CMD窗口

#include<dlib/opencv.h> 

#include<opencv2/opencv.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> 

 

#defineACC_NOW 1

usingnamespace cv;

usingnamespace cv::ml;

usingnamespace dlib;

usingnamespace std;

 

int main()

{

 

    string win_delaunay = "DelaunayTriangulation";

    ShowCursor(false);

    namedWindow(win_delaunay, CV_WINDOW_NORMAL);

    setWindowProperty(win_delaunay, CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);

    try

    {

        cv::VideoCapture cap(0);

        if (!cap.isOpened())

        {

            cerr <<"Unable to connect to camera"<< endl;

            return 1;

        }

        cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);

        cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);

        // Load face detection and pose estimationmodels. 

        frontal_face_detector detector =get_frontal_face_detector();

        shape_predictor pose_model;

        deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;

 

        cv::Mat frame;

        // Grab and process frames until the mainwindow is closed by the user. 

        while (cv::waitKey(30) != 27)

        {

            // Grab a frame 

            cap >> frame;

            Mat dstImage;

            resize(frame, dstImage, Size(frame.cols / ACC_NOW, frame.rows / ACC_NOW), 0, 0, INTER_LINEAR);

 

            cv_image<bgr_pixel> cimg(dstImage);

 

            cout << frame.cols <<"|"<< frame.rows << endl;

            double t = (double)cvGetTickCount();

            // Detect faces  

            std::vector<dlib::rectangle> dets = detector(cimg);

            t = ((double)cvGetTickCount() - t) / (cvGetTickFrequency()* 1000);

            cout <<"Number of faces detected: "<< dets.size() <<"Time:"<< t <<"ms"<< endl;

 

            String str = cv::format("Faces:%d", dets.size());

            putText(frame, str, cv::Point(20, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(255, 255, 255), 1, LINE_AA);

 

            for (int m = 0; m < dets.size(); m++)

            {

 

                full_object_detection shape = pose_model(cimg, dets[m]);

                for (int i = 0; i < 68; i++) {

                    circle(frame,cvPoint(shape.part(i).x(), shape.part(i).y()), 2, cv::Scalar(255, 0, 0), -1);

                }

 

            }

            // Find the pose of each face. 

            imshow(win_delaunay, frame);

            waitKey(30);

 

        }

    }

    catch (serialization_error& e)

    {

        cout <<"You need dlib's default face landmarking model fileto 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;

    }

}

 

可是实时看到人脸的68个特征点,上述现象表明dlib.lib库文件的确安装完毕。

 

利用Dlib库检

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值