Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

2 architecture anddatastructures

2 architecture and datastructures

  • Als Erste(r) kommentieren

2 architecture anddatastructures

  1. 1. 2. Architecture and Data Structures A quick tour of the Tesseract Code Ray Smith, Google Inc.
  2. 2. Tesseract Tutorial: DAS 2014 Tours France A Note about the Coordinate System ● The pixel edges are aligned with integer coordinates. ● (0, 0) is at bottom-left. ● Width = right - left => no silly +1/-1. Note: The API exposes a more common top-down system. 0 21 0 2 1
  3. 3. Tesseract Tutorial: DAS 2014 Tours France Nominally a pipeline, but not really, as there is a lot of re-visiting of old decisions. Tesseract System Architecture
  4. 4. Tesseract Tutorial: DAS 2014 Tours France Tesseract Word Recognizer
  5. 5. Tesseract Tutorial: DAS 2014 Tours France The ‘C’ Legacy ● Large chunks of the code written originally in C. ● Major rewrite in ~1991 with new C++ code. ● C->C++ migration gradual over time since. ● Majority of global functions now live in a convenience directory structure class. (For thread compatibility purposes.)
  6. 6. Tesseract Tutorial: DAS 2014 Tours France Directory Structure ~ Functional Architecture API ccutil cutil ccstruct dict classify wordrec textord ccmain CCUtil CUtil CCStruct Classify TessBaseAPI Tesseract Wordrec Textord Dict cube
  7. 7. Tesseract Tutorial: DAS 2014 Tours France Key Data Structures = Page Hierarchy BLOCK ROW WERD PAGE_RES BLOB_CHOICE C_OUTLINE C_BLOB WERD_CHOICEWERD_RES ROW_RES BLOCK_RES BLOBNBOX TO_ROW TO_BLOCKWorkingPartSet ColPartition TPOINT EDGEPT TWERD TESSLINE TBLOB Layout (old) Layout Normalized outlines Results Core page outlines
  8. 8. Tesseract Tutorial: DAS 2014 Tours France Software Engineering - Building Blocks UNICHARSET GenericVector ELIST CLIST STRING TBOX FCOORDICOORD ContainersCoordinates Text
  9. 9. Tesseract Tutorial: DAS 2014 Tours France Key Parts of the Call Hierarchy TessBaseAPI::Recognize Tesseract::SegmentPage Tesseract:: classify_word_and_language Tesseract::recog_all_words Textord::TextordPageTesseract::AutoPageSeg Classify::AdaptiveClassifier LanguageModel::UpdateState Tesseract::chop_word_main Wordrec::SegSearch
  10. 10. Tesseract Tutorial: DAS 2014 Tours France Tesseract’s List Implementation ● Predates STL ● Allows control over ownership of list elements ● Uses nasty macros instead of templates
  11. 11. Tesseract Tutorial: DAS 2014 Tours France List Example tordmain.cpp: float Textord::filter_noise_blobs( BLOBNBOX_LIST *src_list, // original list BLOBNBOX_LIST *noise_list, // noise list BLOBNBOX_LIST *small_list) { // small blobs BLOBNBOX_IT src_it(src_list); // iterators BLOBNBOX_IT noise_it(noise_list); BLOBNBOX_IT small_it(small_list); for (src_it.mark_cycle_pt(); !src_it.cycled_list(); src_it.forward()) { blob = src_it.data(); if (blob->bounding_box().height() < textord_max_noise_size) noise_it.add_after_then_move(src_it.extract()); else if (blob->enclosed_area() >= blob->bounding_box().area() * textord_noise_area_ratio) small_it.add_after_then_move(src_it.extract()); } blobbox.h: class BLOBNBOX : public ELIST_LINK { … }; // Defines classes: // BLOBNBOX_LIST: a list of BLOBNBOX // BLOBNBOX_IT: list iterator ELISTIZEH(BLOBNBOX) blobbox.cpp: // Implementation of some of the // list functions. ELISTIZE(BLOBNBOX)
  12. 12. Tesseract Tutorial: DAS 2014 Tours France TessBaseAPI : Simple example Main API class provides initialization, image input, text/hOCR/PDF output: TessBaseAPI api; api.Init(NULL, “eng”); Pix* pix = pixRead(“phototest.tif”); api.SetImage(pix); char* text = api.GetUTF8Text(); printf(“%sn”, text); delete [] text; pixDestroy(&pix);
  13. 13. Tesseract Tutorial: DAS 2014 Tours France TessBaseAPI : Multipage example TessBaseAPI api; api.Init(NULL, “eng”); tesseract::TessResultRenderer* renderer = new tesseract::TessPDFRenderer(api.GetDatapath()); api.ProcessPages(filename, NULL, 0, renderer); const char* data; inT32 data_len; if (renderer->GetOutput(&data, &data_len)) { fwrite(data, 1, data_len, fout); fclose(fout); }
  14. 14. Tesseract Tutorial: DAS 2014 Tours France ResultIterator for getting the real details ResultIterator* it = api.GetIterator(); do { int left, top, right, bottom; if (it->BoundingBox(RIL_WORD, &left, &top, &right, &bottom)) { char* text = it->GetUTF8Text(RIL_WORD); printf("%s %d %d %d %dn", text, left, top, right, bottom); delete [] text; } } while (it->Next(RIL_WORD)); delete it;
  15. 15. Tesseract Tutorial: DAS 2014 Tours France Thanks for Listening! Questions?

×