chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.db-live.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rationalise debugging output
[ypp-sc-tools.db-live.git]
/
pctb
/
convert.c
diff --git
a/pctb/convert.c
b/pctb/convert.c
index f3de35936c14df5f40325ed8bee8508d32e7c8ec..1d516f9cbfdb5ca5cb9ae2c0babb27d032ed47a5 100644
(file)
--- a/
pctb/convert.c
+++ b/
pctb/convert.c
@@
-9,7
+9,7
@@
typedef struct {
static int height, width;
static char *image;
static int height, width;
static char *image;
-
static
void debug_flush(void) {
+void debug_flush(void) {
eassert(!fflush(debug));
eassert(!ferror(debug));
}
eassert(!fflush(debug));
eassert(!ferror(debug));
}
@@
-30,12
+30,14
@@
static inline char get_p(Point p) { return get(p.x,p.y); }
#define START_MAIN {200,200}
#define MIN_COLUMNS 6
#define INTERESTING_COLUMNS 6
#define START_MAIN {200,200}
#define MIN_COLUMNS 6
#define INTERESTING_COLUMNS 6
+#define TEXT_COLUMNS 2
#define MAX_COLUMNS 7
static Rect mainr = { START_MAIN,START_MAIN };
static int commbasey, comminty;
static int colrightx[INTERESTING_COLUMNS];
#define MAX_COLUMNS 7
static Rect mainr = { START_MAIN,START_MAIN };
static int commbasey, comminty;
static int colrightx[INTERESTING_COLUMNS];
-
+static int text_h;
+static OcrReader *rd;
static const CanonColourInfo canoncolourinfos[]= {
{ 0x475A5E, '*' }, /* edge */
static const CanonColourInfo canoncolourinfos[]= {
{ 0x475A5E, '*' }, /* edge */
@@
-63,6
+65,7
@@
static void require_rectangle_r(Rect rr, const char *ok) {
}
static void debug_rect(const char *what, int whati, Rect rr) {
}
static void debug_rect(const char *what, int whati, Rect rr) {
+#ifdef DEBUG_RECTANGLES
int y,r,w;
fprintf(debug, "%s %d: %d,%d..%d,%d:\n", what, whati,
rr.tl.x,rr.tl.y, rr.br.x,rr.br.y);
int y,r,w;
fprintf(debug, "%s %d: %d,%d..%d,%d:\n", what, whati,
rr.tl.x,rr.tl.y, rr.br.x,rr.br.y);
@@
-74,6
+77,7
@@
static void debug_rect(const char *what, int whati, Rect rr) {
fputc('|',debug);
fputc('\n',debug);
}
fputc('|',debug);
fputc('\n',debug);
}
+#endif
debug_flush();
}
debug_flush();
}
@@
-134,6
+138,7
@@
static void find_structure(void) {
down.y++;
WALK_UNTIL_MUST(down, y,+1, mainr.br.y, '+');
down.y++;
WALK_UNTIL_MUST(down, y,+1, mainr.br.y, '+');
+#ifdef DEBUG_RECTANGLES
int xscaleunit, y,x;
for (y=0, xscaleunit=1; y<4; y++, xscaleunit*=10) {
fprintf(debug," ");
int xscaleunit, y,x;
for (y=0, xscaleunit=1; y<4; y++, xscaleunit*=10) {
fprintf(debug," ");
@@
-143,11
+148,10
@@
static void find_structure(void) {
}
fputc('\n',debug);
}
}
fputc('\n',debug);
}
+#endif
commbasey= up.y;
comminty= down.y - up.y + 2;
commbasey= up.y;
comminty= down.y - up.y + 2;
- fprintf(debug, "up.y=%d down.y=%d commbasey=%d comminty=%d\n",
- up.y,down.y, commbasey,comminty);
Point across= { mainr.tl.x, commbasey };
int colno=0;
Point across= { mainr.tl.x, commbasey };
int colno=0;
@@
-157,12
+161,8
@@
static void find_structure(void) {
eassert(colno < MAX_COLUMNS);
int colrx= across.x;
if (colrx > mainr.br.x) colrx= mainr.br.x;
eassert(colno < MAX_COLUMNS);
int colrx= across.x;
if (colrx > mainr.br.x) colrx= mainr.br.x;
- if (colno < INTERESTING_COLUMNS)
{
+ if (colno < INTERESTING_COLUMNS)
colrightx[colno]= colrx;
colrightx[colno]= colrx;
- fprintf(debug,"colrightx[%d]= %d\n",colno,colrx);
- } else {
- fprintf(debug,"extra colr %d %d\n",colno,colrx);
- }
colno++;
colno++;
@@
-174,6
+174,8
@@
static void find_structure(void) {
across.x++;
}
eassert(colno >= MIN_COLUMNS);
across.x++;
}
eassert(colno >= MIN_COLUMNS);
+
+ text_h = comminty - 1;
}
static void find_commodity(int offset, Rect *rr) {
}
static void find_commodity(int offset, Rect *rr) {
@@
-228,23
+230,24
@@
static void load_image_and_canonify(void) {
break;
}
}
break;
}
}
+#ifdef DEBUG_RECTANGLES
fprintf(debug, "%4d ",y);
r= fwrite(image + y*width, 1,width, debug); eassert(r==width);
fputc('\n',debug);
fprintf(debug, "%4d ",y);
r= fwrite(image + y*width, 1,width, debug); eassert(r==width);
fputc('\n',debug);
+#endif
}
debug_flush();
}
}
debug_flush();
}
-static void ocr_rectangle(Rect r) {
+static void ocr_rectangle(Rect r
, const OcrCellType ct
) {
OcrResultGlyph *results, *res;
int w= r.br.x - r.tl.x + 1;
OcrResultGlyph *results, *res;
int w= r.br.x - r.tl.x + 1;
- int h= r.br.y - r.tl.y + 1;
Pixcol cols[w+1];
int x,y;
for (x=0; x<w; x++) {
Pixcol cx, rv;
Pixcol cols[w+1];
int x,y;
for (x=0; x<w; x++) {
Pixcol cx, rv;
- for (y=0, cx=0, rv=1; y<h; y++, rv<<=1) {
+ for (y=0, cx=0, rv=1; y<
text_
h; y++, rv<<=1) {
switch (get(x+r.tl.x, y+r.tl.y)) {
case ' ': break;
case 'o': cx |= rv; break;
switch (get(x+r.tl.x, y+r.tl.y)) {
case ' ': break;
case 'o': cx |= rv; break;
@@
-255,9
+258,9
@@
static void ocr_rectangle(Rect r) {
}
cols[w]= 0;
}
cols[w]= 0;
- results= ocr(
w,h
,cols);
+ results= ocr(
rd,ct,w
,cols);
printf("YES! \"");
printf("YES! \"");
- for (res=
0
; res->s; res++)
+ for (res=
results
; res->s; res++)
printf("%s",res->s);
printf("\"\n");
eassert(!ferror(stdout));
printf("%s",res->s);
printf("\"\n");
eassert(!ferror(stdout));
@@
-268,9
+271,9
@@
int main(void) {
Rect thisr, entryr;
int tryrect, colno;
Rect thisr, entryr;
int tryrect, colno;
- ocr_init();
load_image_and_canonify();
find_structure();
load_image_and_canonify();
find_structure();
+ rd= ocr_init(text_h);
for (tryrect= +height; tryrect >= -height; tryrect--) {
find_commodity(tryrect, &thisr);
for (tryrect= +height; tryrect >= -height; tryrect--) {
find_commodity(tryrect, &thisr);
@@
-280,8
+283,13
@@
int main(void) {
for (colno=0; colno<MIN_COLUMNS; colno++) {
find_table_entry(thisr,colno,&entryr);
for (colno=0; colno<MIN_COLUMNS; colno++) {
find_table_entry(thisr,colno,&entryr);
- ocr_rectangle(entryr);
+ ocr_rectangle(entryr,
+ colno<TEXT_COLUMNS
+ ? &ocr_celltype_text
+ : &ocr_celltype_number);
}
}
return 0;
}
}
}
return 0;
}
+
+const char *get_vardir(void) { return "."; }