//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); }
//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); } }
//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); } }