مرحبًا ، أنا مبتدئ هنا.
أولاً ، أحتاج إلى رسم مستطيل على كل حرف من حروف الكلمة من الصورة.
في الإصدار القديم من tesseract وجدت أنه يمكننا الوصول إلى كل حرف عن طريق
foreach (tessnet2.Character c in word.CharList)
ه- الرسومات.رسم مستطيل ..........
لكني الآن أعمل على 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" والتي تقوم بإرجاع قيمة منطقية فقط.
اشكرك.
تحقق من نموذج وحدة التحكم المقدمة لأنه يعطي مثالاً على كيفية تكرار النتائج ، ولكن يجب أن يعمل شيء من هذا القبيل:
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
أي يمكن أن تحتوي مجموعة النتائج على العديد من الكتل ، والتي بدورها يمكن أن تحتوي على العديد من الفقرات وما إلى ذلك.
وفقًا لما ورد أعلاه ، ترجع طريقة TryGetBoundingBox
الحدود في معلمة out. يشبه إلى حد كبير Dictionary.TryGetValue
.
مرحبا تشارلز ،
أتمنى أن تكون بخير.
أنا جديد على هذه الأشياء ، يمكنني الحصول على النص المطلوب من صورة صغيرة أو صورة اختبار ولكن ليس من الصورة الفعلية:
كيفية استخراج BIB # من الصورة.
كيفية التعرف على منطقة BIB # من الصورة بأكملها.
شكرا.
استخدم opencv للعثور على المنطقة واقتصاصها. هناك شخص لديه عروض توضيحية مكتوبة بلغة بايثون وليس من الصعب جدًا ترجمتها إلى .net.
التعليق الأكثر فائدة
إجابة السؤال 1:
تحقق من نموذج وحدة التحكم المقدمة لأنه يعطي مثالاً على كيفية تكرار النتائج ، ولكن يجب أن يعمل شيء من هذا القبيل:
لاحظ أن التسلسل الهرمي للنتائج العامة كما يلي:
كتلة -> فقرة -> TextLine -> Word -> Symbol
أي يمكن أن تحتوي مجموعة النتائج على العديد من الكتل ، والتي بدورها يمكن أن تحتوي على العديد من الفقرات وما إلى ذلك.
إجابة السؤال 2:
وفقًا لما ورد أعلاه ، ترجع طريقة
TryGetBoundingBox
الحدود في معلمة out. يشبه إلى حد كبيرDictionary.TryGetValue
.