162 #include <config_auto.h> 166 #include "allheaders.h" 170 l_float32 minfract, l_int32 *pok);
175 l_int32 maxclass, l_float32 maxscore);
181 static const l_int32 DefaultMinSetSize = 1;
183 static const l_float32 DefaultMinSetFract = 0.4;
187 static const l_float32 DefaultMinScore = 0.75;
188 static const l_int32 DefaultMinTarget = 3;
189 static const l_float32 LowerScoreThreshold = 0.5;
225 PROCNAME(
"recogTrainLabeled");
228 return ERROR_INT(
"recog not defined", procName, 1);
230 return ERROR_INT(
"pixs not defined", procName, 1);
237 L_WARNING(
"failure to get sample '%s' for training\n", procName,
272 l_int32 textinpix, textin, nsets;
274 PIX *pix1, *pix2, *pix3, *pix4;
276 PROCNAME(
"recogProcessLabeled");
279 return ERROR_INT(
"&pix not defined", procName, 1);
282 return ERROR_INT(
"recog not defined", procName, 1);
284 return ERROR_INT(
"pixs not defined", procName, 1);
287 textin = text && (text[0] !=
'\0');
289 if (!textin && !textinpix) {
290 L_ERROR(
"no text: %d\n", procName, recog->
num_samples);
293 textdata = (textin) ? text :
pixs->
text;
300 if (pixGetDepth(pix1) > 1)
316 return ERROR_INT(
"pix4 is empty", procName, 1);
324 L_WARNING(
"found %d sets of horiz separated c.c.; skipping\n",
361 l_int32 npa, charint, index;
365 PROCNAME(
"recogAddSample");
368 return ERROR_INT(
"recog not defined", procName, 1);
369 if (!pix || pixGetDepth(pix) != 1)
370 return ERROR_INT(
"pix not defined or not 1 bpp\n", procName, 1);
372 return ERROR_INT(
"not added: training has been completed", procName, 1);
378 L_ERROR(
"invalid text: %s\n", procName, text);
388 L_ERROR(
"oops: bad index %d > npa %d!!\n", procName, index, npa);
392 L_INFO(
"Adding new class and pixa: index = %d, text = %s\n",
393 procName, index, text);
399 L_INFO(
"Identified text label: %s\n", procName, text);
400 L_INFO(
"Identified: charint = %d, index = %d\n",
401 procName, charint, index);
427 PROCNAME(
"recogModifyTemplate");
430 return (
PIX *)ERROR_PTR(
"recog not defined", procName, NULL);
432 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
443 return (
PIX *)ERROR_PTR(
"pix1 not made", procName, NULL);
446 if (recog->
linew <= 0) {
453 return (
PIX *)ERROR_PTR(
"pix2 not made", procName, NULL);
459 return (
PIX *)ERROR_PTR(
"modified template has no pixels",
493 l_int32 i, nsamp,
size, area, bx, by, badclass;
494 l_float32 x, y, hratio;
497 PIX *pix1, *pix2, *pix3;
501 PROCNAME(
"recogAverageSamples");
504 return ERROR_INT(
"&recog not defined", procName, 1);
505 if ((recog = *precog) == NULL)
506 return ERROR_INT(
"recog not defined", procName, 1);
539 for (i = 0; i <
size; i++) {
543 nsamp = L_MIN(nsamp, 256);
545 L_ERROR(
"no samples in class %d\n", procName, i);
556 L_ERROR(
"no fg pixels in average for uclass %d\n", procName, i);
581 return ERROR_INT(
"at least 1 bad class; destroying recog", procName, 1);
590 L_ERROR(
"ratio of max/min height of average templates = %4.1f;" 591 " destroying recog\n", procName, hratio);
597 for (i = 0; i <
size; i++) {
601 nsamp = L_MIN(nsamp, 256);
607 L_ERROR(
"no fg pixels in average for sclass %d\n", procName, i);
630 return ERROR_INT(
"at least 1 bad class; destroying recog", procName, 1);
674 l_int32 i, n, maxw, maxh, xdiff, ydiff;
675 l_int32 *centtab, *sumtab;
676 l_float32 xc, yc, xave, yave;
677 PIX *pix1, *pix2, *pixsum;
680 PROCNAME(
"pixaAccumulateSamples");
685 return ERROR_INT(
"&pixd not defined", procName, 1);
688 return ERROR_INT(
"pixa not defined", procName, 1);
692 return ERROR_INT(
"pta count differs from pixa count", procName, 1);
695 return ERROR_INT(
"pixa array empty", procName, 1);
704 for (i = 0; i < n; i++) {
715 for (i = 0; i < n; i++) {
720 xave = xave / (l_float32)n;
721 yave = yave / (l_float32)n;
732 for (i = 0; i < n; i++) {
735 xdiff = (l_int32)(xave - xc);
736 ydiff = (l_int32)(yave - yc);
792 l_int32 ok, i, j,
size, nc, ns, area;
793 l_float32 xave, yave;
801 PROCNAME(
"recogTrainingFinished");
804 return ERROR_INT(
"&recog not defined", procName, 1);
805 if ((recog = *precog) == NULL)
806 return ERROR_INT(
"recog not defined", procName, 1);
813 return ERROR_INT(
"bad templates", procName, 1);
847 for (i = 0; i < nc; i++) {
850 for (j = 0; j < ns; j++) {
871 L_ERROR(
"failed: modified template for class %d, sample %d\n",
917 l_int32 i, n, validsets, nt;
921 PROCNAME(
"recogTemplatesAreOK");
924 return ERROR_INT(
"&ok not defined", procName, 1);
927 return ERROR_INT(
"recog not defined", procName, 1);
929 minsize = (minsize < 0) ? DefaultMinSetSize : minsize;
930 minfract = (minfract < 0) ? DefaultMinSetFract : minfract;
933 for (i = 0, validsets = 0; i < n; i++) {
939 ratio = (l_float32)validsets / (l_float32)recog->
charset_size;
940 *pok = (ratio >= minfract) ? 1 : 0;
977 l_float32 max_ht_ratio,
980 l_int32 i, j, h90, hj, j1, j2, j90, n, nc;
983 PIXA *pixa1, *pixa2, *pixa3, *pixa4, *pixa5;
986 PROCNAME(
"recogFilterPixaBySize");
988 if (pna) *pna = NULL;
990 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
993 return (
PIXA *)ERROR_PTR(
"paa not made", procName, NULL);
998 for (i = 0; i < nc; i++) {
1006 j90 = (l_int32)(0.9 * n);
1009 for (j = 0; j < n; j++) {
1011 ratio = (l_float32)h90 / (l_float32)hj;
1012 if (ratio <= max_ht_ratio)
1019 j1 = (n - maxkeep) / 2;
1020 j2 = j1 + maxkeep - 1;
1051 PROCNAME(
"recogSortPixaByClass");
1054 return (
PIXAA *)ERROR_PTR(
"pixa not defined", procName, NULL);
1057 return (
PIXAA *)ERROR_PTR(
"recog not made", procName, NULL);
1092 PIXA *pixa1, *pixa2;
1095 PROCNAME(
"recogRemoveOutliers1");
1098 return ERROR_INT(
"&recog not defined", procName, 1);
1099 if (*precog == NULL)
1100 return ERROR_INT(
"recog not defined", procName, 1);
1110 return ERROR_INT(
"failure to remove outliers", procName, 1);
1115 return ERROR_INT(
"failure to make recog from pixa sans outliers",
1170 l_int32 i, j, debug, n, area1, area2;
1171 l_float32 x1, y1, x2, y2, minfract, score, rankscore, threshscore;
1174 PIXA *pixa, *pixarem, *pixad;
1178 PROCNAME(
"pixaRemoveOutliers1");
1180 if (ppixsave) *ppixsave = NULL;
1181 if (ppixrem) *ppixrem = NULL;
1183 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
1184 minscore = L_MIN(minscore, 1.0);
1185 if (minscore <= 0.0)
1186 minscore = DefaultMinScore;
1187 mintarget = L_MIN(mintarget, 3);
1189 mintarget = DefaultMinTarget;
1191 minsize = DefaultMinSetSize;
1194 debug = (ppixsave || ppixrem) ? 1 : 0;
1197 return (
PIXA *)ERROR_PTR(
"bad pixas; recog not made", procName, NULL);
1200 return (
PIXA *)ERROR_PTR(
"bad templates", procName, NULL);
1207 for (i = 0; i < recog->
setsize; i++) {
1220 for (j = 0; j < n; j++) {
1224 pixCorrelationScoreSimple(pix1, pix2, area1, area2,
1225 x1 - x2, y1 - y2, 5, 5,
1228 if (debug && score == 0.0)
1229 lept_stderr(
"Got 0 score for i = %d, j = %d\n", i, j);
1239 minfract = (l_float32)mintarget / (l_float32)n;
1241 threshscore = L_MAX(LowerScoreThreshold,
1242 L_MIN(minscore, rankscore));
1244 L_INFO(
"minscore = %4.2f, rankscore = %4.2f, threshscore = %4.2f\n",
1245 procName, minscore, rankscore, threshscore);
1250 for (j = 0; j < n; j++) {
1253 if (score >= threshscore && n >= minsize) {
1309 PIXA *pixa1, *pixa2;
1312 PROCNAME(
"recogRemoveOutliers2");
1315 return ERROR_INT(
"&recog not defined", procName, 1);
1316 if (*precog == NULL)
1317 return ERROR_INT(
"recog not defined", procName, 1);
1326 return ERROR_INT(
"failure to remove outliers", procName, 1);
1331 return ERROR_INT(
"failure to make recog from pixa sans outliers",
1373 l_int32 i, j, k, n, area1, area2, maxk, debug;
1374 l_float32 x1, y1, x2, y2, score, maxscore;
1376 PIX *pix1, *pix2, *pix3;
1377 PIXA *pixarem, *pixad;
1380 PROCNAME(
"pixaRemoveOutliers2");
1382 if (ppixsave) *ppixsave = NULL;
1383 if (ppixrem) *ppixrem = NULL;
1385 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
1386 minscore = L_MIN(minscore, 1.0);
1387 if (minscore <= 0.0)
1388 minscore = DefaultMinScore;
1390 minsize = DefaultMinSetSize;
1393 debug = (ppixsave || ppixrem) ? 1 : 0;
1396 return (
PIXA *)ERROR_PTR(
"bad pixas; recog not made", procName, NULL);
1399 return (
PIXA *)ERROR_PTR(
"bad templates", procName, NULL);
1406 for (i = 0; i < recog->
setsize; i++) {
1410 for (j = 0; j < n; j++) {
1415 for (k = 0; k < recog->
setsize; k++) {
1419 pixCorrelationScoreSimple(pix1, pix2, area1, area2,
1420 x1 - x2, y1 - y2, 5, 5,
1430 if (maxk == i && maxscore >= minscore && n >= minsize) {
1435 }
else if (ppixrem) {
1499 l_int32 i, n, same, maxd, scaleh, linew;
1501 PIX *pix1, *pix2, *pixdb;
1502 PIXA *pixa1, *pixa2, *pixa3, *pixad;
1504 PROCNAME(
"recogTrainFromBoot");
1507 return (
PIXA *)ERROR_PTR(
"recogboot not defined", procName, NULL);
1509 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
1513 return (
PIXA *)ERROR_PTR(
"no pix in pixa", procName, NULL);
1519 for (i = 0; i < n; i++) {
1528 scaleh = recogboot->
scaleh;
1529 linew = recogboot->
linew;
1531 for (i = 0; i < n; i++) {
1549 for (i = 0; i < n; i++) {
1558 rchExtract(recogboot->
rch, NULL, &score, &text, NULL, NULL, NULL, NULL);
1559 if (score >= minscore) {
1604 PROCNAME(
"recogPadDigitTrainingSet");
1607 return ERROR_INT(
"&recog not defined", procName, 1);
1617 return ERROR_INT(
"pixa not made", procName, 1);
1621 L_WARNING(
"templates must be scaled to fixed height; using %d\n",
1658 l_int32 i, nt, min_nopad, nclass, allclasses;
1663 PROCNAME(
"recogIsPaddingNeeded");
1666 return ERROR_INT(
"&sa not defined", procName, 1);
1669 return ERROR_INT(
"recog not defined", procName, 1);
1678 if (allclasses && (minval >= min_nopad)) {
1688 for (i = 0; i < nclass; i++) {
1690 if (nt < min_nopad) {
1717 l_int32 i, nclass, index, ival;
1721 PROCNAME(
"recogAddMissingClassStrings");
1724 return (
SARRAY *)ERROR_PTR(
"recog not defined", procName, NULL);
1736 for (i = 0; i < nclass; i++) {
1738 index = text[0] -
'0';
1743 for (i = 0; i < nclass; i++) {
1776 l_int32 i, j, n, nt;
1778 PIXA *pixa1, *pixa2;
1780 PROCNAME(
"recogAddDigitPadTemplates");
1783 return (
PIXA *)ERROR_PTR(
"recog not defined", procName, NULL);
1785 return (
PIXA *)ERROR_PTR(
"sa not defined", procName, NULL);
1787 return (
PIXA *)ERROR_PTR(
"boot charset not available", procName, NULL);
1798 for (i = 0; i < n; i++) {
1801 for (j = 0; j < nt; j++) {
1803 if (!strcmp(text, str)) {
1827 PROCNAME(
"recogCharsetAvailable");
1838 L_INFO(
"charset type %d not available\n", procName, type);
1842 L_INFO(
"charset type %d is unknown\n", procName, type);
1925 PIX *pix1, *pix2, *pix3;
1926 PIXA *pixa1, *pixa2, *pixa3;
1933 pixDisplay(pix1, 0, 0);
1942 pixa3 = l_bootnum_gen3();
1947 pixDisplay(pix1, 0, 0);
1948 pixDisplay(pix2, 600, 0);
1949 pixDisplay(pix3, 1200, 0);
1991 l_int32 i, val, count;
1995 PROCNAME(
"recogShowContent");
1998 return ERROR_INT(
"stream not defined", procName, 1);
2000 return ERROR_INT(
"recog not defined", procName, 1);
2002 fprintf(fp,
"Debug print of recog contents\n");
2003 fprintf(fp,
" Setsize: %d\n", recog->
setsize);
2004 fprintf(fp,
" Binarization threshold: %d\n", recog->
threshold);
2005 fprintf(fp,
" Maximum matching y-jiggle: %d\n", recog->
maxyshift);
2006 if (recog->
linew <= 0)
2007 fprintf(fp,
" Using image templates for matching\n");
2009 fprintf(fp,
" Using templates with fixed line width for matching\n");
2011 fprintf(fp,
" No width scaling of templates\n");
2013 fprintf(fp,
" Template width scaled to %d\n", recog->
scalew);
2015 fprintf(fp,
" No height scaling of templates\n");
2017 fprintf(fp,
" Template height scaled to %d\n", recog->
scaleh);
2018 fprintf(fp,
" Number of samples in each class:\n");
2020 for (i = 0; i < recog->
setsize; i++) {
2024 fprintf(fp,
" class %d, char %c: %d\n", i, val, count);
2026 fprintf(fp,
" class %d, val %d: %d\n", i, val, count);
2033 snprintf(buf,
sizeof(buf),
"/tmp/lept/recog/templates_u.%d.png", index);
2034 pixWriteDebug(buf, pix, IFF_PNG);
2035 pixDisplay(pix, 0, 200 * index);
2039 snprintf(buf,
sizeof(buf),
2040 "/tmp/lept/recog/templates.%d.png", index);
2041 pixWriteDebug(buf, pix, IFF_PNG);
2042 pixDisplay(pix, 800, 200 * index);
2071 l_int32 i, j, n, np, index;
2073 PIX *pix1, *pix2, *pix3;
2078 PROCNAME(
"recogDebugAverages");
2081 return ERROR_INT(
"&recog not defined", procName, 1);
2082 if ((recog = *precog) == NULL)
2083 return ERROR_INT(
"recog not defined", procName, 1);
2089 return ERROR_INT(
"averaging failed; recog destroyed", procName, 1);
2092 paa1 = recog->
pixaa;
2101 for (i = 0; i < n; i++) {
2105 for (j = 0; j < np; j++) {
2111 lept_stderr(
"index = %d, score = %7.3f\n", index, score);
2123 pixWriteDebug(
"/tmp/lept/recog/templ_match.png", recog->
pixdb_ave,
2150 PIX *pix1, *pix2, *pixr;
2151 PIXA *pixat, *pixadb;
2153 PROCNAME(
"recogShowAverageTemplates");
2156 return ERROR_INT(
"recog not defined", procName, 1);
2158 lept_stderr(
"min/max width_u = (%d,%d); min/max height_u = (%d,%d)\n",
2173 for (i = 0; i <
size; i++) {
2178 pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3,
2185 pixDisplay(pix1, 100, 100);
2190 for (i = 0; i <
size; i++) {
2195 pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3,
2202 pixDisplay(pix1, 100, 100);
2234 PROCNAME(
"pixDisplayOutliers");
2237 return (
PIX *)ERROR_PTR(
"pixas not defined", procName, NULL);
2239 return (
PIX *)ERROR_PTR(
"nas not defined", procName, NULL);
2242 return (
PIX *)ERROR_PTR(
"pixas and nas sizes differ", procName, NULL);
2245 for (i = 0; i < n; i++) {
2250 snprintf(buf,
sizeof(buf),
"'%s': %5.2f", text, fval);
2287 PIX *pix1, *pix2, *pix3, *pix4, *pix5;
2290 PROCNAME(
"recogDisplayOutlier");
2293 return (
PIX *)ERROR_PTR(
"recog not defined", procName, NULL);
2303 snprintf(buf,
sizeof(buf),
"C=%d, BAC=%d, S=%4.2f", iclass, maxclass,
2341 l_int32 i, n, index, depth;
2345 PIXA *pixa1, *pixa2;
2347 PROCNAME(
"recogShowMatchesInRange");
2350 return ERROR_INT(
"recog not defined", procName, 1);
2352 return ERROR_INT(
"pixa not defined", procName, 1);
2359 for (i = 0; i < n; i++) {
2362 rchExtract(recog->
rch, &index, &score, NULL, NULL, NULL, NULL, NULL);
2372 for (i = 0; i < n; i++) {
2374 if (score < minscore || score > maxscore)
continue;
2378 if (i == 0) depth = pixGetDepth(pix2);
2391 L_INFO(
"no character matches in the range of scores\n", procName);
2439 PIX *pix3, *pix4, *pix5, *pixd;
2442 PROCNAME(
"recogShowMatch");
2445 return (
PIX *)ERROR_PTR(
"recog not defined", procName, NULL);
2447 return (
PIX *)ERROR_PTR(
"pix1 not defined", procName, NULL);
2449 bmf = (recog->
bmf && index >= 0) ? recog->
bmf : NULL;
2450 if (!pix2 && !box && !bmf)
2471 snprintf(buf,
sizeof(buf),
"C=%s, S=%4.3f, I=%d", text, score, index);
l_ok recogRemoveOutliers1(L_RECOG **precog, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
recogRemoveOutliers1()
void pixaaDestroy(PIXAA **ppaa)
pixaaDestroy()
struct Pixa * pixadb_boot
PIX * pixConvertTo1(PIX *pixs, l_int32 threshold)
pixConvertTo1()
PIXAA * pixaaCreate(l_int32 n)
pixaaCreate()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_ok recogDebugAverages(L_RECOG **precog, l_int32 debug)
recogDebugAverages()
l_ok ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py)
ptaaGetPt()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()
l_ok pixCentroid(PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave)
pixCentroid()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_int32 * makePixelCentroidTab8(void)
makePixelCentroidTab8()
l_ok recogTrainLabeled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 debug)
recogTrainLabeled()
l_ok ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y)
ptaaAddPt()
l_ok pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd)
pixaVerifyDepth()
PIXA * pixaRemoveOutliers2(PIXA *pixas, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
pixaRemoveOutliers2()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIXA * recogFilterPixaBySize(PIXA *pixas, l_int32 setsize, l_int32 maxkeep, l_float32 max_ht_ratio, NUMA **pna)
recogFilterPixaBySize()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok recogAddSample(L_RECOG *recog, PIX *pix, l_int32 debug)
recogAddSample()
l_ok pixaJoin(PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend)
pixaJoin()
L_RECOG * recogCreateFromPixa(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift)
recogCreateFromPixa()
l_ok pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy)
pixRasterop()
PTA * ptaCreate(l_int32 n)
ptaCreate()
PIXA * pixaaGetPixa(PIXAA *paa, l_int32 index, l_int32 accesstype)
pixaaGetPixa()
l_int32 recogGetClassString(L_RECOG *recog, l_int32 index, char **pcharstr)
recogGetClassString()
PIXA * l_bootnum_gen1(void)
l_bootnum_gen1()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
l_int32 pixaaGetCount(PIXAA *paa, NUMA **pna)
pixaaGetCount()
PIXA * l_bootnum_gen2(void)
l_bootnum_gen2()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_ok l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival)
l_dnaGetIValue()
PIXA * pixaaFlattenToPixa(PIXAA *paa, NUMA **pnaindex, l_int32 copyflag)
pixaaFlattenToPixa()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_ok ptaaTruncate(PTAA *ptaa)
ptaaTruncate()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
l_ok numaCountNonzeroRuns(NUMA *na, l_int32 *pcount)
numaCountNonzeroRuns()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
PIX * pixAddBlackOrWhiteBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixAddBlackOrWhiteBorder()
static l_int32 recogCharsetAvailable(l_int32 type)
recogCharsetAvailable()
l_int32 recogIsPaddingNeeded(L_RECOG *recog, SARRAY **psa)
recogIsPaddingNeeded()
PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh)
pixThresholdToBinary()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
l_ok numaSetValue(NUMA *na, l_int32 index, l_float32 val)
numaSetValue()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
PIX * pixaaGetPix(PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag)
pixaaGetPix()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
l_ok pixSetText(PIX *pix, const char *textstring)
pixSetText()
l_ok recogTrainingFinished(L_RECOG **precog, l_int32 modifyflag, l_int32 minsize, l_float32 minfract)
recogTrainingFinished()
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
l_ok pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
PIXA * pixaCopy(PIXA *pixa, l_int32 copyflag)
pixaCopy()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_ok recogIdentifyPix(L_RECOG *recog, PIX *pixs, PIX **ppixdb)
recogIdentifyPix()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
PIXA * pixaSetStrokeWidth(PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixaSetStrokeWidth()
l_ok pixClearAll(PIX *pix)
pixClearAll()
PTA * ptaClone(PTA *pta)
ptaClone()
l_ok l_convertCharstrToInt(const char *str, l_int32 *pval)
l_convertCharstrToInt()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
PIX * pixInitAccumulate(l_int32 w, l_int32 h, l_uint32 offset)
pixInitAccumulate()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
l_ok pixAccumulate(PIX *pixd, PIX *pixs, l_int32 op)
pixAccumulate()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
PIX * pixSetStrokeWidth(PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixSetStrokeWidth()
l_int32 recogShowAverageTemplates(L_RECOG *recog)
recogShowAverageTemplates()
l_int32 recogGetClassIndex(L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex)
recogGetClassIndex()
l_ok pixaaTruncate(PIXAA *paa)
pixaaTruncate()
static l_int32 recogTemplatesAreOK(L_RECOG *recog, l_int32 minsize, l_float32 minfract, l_int32 *pok)
recogTemplatesAreOK()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_ok ptaaInitFull(PTAA *ptaa, PTA *pta)
ptaaInitFull()
static SARRAY * recogAddMissingClassStrings(L_RECOG *recog)
recogAddMissingClassStrings()
l_ok recogProcessLabeled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIX **ppix)
recogProcessLabeled()
PIX * pixaaDisplayByPixa(PIXAA *paa, l_int32 maxnx, l_float32 scalefactor, l_int32 hspacing, l_int32 vspacing, l_int32 border)
pixaaDisplayByPixa()
PIX * pixClone(PIX *pixs)
pixClone()
l_int32 pixaAccumulateSamples(PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py)
pixaAccumulateSamples()
PIX * pixScaleToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleToSize()
PIX * pixFinalAccumulate(PIX *pixs, l_uint32 offset, l_int32 depth)
pixFinalAccumulate()
l_ok numaaTruncate(NUMAA *naa)
numaaTruncate()
struct L_Dna * dna_tochar
void pixDestroy(PIX **ppix)
pixDestroy()
PIXA * recogAddDigitPadTemplates(L_RECOG *recog, SARRAY *sa)
recogAddDigitPadTemplates()
PIXA * pixaSort(PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag)
pixaSort()
l_ok numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val)
numaaAddNumber()
l_int32 recogAverageSamples(L_RECOG **precog, l_int32 debug)
recogAverageSamples()
l_ok recogShowContent(FILE *fp, L_RECOG *recog, l_int32 index, l_int32 display)
recogShowContent()
void numaDestroy(NUMA **pna)
numaDestroy()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * recogShowMatch(L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score)
recogShowMatch()
l_ok numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc)
numaGetMin()
l_ok numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival)
numaaGetValue()
PIXA * recogTrainFromBoot(L_RECOG *recogboot, PIXA *pixas, l_float32 minscore, l_int32 threshold, l_int32 debug)
recogTrainFromBoot()
NUMA * pixCountByColumn(PIX *pix, BOX *box)
pixCountByColumn()
l_ok pixaSizeRange(PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh)
pixaSizeRange()
PIXA * l_bootnum_gen4(l_int32 nsamp)
l_bootnum_gen4()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
l_ok rchExtract(L_RCH *rch, l_int32 *pindex, l_float32 *pscore, char **ptext, l_int32 *psample, l_int32 *pxloc, l_int32 *pyloc, l_int32 *pwidth)
rchExtract()
char * pixGetText(PIX *pix)
pixGetText()
static PIX * recogDisplayOutlier(L_RECOG *recog, l_int32 iclass, l_int32 jsamp, l_int32 maxclass, l_float32 maxscore)
recogDisplayOutlier()
PIXA * recogMakeBootDigitTemplates(l_int32 nsamp, l_int32 debug)
recogMakeBootDigitTemplates()
L_RECOG * recogMakeBootDigitRecog(l_int32 nsamp, l_int32 scaleh, l_int32 linew, l_int32 maxyshift, l_int32 debug)
recogMakeBootDigitRecog()
PIXA * recogExtractPixa(L_RECOG *recog)
recogExtractPixa()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_ok pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxArb()
l_ok pixaaInitFull(PIXAA *paa, PIXA *pixa)
pixaaInitFull()
l_ok pixaaAddPixa(PIXAA *paa, PIXA *pixa, l_int32 copyflag)
pixaaAddPixa()
PIXAA * recogSortPixaByClass(PIXA *pixa, l_int32 setsize)
recogSortPixaByClass()
L_RECOG * recogCreateFromPixaNoFinish(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift)
recogCreateFromPixaNoFinish()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
l_ok recogPadDigitTrainingSet(L_RECOG **precog, l_int32 scaleh, l_int32 linew)
recogPadDigitTrainingSet()
l_ok pixaGetPixDimensions(PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixaGetPixDimensions()
PIX * recogModifyTemplate(L_RECOG *recog, PIX *pixs)
recogModifyTemplate()
void boxDestroy(BOX **pbox)
boxDestroy()
PIXA * pixaRemoveOutliers1(PIXA *pixas, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
pixaRemoveOutliers1()
NUMAA * numaaCreateFull(l_int32 nptr, l_int32 n)
numaaCreateFull()
l_ok recogShowMatchesInRange(L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display)
recogShowMatchesInRange()
l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
PIXA * pixaSelectRange(PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag)
pixaSelectRange()
PIX * pixaDisplayTiledWithText(PIXA *pixa, l_int32 maxwidth, l_float32 scalefactor, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor)
pixaDisplayTiledWithText()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
static PIX * pixDisplayOutliers(PIXA *pixas, NUMA *nas)
pixDisplayOutliers()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
PIX * pixAddSingleTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow)
pixAddSingleTextblock()
l_ok recogRemoveOutliers2(L_RECOG **precog, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
recogRemoveOutliers2()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
l_ok numaGetRankValue(NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval)
numaGetRankValue()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
void recogDestroy(L_RECOG **precog)
recogDestroy()
PIX * pixAddBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val)
pixAddBorderGeneral()
l_ok pixaaAddPix(PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag)
pixaaAddPix()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
PIXA * pixaExtendByScaling(PIXA *pixas, NUMA *nasc, l_int32 type, l_int32 include)
pixaExtendByScaling()