ReInit

typedef struct ReInit_tag {
  char    version[8];        
  int     rel_grid_maxlen;
  int     rel_graph_maxlen;
  int     rel_result_maxlen;
  int     options;
  void    *rep_memory;
  long    rep_memory_size;
  
  void * (*zip_open) (const char *file_title, const char *mode);
  void * (*zip_wopen) (const wchar_t *file_title, const char *mode);
  int    (*zip_compressed) (const char *file_title);
  int    (*zip_wcompressed) (const wchar_t *file_title);
  int    (*zip_read) (void *file, void *buf, unsigned long len);
  int    (*zip_close)(void *file);

  INT_PTR interna1[4];
  INT_PTR interna2[4];
} ReInit;
      

Elemente

version[8]
Überprüfen der korrekten KADMOS-Version.
rel_grid_maxlen
Maxilmale Zahl der Elemente in rel_grid.
rel_graph_maxlen
Maxilmale Zahl der Elemente in rel_graph.
rel_result_maxlen
Maxilmale Zahl der Elemente in rel_result.
options
Dadurch ist es möglich, von grossen Klassifikatoren (REC-Dateien) nur einen Ausschnitt einzulesen. Dies hat den gleichen Effekt wie die Einschränkung von Klassifikatoren mit Chopper.exe und kann erhebliche Einsparungen an Rechenzeit bewirken.
*rep_memory
Für die Aufnahme von rep_result(s).
rep_memory_size
Für rep_do() verfügbare Speichergrösse.
*zip_open
Zip-File öffnen.
*zip_wopen
Zip-File öffnen. Der Dateiname wird in Unicode erwartet.
*zip_compressed
Zip-File spezifizieren, wenn zip_compressed nicht spezifiziert ist, wird für die Extension ".gz" dekomprimiert.
*zip_wcompressed
Zip-File spezifiziere, wenn zip_(w)compressed nicht spezifiziert ist, wird für die Extension ".gz" dekomprimiert.
*zip_read
Zip-File lesen.
*zip_close
Zip-File schliessen.
interna1[4]
Nicht ändern.
interna2[4]
Nicht ändern.

Bemerkungen:

Bei der Erkennung einer Textseite fallen eine Fülle von Informationen an, die für die weitere Bearbeitung von Bedeutung sein können. Der Umfang dieser Informationen hängt nicht nur von der Bildgrösse, sondern auch von der Anzahl der Textzeilen sowie von der Anzahl der Einzelzeichen ab. Für die Aufnahme all dieser Daten muss Speicherplatz bereitgestellt und nach der Auswertung wieder freigegeben werden. Wann die Freigabe erfolgen kann, ist Sache der jeweiligen Applikation. Also muss dieser Speicherplatz auch von dem jeweils aufrufenden Programm verwaltet werden. Unter rep_memory ist ein Pointer auf diesen Speicherplatz zu übergeben und unter rep_memory_size die Grüsse des Speicherplatzes in Byte. Der Parameter rel_result_maxlen ist vor der Initialisierung mit der Maximalanzahl der erwarteten Einzelzeichen je Zeile zu besetzen (siehe auch rel_graph_len und rel_result_len in der Struktur RelData), ebenso rel_graph_maxlen.
rel_grid_maxlen wird vor der Initialisierung mit der Maximal-Anzahl der erwarteten Grid-Elemente pro Bild besetzt, sofern diese gewünscht werden.
Wie gross ist der Speicherplatz für rep_memory zu wählen? Wir müssen dazu die Strukturen betrachten, die der Aufnahme der Erkennungsresultate dienen. Es sind dies RelGrid, RelGraph und RelResult zur Aufnahme der Resultate für eine Textzeile sowie RepResult zur Aufnahme der Resultate des Moduls REP. Für jede Textzeile wird eine Struktur RepResult benötigt, für jedes Zeichen jeder Zeile je eine Struktur RelGraph und RepResult, bei möglichen alternativen Trennstellen entsprechend mehr. Will man auch über Linienelemente und Flecken informiert werden, muss auch noch Platz für entsprechende Struktur vorgesehen werden. Bei RelGrid nur einmal. Das liegt daran, dass das Programm rep_do() zunächst alle Grid-Elemente deklariert und in der ersten RepResult-Struktur zurückliefert. In den weiteren RepResult-Strukturen finden sich dann die erkannten Texte der einzelnen Zeilen.
Zeichenposition
Pointer rep_result, RepResult[0] enthält gegebenenfalls Grid-Informationen RelGrid
Ponter rep_result, ein RepResult für jede Textzeile
Pointer rel_grid, ein RelGrid pro Linienelement
Pointer rel_graph, ein RelGraph für jeden Segmentierungspunkt
Pointer rel_result, ein RelResult pro Zeichen einer Textzeile

Ist durch MAX_LINE die maximale Anzahl von erwarteten Textzeilen gegeben, durch MAX_GRID die maximale Anzahl von erwarteten Linienelementen und durch MAX_CHAR die maximale Anzahl von erwarteten Zeichen pro Zeile, so lässt sich ein ausreichender Wert von rep_memory_size durch folgende Formel ermitteln:
rep.init.rep_memory_size = MAX_LINE*sizeof(RepResult) +
MAX_GRID*sizeof(RelGrid) + MAX_LINE*MAX_CHAR*sizeof(RelGraph) +
MAX_LINE*MAX_CHAR*sizeof(RelResult);

Sofern der Speicherbereich rep_memory zu klein gewählt wurde, gehen die nicht mehr ablegbaren Resultate der Erkennung verloren! Man braucht jedoch für die Resultate nicht notwendig Speicherplatz zu reservieren, die Werte von rep_memory und rep_memory_size können also mit NULL bzw. 0 besetzt sein. Dann stehen natürlich nach dem Aufruf von rep_do() unter rep_result auch keine Resultate zur Verfügung. Die Erkennungs-Ergebnisse muss man sich in diesem Fall über eine Funktion rel_hook() oder unter Windows über die Messages WM_USER, REP_LINE_CNT und WM_USER, REP_RESULT abholen.
options ermöglicht es, von grossen Klassifikatoren (REC-Dateien) nur einen Ausschnitt einzulesen. Dies hat den gleichen Effekt wie die Einschränkung von Klassifikatoren mit Chopper.exe und kann erhebliche Einsparungen an Rechenzeit bewirken. Anwendung: Vor dem Aufruf von re?_init() besetze man ReInit.options mit dem Wert OPTIONS_RESTRICT_LABELS sowie die Parameter ReParm.labels_size, ReParm.labels und ReParm.rejects mit den gewünschten Kennungen. Dann werden von re?_init() nur die Teile des Klassifikators eingelesen, die für das Erkennen dieser Zeichen notwending sind.

Verweise: