/// <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(); } }
/// <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(); } }