例如有一个人脸图像库,如何利用摄像头即时捕捉的人脸图像,
与已经保存的人脸数据库中查找、对比、辨别等,希望能得到的实现思想即可。  希望与对此感兴趣的网友交流!

解决方案 »

  1.   

    俺前天才完成的3层BP网模板,就为你的10分拿出来抛砖引玉.const int N0=32,N1=14,N2=4;    //------结点数
    double a1[(N1+1)*(N0+1)],a2[N2*(N1+1)];//-------权值
    double x[(N0+1)];//------输入
    double a;//----logistic 函数参数
    double o1[(N1+1)],o2[N2];//-------各神经元输出标量
    double s1[(N1+1)],s2[N2];//---------局部梯度域
    double n;     //-----------学习率
    //----------网络初始化
            //---------初始化特征
            for(int i=0;i<(N1+1)*(N0+1);i++)
            {
                    a1[i]=1;
            }
            for(int i=0;i<(N2)*(N1+1);i++)
            {
                    a2[i]=1;
            }
            a=1;//----logistic 函数参数
            n=0.8;  //---------学习率//----------------神经网络
    //---------计算隐藏层的输出/输出层端的输入
                            double v=0;
                            for(i=0;i<N1;i++)
                            {
                                    v=0;
                                    for(j=0;j<N0+1;j++)
                                    {
                                            //线性求和
                                            v+=(a1[i*(N0+1)+j]*x[j]);
                                    }
                                    //logistic函数(sigmoid)
                                    o1[i]=(double)1.0/(1.0+exp(-a*v));
                            }
                            o1[N1]=1;         //--------输出层偏置输入=1
                            //------------计算输出层输出
                            for(i=0;i<N2;i++)
                            {
                                    v=0;
                                    for(j=0;j<N1+1;j++)
                                    {
                                            //线性求和
                                            v+=(a2[i*(N1+1)+j]*o1[j]);
                                    }
                                    //logistic函数(sigmoid)
                                    o2[i]=(double)1.0/(1.0+exp(-a*v));
                            }
    //----------------------------------------------
    if(mode==0)
    {
    xp=5000;
                                    int xx[N2];
                                    //------对输出层神经元的输出量化到0或1
                                    for(i=0;i<N2;i++)
                                    {
                                            if(o2[i]<0.5)
                                                    xx[i]=0;
                                            else
                                                    xx[i]=1;
                                    }
                                    //----------2进制转10进制
                                    int result=0;
                                    for(i=0;i<N2;i++)
                                    {
                                            result+=(xx[i]<<i);
                                    }                                if(result<0)
                                            result=0;
                                    if(result>9)
                                            result=9; CString s;
    s.Format("%d",result);
    red.Append(s);

    }
    else
    {

    char c[2];c[0]=cred.GetAt(count);c[1]=0;
    int cre=atoi(c);
                                    int d[4];
                                    d[0]=cre%2;cre/=2;
                                    d[1]=cre%2;cre/=2;
                                    d[2]=cre%2;cre/=2;
                                    d[3]=cre%2;cre/=2;                                //-------------输出层调节
                                    //----------计算输出层的局部梯度域
                                    for(i=0;i<N2;i++)
                                    {
                                            s2[i]=a*((double)d[i]-o2[i])*o2[i]*(1-o2[i]);
                                    }
                                    ///-------------调整权值
                                    for(i=0;i<N2;i++)
                                    {
                                            for(j=0;j<N1+1;j++)
                                            {
                                                    a2[i*(N1+1)+j]+=(n*s2[i]*o1[j]);
                                            }
                                    }                                //----------------隐藏层调节
                                    //----------计算隐藏层结点局部梯度域
                                    for(i=0;i<N1+1;i++)
                                    {
                                            double ek=0;
                                            for(j=0;j<N2;j++)
                                            {
                                                    ek+=(s2[j]*a1[j*(N1+1)+i]);
                                            }
                                            s1[i]=a*o1[i]*(1-o1[i])*ek;
                                    }
                                    ///-------------调整权值
                                    for(i=0;i<N1+1;i++)
                                    {
                                            for(j=0;j<N0+1;j++)
                                            {
                                                    a1[i*(N0+1)+j]+=(n*s1[i]*x[j]);
                                            }
                                    }
                                    count++;
    }
      

  2.   

    神经网络的代码简单,关键是怎么训练,网络结构,另外,这个问题我觉得还是pca是王道
      

  3.   

    感谢sboom兄,分数虽少,望笑纳!