Example #1
0
int main(int argc, char **argv)
{
    using namespace lhack;
    if (argc < 4) {
        std::cerr << "Syntax: lhack rootdir comma-sep-filters similarity-coeff" << std::endl;
        return 2;
    }

    const char *fbdev = "/dev/fb/0";
#if defined(LHACK_DEVEL_HOST)
    if (argc < 5) {
        std::cerr << "You must provide a grayscale image as the final arg. to be used instead of fbdev\n";
        return 3;
    }
    fbdev = argv[4];
    std::cout << "FB device: " << fbdev << std::endl;
#endif

#if defined(LHACK_K3)
    FrameGrabber<K3Dimensions> fgrab(fbdev);
#else
    FrameGrabber<KDXDimensions> fgrab(fbdev);
#endif
    Bitmap image = fgrab.GrabSelected();
    if (!image.IsValid())
        return 2;

#ifdef LHACK_DEBUG_GRABBER
    if (image.IsValid()) {
        char dmpname[80];
        snprintf(dmpname, 80, "titledump-%dx%d.gray", image.width(), image.height());
        std::ofstream bmdump(dmpname);
        bmdump.write(image.buffer(), image.height()*image.width());
        bmdump.close();
    }
#endif

#if defined(LHACK_DEVEL_HOST)
    #if defined(LHACK_K3)
    Recognizer<K3Dimensions> ocr("/mnt/x86/share", "eng");
    #else
    Recognizer<KDXDimensions> ocr("/mnt/x86/share", "eng");
    #endif
#else
    #if defined(LHACK_K3)
    Recognizer<K3Dimensions> ocr("/mnt/us/launchpad/share", "eng");
    #else
    Recognizer<KDXDimensions> ocr("/mnt/us/launchpad/share", "eng");
    #endif
#endif
    string ocr_result = ocr.Recognize(image);
#if defined(LHACK_DEVEL_HOST)
    std::cout << "OCR result: " << ocr_result << std::endl;
#endif

    std::vector<std::string> filters;
    char* fbegin = argv[2];
    char* fend = fbegin;
    while (*fend) {
        if (*fend == ',') {
            filters.push_back(string(fbegin, fend));
            fbegin = ++fend;
        }
        else {
            ++ fend;
        }
    }
    if (fend > fbegin)
        filters.push_back(string(fbegin, fend));

    if (filters.empty())
        return 2;

    string match = Search(argv[1], filters, ocr_result, atof(argv[3]));
    if (match.empty())
        return 3;

    std::cout << match << std::endl;

    return 0;
}