Ejemplo n.º 1
0
        //Il primo task per la pagina destra
        private async Task <int> FirstThreadPageDxAsync()
        {
            Bitmap newFoto;

            //Inizio a scorrere il libro dalla parte dx
            pageNextDxFN.GetNextPageDx(insertFileNameDx, nNextDx);
            //Ottengo la pagina dx
            insertFileNameDx = pageNextDxFN.GetPageNextDx();
            //Ottengo il numero del file name della pagina dx
            nNextDx = pageNextDxFN.GetNumNextDx();
            //Adatto la pagina dx alle dimensioni corrette
            Size   size      = new Size(picOriginalDx.Width, picOriginalDx.Height);
            Bitmap nextImage = (Bitmap)Image.FromFile(insertFileNameDx);

            newFoto = new Bitmap(nextImage, size);
            //Ritaglio la nuova immagine con l'area del riquardo di riferimento
            Crop   cut     = new Crop(coordAreaDx);
            Bitmap pagArea = cut.Apply(newFoto);

            //Adatto il riquadro e eseguo Tesseract
            BoxOCR boxPage = new BoxOCR();
            Bitmap box     = boxPage.AdaptBox(pagArea);

            //picOriginalDx.Image = box;
            picOriginalDx.Image = newFoto;

            lock (ocrengine)
            {
                stringDxDetected = boxPage.GetStringTesseract(box, ocrengine);
            }

            int   numberDx = 0;
            Match match    = Regex.Match(stringDxDetected, @"\d+");

            if (match.Success)
            {
                numberDx = int.Parse(match.Value);
            }
            //Il numero ottenuto dopo l'esecizone dell'OCR
            numDxPageDx = numberDx;

            //MessageBox.Show(stringDxDetected+" provaDx ");
            //MessageBox.Show(numDxPageDx.ToString());
            return(numDxPageDx);
        }
