Не удалось создать пиксель, обычно это происходит из-за того, что запрашиваемый размер изображения слишком велик, пожалуйста, проверьте стандартный вывод ошибок. Как решить эту ошибку? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытался получить текст из определенной области изображения .tiff, используя tesseract ocr в c #. Когда я сначала нажал кнопку StartOcr, Tesseract работал правильно Когда я нажал кнопку StartOcr Второе, Tesseract работал правильно, но Когда я нажал кнопку StartOcr Во-вторых, Tesseract не работал должным образом. Он показывал ошибку типа «Не удалось создать пиксель, это обычно происходит из-за того, что запрашиваемый размер изображения слишком велик, пожалуйста, проверьте стандартный вывод ошибок». в этой строке => var page = ocr.Process (изображение, регион); Кто-нибудь может помочь? Вот некоторая часть моего кода:

public struct FormFields
        {
            public const int FIRMA_UNVAN_FROM_X = 500;
            public const int FIRMA_UNVAN_TO_X = 1700;
            public const int FIRMA_UNVAN_FROM_Y = 1300;
            public const int FIRMA_UNVAN_TO_Y = 1500;

            public const int TARIH_FROM_X = 2010;
            public const int TARIH_TO_X = 2850;
            public const int TARIH_FROM_Y = 2280;
            public const int TARIH_TO_Y = 2430;

            public const int FATURA_NO_FROM_X = 610;
            public const int FATURA_NO_TO_X = 1190;
            public const int FATURA_NO_FROM_Y = 2710;
            public const int FATURA_NO_TO_Y = 2890;
        }
private string getTextFromOcr(Bitmap image, int fromX, int toX, int fromY, int toY) 
        {
            using (TesseractEngine ocr = new TesseractEngine("./tessdata", "tur", EngineMode.Default))
            {
                Rect region = new Rect(fromX, fromY, toX - fromX, toY - fromY);
                var page = ocr.Process(image, region);
                return page.GetText();
            }
        }

        private void btnStartOcr_Click(object sender, EventArgs e)
        {
            string filename = DateTime.Now.ToString("yyyyMMddHHmm");

            log("OriginalFile = " + txtSourceFile.Text);
            log("ModifiedFile = " + filename);
            using (var img = new Bitmap(txtSourceFile.Text))
            {
                #region OCR
                DateTime startTime = DateTime.Now;
                txtResult.Text = startTime.ToString("dd-MM-yyyy HH:mi:ss");
                txtResult.Text += Environment.NewLine;
                txtResult.Text += "Firma = " + getTextFromOcr(img, FormFields.FIRMA_UNVAN_FROM_X, FormFields.FIRMA_UNVAN_TO_X, FormFields.FIRMA_UNVAN_FROM_Y, FormFields.FIRMA_UNVAN_TO_Y);
                txtResult.Text += Environment.NewLine; ;
                txtResult.Text += "Tarih = " + getTextFromOcr(img, FormFields.TARIH_FROM_X, FormFields.TARIH_TO_X, FormFields.TARIH_FROM_Y, FormFields.TARIH_TO_Y);
                txtResult.Text += Environment.NewLine;
                txtResult.Text += "FatNo = " + getTextFromOcr(img, FormFields.FATURA_NO_FROM_X, FormFields.FATURA_NO_TO_X, FormFields.FATURA_NO_FROM_Y, FormFields.FATURA_NO_TO_Y);
                DateTime endTime = DateTime.Now;
                TimeSpan ts = endTime - startTime;
                log("OCR = " + ts.TotalMilliseconds.ToString());
                #endregion OCR
            }

            log(txtResult.Text);
        }
...