private AnalyseResult RotateOnAngle(Bitmap tempBitmap, ImageAnalyze Tevian_Analyser) { AnalyzeImageResultType Error = AnalyzeImageResultType.FaceNotFound; var tempResult = Tevian_Analyser.AnalyseScanImage(tempBitmap); Error = tempResult.Errors; if (Error != AnalyzeImageResultType.InnerException) { if (tempResult.Faces.Length != 0) //&& (tempResult.Document.Height < tempResult.Document.Width) пока не ищет координаты документа...закоментил { double angle = 0; foreach (var item in tempResult.ImageDimensions) { if (item.DimensionName == "Угол") { angle = double.Parse(item.DimensionValue); } } tempBitmap = RotateImage(tempBitmap, angle); tempBitmap.Save("MediaFolder\\AfterRotate_" + DateTime.Now.ToString("MMss") + ".jpg"); tempResult = Tevian_Analyser.AnalyseScanImage(tempBitmap); foreach (var item in tempResult.ImageDimensions) { logger.Info("{0},{1}", item.DimensionName, item.DimensionValue); } if (tempResult.Faces.Length != 0) //&& (tempResult.Document.Height < tempResult.Document.Width) пока не ищет координаты документа...закоментил { FaceCoordinates = new Rectangle(tempResult.Faces[0].X, tempResult.Faces[0].Y, tempResult.Faces[0].Width, tempResult.Faces[0].Height); return(new AnalyseResult { Full = tempBitmap, Cropped = CommonLib.ImageExtensions.CropImage(new Bitmap(tempBitmap), FaceCoordinates), Errors = tempResult.Errors }); } else { // Rectangle Rect = new Rectangle(tempResult.Faces[0].X, tempResult.Faces[0].Y, tempResult.Faces[0].Width, tempResult.Faces[0].Height); return(new AnalyseResult { Full = tempBitmap, Cropped = null, Errors = tempResult.Errors }); } } } return(new AnalyseResult { Full = tempBitmap, Cropped = null, Errors = Error }); }
private List <Contracts.AnalyzeImageResultType> FlagsToList(AnalyzeImageResultType Enum) { var List = new List <Contracts.AnalyzeImageResultType>(); if ((Enum & AnalyzeImageResultType.NoError) == AnalyzeImageResultType.NoError) { List.Add(Contracts.AnalyzeImageResultType.NoError); } if ((Enum & AnalyzeImageResultType.ClosedEye) == AnalyzeImageResultType.ClosedEye) { List.Add(Contracts.AnalyzeImageResultType.СlosedEye); } if ((Enum & AnalyzeImageResultType.FaceBlurred) == AnalyzeImageResultType.FaceBlurred) { List.Add(Contracts.AnalyzeImageResultType.FaceBlurred); } if ((Enum & AnalyzeImageResultType.FaceMarred) == AnalyzeImageResultType.FaceMarred) { List.Add(Contracts.AnalyzeImageResultType.FaceMarred); } if ((Enum & AnalyzeImageResultType.FaceNotFound) == AnalyzeImageResultType.FaceNotFound) { List.Add(Contracts.AnalyzeImageResultType.FaceNotFound); } if ((Enum & AnalyzeImageResultType.FaceRotated) == AnalyzeImageResultType.FaceRotated) { List.Add(Contracts.AnalyzeImageResultType.FaceRotated); } if ((Enum & AnalyzeImageResultType.InnerException) == AnalyzeImageResultType.InnerException) { List.Add(Contracts.AnalyzeImageResultType.InnerException); } if ((Enum & AnalyzeImageResultType.MoreThanOnePerson) == AnalyzeImageResultType.MoreThanOnePerson) { List.Add(Contracts.AnalyzeImageResultType.MoreThanOnePerson); } if ((Enum & AnalyzeImageResultType.NotPerson) == AnalyzeImageResultType.NotPerson) { List.Add(Contracts.AnalyzeImageResultType.PhotoFace); } return(List); }
void bwImageAnalizer_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //logger.Info("We returned from Python: bwImageAnalizer_RunWorkerCompleted"); ImageProcessResult pythonResult = (ImageProcessResult)e.Result; List <AnalyzeImageResultType> errors = new List <AnalyzeImageResultType>(); if (pythonResult.isGood) { if (pythonResult.Device == DeviceType.WebCam) { isFinalGoodImageFound = true; } //Console.WriteLine("Python : Good Face FOUND!"); logger.Info("Python : Good Face FOUND!"); } else { //Console.WriteLine("Python was not able to detect good face. VERY BAD FACE DETECTED!"); logger.Info("Python was not able to detect good face. VERY BAD FACE DETECTED!"); if (pythonResult.ProblemList != null) { errors = pythonResult.ProblemList.Select(p => (AnalyzeImageResultType)p).ToList(); var errorsDescr = string.Join(", ", AnalyzeImageResultDescriptions.ErrorsDescription(pythonResult.ProblemList.Select(p => (AnalyzeImageResultType)p).ToList()).ToArray()); var errorMsg = "Python Problems: " + errorsDescr + " (" + string.Join(", ", pythonResult.ProblemList.Select(p => p.ToString()).ToArray()) + ")"; logger.Info(errorMsg); //Console.WriteLine(errorMsg); if (pythonResult.Device == DeviceType.WebCam) { // add error to the list if error was not in the list before for (int i = 0; i < pythonResult.ProblemList.Length; i++) { AnalyzeImageResultType eTyped = (AnalyzeImageResultType)pythonResult.ProblemList[i]; if (!webCamErrors.Contains(eTyped)) { webCamErrors.Add(eTyped); } } } } } #if (withOutErrorParse) //билд по просьбе Романа, тут ошибки сканера просто пропускаются if (pythonResult.Device == DeviceType.Scanner) { AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(pythonResult.Device, new List <AnalyzeImageResultType>(), pythonResult.BaseImage, pythonResult.CroppedImage)); logger.Info("билд по просьбе Романа, тут ошибки сканера просто пропускаются. Выводим, что мы успешно нашли изображение"); return; } #endif if (pythonResult.isGood == true) { //Console.WriteLine("Python returned GOOD"); logger.Info("Python returned GOOD"); if (pythonResult.Device == DeviceType.WebCam) { if (System.IO.Directory.Exists(path)) { string ForSave = Path.Combine(path, "Success_full_" + DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss_ff") + ".jpg"); logger.Info(string.Format("Сохраняем полный кадр {0} от питона", ForSave)); pythonResult.RGBImage.Save(ForSave); ForSave = Path.Combine(path, "Success_preview_" + DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss_ff") + ".jpg"); logger.Info(string.Format("Сохраняем найденное лицо {0} от питона", ForSave)); pythonResult.CroppedImage.Save(ForSave); } AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(pythonResult.Device, errors, pythonResult.RGBImage, pythonResult.CroppedImage)); } else { AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(pythonResult.Device, errors, pythonResult.BaseImage, pythonResult.CroppedImage)); } //logger.Info("Exiting bwImageAnalizer_RunWorkerCompleted 1"); return; } if (pythonResult.Device == DeviceType.WebCam && backgoundThread_ImageAnalizer.IsBusy == false && pythonResult.isCamStopped) { AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(pythonResult.Device, webCamErrors.ToList(), pythonResult.RGBImage, pythonResult.CroppedImage)); return; } else { if (WebCam != null) { //logger.Info("WebCam is Recording: {0}", WebCam.IsRunning()); } if (WebCam != null) { //Console.WriteLine("WebCam is Recording: {0}", WebCam.IsRunning()); } // смысл такой: передаем в аналайзер текущее состояние камеры, тк возникает ситуация, (из-за асинхронности) // когда мы мы проверяем кадр и в нем состояние камеры запущена, но в реальности это уже последний кадр и сама камера уже остановлена // из-за устновленного флага pythonResult.isCamStopped == false, и того, что изображение не распознано, просиходит пропуск этого кадра и // на форме просто замирает последний кадр, без отображения результатов анализа (обычно это ошибка) // TODO: Саше протестить на то, что происходит, если результат анализа положительный // потом причесать код и провести рефракторинг if (pythonResult.Device == DeviceType.WebCam && backgoundThread_ImageAnalizer.IsBusy == false && WebCam != null && !WebCam.IsRunning()) { AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(pythonResult.Device, webCamErrors.ToList(), pythonResult.RGBImage, pythonResult.CroppedImage)); } } // if we have scanner only if (pythonResult.Device == DeviceType.Scanner) { AnalyzeImage(this, new AnalyzeCompletedEventArgs(pythonResult.Device, errors, pythonResult.RGBImage, null)); //logger.Info("Exiting bwImageAnalizer_RunWorkerCompleted 2"); return; } logger.Info("Analyze Completed=============="); }