Ejemplo n.º 1
0
        //-------------------------------------------------------------------------
        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 };
                }
            }
        }
Ejemplo n.º 2
0
 //-------------------------------------------------------------------------
 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 });
 }
Ejemplo n.º 3
0
 //-------------------------------------------------------------------------
 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();
 }
Ejemplo n.º 4
0
        //-------------------------------------------------------------------------
        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;
        }