Ejemplo n.º 1
0
        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
            });
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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==============");
        }