Tesseract: C # Tesseract 3.02 كيف أصل إلى كل حرف من حروف الكلمة من الصورة

تم إنشاؤها على ١٢ يناير ٢٠١٤  ·  3تعليقات  ·  مصدر: charlesw/tesseract

مرحبًا ، أنا مبتدئ هنا.
أولاً ، أحتاج إلى رسم مستطيل على كل حرف من حروف الكلمة من الصورة.
في الإصدار القديم من tesseract وجدت أنه يمكننا الوصول إلى كل حرف عن طريق

foreach (tessnet2.Character c in word.CharList)
ه- الرسومات.رسم مستطيل ..........

demo

لكني الآن أعمل على C # winform باستخدام Tesseract 3.02

TesseractEngine a = TesseractEngine جديد (@ "./ tessdata"، "eng"، EngineMode.TesseractAndCube)؛
Tesseract.Page page1 = a.Process (صورة) ؛
foreach (....... في الصفحة 1)
{
// رسم مستطيل من (المربع المحيط لكل حرف)
}

السؤال 1: كيف أصل إلى كل حرف من الصفحة 1.

أحاول العديد من الطرق مثل PageIteratorLevel وأحصل على جزء من الصفحة مثل السطر الأول أو الكلمة الأولى أو الكتلة الأولى ، لكن لا يمكنني الحصول على الحرف الأول منها.
حسنًا ، لقد لاحظت أنه في نص نتيجة نص HOCRtext من الصفحة 1 ، كل عنصر مثل كلمة ، سطر ، كتلة له قيمة المربع المحيط.

السؤال 2: كيف أحصل على قيمة المربع المحيط لكل عنصر. (لقد وجدت طريقة واحدة فقط "TryGetBoundingBox" والتي تقوم بإرجاع قيمة منطقية فقط.

اشكرك.

question

التعليق الأكثر فائدة

إجابة السؤال 1:

تحقق من نموذج وحدة التحكم المقدمة لأنه يعطي مثالاً على كيفية تكرار النتائج ، ولكن يجب أن يعمل شيء من هذا القبيل:

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

لاحظ أن التسلسل الهرمي للنتائج العامة كما يلي:

كتلة -> فقرة -> TextLine -> Word -> Symbol

أي يمكن أن تحتوي مجموعة النتائج على العديد من الكتل ، والتي بدورها يمكن أن تحتوي على العديد من الفقرات وما إلى ذلك.

إجابة السؤال 2:

وفقًا لما ورد أعلاه ، ترجع طريقة TryGetBoundingBox الحدود في معلمة out. يشبه إلى حد كبير Dictionary.TryGetValue .

ال 3 كومينتر

إجابة السؤال 1:

تحقق من نموذج وحدة التحكم المقدمة لأنه يعطي مثالاً على كيفية تكرار النتائج ، ولكن يجب أن يعمل شيء من هذا القبيل:

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

لاحظ أن التسلسل الهرمي للنتائج العامة كما يلي:

كتلة -> فقرة -> TextLine -> Word -> Symbol

أي يمكن أن تحتوي مجموعة النتائج على العديد من الكتل ، والتي بدورها يمكن أن تحتوي على العديد من الفقرات وما إلى ذلك.

إجابة السؤال 2:

وفقًا لما ورد أعلاه ، ترجع طريقة TryGetBoundingBox الحدود في معلمة out. يشبه إلى حد كبير Dictionary.TryGetValue .

مرحبا تشارلز ،

أتمنى أن تكون بخير.

أنا جديد على هذه الأشياء ، يمكنني الحصول على النص المطلوب من صورة صغيرة أو صورة اختبار ولكن ليس من الصورة الفعلية:

  1. كيفية استخراج BIB # من الصورة.
    NotWorking

  2. كيفية التعرف على منطقة BIB # من الصورة بأكملها.
    H1764

شكرا.

استخدم opencv للعثور على المنطقة واقتصاصها. هناك شخص لديه عروض توضيحية مكتوبة بلغة بايثون وليس من الصعب جدًا ترجمتها إلى .net.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات