рдирдорд╕реНрддреЗ, рдореИрдВ рдпрд╣рд╛рдБ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╣реВрдБред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЫрд╡рд┐ рд╕реЗ рд╢рдмреНрдж рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдкрд░ рдЖрдпрдд рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЯреЗрд╕реНрд╕реЗрдХреНрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ
foreach (tessnet2.Character c in word.CharList)
рдИ.рдЧреНрд░рд╛рдлрд┐рдХреНрд╕редрдЖрдпрддрд╛рдХрд╛рд░ рдбреНрд░рд╛ ............
рд▓реЗрдХрд┐рди, рдЕрдм рдореИрдВ Tesseract 3.02 рдХреЗ рд╕рд╛рде C# winform рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
TesseractEngine a = new TesseractEngine(@./tessdata", "eng", EngineMode.TesseractAndCube);
Tesseract.Page page1 = a.Process(image);
foreach (....... рдкреЗрдЬ 1 рдореЗрдВ)
{
// рд╕реЗ рдЖрдпрдд рдмрдирд╛рдПрдВ (рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХрд╛ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕)
}
рдкреНрд░рд╢реНрди рез: рдореИрдВ рдкреЗрдЬ рез рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪрддрд╛ рд╣реВрдБред
рдореИрдВ PageIteratorLevel рдЬреИрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреГрд╖реНрда рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐, рдкрд╣рд▓рд╛ рд╢рдмреНрдж рдпрд╛ рдкрд╣рд▓рд╛ рдмреНрд▓реЙрдХ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдирдХрд╛ рдкрд╣рд▓рд╛ рд╡рд░реНрдг рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда 1 рд╕реЗ HOCRtext рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд╛рда рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЬреИрд╕реЗ рд╢рдмреНрдж, рд░реЗрдЦрд╛, рдмреНрд▓реЙрдХ рдореЗрдВ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рд╢реНрди 2: рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХрд╛ рдореВрд▓реНрдп рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред (рдореБрдЭреЗ рдХреЗрд╡рд▓ 1 рд╡рд┐рдзрд┐ "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));
}
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рдкрджрд╛рдиреБрдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдмреНрд▓реЙрдХ -> рдкреИрд░рд╛ -> рдЯреЗрдХреНрд╕реНрдЯрд▓рд╛рдЗрди -> рд╢рдмреНрдж -> рдкреНрд░рддреАрдХ
рдпрд╛рдиреА рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдореЗрдВ рдХрдИ рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдХрдИ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдЖрджрд┐ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдКрдкрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ TryGetBoundingBox
рд╡рд┐рдзрд┐ рдПрдХ рдЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реАрдорд╛ рд▓реМрдЯрд╛рддреА рд╣реИред рдмрд╣реБрдд рдХреБрдЫ Dictionary.TryGetValue
рд╣реИред
рд╣рд╛рдп рдЪрд╛рд░реНрд▓реНрд╕,
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рдореИрдВ рдПрдХ рдЫреЛрдЯреА рддрд╕реНрд╡реАрд░ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд┐рддреНрд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд╕реНрд╡реАрд░ рд╕реЗ рдирд╣реАрдВ:
рдХрд┐рд╕реА рдлреЛрдЯреЛрдЧреНрд░рд╛рдл рд╕реЗ BIB# рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВред
рд╕рдВрдкреВрд░реНрдг рдлрд╝реЛрдЯреЛрдЧреНрд░рд╛рдлрд╝ рд╕реЗ рдХрд┐рд╕реА BIB# рдХреНрд╖реЗрддреНрд░ рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВред
рдзрдиреНрдпрд╡рд╛рджред
рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдХреНрд░реЙрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП opencv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкрд╛рдЗрдерди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдбреЗрдореЛ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдбрд╝рдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ .net рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
Q1 рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░:
рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХрдВрд╕реЛрд▓ рдирдореВрдирд╛ рджреЗрдЦреЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рдореНрди рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рдкрджрд╛рдиреБрдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдмреНрд▓реЙрдХ -> рдкреИрд░рд╛ -> рдЯреЗрдХреНрд╕реНрдЯрд▓рд╛рдЗрди -> рд╢рдмреНрдж -> рдкреНрд░рддреАрдХ
рдпрд╛рдиреА рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдореЗрдВ рдХрдИ рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдХрдИ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдЖрджрд┐ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╢реНрди 2 рдХрд╛ рдЙрддреНрддрд░:
рдКрдкрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░
TryGetBoundingBox
рд╡рд┐рдзрд┐ рдПрдХ рдЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реАрдорд╛ рд▓реМрдЯрд╛рддреА рд╣реИред рдмрд╣реБрдд рдХреБрдЫDictionary.TryGetValue
рд╣реИред