nresults=0;
assert(db);
+ fprintf(debug,"OCR h=%d w=%d",w,h);
+ for (x=0; x<w; x++) fprintf(debug," %"PSPIXCOL(PRIx),cols[x]);
+ fprintf(debug,"\n");
+ debug_flush();
+
restart:
x=0;
for (;;) {
+ debug_flush();
/* skip spaces */
- if (x>=w) break;
+ if (x>=w)
+ break;
if (!cols[x]) {
nspaces++;
int lx=x;
int bestmatch_rx=-1;
current= &ocr_contexts[ctx];
+ fprintf(debug,"OCR lx=%d ctx=%d ",lx,ctx);
+
for (;;) {
+ debug_flush();
+ fprintf(debug,"| x=%d",x);
if (x>w) break;
Pixcol cv= cols[x];
+ fprintf(debug," cv=%"PSPIXCOL(PRIx),x);
for (i=0; i<current->nlinks; i++)
if (current->links[i].col == cv)
goto found;
/* not found */
+ fprintf(debug," ?");
break;
+
found:
current= current->links[i].then;
- if (current->s[0]) { bestmatch=current; bestmatch_rx=x; }
+ if (current->s[0]) {
+ fprintf(debug," \"%s\"",current->s);
+ bestmatch=current; bestmatch_rx=x;
+ } else {
+ fprintf(debug," ...");
+ }
x++;
}
- if (!bestmatch) {
+ if (bestmatch) {
+ fprintf(debug," YES\n");
add_result(bestmatch->s, lx, bestmatch_rx, ctx);
x= bestmatch_rx+1;
ctx= 0;
} else {
-
int rx;
+ fprintf(debug," UNKNOWN");
for (rx=lx+1; rx<w && cols[rx]; rx++);
- printf("UNKNOWN x=%d ctx=%d %d..%d\n",x, ctx, lx,rx);
+ fprintf(debug," x=%d ctx=%d %d..%d\n",x, ctx, lx,rx);
+ debug_flush();
callout_unknown(w,h,cols, lx,rx, results,nresults);
goto restart;
}
}
add_result(0,-1,-1,0);
+ fprintf(debug,"OCR finished %d glyphs\n",nresults);
+ debug_flush();
return results;
}