Ejemplo n.º 1
0
/*!
 *  recogAppend()
 *
 *      Input:  recog1
 *              recog2 (gets added to recog1)
 *      Return: 0 if OK, 1 on error
 *
 *  Notes:
 *      (1) This is used to make a training recognizer from more than
 *          one trained recognizer source.  It should only be used
 *          when the bitmaps for corresponding character classes are
 *          very similar.  That constraint does not arise when
 *          the character classes are disjoint; e.g., if recog1 is
 *          digits and recog2 is alphabetical.
 *      (2) This is done by appending recog2 to recog1.  Averages are
 *          computed for each recognizer, if necessary, before appending.
 *      (3) Non-array fields are combined using the appropriate min and max.
 */
l_int32
recogAppend(L_RECOG  *recog1,
            L_RECOG  *recog2)
{
    PROCNAME("recogAppend");

    if (!recog1)
        return ERROR_INT("recog1 not defined", procName, 1);
    if (!recog2)
        return ERROR_INT("recog2 not defined", procName, 1);

        /* Make sure both are finalized with all arrays computed */
    recogAverageSamples(recog1, 0);
    recogAverageSamples(recog2, 0);

        /* Combine non-array field values */
    recog1->minwidth_u = L_MIN(recog1->minwidth_u, recog2->minwidth_u);
    recog1->maxwidth_u = L_MAX(recog1->maxwidth_u, recog2->maxwidth_u);
    recog1->minheight_u = L_MIN(recog1->minheight_u, recog2->minheight_u);
    recog1->maxheight_u = L_MAX(recog1->maxheight_u, recog2->maxheight_u);
    recog1->minwidth = L_MIN(recog1->minwidth, recog2->minwidth);
    recog1->maxwidth = L_MAX(recog1->maxwidth, recog2->maxwidth);
    recog1->min_splitw = L_MIN(recog1->min_splitw, recog2->min_splitw);
    recog1->min_splith = L_MIN(recog1->min_splith, recog2->min_splith);
    recog1->max_splith = L_MAX(recog1->max_splith, recog2->max_splith);

        /* Combine array field values */
    recog1->setsize += recog2->setsize;
    sarrayAppendRange(recog1->sa_text, recog2->sa_text, 0, -1);
    l_dnaJoin(recog1->dna_tochar, recog2->dna_tochar, 0, -1);
    pixaaJoin(recog1->pixaa_u, recog2->pixaa_u, 0, -1);
    pixaJoin(recog1->pixa_u, recog2->pixa_u, 0, -1);
    ptaaJoin(recog1->ptaa_u, recog2->ptaa_u, 0, -1);
    ptaJoin(recog1->pta_u, recog2->pta_u, 0, -1);
    numaaJoin(recog1->naasum_u, recog2->naasum_u, 0, -1);
    numaJoin(recog1->nasum_u, recog2->nasum_u, 0, -1);
    pixaaJoin(recog1->pixaa, recog2->pixaa, 0, -1);
    pixaJoin(recog1->pixa, recog2->pixa, 0, -1);
    ptaaJoin(recog1->ptaa, recog2->ptaa, 0, -1);
    ptaJoin(recog1->pta, recog2->pta, 0, -1);
    numaaJoin(recog1->naasum, recog2->naasum, 0, -1);
    numaJoin(recog1->nasum, recog2->nasum, 0, -1);
    return 0;
}
Ejemplo n.º 2
0
jboolean Java_com_googlecode_leptonica_android_Pixa_nativeJoin(JNIEnv *env, jclass clazz,
        jlong nativePixa, jlong otherPixa) {
    PIXA *pixa = (PIXA *) nativePixa;
    PIXA *pixas = (PIXA *) otherPixa;

    if (pixaJoin(pixa, pixas, 0, 0)) {
        return JNI_FALSE;
    }

    return JNI_TRUE;
}
Ejemplo n.º 3
0
jboolean Java_com_example_ocr_Pixa_nativeJoin(JNIEnv *env, jclass clazz,
                                                               jint nativePixa, jint otherPixa) {
  PIXA *pixa = (PIXA *) nativePixa;
  PIXA *pixas = (PIXA *) otherPixa;

  if (pixaJoin(pixa, pixas, 0, 0)) {
    return JNI_FALSE;
  }

  return JNI_TRUE;
}
Ejemplo n.º 4
0
PIXA *MakeBootnum1(void)
{
const char  *str;
PIXA        *pixa1, *pixa2, *pixa3;

    pixa1 = pixaRead("recog/digits/digit_set02.pa");
    str = "10, 27, 35, 45, 48, 74, 79, 97, 119, 124, 148";
    pixa3 = pixaSelectWithString(pixa1, str, NULL);
    pixaDestroy(&pixa1);

    pixa1 = pixaRead("recog/digits/digit_set03.pa");
    str = "2, 15, 30, 50, 60, 75, 95, 105, 121, 135";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set05.pa");
    str = "0, 15, 30, 49, 60, 75, 90, 105, 120, 135";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set06.pa");
    str = "4, 15, 30, 48, 60, 78, 90, 105, 120, 135";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set07.pa");
    str = "3, 15, 30, 45, 60, 77, 78, 91, 105, 120, 149";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set08.pa");
    str = "0, 20, 30, 45, 60, 75, 90, 106, 121, 135";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set09.pa");
    str = "0, 20, 32, 47, 54, 63, 75, 91, 105, 125, 136";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set11.pa");
    str = "0, 15, 36, 46, 62, 63, 76, 91, 106, 123, 135";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set12.pa");
    str = "1, 20, 31, 45, 61, 75, 95, 107, 120, 135";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    pixa1 = pixaRead("recog/digits/digit_set13.pa");
    str = "1, 16, 31, 48, 63, 78, 98, 105, 123, 136";
    pixa2 = pixaSelectWithString(pixa1, str, NULL);
    pixaJoin(pixa3, pixa2, 0, -1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);

    return pixa3;
}