/*! * \brief recogCreateFromRecog() * * \param[in] recs source recog with arbitrary input parameters * \param[in] scalew scale all widths to this; use 0 otherwise * \param[in] scaleh scale all heights to this; use 0 otherwise * \param[in] linew width of normalized strokes; use 0 to skip * \param[in] threshold for binarization; typically ~128 * \param[in] maxyshift from nominal centroid alignment; default is 1 * \return recd, or NULL on error * * <pre> * Notes: * (1) This is a convenience function that generates a recog using * the unscaled training data in an existing recog. * (2) It is recommended to use %maxyshift = 1 (the default value) * (3) See recogCreate() for use of %scalew, %scaleh and %linew. * </pre> */ L_RECOG * recogCreateFromRecog(L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift) { L_RECOG *recd; PIXA *pixa; PROCNAME("recogCreateFromRecog"); if (!recs) return (L_RECOG *)ERROR_PTR("recs not defined", procName, NULL); pixa = recogExtractPixa(recs); recd = recogCreateFromPixa(pixa, scalew, scaleh, linew, threshold, maxyshift); pixaDestroy(&pixa); return recd; }
PIXA *MakeBootnum2(void) { char *fname; l_int32 i, n, w, h; BOX *box; PIX *pix; PIXA *pixa; L_RECOG *recog; SARRAY *sa; /* Phase 1: generate recog from the digit data */ recog = recogCreate(20, 32, L_USE_ALL, 120, 1); sa = getSortedPathnamesInDirectory("recog/bootnums", "png", 0, 0); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { /* Read each pix: grayscale, multi-character, labelled */ fname = sarrayGetString(sa, i, L_NOCOPY); if ((pix = pixRead(fname)) == NULL) { fprintf(stderr, "Can't read %s\n", fname); continue; } /* Convert to a set of 1 bpp, single character, labelled */ pixGetDimensions(pix, &w, &h, NULL); box = boxCreate(0, 0, w, h); recogTrainLabelled(recog, pix, box, NULL, 1, 0); pixDestroy(&pix); boxDestroy(&box); } recogTrainingFinished(recog, 1); sarrayDestroy(&sa); /* Phase 2: generate pixa consisting of 1 bpp, single character pix */ pixa = recogExtractPixa(recog); pixaWrite("/tmp/lept/recog/digits/bootnum2.pa", pixa); recogDestroy(&recog); return pixa; }