Exemple #1
0
        /// <summary>
        /// 画像配置
        /// </summary>
        void DrawImages()
        {
            if (inputDirectory == null)
            {
                return;
            }

            float x = 0.0f;
            float y = 0.0f;

            const float w    = 50.0f;
            const float h    = 50.0f;
            const float maxW = 200.0f;

            // アセットが保存されているプロジェクトフォルダーのパス名
            string path = AssetDatabase.GetAssetPath(inputDirectory);

            // pathで指定されたフォルダ以下のファイルパスを全て取得する
            string[] fileNames = Directory.GetFiles(path, "*.png");

            // ファイルデータを個別で保存しておく
            ImagePathList.AddRange(fileNames);

            EditorGUILayout.BeginVertical();
            {
                for (int i = 0; i < fileNames.Length; i++)
                {
                    // 横がmaxWを超えていたら改行する
                    if (x > maxW)
                    {
                        x  = 0.0f;
                        y += h;
                        EditorGUILayout.EndHorizontal();
                    }
                    // 0の場合は横からボタンを置いていく
                    if (x == 0.0f)
                    {
                        EditorGUILayout.BeginHorizontal();
                    }

                    // テクスチャを取得
                    Texture2D tex = (Texture2D)AssetDatabase.LoadAssetAtPath(fileNames[i], typeof(Texture2D));

                    // ボタンを配置
                    if (GUILayout.Button(tex, GUILayout.MaxWidth(w), GUILayout.MaxHeight(h),
                                         GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(false)))
                    {
                        SelectedImagePath = fileNames[i];
                    }

                    // 位置を調整
                    x += w;
                }
                EditorGUILayout.EndVertical();
            }
        }
Exemple #2
0
        /// <summary>
        /// 导入照片录入
        /// </summary>
        /// <param name="IsOfflineRecord">是否为本地导入</param>
        public void ImportImgesFun(bool IsOfflineRecord)
        {
            lock (locker)
            {
                List <string> imagePathListTemp = ImportImages(IsOfflineRecord);
                if (imagePathListTemp.Count <= 0)
                {
                    return;
                }
                FRC.PIVM.NaturalSourceImage = imagePathListTemp[0];

                var numStart    = ImagePathList.Count;
                int isGoodImage = 0;

                //人脸检测以及提取人脸特征
                ThreadPool.QueueUserWorkItem(new WaitCallback(delegate
                {
                    //人脸检测和剪裁
                    for (int i = 0; i < imagePathListTemp.Count; i++)
                    {
                        Image image = UtilTool.ReadImageFromFile(imagePathListTemp[i]);
                        if (image == null)
                        {
                            continue;
                        }
                        if (image.Width > 1536 || image.Height > 1536)
                        {
                            image = UtilTool.ScaleImage(image, 1536, 1536);
                        }
                        if (image == null)
                        {
                            continue;
                        }
                        if (image.Width % 4 != 0)
                        {
                            image = UtilTool.ScaleImage(image, image.Width - (image.Width % 4), image.Height);
                        }
                        //人脸检测
                        ASF_MultiFaceInfo multiFaceInfo = UtilToolFace.DetectFace(pImageEngine, image);
                        //判断检测结果
                        if (multiFaceInfo.faceNum > 0)
                        {
                            ImagePathList.Add(imagePathListTemp[i]);
                            MRECT rect = UtilToolMemory.PtrToStructure <MRECT>(multiFaceInfo.faceRects);
                            image      = UtilTool.CutImage(image, rect.left, rect.top, rect.right, rect.bottom);
                        }
                        else
                        {
                            if (image != null)
                            {
                                image.Dispose();
                            }
                            continue;
                        }
                        //显示人脸
                        FRC.MainView.Dispatcher.Invoke(new Action(delegate
                        {
                            if (image == null)
                            {
                                image = UtilTool.ReadImageFromFile(imagePathListTemp[i]);

                                if (image.Width > 1536 || image.Height > 1536)
                                {
                                    image = UtilTool.ScaleImage(image, 1536, 1536);
                                }
                            }
                            //_imageLists.Images.Add(imagePathListTemp[i], image);
                            //_imageList.Items.Add((numStart + isGoodImage) + "号", imagePathListTemp[i]);
                            isGoodImage += 1;
                            if (image != null)
                            {
                                image.Dispose();
                            }
                        }));
                    }

                    //提取人脸特征
                    for (int i = numStart; i < ImagePathList.Count; i++)
                    {
                        ASF_SingleFaceInfo singleFaceInfo = new ASF_SingleFaceInfo();
                        Image image = UtilTool.ReadImageFromFile(ImagePathList[i]);
                        if (image == null)
                        {
                            continue;
                        }
                        IntPtr feature = UtilToolFace.ExtractFaceFeature(pImageEngine, image, out singleFaceInfo);

                        FRC.PIVM.FaceCharacteristics = feature;

                        FRC.MainView.Dispatcher.Invoke(new Action(delegate
                        {
                            if (singleFaceInfo.faceRect.left == 0 && singleFaceInfo.faceRect.right == 0)
                            {
                                AppendText(string.Format("{0}号未检测到人脸\r\n", i));
                            }
                            else
                            {
                                AppendText(string.Format("已提取{0}号人脸特征值,[left:{1},right:{2},top:{3},bottom:{4},orient:{5}]\r\n", i, singleFaceInfo.faceRect.left, singleFaceInfo.faceRect.right, singleFaceInfo.faceRect.top, singleFaceInfo.faceRect.bottom, singleFaceInfo.faceOrient));
                                ImagesFeatureList.Add(feature);
                            }
                        }));
                        if (image != null)
                        {
                            image.Dispose();
                        }
                    }
                    FRC.MainView.Dispatcher.Invoke(new Action(delegate
                    {
                        FRC.MainVM.IsCameraEnable = true;

                        //FRC.MainVM.IsPGBtnEnable = true;
                        FRC.MainVM.IsSIBtnEnable = true;
                        //FRC.MainVM.IsPGIBtnEnable = true;
                        FRC.MainVM.IsSIIBtnEnable = true;
                    }));
                }));

                //保存个人信息数据
                //FRC.UploadFaceRecord();
            }
        }