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..........
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.
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.
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:
cara mengekstrak BIB# dari sebuah foto.
Cara mengenali area BIB# dari keseluruhan foto.
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.
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:
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 sepertiDictionary.TryGetValue
.