package de.unigoettingen.sub.ocr.controller;
import java.io.File;
import java.util.Locale;
import de.uni_goettingen.sub.commons.ocr.api.OcrEngine;
import de.uni_goettingen.sub.commons.ocr.api.OcrFormat;
import de.uni_goettingen.sub.commons.ocr.api.OcrProcess;
import de.uni_goettingen.sub.commons.ocr.api.OcrPriority;
import de.uni_goettingen.sub.commons.ocr.api.OcrQuality;
import de.uni_goettingen.sub.commons.ocr.api.OcrTextType;
import de.uni_goettingen.sub.commons.ocr.api.OcrFactory;
import de.unigoettingen.sub.commons.ocr.util.BeanProvider;
import de.unigoettingen.sub.commons.ocr.util.FileAccess;
import de.unigoettingen.sub.commons.ocr.util.Mailer;
public class OcrEngineStarter {
private FactoryProvider factoryProvider = new FactoryProvider();
private BeanProvider beanProvider = new BeanProvider();
private OcrEngine engine;
// for unit tests
void setFactoryProvider(FactoryProvider newProvider) {
factoryProvider = newProvider;
}
// for unit tests
void setBeanProvider(BeanProvider newBeanProvider) {
beanProvider = newBeanProvider;
}
public void startOcrWithParams(OcrParameters params) {
OcrFactory factory = factoryProvider.createFactory(params.ocrEngine, params.props);
engine = factory.createEngine();
FileAccess fileAccess = beanProvider.getFileAccess();
File[] allBookFolders = fileAccess.getAllFolders(params.inputFolder, params.inputFormats);
for (File bookFolder : allBookFolders) {
OcrProcess process = factory.createProcess();
process.setName(bookFolder.getName());
process.setOutputDir(new File(params.outputFolder));
File[] allPages = fileAccess.getAllImagesFromFolder(bookFolder, params.inputFormats);
for (File page : allPages) {
process.addImage(page.toURI());
}
for (String outFormat : params.outputFormats) {
OcrFormat ocrFormat = OcrFormat.valueOf(outFormat.toUpperCase());
process.addOutput(ocrFormat);
}
for (String lang : params.inputLanguages) {
process.addLanguage(new Locale(lang));
}
process.setPriority(OcrPriority.fromValue(params.priority));
process.setTextType(OcrTextType.valueOf(params.inputTextType.toUpperCase()));
process.setQuality(OcrQuality.BEST);
engine.addOcrProcess(process);
}
Mailer mailer = null;
String mailAddress = params.props.getProperty("email");
if (mailAddress != null) {
int estimatedExecTime = engine.getEstimatedDurationInSeconds();
mailer = beanProvider.getMailer();
mailer.sendStarted(mailAddress, estimatedExecTime);
}
engine.recognize();
if (mailAddress != null) {
mailer.sendFinished(mailAddress, params.outputFolder);
}
}
}