Ejemplo n.º 1
0
        /// <summary>
        /// 特徴量の値を配列にセットする
        /// </summary>
        /// <param name="FeatureList"></param>
        /// <param name="id_list"></param>
        /// 
        private void SetFeatureListToArray(List<FaceFeature.FeatureValue> FeatureList, ref double[] value_array, LEARNING_TYPE type)
        {
            int idx = 0;

            if (type == LEARNING_TYPE.L_EYE_NOSE)
            {
                for (int i = 0; i < FeatureList.Count; i++)
                {
                    value_array[idx++] = (FeatureList[i].LeftEyeValueL);
                    //                value_array[idx++] = (FeatureList[i].LeftEyeValueR);
                    //                value_array[idx++] = (FeatureList[i].RightEyeValueL);
                    //                value_array[idx++] = (FeatureList[i].RightEyeValueR);
                    value_array[idx++] = (FeatureList[i].NoseLValueL);
                    //                value_array[idx++] = (FeatureList[i].NoseLValueR);
                    //                value_array[idx++] = (FeatureList[i].MouthLValueL);
                    //                value_array[idx++] = (FeatureList[i].MouthLValueR);
                }
            }
            else if (type == LEARNING_TYPE.L_EYE_MOUTH)
            {
                for (int i = 0; i < FeatureList.Count; i++)
                {
                    value_array[idx++] = (FeatureList[i].LeftEyeValueL);
                    //                value_array[idx++] = (FeatureList[i].LeftEyeValueR);
                    //value_array[idx++] = (FeatureList[i].RightEyeValueL);
                    //                value_array[idx++] = (FeatureList[i].RightEyeValueR);
                    //value_array[idx++] = (FeatureList[i].NoseLValueL);
                    //                value_array[idx++] = (FeatureList[i].NoseLValueR);
                    value_array[idx++] = (FeatureList[i].MouthLValueL);
                    //                value_array[idx++] = (FeatureList[i].MouthLValueR);
                }
            }
            else if (type == LEARNING_TYPE.R_EYE_MOUTH)
            {
                for (int i = 0; i < FeatureList.Count; i++)
                {
                    //value_array[idx++] = (FeatureList[i].LeftEyeValueL);
                    //                value_array[idx++] = (FeatureList[i].LeftEyeValueR);
                    value_array[idx++] = (FeatureList[i].RightEyeValueL);
                    //                value_array[idx++] = (FeatureList[i].RightEyeValueR);
                    //value_array[idx++] = (FeatureList[i].NoseLValueL);
                    //                value_array[idx++] = (FeatureList[i].NoseLValueR);
                    value_array[idx++] = (FeatureList[i].MouthLValueL);
                    //                value_array[idx++] = (FeatureList[i].MouthLValueR);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 単体の特徴量構造体を配列に直す  要検討
        /// </summary>
        /// <param name="feature"></param>
        /// <param name="value_array"></param>
        private void SetFeatureToArray(FaceFeature.FeatureValue feature, ref double[] value_array, LEARNING_TYPE type)
        {
            int idx = 0;
            if (type == LEARNING_TYPE.L_EYE_NOSE)
            {
                value_array[idx++] = (feature.LeftEyeValueL);
                //            value_array[idx++] = (feature.LeftEyeValueR);
                //            value_array[idx++] = (feature.RightEyeValueL);
                //            value_array[idx++] = (feature.RightEyeValueR);
                value_array[idx++] = (feature.NoseLValueL);
                //            value_array[idx++] = (feature.NoseLValueR);
                //            value_array[idx++] = (feature.MouthLValueL);
                //            value_array[idx++] = (feature.MouthLValueR);
            }
            else if (type == LEARNING_TYPE.L_EYE_MOUTH)
            {
                value_array[idx++] = (feature.LeftEyeValueL);
                //            value_array[idx++] = (feature.LeftEyeValueR);
                //            value_array[idx++] = (feature.RightEyeValueL);
                //            value_array[idx++] = (feature.RightEyeValueR);
                //value_array[idx++] = (feature.NoseLValueL);
                //            value_array[idx++] = (feature.NoseLValueR);
                value_array[idx++] = (feature.MouthLValueL);
                //            value_array[idx++] = (feature.MouthLValueR);

            }
            else if (type == LEARNING_TYPE.R_EYE_MOUTH)
            {
                //value_array[idx++] = (feature.LeftEyeValueL);
                //            value_array[idx++] = (feature.LeftEyeValueR);
                value_array[idx++] = (feature.RightEyeValueL);
                //            value_array[idx++] = (feature.RightEyeValueR);
                //value_array[idx++] = (feature.NoseLValueL);
                //            value_array[idx++] = (feature.NoseLValueR);
                value_array[idx++] = (feature.MouthLValueL);
                //            value_array[idx++] = (feature.MouthLValueR);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 学習用のデータファイルを作成する
        /// </summary>
        /// <param name="feature_list">特徴量</param>
        /// <param name="file_name">辞書ファイル名</param>
        /// <param name="type">辞書タイプ</param>
        private void makeLearinigFile(List<FaceFeature.FeatureValue> feature_list, string file_name, LEARNING_TYPE type)
        {
            //特徴量をMatに移し替える 2個で一つ
            //2個のfloat * LISTの大きさの配列
            double[] feature_array = new double[2 * feature_list.Count];

            //特徴量をSVMで扱えるように配列に置き換える
            SetFeatureListToArray(feature_list, ref feature_array, type);
            //これがラベル番号
            int[] id_array = new int[feature_list.Count];
            for (int i = 0; i < id_array.Length; i++)
            {
                id_array[i] = feature_list[i].ID;
            }

            // dataとresponsesの様子を描画
            CvPoint2D32f[] points = new CvPoint2D32f[id_array.Length];
            int idx = 0;
            for (int i = 0; i < id_array.Length; i++)
            {
                points[idx].X = (float)feature_array[i * 2];
                points[idx].Y = (float)feature_array[i * 2 + 1];
                idx++;
            }

            //学習データを図にする
            Debug_DrawInputFeature(points, id_array);
            //LibSVMで学習させるためのデータを出力
            OutPut_FeatureAndID(points, id_array, file_name);
        }