//------------------------------------------------------------------------- private void DoWork(object sender, DoWorkEventArgs e) { if (e.Argument != null) { var obj = e.Argument as string[]; if (obj != null) { string key = obj.First(); string qrCodeText; if (obj.Length == 2) qrCodeText = obj[1]; else qrCodeText = ""; if (ShetIdManualySet && key == "RecAll") { key = "RecAllAlignmentOnly"; } switch (key) { case "new Recognize": Status = StatusMessage.NULL; isInvert = false; isRotate = false; isCut = false; isClear = false; usedPrevTool = false; ShetIdManualySet = false; string fileName = obj.Last(); rec = new Recognize(fileName, defaults, cancelSource.Token); rec.BubbleItems = new ObservableCollection<BubbleItem>(); errList.Clear(); if (rec != null && rec.Audit != null && !string.IsNullOrEmpty(rec.Audit.error)) { Invoke(new MethodInvoker(delegate { lblErr.Text = rec.Audit.error; errList.Add(rec.Audit.error); lblErr.Visible = true; })); } recBitmap = (Bitmap)rec.Bitmap.Clone(); Invoke(new MethodInvoker(delegate { BoxSheet.SelectedIndex = -1; })); break; case "RecAll": //Invoke(new MethodInvoker(delegate // { // BoxSheet.SelectedIndex = -1; // })); if (string.IsNullOrEmpty(obj.Last()) && !string.IsNullOrEmpty(lastSheetId)) { rec.RecAll(lastSheetId, false, ref qrCodeText, isRotate, isCut, ShetIdManualySet); } else { rec.RecAll(obj.Last(), false, ref qrCodeText, isRotate); } if (rec.cancellationToken.IsCancellationRequested) Invoke(new MethodInvoker(delegate { if (!isRotate) btnRestore_Click(null, null); })); break; case "RecAllAlignmentOnly": rec.RecAll(obj.Last(), true, ref qrCodeText, isRotate, isCut, ShetIdManualySet); break; case "SelectedSheetIdentifier": rec.SelectedSheetIdentifier(obj.Last(), ref qrCodeText, isRotate, isCut, ShetIdManualySet); break; case "BarcodesRecognition": rec.BarcodesRecognition(qrCodeText); break; case "BubblesRecognition": CreateEtalonAreas(); GetAreasSettings(); if (!string.IsNullOrEmpty(rec.Audit.error) && rec.Audit.error.StartsWith("Calibration")) { //if (rpf != null && rpf.Disposing) //CloseProcessingForm(); rec.Audit.error = ""; Invoke(new MethodInvoker(delegate { rbtnGrid.PerformClick(); })); break; } if (rec.bubbles_per_lineErr) { if (rpf != null && rpf.Disposing) CloseProcessingForm(); MessageBox.Show("Please, specify correctly the bubbles per line" , Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); break; } else// (!rec.bubbles_per_lineErr) rec.RecAndFindBubble(); break; case "BubblesRecognition2": rec.Exception = null; rec.BarCodesPrompt = ""; //rec.Status = RecognizeAction.SearchBublesFinished; //var maxCountRectangles = rec.AddMaxCountRectangles(); //rec.BubblesRecognition(); int deltaX = 0; //if (rec.bubbles_per_lineFLEX != 5) //{ // deltaX = 0; //} recTools.BubblesRecognize ( ref rec.allContourMultiLine , ref rec.factRectangle , rec.Bitmap , ref barCodesPrompt , rec.filterType , rec.defaults.SmartResize , rec.bubblesRegions , rec.bubblesOfRegion , rec.bubblesSubLinesCount , rec.bubblesSubLinesStep , rec.bubblesPerLine , rec.lineHeight , rec.linesPerArea , rec.answersPosition , rec.indexAnswersPosition , rec.totalOutput , rec.bubbleLines , rec.regions , rec.areas , 0, 0, 0, 0//x1, x2, y1, y2 , rec.kx, rec.ky , rec.curRect , rec.etRect , 0//deltaY , rec.AmoutOfQuestions , rec.IndexOfFirstQuestion , maxCountRectangles , rec.darknessPercent , rec.darknessDifferenceLevel , rec.lastBannerBottom , deltaX ); rec.FillBubbleItems(maxCountRectangles);// rec.FillBubbleItemsRectangle(rec.allContourMultiLine, rec.factRectangle); if (rec.Exception != null) { //MessageBox.Show // ("Please check that you have the correct number of columns and sub rows" // , Text, MessageBoxButtons.OK // , MessageBoxIcon.Exclamation // ); //Invoke(new MethodInvoker(delegate //{ // CloseProcessingForm(); //})); return; } rec.FindBubble(rec.factRectangle, rec.allContourMultiLine, true); if (rec.Exception != null) return; if (bac.CheckBoxArr.Length == 0) { //AddBubblesAreaControl(new BubbleEventArgs(false, rec.BubbleItems, rec.areas, rec.AmoutOfQuestions, rec.maxAmoutOfQuestions, rec.IndexOfFirstQuestion, rec.linesPerArea, rec.bubblesPerLine)); GetAreasSettings(); Invoke(new MethodInvoker(delegate { bac = CreateNewBubblesAreaControl(rec.areas, rec.AmoutOfQuestions); bac.lockReport = true; DrawBubbleItems(); bac.lockReport = false; })); } Invoke(new MethodInvoker(delegate { if (!string.IsNullOrEmpty(barCodesPrompt)) { rec.BarCodesPrompt = barCodesPrompt; if (!errList.Contains(rec.BarCodesPrompt)) errList.Add(rec.BarCodesPrompt); lblErr.Visible = true; } pictureBox1.Refresh(); VerifyButton.Enabled = true; //Status = StatusMessage.NULL; rec.Status = RecognizeAction.NULL; })); //rec.UpdateGui(); break; case "RemoveNoise": //cancelSource = new System.Threading.CancellationTokenSource(); rec.Bitmap = recTools.RemoveNoise(rec.Bitmap); pictureBox1.Image = (Bitmap)rec.Bitmap.Clone(); break; } //if (qrCodeText == "") // e.Result = key; //else e.Result = new string[2] { key, qrCodeText }; } } }
//------------------------------------------------------------------------- private void BitmapRecognize(string fileName) { SetCancelSource(); log.LogMessage("Recognize file: " + fileName); Bitmap b = null; try { b = (Bitmap)Bitmap.FromFile(fileName); } catch (Exception ex) { MessageBox.Show("Invalid file " + fileName + Environment.NewLine + ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); rec = new Recognize(fileName, new OcrAppConfig(), new System.Threading.CancellationToken(), false); //rec.Audit.error = ex.Message;//rec.Audit == null if (MessageBox.Show(rec.Exception.Message + @" Open processing file in explorer?" , Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) btnOpenFile.PerformClick(); return; } double widthPerHeightPatio = 0; try { widthPerHeightPatio = (double)b.Width / b.Height; } catch (Exception) { } if (widthPerHeightPatio == 0 || widthPerHeightPatio > 12000) { MessageBox.Show("Bad input image", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); //rec = new Recognize(fileName, new OcrAppConfig(), new System.Threading.CancellationToken(), false, false);//для нормализации в основном потоке rec = new Recognize(fileName, new OcrAppConfig(), new System.Threading.CancellationToken(), false); b.Dispose(); return; } OpenFilesDirButton.Enabled = true; button1.Enabled = true; SizeFitButton.Enabled = true; SizeFullButton.Enabled = true; SizePlusButton.Enabled = true; SizeMinusButton.Enabled = true; RotateLeftButton.Enabled = true; RotateRightButton.Enabled = true; backgroundWorker.RunWorkerAsync(new string[] { "new Recognize", fileName }); }
//------------------------------------------------------------------------- private void DeleteTempFiles(string fn1, string fn2, bool toRecycleBin = false) { SetCancelSource(); pictureBox1.Image = null; if (animatedTimer != null) { animatedTimer.StopAnimation(); animatedTimer = null; } if (rec != null) { rec.Dispose(); rec = null; } //try //{ // vb.FileIO.FileSystem.DeleteFile(fn1, vb.FileIO.UIOption.OnlyErrorDialogs, vb.FileIO.RecycleOption.SendToRecycleBin); //} //catch (Exception) //{ //} ioHelper.DeleteFileExt(toRecycleBin, fn1); ioHelper.DeleteFileExt(toRecycleBin, fn2); InitButtonsAndControls(); timer1.Start(); }
//------------------------------------------------------------------------- private void Working(out string shId) { shId = ""; var fileName2 = utils.GetFileForRecognize(fileName, OcrAppConfig.TempFramesFolder, false); if (fileName != fileName2) { log.LogMessage("___" + fileName + " convert to " + fileName2); fileName = fileName2; } if (String.IsNullOrEmpty(fileName)) { log.LogMessage("___" + "Incorrect fileName in ProcessingTempFrameFile.DoWork"); return; } var name = Path.GetFileName(fileName); //Recognize rec = new Recognize(fileName, defaults, cancellationToken, true, false);//для нормализации в основном потоке Recognize rec = new Recognize(fileName, defaults, cancellationToken, true, true);//для нормализации в фоновых потоках rec.LastSheetIdentifier = lastSheetIdentifier; //if (defaults.MoveToNextProccessingFolderOnSheetIdentifierError) //{ // utils.MoveBadFile(OcrAppConfig.TempFramesFolder, defaults.ManualNextProccessingFolder, fileName,rec. Audit, rec.Exception.Message);//сохраняем файл в папку для дальнейшей обработки и удаляем из ТЕМПА // File.Delete(Path.Combine(OcrAppConfig.TempFramesFolder, fileName)); //} //else //{ // errorFiles.Add(fileName); //} if (rec.Exception != null) { log.LogMessage(rec.Exception); return; } string qrCodeText = ""; if (!cancellationToken.IsCancellationRequested) { log.LogMessage("Start " + name + " Page " + rec.Audit.sourcePage.ToString()); rec.RecognizeAuto(ref qrCodeText); } if (!cancellationToken.IsCancellationRequested) { if (rec.Exception == null) { var auditFileName = utils.GetFileAuditName(fileName); ioHelper.DeleteFileExt(false, fileName, false);//!!!при "true" - Процесс не может получить доступ к файлу ioHelper.DeleteFileExt(false, auditFileName); log.LogMessage("Finish " + name + " Page " + rec.Audit.sourcePage.ToString()); } else { log.LogMessage(rec.Exception); lock (errorFiles) { if (errorFiles.Contains(fileName)) { //utils.MoveBadFile(OcrAppConfig.TempFramesFolder, defaults.ManualNextProccessingFolder, fileName, rec.Audit, rec.Exception.Message);//сохраняем файл в папку для дальнейшей обработки и удаляем из ТЕМПА //log.LogMessage("File " + name + " was moved to '" + defaults.ManualNextProccessingFolder + "'"); utils.MoveBadFile(OcrAppConfig.TempFramesFolder, defaults.ErrorFolder, fileName, rec.Audit, rec.Exception.Message);//сохраняем файл в папку для дальнейшей обработки и удаляем из ТЕМПА log.LogMessage("File " + name + " was moved to '" + defaults.ErrorFolder + "'"); errorFiles.Remove(fileName); } else { errorFiles.Add(fileName); log.LogMessage("File " + name + " will be restarted"); } } } } shId = rec.LastSheetIdentifier; }