Tesseract: C# Tesseract 3.02 Bagaimana saya mengakses setiap karakter kata dari gambar

Dibuat pada 12 Jan 2014  ·  3Komentar  ·  Sumber: charlesw/tesseract

Hai, saya pemula di sini.
Pertama, saya perlu menggambar persegi panjang pada setiap karakter kata dari gambar.
di tesseract versi lama saya menemukan bahwa kita dapat mengakses setiap karakter dengan

foreach (tessnet2.Character c di word.CharList)
e.Graphics.DrawRectangle..........

demo

Tapi, sekarang saya sedang mengerjakan winform C# dengan Tesseract 3.02

TesseractEngine a = new TesseractEngine(@"./tessdata", "eng", EngineMode.TesseractAndCube);
Tesseract.Halaman halaman1 = a.Proses(gambar);
foreach ( ....... di halaman1)
{
// menggambar persegi panjang dari (kotak pembatas setiap karakter)
}

Pertanyaan 1: bagaimana saya mengakses setiap karakter halaman1.

Saya mencoba banyak metode seperti PageIteratorLevel dan mendapatkan beberapa bagian halaman seperti baris pertama, kata pertama atau blok pertama, tetapi saya tidak bisa mendapatkan karakter pertama dari mereka.
Nah, saya perhatikan bahwa pada teks hasil HOCRtext dari page1 setiap elemen seperti Word, line , block memiliki nilai Bounding box.

Pertanyaan 2: bagaimana saya mendapatkan nilai kotak pembatas setiap elemen. ( Saya hanya menemukan 1 metode "TryGetBoundingBox" yang hanya mengembalikan boolean.

Terima kasih.

question

Komentar yang paling membantu

Jawaban untuk Q1:

Lihat contoh konsol yang disediakan karena memberikan contoh cara mengulangi hasil, namun sesuatu seperti berikut ini akan berfungsi:

using (var iter = page.GetIterator()) {
    do {
        do {
            do {
                if (iter.IsAtBeginningOf(PageIteratorLevel.Block)) {
                    // do whatever you need to do when a block (top most level result) is encountered.
                }
                if (iter.IsAtBeginningOf(PageIteratorLevel.Para)) {
                    // do whatever you need to do when a paragraph is encountered.
                }
                if (iter.IsAtBeginningOf(PageIteratorLevel.TextLine)) {
                    // do whatever you need to do when a line of text is encountered is encountered.
                }                                               
                if (iter.IsAtBeginningOf(PageIteratorLevel.Word)) {
                    // do whatever you need to do when a word is encountered is encountered.
                }

                // get bounding box for symbol
                Rect symbolBounds;
                if(iter.TryGetBoundingBox(PageIteratorLevel.Symbol, out symbolBounds)) {
                    // do whatever you want with bounding box for the symbol
                }
            } while(iter.Next(PageIteratorLevel.Word, PageIteratorLevel.Block));
        } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
    } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
}

Perhatikan bahwa hierarki hasil umum adalah sebagai berikut:

Blok -> Para -> TextLine -> Word -> Symbol

Yaitu kumpulan hasil dapat berisi banyak Blok, yang pada gilirannya dapat berisi banyak Paragraf dan seterusnya.

Jawaban untuk Pertanyaan 2:

Sesuai di atas metode TryGetBoundingBox mengembalikan batas dalam parameter keluar. Sama seperti Dictionary.TryGetValue .

Semua 3 komentar

Jawaban untuk Q1:

Lihat contoh konsol yang disediakan karena memberikan contoh cara mengulangi hasil, namun sesuatu seperti berikut ini akan berfungsi:

using (var iter = page.GetIterator()) {
    do {
        do {
            do {
                if (iter.IsAtBeginningOf(PageIteratorLevel.Block)) {
                    // do whatever you need to do when a block (top most level result) is encountered.
                }
                if (iter.IsAtBeginningOf(PageIteratorLevel.Para)) {
                    // do whatever you need to do when a paragraph is encountered.
                }
                if (iter.IsAtBeginningOf(PageIteratorLevel.TextLine)) {
                    // do whatever you need to do when a line of text is encountered is encountered.
                }                                               
                if (iter.IsAtBeginningOf(PageIteratorLevel.Word)) {
                    // do whatever you need to do when a word is encountered is encountered.
                }

                // get bounding box for symbol
                Rect symbolBounds;
                if(iter.TryGetBoundingBox(PageIteratorLevel.Symbol, out symbolBounds)) {
                    // do whatever you want with bounding box for the symbol
                }
            } while(iter.Next(PageIteratorLevel.Word, PageIteratorLevel.Block));
        } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
    } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
}

Perhatikan bahwa hierarki hasil umum adalah sebagai berikut:

Blok -> Para -> TextLine -> Word -> Symbol

Yaitu kumpulan hasil dapat berisi banyak Blok, yang pada gilirannya dapat berisi banyak Paragraf dan seterusnya.

Jawaban untuk Pertanyaan 2:

Sesuai di atas metode TryGetBoundingBox mengembalikan batas dalam parameter keluar. Sama seperti Dictionary.TryGetValue .

Hai Charles,

Semoga Anda baik-baik saja.

Saya baru mengenal hal ini, saya bisa mendapatkan teks yang diperlukan dari gambar kecil atau gambar uji tetapi tidak dari gambar sebenarnya:

  1. cara mengekstrak BIB# dari sebuah foto.
    NotWorking

  2. Cara mengenali area BIB# dari keseluruhan foto.
    H1764

Terima kasih.

Gunakan opencv untuk menemukan dan memotong wilayah. Ada seorang pria dengan demo yang ditulis dengan Python yang tidak terlalu sulit untuk diterjemahkan ke .net.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat