首页 > 程序开发 > 综合编程 > 其他综合 >

【opencv】神经网络识别美女

2016-05-14

1、面部提取的不是特别准确,感觉略大 2、训练集太少,因为只是为了玩玩,只有16张图做训练集,所以会一定程度上影响测试的准确性 3、图像中脸部有的倾斜太严重,妹子们拍照总喜欢歪着脸,……会影响结果 4、所有人脸测试时均标准化为30*30,略小

最近比较闲,想做一个判断是否是美女的算法

下面是完整的代码

//opencv2.4.9 + vs2012 + win7 x64
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

/** Function Headers */
void detectAndCut( Mat img ,string dir ,string filename );
void AllImagePro( string src, string dst, const int number );
char* WcharToChar(const wchar_t* wp);
wchar_t* CharToWchar(const char* c);
wchar_t* StringToWchar(const string& s);
string getstring ( const int n );

CascadeClassifier face_cascade;
String face_cascade_name = "haarcascade_frontalface_alt.xml";

//主函数
int main()
{
    const int sample_mun_perclass = 12;//训练每类图片数量
    const int class_mun = 2;//训练类数 一类是美女,一类是丑女 ^-^

    const int image_cols = 30;
    const int image_rows = 30;

    string  fileReadName,fileReadPath;

    float trainingData[class_mun*sample_mun_perclass][image_rows*image_cols] = {{0}};//每一行一个训练样本
    float labels[class_mun*sample_mun_perclass][class_mun]={{0}};//训练样本标签

    if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
    AllImagePro( "0", "0cut" ,sample_mun_perclass);
    AllImagePro( "1", "1cut" ,sample_mun_perclass);
    cout<<"cut……OK!"<((int)k/8,(int)k%8);//(float)train_image.data[k];
                //cout<(k/8,k%8)<

美女原图:
这里写图片描述
NOT美女原图:<喎"https://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxiciAvPg0KPGltZyBhbHQ9"这里写图片描述" src="https://www.2cto.com/uploadfile/Collfiles/20160514/20160514091049319.jpg" title="\" />

进行人脸检测截取后:
美女训练集:
这里写图片描述
NOT美女训练集:
这里写图片描述
照片都是百度随便搜的……

测试结果:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这个就识别错误

识别正确率80%左右
主要原因:
1、面部提取的不是特别准确,感觉略大
2、训练集太少,因为只是为了玩玩,只有16张图做训练集,所以会一定程度上影响测试的准确性
3、图像中脸部有的倾斜太严重,妹子们拍照总喜欢歪着脸,……会影响结果
4、所有人脸测试时均标准化为30*30,略小
5、采用canny算子得到的边缘进行训练,忽略了气色等因素,脸白脸黑其实边缘都差不多

热点推荐