// HashSet<PostUserActivity.Contracts.AnalyzeImageResultType> webCamErrors; private AnalyseResult WebCamAnalyse(ImageChangedEventArgs imgArgs) { var obj = new AnalyseResult(); var tempBitmap = (Bitmap)imgArgs.Img; var tempResult = Tevian_Analyser.AnalyseCamImage(tempBitmap); obj.Full = tempBitmap; obj.Errors = tempResult.Errors; //костыль чтобы не падала if (tempResult.Errors == AnalyzeImageResultType.InnerException) { return(obj); } //рамко if (tempBitmap != null) { try { //рисовать мы будем в другом месте... //using (Graphics G = Graphics.FromImage(tempBitmap)) //{ if (tempResult.Faces.Length != 0) { FaceCoordinates = new Rectangle(tempResult.Faces[0].X, tempResult.Faces[0].Y, tempResult.Faces[0].Width, tempResult.Faces[0].Height); //положить в кроп найденное лицо //if (CheckImageDemenions(tempResult.ImageDimensions)) //{ //"Лицо сильно повернуто по одной из осей" отсутствует obj.Cropped = CommonLib.ImageExtensions.CropImage(new Bitmap(tempBitmap), FaceCoordinates); //} // G.DrawRectangle(new Pen(Color.Yellow), Rect); return(obj); } else { //пустой ректангл, если не нашли лица(для логики отрисовки) FaceCoordinates = new Rectangle(); return(obj); } } //} catch (Exception ex) { logger.Error(ex.Message); logger.Error(ex.InnerException); } } return(obj); //return null; }
private void bwImageAnalizer_DoWork(object sender, DoWorkEventArgs e) { var Args = (BackGrndArgs)e.Argument; var imgArgs = Args.ImgArgs; var device = Args.Device; logger.Debug("Пришел кадр на анализ с устройства " + device.ToString()); saveImage(imgArgs); if (!string.IsNullOrEmpty(imgArgs.ImgPath)) { logger.Info("file path: " + imgArgs.ImgPath); } AnalyseResult Result = null; switch (device) { case DeviceType.WebCam: { Result = WebCamAnalyse(imgArgs); break; } case DeviceType.Scanner: { Result = ScannerAnalyse(imgArgs); break; } case DeviceType.HDDrive: { Result = WebCamAnalyse(imgArgs); break; } default: { break; } } //после анализа изображение нам уже не нужно в памяти... logger.Debug("Получили результат:"); List <Contracts.AnalyzeImageResultType> ResultList = FlagsToList(Result.Errors); foreach (var item in ResultList) { logger.Debug(item); } //Args.ImgArgs.Img.Dispose(); if (Result.Errors != AnalyzeImageResultType.NoError) { if (device == DeviceType.Scanner) { logger.Info("**********************Scan completed***********************"); AnalyzeImage(this, new PostUserActivity.Contracts.AnalyzeCompletedEventArgs(device, ResultList)); AnalyzeCompleted(this, new PostUserActivity.Contracts.AnalyzeCompletedEventArgs(device, ResultList)); return; } else { if (!imgArgs.СamStopped) { AnalyzeImage(this, new PostUserActivity.Contracts.AnalyzeCompletedEventArgs(device, ResultList)); return; } else { logger.Info("**********************Cam Stoped***********************"); AnalyzeCompleted(this, new PostUserActivity.Contracts.AnalyzeCompletedEventArgs(device, ResultList)); return; } } } else { AnalyzeCompleted(this, new PostUserActivity.Contracts.AnalyzeCompletedEventArgs(device, ResultList, (Image)Result.Full, (Image)Result.Cropped)); logger.Info("**********************Face found***********************"); return; } }