Exemplo n.º 1
0
        void bwImageAnalizer_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            ImageProcessResult            pythonResult = (ImageProcessResult)e.Result;
            List <AnalyzeImageResultType> errors       = new List <AnalyzeImageResultType>();

            if (pythonResult.isGood)
            {
                Console.WriteLine("*************************** FOUND!");
                isFinalImageFound = true;
            }
            else
            {
                Console.WriteLine("VERY BAD FACE DETECTED !");

                for (int i = 0; i < pythonResult.ProblemList.Count(); i++)
                {
                    errors.Add((AnalyzeImageResultType)pythonResult.ProblemList[i]);

                    Console.WriteLine("Problems: " + pythonResult.ProblemList[i].ToString());
                }
            }

            if (pythonResult.isGood == true)
            {
                AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(DeviceType.WebCam, errors, pythonResult.RGBImage, pythonResult.croppedImage));
            }
            else
            {
                AnalyzeCompleted(this, new AnalyzeCompletedEventArgs(DeviceType.WebCam, errors, null, null));
            }
        }
Exemplo n.º 2
0
        void bwImageAnalizer_DoWork(object sender, DoWorkEventArgs e)
        {
            Image <Bgr, Byte>  originalFrame = (Image <Bgr, Byte>)e.Argument;
            ImageAnalyzer      ia            = new ImageAnalyzer();
            ImageProcessResult pythonResult  = ia.Analyze((Image)originalFrame.Bitmap);

            e.Result = pythonResult;
        }
Exemplo 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==============");
        }