162 #include <config_auto.h>
166 #include "allheaders.h"
171 l_float32 minfract, l_int32 *pok);
176 l_int32 maxclass, l_float32 maxscore);
182 static const l_int32 DefaultMinSetSize = 1;
184 static const l_float32 DefaultMinSetFract = 0.4;
188 static const l_float32 DefaultMinScore = 0.75;
189 static const l_int32 DefaultMinTarget = 3;
190 static const l_float32 LowerScoreThreshold = 0.5;
227 return ERROR_INT(
"recog not defined", __func__, 1);
229 return ERROR_INT(
"pixs not defined", __func__, 1);
236 L_WARNING(
"failure to get sample '%s' for training\n", __func__,
271 l_int32 textinpix, textin, nsets;
273 PIX *pix1, *pix2, *pix3, *pix4;
276 return ERROR_INT(
"&pix not defined", __func__, 1);
279 return ERROR_INT(
"recog not defined", __func__, 1);
281 return ERROR_INT(
"pixs not defined", __func__, 1);
284 textin = text && (text[0] !=
'\0');
285 textinpix = (pixs->
text && (pixs->
text[0] !=
'\0'));
286 if (!textin && !textinpix) {
287 L_ERROR(
"no text: %d\n", __func__, recog->
num_samples);
290 textdata = (textin) ? text : pixs->
text;
297 if (pixGetDepth(pix1) > 1)
313 return ERROR_INT(
"pix4 is empty", __func__, 1);
321 L_WARNING(
"found %d sets of horiz separated c.c.; skipping\n",
358 l_int32 npa, charint, index;
363 return ERROR_INT(
"recog not defined", __func__, 1);
364 if (!pix || pixGetDepth(pix) != 1)
365 return ERROR_INT(
"pix not defined or not 1 bpp\n", __func__, 1);
367 return ERROR_INT(
"not added: training has been completed", __func__, 1);
373 L_ERROR(
"invalid text: %s\n", __func__, text);
383 L_ERROR(
"oops: bad index %d > npa %d!!\n", __func__, index, npa);
387 L_INFO(
"Adding new class and pixa: index = %d, text = %s\n",
388 __func__, index, text);
394 L_INFO(
"Identified text label: %s\n", __func__, text);
395 L_INFO(
"Identified: charint = %d, index = %d\n",
396 __func__, charint, index);
423 return (
PIX *)ERROR_PTR(
"recog not defined", __func__, NULL);
425 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
436 return (
PIX *)ERROR_PTR(
"pix1 not made", __func__, NULL);
439 if (recog->
linew <= 0) {
446 return (
PIX *)ERROR_PTR(
"pix2 not made", __func__, NULL);
452 return (
PIX *)ERROR_PTR(
"modified template has no pixels",
487 l_int32 i, nsamp, size, area, bx, by, badclass;
488 l_float32 x, y, hratio;
491 PIX *pix1, *pix2, *pix3;
495 return ERROR_INT(
"recog not defined", __func__, 1);
528 for (i = 0; i < size; i++) {
532 nsamp = L_MIN(nsamp, 256);
534 L_ERROR(
"no samples in class %d\n", __func__, i);
545 L_ERROR(
"no fg pixels in average for uclass %d\n", __func__, i);
569 return ERROR_INT(
"at least 1 bad class", __func__, 1);
577 L_ERROR(
"ratio of max/min height of average templates = %4.1f\n",
583 for (i = 0; i < size; i++) {
587 nsamp = L_MIN(nsamp, 256);
593 L_ERROR(
"no fg pixels in average for class %d\n", __func__, i);
615 return ERROR_INT(
"no fg pixels in at least 1 class", __func__, 1);
658 l_int32 i, n, maxw, maxh, xdiff, ydiff;
659 l_int32 *centtab, *sumtab;
660 l_float32 xc, yc, xave, yave;
661 PIX *pix1, *pix2, *pixsum;
667 return ERROR_INT(
"&pixd not defined", __func__, 1);
670 return ERROR_INT(
"pixa not defined", __func__, 1);
674 return ERROR_INT(
"pta count differs from pixa count", __func__, 1);
677 return ERROR_INT(
"pixa array empty", __func__, 1);
686 for (i = 0; i < n; i++) {
697 for (i = 0; i < n; i++) {
702 xave = xave / (l_float32)n;
703 yave = yave / (l_float32)n;
714 for (i = 0; i < n; i++) {
717 xdiff = (l_int32)(xave - xc);
718 ydiff = (l_int32)(yave - yc);
774 l_int32 ok, i, j, size, nc, ns, area;
775 l_float32 xave, yave;
784 return ERROR_INT(
"&recog not defined", __func__, 1);
785 if ((recog = *precog) == NULL)
786 return ERROR_INT(
"recog not defined", __func__, 1);
793 return ERROR_INT(
"bad templates", __func__, 1);
827 for (i = 0; i < nc; i++) {
830 for (j = 0; j < ns; j++) {
851 L_ERROR(
"failed: modified template for class %d, sample %d\n",
897 l_int32 i, n, validsets, nt;
902 return ERROR_INT(
"&ok not defined", __func__, 1);
905 return ERROR_INT(
"recog not defined", __func__, 1);
907 minsize = (minsize < 0) ? DefaultMinSetSize : minsize;
908 minfract = (minfract < 0) ? DefaultMinSetFract : minfract;
911 for (i = 0, validsets = 0; i < n; i++) {
917 ratio = (l_float32)validsets / (l_float32)recog->
charset_size;
918 *pok = (ratio >= minfract) ? 1 : 0;
955 l_float32 max_ht_ratio,
958 l_int32 i, j, h90, hj, j1, j2, j90, n, nc;
961 PIXA *pixa1, *pixa2, *pixa3, *pixa4, *pixa5;
964 if (pna) *pna = NULL;
966 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
969 return (
PIXA *)ERROR_PTR(
"paa not made", __func__, NULL);
974 for (i = 0; i < nc; i++) {
982 j90 = (l_int32)(0.9 * n);
985 for (j = 0; j < n; j++) {
987 ratio = (l_float32)h90 / (l_float32)hj;
988 if (ratio <= max_ht_ratio)
995 j1 = (n - maxkeep) / 2;
996 j2 = j1 + maxkeep - 1;
1028 return (
PIXAA *)ERROR_PTR(
"pixa not defined", __func__, NULL);
1031 return (
PIXAA *)ERROR_PTR(
"recog not made", __func__, NULL);
1066 PIXA *pixa1, *pixa2;
1070 return ERROR_INT(
"&recog not defined", __func__, 1);
1071 if (*precog == NULL)
1072 return ERROR_INT(
"recog not defined", __func__, 1);
1082 return ERROR_INT(
"failure to remove outliers", __func__, 1);
1087 return ERROR_INT(
"failure to make recog from pixa sans outliers",
1142 l_int32 i, j, debug, n, area1, area2;
1143 l_float32 x1, y1, x2, y2, minfract, score, rankscore, threshscore;
1144 NUMA *nasum, *narem, *nasave, *nascore;
1146 PIXA *pixa, *pixarem, *pixad;
1150 if (ppixsave) *ppixsave = NULL;
1151 if (ppixrem) *ppixrem = NULL;
1153 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1154 minscore = L_MIN(minscore, 1.0);
1155 if (minscore <= 0.0)
1156 minscore = DefaultMinScore;
1157 mintarget = L_MIN(mintarget, 3);
1159 mintarget = DefaultMinTarget;
1161 minsize = DefaultMinSetSize;
1164 debug = (ppixsave || ppixrem) ? 1 : 0;
1167 return (
PIXA *)ERROR_PTR(
"bad pixas; recog not made", __func__, NULL);
1170 return (
PIXA *)ERROR_PTR(
"bad templates", __func__, NULL);
1178 for (i = 0; i < recog->
setsize; i++) {
1191 for (j = 0; j < n; j++) {
1195 pixCorrelationScoreSimple(pix1, pix2, area1, area2,
1196 x1 - x2, y1 - y2, 5, 5,
1199 if (debug && score == 0.0)
1200 lept_stderr(
"Got 0 score for i = %d, j = %d\n", i, j);
1210 minfract = (l_float32)mintarget / (l_float32)n;
1212 threshscore = L_MAX(LowerScoreThreshold,
1213 L_MIN(minscore, rankscore));
1215 L_INFO(
"minscore = %4.2f, rankscore = %4.2f, threshscore = %4.2f\n",
1216 __func__, minscore, rankscore, threshscore);
1221 for (j = 0; j < n; j++) {
1224 if (score >= threshscore && n >= minsize) {
1280 PIXA *pixa1, *pixa2;
1284 return ERROR_INT(
"&recog not defined", __func__, 1);
1285 if (*precog == NULL)
1286 return ERROR_INT(
"recog not defined", __func__, 1);
1295 return ERROR_INT(
"failure to remove outliers", __func__, 1);
1300 return ERROR_INT(
"failure to make recog from pixa sans outliers",
1342 l_int32 i, j, k, n, area1, area2, maxk, debug;
1343 l_float32 x1, y1, x2, y2, score, maxscore;
1344 NUMA *nan, *nascore, *nasave;
1345 PIX *pix1, *pix2, *pix3;
1346 PIXA *pixarem, *pixad;
1349 if (ppixsave) *ppixsave = NULL;
1350 if (ppixrem) *ppixrem = NULL;
1352 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1353 minscore = L_MIN(minscore, 1.0);
1354 if (minscore <= 0.0)
1355 minscore = DefaultMinScore;
1357 minsize = DefaultMinSetSize;
1360 debug = (ppixsave || ppixrem) ? 1 : 0;
1363 return (
PIXA *)ERROR_PTR(
"bad pixas; recog not made", __func__, NULL);
1366 return (
PIXA *)ERROR_PTR(
"bad templates", __func__, NULL);
1374 for (i = 0; i < recog->
setsize; i++) {
1378 for (j = 0; j < n; j++) {
1383 for (k = 0; k < recog->
setsize; k++) {
1387 pixCorrelationScoreSimple(pix1, pix2, area1, area2,
1388 x1 - x2, y1 - y2, 5, 5,
1398 if (maxk == i && maxscore >= minscore && n >= minsize) {
1403 }
else if (ppixrem) {
1467 l_int32 i, n, same, maxd, scaleh, linew;
1469 PIX *pix1, *pix2, *pixdb;
1470 PIXA *pixa1, *pixa2, *pixa3, *pixad;
1473 return (
PIXA *)ERROR_PTR(
"recogboot not defined", __func__, NULL);
1475 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1479 return (
PIXA *)ERROR_PTR(
"no pix in pixa", __func__, NULL);
1485 for (i = 0; i < n; i++) {
1494 scaleh = recogboot->
scaleh;
1495 linew = recogboot->
linew;
1497 for (i = 0; i < n; i++) {
1515 for (i = 0; i < n; i++) {
1524 rchExtract(recogboot->
rch, NULL, &score, &text, NULL, NULL, NULL, NULL);
1525 if (score >= minscore) {
1571 return ERROR_INT(
"&recog not defined", __func__, 1);
1581 return ERROR_INT(
"pixa not made", __func__, 1);
1585 L_WARNING(
"templates must be scaled to fixed height; using %d\n",
1622 l_int32 i, nt, min_nopad, nclass, allclasses;
1628 return ERROR_INT(
"&sa not defined", __func__, 1);
1631 return ERROR_INT(
"recog not defined", __func__, 1);
1640 if (allclasses && (minval >= min_nopad)) {
1650 for (i = 0; i < nclass; i++) {
1652 if (nt < min_nopad) {
1679 l_int32 i, nclass, index, ival;
1684 return (
SARRAY *)ERROR_PTR(
"recog not defined", __func__, NULL);
1696 for (i = 0; i < nclass; i++) {
1698 index = text[0] -
'0';
1703 for (i = 0; i < nclass; i++) {
1736 l_int32 i, j, n, nt;
1738 PIXA *pixa1, *pixa2;
1741 return (
PIXA *)ERROR_PTR(
"recog not defined", __func__, NULL);
1743 return (
PIXA *)ERROR_PTR(
"sa not defined", __func__, NULL);
1745 return (
PIXA *)ERROR_PTR(
"boot charset not available", __func__, NULL);
1756 for (i = 0; i < n; i++) {
1759 for (j = 0; j < nt; j++) {
1761 if (!strcmp(text, str)) {
1794 L_INFO(
"charset type %d not available\n", __func__, type);
1798 L_INFO(
"charset type %d is unknown\n", __func__, type);
1881 PIX *pix1, *pix2, *pix3;
1882 PIXA *pixa1, *pixa2, *pixa3;
1889 pixDisplay(pix1, 0, 0);
1898 pixa3 = l_bootnum_gen3();
1903 pixDisplay(pix1, 0, 0);
1904 pixDisplay(pix2, 600, 0);
1905 pixDisplay(pix3, 1200, 0);
1947 l_int32 i, val, count;
1952 return ERROR_INT(
"stream not defined", __func__, 1);
1954 return ERROR_INT(
"recog not defined", __func__, 1);
1956 fprintf(fp,
"Debug print of recog contents\n");
1957 fprintf(fp,
" Setsize: %d\n", recog->
setsize);
1958 fprintf(fp,
" Binarization threshold: %d\n", recog->
threshold);
1959 fprintf(fp,
" Maximum matching y-jiggle: %d\n", recog->
maxyshift);
1960 if (recog->
linew <= 0)
1961 fprintf(fp,
" Using image templates for matching\n");
1963 fprintf(fp,
" Using templates with fixed line width for matching\n");
1965 fprintf(fp,
" No width scaling of templates\n");
1967 fprintf(fp,
" Template width scaled to %d\n", recog->
scalew);
1969 fprintf(fp,
" No height scaling of templates\n");
1971 fprintf(fp,
" Template height scaled to %d\n", recog->
scaleh);
1972 fprintf(fp,
" Number of samples in each class:\n");
1974 for (i = 0; i < recog->
setsize; i++) {
1978 fprintf(fp,
" class %d, char %c: %d\n", i, val, count);
1980 fprintf(fp,
" class %d, val %d: %d\n", i, val, count);
1987 snprintf(buf,
sizeof(buf),
"/tmp/lept/recog/templates_u.%d.png", index);
1988 pixWriteDebug(buf, pix, IFF_PNG);
1989 pixDisplay(pix, 0, 200 * index);
1993 snprintf(buf,
sizeof(buf),
1994 "/tmp/lept/recog/templates.%d.png", index);
1995 pixWriteDebug(buf, pix, IFF_PNG);
1996 pixDisplay(pix, 800, 200 * index);
2025 l_int32 i, j, n, np, index;
2027 PIX *pix1, *pix2, *pix3;
2032 return ERROR_INT(
"recog not defined", __func__, 1);
2037 return ERROR_INT(
"averaging failed", __func__, 1);
2040 paa1 = recog->
pixaa;
2049 for (i = 0; i < n; i++) {
2053 for (j = 0; j < np; j++) {
2059 lept_stderr(
"index = %d, score = %7.3f\n", index, score);
2071 pixWriteDebug(
"/tmp/lept/recog/templ_match.png", recog->
pixdb_ave,
2098 PIX *pix1, *pix2, *pixr;
2099 PIXA *pixat, *pixadb;
2102 return ERROR_INT(
"recog not defined", __func__, 1);
2104 lept_stderr(
"min/max width_u = (%d,%d); min/max height_u = (%d,%d)\n",
2119 for (i = 0; i < size; i++) {
2124 pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3,
2131 pixDisplay(pix1, 100, 100);
2136 for (i = 0; i < size; i++) {
2141 pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3,
2148 pixDisplay(pix1, 100, 100);
2181 return (
PIX *)ERROR_PTR(
"pixas not defined", __func__, NULL);
2183 return (
PIX *)ERROR_PTR(
"nas not defined", __func__, NULL);
2186 return (
PIX *)ERROR_PTR(
"pixas and nas sizes differ", __func__, NULL);
2189 for (i = 0; i < n; i++) {
2194 snprintf(buf,
sizeof(buf),
"'%s': %5.2f", text, fval);
2231 PIX *pix1, *pix2, *pix3, *pix4, *pix5;
2235 return (
PIX *)ERROR_PTR(
"recog not defined", __func__, NULL);
2245 snprintf(buf,
sizeof(buf),
"C=%d, BAC=%d, S=%4.2f", iclass, maxclass,
2283 l_int32 i, n, index, depth;
2285 NUMA *nascore, *naindex;
2287 PIXA *pixa1, *pixa2;
2290 return ERROR_INT(
"recog not defined", __func__, 1);
2292 return ERROR_INT(
"pixa not defined", __func__, 1);
2299 for (i = 0; i < n; i++) {
2302 rchExtract(recog->
rch, &index, &score, NULL, NULL, NULL, NULL, NULL);
2312 for (i = 0; i < n; i++) {
2314 if (score < minscore || score > maxscore)
continue;
2318 if (i == 0) depth = pixGetDepth(pix2);
2331 L_INFO(
"no character matches in the range of scores\n", __func__);
2379 PIX *pix3, *pix4, *pix5, *pixd;
2383 return (
PIX *)ERROR_PTR(
"recog not defined", __func__, NULL);
2385 return (
PIX *)ERROR_PTR(
"pix1 not defined", __func__, NULL);
2387 bmf = (recog->
bmf && index >= 0) ? recog->
bmf : NULL;
2388 if (!pix2 && !box && !bmf)
2409 snprintf(buf,
sizeof(buf),
"C=%s, S=%4.3f, I=%d", text, score, index);
PIXA * l_bootnum_gen1(void)
l_bootnum_gen1()
PIXA * l_bootnum_gen2(void)
l_bootnum_gen2()
PIXA * l_bootnum_gen4(l_int32 nsamp)
l_bootnum_gen4()
l_ok boxGetGeometry(const BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
void boxDestroy(BOX **pbox)
boxDestroy()
l_ok l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival)
l_dnaGetIValue()
l_ok pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxArb()
PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh)
pixThresholdToBinary()
PIXA * pixaExtendByScaling(PIXA *pixas, NUMA *nasc, l_int32 type, l_int32 include)
pixaExtendByScaling()
l_ok pixCentroid(PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave)
pixCentroid()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_ok numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val)
numaaAddNumber()
NUMAA * numaaCreateFull(l_int32 nptr, l_int32 n)
numaaCreateFull()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
l_ok numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival)
numaaGetValue()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok numaaTruncate(NUMAA *naa)
numaaTruncate()
l_ok numaSetValue(NUMA *na, l_int32 index, l_float32 val)
numaSetValue()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_ok numaGetRankValue(NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval)
numaGetRankValue()
l_ok numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc)
numaGetMin()
l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
l_ok numaCountNonzeroRuns(NUMA *na, l_int32 *pcount)
numaCountNonzeroRuns()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
char * pixGetText(PIX *pix)
pixGetText()
l_ok pixSetText(PIX *pix, const char *textstring)
pixSetText()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixClone(PIX *pixs)
pixClone()
l_ok pixClearAll(PIX *pix)
pixClearAll()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
PIX * pixAddBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val)
pixAddBorderGeneral()
PIX * pixAddBlackOrWhiteBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixAddBlackOrWhiteBorder()
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
NUMA * pixCountByColumn(PIX *pix, BOX *box)
pixCountByColumn()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
l_int32 * makePixelCentroidTab8(void)
makePixelCentroidTab8()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
l_ok pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
PIXAA * pixaaCreate(l_int32 n)
pixaaCreate()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
l_ok pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd)
pixaVerifyDepth()
l_ok pixaaInitFull(PIXAA *paa, PIXA *pixa)
pixaaInitFull()
l_ok pixaaTruncate(PIXAA *paa)
pixaaTruncate()
l_ok pixaaAddPix(PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag)
pixaaAddPix()
l_ok pixaaAddPixa(PIXAA *paa, PIXA *pixa, l_int32 copyflag)
pixaaAddPixa()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok pixaGetPixDimensions(PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixaGetPixDimensions()
PIXA * pixaCopy(PIXA *pixa, l_int32 copyflag)
pixaCopy()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
void pixaaDestroy(PIXAA **ppaa)
pixaaDestroy()
l_int32 pixaaGetCount(PIXAA *paa, NUMA **pna)
pixaaGetCount()
l_ok pixaJoin(PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend)
pixaJoin()
PIX * pixaaGetPix(PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag)
pixaaGetPix()
PIXA * pixaaGetPixa(PIXAA *paa, l_int32 index, l_int32 accesstype)
pixaaGetPixa()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIXA * pixaSelectRange(PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag)
pixaSelectRange()
l_ok pixaSizeRange(PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh)
pixaSizeRange()
PIXA * pixaSort(PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag)
pixaSort()
PIXA * pixaaFlattenToPixa(PIXAA *paa, NUMA **pnaindex, l_int32 copyflag)
pixaaFlattenToPixa()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
PIX * pixaDisplayTiledWithText(PIXA *pixa, l_int32 maxwidth, l_float32 scalefactor, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor)
pixaDisplayTiledWithText()
PIX * pixaaDisplayByPixa(PIXAA *paa, l_int32 maxnx, l_float32 scalefactor, l_int32 hspacing, l_int32 vspacing, l_int32 border)
pixaaDisplayByPixa()
PIX * pixInitAccumulate(l_int32 w, l_int32 h, l_uint32 offset)
pixInitAccumulate()
PIX * pixFinalAccumulate(PIX *pixs, l_uint32 offset, l_int32 depth)
pixFinalAccumulate()
l_ok pixAccumulate(PIX *pixd, PIX *pixs, l_int32 op)
pixAccumulate()
PIX * pixConvertTo1(PIX *pixs, l_int32 threshold)
pixConvertTo1()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
l_ok ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y)
ptaaAddPt()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
PTA * ptaClone(PTA *pta)
ptaClone()
l_ok ptaaInitFull(PTAA *ptaa, PTA *pta)
ptaaInitFull()
l_ok ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py)
ptaaGetPt()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
PTA * ptaCreate(l_int32 n)
ptaCreate()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok ptaaTruncate(PTAA *ptaa)
ptaaTruncate()
l_ok l_convertCharstrToInt(const char *str, l_int32 *pval)
l_convertCharstrToInt()
PIXA * recogExtractPixa(L_RECOG *recog)
recogExtractPixa()
l_int32 recogGetClassIndex(L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex)
recogGetClassIndex()
L_RECOG * recogCreateFromPixa(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift)
recogCreateFromPixa()
l_int32 recogGetClassString(L_RECOG *recog, l_int32 index, char **pcharstr)
recogGetClassString()
void recogDestroy(L_RECOG **precog)
recogDestroy()
L_RECOG * recogCreateFromPixaNoFinish(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift)
recogCreateFromPixaNoFinish()
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()
l_ok recogIdentifyPix(L_RECOG *recog, PIX *pixs, PIX **ppixdb)
recogIdentifyPix()
l_ok recogProcessLabeled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIX **ppix)
recogProcessLabeled()
PIXA * recogMakeBootDigitTemplates(l_int32 nsamp, l_int32 debug)
recogMakeBootDigitTemplates()
l_int32 recogIsPaddingNeeded(L_RECOG *recog, SARRAY **psa)
recogIsPaddingNeeded()
l_ok recogPadDigitTrainingSet(L_RECOG **precog, l_int32 scaleh, l_int32 linew)
recogPadDigitTrainingSet()
l_int32 recogShowAverageTemplates(L_RECOG *recog)
recogShowAverageTemplates()
PIXAA * recogSortPixaByClass(PIXA *pixa, l_int32 setsize)
recogSortPixaByClass()
PIXA * recogAddDigitPadTemplates(L_RECOG *recog, SARRAY *sa)
recogAddDigitPadTemplates()
l_int32 pixaAccumulateSamples(PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py)
pixaAccumulateSamples()
PIX * recogShowMatch(L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score)
recogShowMatch()
l_ok recogShowMatchesInRange(L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display)
recogShowMatchesInRange()
static PIX * pixDisplayOutliers(PIXA *pixas, NUMA *nas)
pixDisplayOutliers()
PIXA * pixaRemoveOutliers2(PIXA *pixas, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
pixaRemoveOutliers2()
l_ok recogTrainingFinished(L_RECOG **precog, l_int32 modifyflag, l_int32 minsize, l_float32 minfract)
recogTrainingFinished()
PIX * recogModifyTemplate(L_RECOG *recog, PIX *pixs)
recogModifyTemplate()
PIXA * pixaRemoveOutliers1(PIXA *pixas, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
pixaRemoveOutliers1()
l_ok recogTrainLabeled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 debug)
recogTrainLabeled()
l_ok recogRemoveOutliers1(L_RECOG **precog, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
recogRemoveOutliers1()
static PIX * recogDisplayOutlier(L_RECOG *recog, l_int32 iclass, l_int32 jsamp, l_int32 maxclass, l_float32 maxscore)
recogDisplayOutlier()
l_int32 recogAverageSamples(L_RECOG *recog, l_int32 debug)
recogAverageSamples()
l_ok recogRemoveOutliers2(L_RECOG **precog, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem)
recogRemoveOutliers2()
PIXA * recogTrainFromBoot(L_RECOG *recogboot, PIXA *pixas, l_float32 minscore, l_int32 threshold, l_int32 debug)
recogTrainFromBoot()
PIXA * recogFilterPixaBySize(PIXA *pixas, l_int32 setsize, l_int32 maxkeep, l_float32 max_ht_ratio, NUMA **pna)
recogFilterPixaBySize()
l_ok recogShowContent(FILE *fp, L_RECOG *recog, l_int32 index, l_int32 display)
recogShowContent()
l_ok recogAddSample(L_RECOG *recog, PIX *pix, l_int32 debug)
recogAddSample()
static l_int32 recogTemplatesAreOK(L_RECOG *recog, l_int32 minsize, l_float32 minfract, l_int32 *pok)
recogTemplatesAreOK()
L_RECOG * recogMakeBootDigitRecog(l_int32 nsamp, l_int32 scaleh, l_int32 linew, l_int32 maxyshift, l_int32 debug)
recogMakeBootDigitRecog()
static SARRAY * recogAddMissingClassStrings(L_RECOG *recog)
recogAddMissingClassStrings()
static l_int32 recogCharsetAvailable(l_int32 type)
recogCharsetAvailable()
l_ok recogDebugAverages(L_RECOG *recog, l_int32 debug)
recogDebugAverages()
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()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
PIX * pixScaleToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleToSize()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()
PIX * pixSetStrokeWidth(PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixSetStrokeWidth()
PIXA * pixaSetStrokeWidth(PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixaSetStrokeWidth()
struct L_Dna * dna_tochar
struct Pixa * pixadb_boot
PIX * pixAddSingleTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow)
pixAddSingleTextblock()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_int32 lept_mkdir(const char *subdir)
lept_mkdir()