int main(int argc, char **argv) { int opt; ImageInput* pImageInput = 0; int inputCount = 0; std::string outputDir; std::string logLevel = "ERROR"; char cmd = 0; int cmdCount = 0; while ((opt = getopt(argc, argv, "i:c:ltaws:o:v:h")) != -1) { switch (opt) { case 'i': pImageInput = new DirectoryInput(Directory(optarg, ".png")); inputCount++; break; case 'c': pImageInput = new CameraInput(atoi(optarg)); inputCount++; break; case 'l': case 't': case 'a': case 'w': cmd = opt; cmdCount++; break; case 'o': cmd = opt; cmdCount++; outputDir = optarg; break; case 's': delay = atoi(optarg); break; case 'v': logLevel = optarg; break; case 'h': default: usage(argv[0]); exit(EXIT_FAILURE); break; } } if (inputCount != 1) { std::cerr << "*** You should specify exactly one camera or input directory!\n\n"; usage(argv[0]); exit(EXIT_FAILURE); } if (cmdCount != 1) { std::cerr << "*** You should specify exactly one operation!\n\n"; usage(argv[0]); exit(EXIT_FAILURE); } configureLogging(logLevel, cmd == 'a'); switch (cmd) { case 'o': pImageInput->setOutputDir(outputDir); capture(pImageInput); break; case 'l': learnOcr(pImageInput); break; case 't': testOcr(pImageInput); break; case 'a': adjustCamera(pImageInput); break; case 'w': writeData(pImageInput); break; } delete pImageInput; exit(EXIT_SUCCESS); }