Ejemplo n.º 2
0
        //Questo pulsante va attivato dopo che si è verificato un messaggio di errore nella sequenza dopo la prima esecuzione,
        //sta a simulare la modifica delle pagine se effettivamente c'è stato un errore duarnte lo scatto della foto oppure se
        //semplicemente ci sono state due pagine vuote(inzio di un nuovo capitolo), oppure un mal rilevametno e quindi si procede con
        //il controllo del libro.
        //Si verifica se la numerazione delle due nuove pagine sia correttamente rilevata da Tesseract
        private void verificaLeNuovePagineToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                Bitmap newPhotoSx = (Bitmap)picOriginalSx.Image;
                Bitmap newPhotoDx = (Bitmap)picOriginalDx.Image;
                if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    //Verifico che venga inserita una pagina sinistra
                    string fileNamePageSxCorrect = openFileDialog1.FileName;
                    int    indexOf_Sx            = fileNamePageSxCorrect.LastIndexOf("_");
                    int    n = int.Parse(fileNamePageSxCorrect.Substring(indexOf_Sx + 1, 4));
                    if (n % 2 == 0)
                    {
                        throw new System.ArgumentException("Inserire immagine di una pagina sinistra");
                    }
                    else
                    {
                        Size   size     = new Size(picOriginalSx.Width, picOriginalSx.Height);
                        Bitmap newPhoto = (Bitmap)Image.FromFile(openFileDialog1.FileName);
                        newPhotoSx          = new Bitmap(newPhoto, size);
                        picOriginalSx.Image = newPhotoSx;

                        OriginalImageSx = (Bitmap)picOriginalSx.Image;
                        canSelectedArea = false;

                        fileNamePageSx = openFileDialog1.FileName;
                    }
                }
                if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    //Verifico che venga inserita una pagina destra
                    string fileNamePageDxCorrect = openFileDialog1.FileName;
                    int    indexOf_Dx            = fileNamePageDxCorrect.LastIndexOf("_");
                    int    n = int.Parse(fileNamePageDxCorrect.Substring(indexOf_Dx + 1, 4));
                    if (n % 2 != 0)
                    {
                        throw new System.ArgumentException("Inserire immagine di una pagina destra");
                    }
                    else
                    {
                        Size   size     = new Size(picOriginalDx.Width, picOriginalDx.Height);
                        Bitmap newPhoto = (Bitmap)Image.FromFile(openFileDialog1.FileName);
                        newPhotoDx          = new Bitmap(newPhoto, size);
                        picOriginalDx.Image = newPhotoDx;

                        OriginalImageDx = (Bitmap)picOriginalDx.Image;
                        canSelectedArea = false;

                        fileNamePageDx = openFileDialog1.FileName;
                    }
                }
                //Ottengo l'immagine sinistra dell'area selezionata all'inzio
                Crop   cutSx  = new Crop(coordAreaSx);
                Bitmap pagNSx = cutSx.Apply(OriginalImageSx /*newPhotoSx*/);
                //Ottengo l'immagine destra dell'area selezionata all'inzio
                Crop   cutDx  = new Crop(coordAreaDx);
                Bitmap pagNDx = cutDx.Apply(OriginalImageDx /*newPhotoDx*/);

                canSelectedArea = false;

                string firstNumSxStringCont = "";
                string firstNumDxStringCont = "";

                //Eseguo thread page sx
                Thread pageSxCont = new Thread(() =>
                {
                    BoxOCR firstC = new BoxOCR();
                    Bitmap boxC   = firstC.AdaptBox(pagNSx);
                    //picOriginalSx.Image = boxC;
                    lock (ocrengine)
                    {
                        firstNumSxStringCont = firstC.GetStringTesseract(boxC, ocrengine);
                    }
                    Match match = Regex.Match(firstNumSxStringCont, @"\d+");
                    if (match.Success)
                    {
                        //Numero rilevato pagina sinistra
                        numSxPageSx = int.Parse(match.Value);
                    }
                    MessageBox.Show(numSxPageSx.ToString());
                    //MessageBox.Show(firstNumSxStringCont + " prova");
                });
                //Eseguo thread page dx
                Thread pageDxCont = new Thread(() =>
                {
                    BoxOCR DxFirstPage = new BoxOCR();
                    Bitmap boxDx;
                    boxDx = DxFirstPage.AdaptBox(pagNDx);
                    //picOriginalDx.Image = boxDx;
                    lock (ocrengine)
                    {
                        firstNumDxStringCont = DxFirstPage.GetStringTesseract(boxDx, ocrengine);
                    }
                    Match match = Regex.Match(firstNumDxStringCont, @"\d+");
                    if (match.Success)
                    {
                        //Numero rilevato pagina sinistra
                        numDxPageDx = int.Parse(match.Value);
                    }
                    MessageBox.Show(numDxPageDx.ToString());
                    //MessageBox.Show(firstNumDxStringCont + " prova");
                });
                pageSxCont.Start();
                pageDxCont.Start();

                while (pageSxCont.IsAlive == true && pageDxCont.IsAlive == true)
                {
                }
                pageSxCont.Abort();
                pageDxCont.Abort();
            }
            catch (Exception ex)
            {
                DialogResult result;
                result = MessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 3
0
        //Inizia il controllo del libro dopo aver inserito le due pagine iniziali
        private void eseguiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                canSelectedArea = false;

                Thread pageSx = new Thread(() =>
                {
                    BoxOCR firstPageSx = new BoxOCR();
                    //Ottengo l'immagine elaborata del riquadro
                    Bitmap boxSx = firstPageSx.AdaptBox(areaBaseSx);
                    //picOriginalSx.Image = boxSx;
                    picOriginalSx.Image = OriginalImageSx;
                    //Blocco il thread finche il thread che ha un riferimentoa ocrengine non termina l'esecuzione del codice
                    lock (ocrengine)
                    {
                        //Ottengo la stringa del riquadro selezionato
                        stringSxDetected = firstPageSx.GetStringTesseract(boxSx, ocrengine);
                    }
                    Match match = Regex.Match(stringSxDetected, @"\d+");
                    if (match.Success)
                    {
                        //Ottengo il primo numero della stringa
                        numSxPageSx = int.Parse(match.Value);
                    }
                    MessageBox.Show(numSxPageSx.ToString());
                    //MessageBox.Show(stringSxDetected + " prova");
                });

                Thread pageDx = new Thread(() =>
                {
                    BoxOCR firstPageDx = new BoxOCR();
                    //Ottengo l'immagine elaborata del riquadro
                    Bitmap boxDx = firstPageDx.AdaptBox(areaBaseDx);
                    //picOriginalDx.Image = boxDx;
                    picOriginalDx.Image = OriginalImageDx;
                    //Blocco il thread finche il thread che ha un riferimentoa ocrengine non termina l'esecuzione del codice
                    lock (ocrengine)
                    {
                        //Ottengo la stringa del riquadro selezionato
                        stringDxDetected = firstPageDx.GetStringTesseract(boxDx, ocrengine);
                    }
                    Match match = Regex.Match(stringDxDetected, @"\d+");
                    if (match.Success)
                    {
                        //Ottengo il primo numero della stringa
                        numDxPageDx = int.Parse(match.Value);
                    }
                    MessageBox.Show(numDxPageDx.ToString());
                    //MessageBox.Show(stringDxDetected + " prova");
                });

                pageSx.Start();
                pageDx.Start();

                while (pageSx.IsAlive == true && pageDx.IsAlive == true)
                {
                }
                //Una volta finito l'esecuzione dei thread li elimino
                pageSx.Abort();
                pageDx.Abort();

                int firstSx = numSxPageSx;
                int firstDx = numDxPageDx;

                //MessageBox.Show(firstSx.ToString() + "  " + firstDx.ToString());
                //Inserisco i due nuemri nell'oggetto CheckNumber per inziare il controllo del libro, I PRIMI DUE NUMERI DEVONO ESSERE
                //ESATTI
                first = new CheckNumber(firstSx, firstDx);
                //Salvo i due numeri in memoria
                first.Storage();

                //Inserisco i due nomi delle immagini nelle rispettive stringhe di appoggio
                insertFileNameSx = fileNamePageSx;
                insertFileNameDx = fileNamePageDx;

                FileNameBook fileName = new FileNameBook();
                //Ottengo il nome dell'ultima file del libro
                string lastFileName = fileName.LastFile(fileNamePageSx);
                //Ottengo il numero dell'ultimo file del libro
                lastNumber = fileName.NumberOfLastFile(lastFileName);

                //Inzio il controllo delle pagine
                StartControl();
            }
            catch (Exception ex)
            {
                DialogResult result;
                result = MessageBox.Show(ex.Message);
            }
        }