Skip to content

Commit

Permalink
1. profiles
Browse files Browse the repository at this point in the history
2. processMRZ
3. multiple export formats
  • Loading branch information
abbyysdk committed Feb 25, 2013
1 parent 4d4a02d commit f5ea19d
Show file tree
Hide file tree
Showing 7 changed files with 228 additions and 141 deletions.
50 changes: 29 additions & 21 deletions dotNet/ConsoleTest/Program.cs
Expand Up @@ -27,10 +27,10 @@ private static void displayHelp()
ConsoleTest.exe --asFields <source_file> <settings.xml> <target_dir>
Perform recognition via processFields call. Processing settings should be specified in xml file.
ConsoleTest.exe --captureData <source_file> <template name> <target_dir>
Perform data capture for specific document types. Possible template names are:
* MRZ - perform Machine-Readable Zone extraction
ConsoleTest.exe --asMRZ <source_file> <target_dir>
Recognize and parse Machine-Readable Zone (MRZ) of Passport, ID card, Visa or other official document
Common options description:
--lang=<languages>: Recognize with specified language. Examples: --lang=English --lang=English,German,French
Expand All @@ -56,14 +56,15 @@ static void Main(string[] args)
{ "asDocument", v => processingMode = ProcessingModeEnum.MultiPage },
{ "asTextField", v => processingMode = ProcessingModeEnum.ProcessTextField},
{ "asFields", v => processingMode = ProcessingModeEnum.ProcessFields},
{ "asMRZ", var => processingMode = ProcessingModeEnum.ProcessMrz},
{ "captureData", v => processingMode = ProcessingModeEnum.CaptureData},
{ "out=", (string v) => outFormat = v },
{ "lang=", (string v) => language = v },
{ "options=", (string v) => customOptions = v }
};

List<string> additionalArgs = null;
try
List<string> additionalArgs = null;
try
{
additionalArgs = p.Parse(args);
}
Expand All @@ -74,16 +75,17 @@ static void Main(string[] args)
return;
}

string sourcePath = null;
string xmlPath = null;
string targetPath = null;
string templateName = null;
string sourcePath = null;
string xmlPath = null;
string targetPath = Directory.GetCurrentDirectory();
string templateName = null;

switch (processingMode)
{
case ProcessingModeEnum.SinglePage:
switch (processingMode)
{
case ProcessingModeEnum.SinglePage:
case ProcessingModeEnum.MultiPage:
case ProcessingModeEnum.ProcessTextField:
case ProcessingModeEnum.ProcessMrz:
if (additionalArgs.Count != 2)
{
displayHelp();
Expand Down Expand Up @@ -128,6 +130,7 @@ static void Main(string[] args)
{
if (processingMode == ProcessingModeEnum.ProcessFields ||
processingMode == ProcessingModeEnum.ProcessTextField ||
processingMode == ProcessingModeEnum.ProcessMrz ||
processingMode == ProcessingModeEnum.CaptureData)
outFormat = "xml";
else
Expand Down Expand Up @@ -159,6 +162,11 @@ static void Main(string[] args)
string outputFilePath = Path.Combine(targetPath, Path.GetFileName(sourcePath) + ".xml");
tester.ProcessFields(sourcePath, xmlPath, outputFilePath);
}
else if (processingMode == ProcessingModeEnum.ProcessMrz)
{
string outputFilePath = Path.Combine(targetPath, Path.GetFileName(sourcePath) + ".xml");
tester.ProcessMrz(sourcePath, outputFilePath);
}
else if (processingMode == ProcessingModeEnum.CaptureData)
{
string outputFilePath = Path.Combine(targetPath, Path.GetFileName(sourcePath) + ".xml");
Expand All @@ -180,14 +188,14 @@ private static ProcessingSettings buildSettings(string language, string outputFo
settings.SetLanguage( language );
switch (outputFormat.ToLower())
{
case "txt": settings.OutputFormat = OutputFormat.txt; break;
case "rtf": settings.OutputFormat = OutputFormat.rtf; break;
case "docx": settings.OutputFormat = OutputFormat.docx; break;
case "xlsx": settings.OutputFormat = OutputFormat.xlsx; break;
case "pptx": settings.OutputFormat = OutputFormat.pptx; break;
case "pdfsearchable": settings.OutputFormat = OutputFormat.pdfSearchable; break;
case "pdftextandimages": settings.OutputFormat = OutputFormat.pdfTextAndImages; break;
case "xml": settings.OutputFormat = OutputFormat.xml; break;
case "txt": settings.SetOutputFormat(OutputFormat.txt); break;
case "rtf": settings.SetOutputFormat( OutputFormat.rtf); break;
case "docx": settings.SetOutputFormat( OutputFormat.docx); break;
case "xlsx": settings.SetOutputFormat( OutputFormat.xlsx); break;
case "pptx": settings.SetOutputFormat( OutputFormat.pptx); break;
case "pdfsearchable": settings.SetOutputFormat( OutputFormat.pdfSearchable); break;
case "pdftextandimages": settings.SetOutputFormat( OutputFormat.pdfTextAndImages); break;
case "xml": settings.SetOutputFormat( OutputFormat.xml); break;
default:
throw new ArgumentException("Invalid output format");
}
Expand Down
109 changes: 41 additions & 68 deletions dotNet/ConsoleTest/Test.cs
Expand Up @@ -16,6 +16,7 @@ public enum ProcessingModeEnum
MultiPage,
ProcessTextField,
ProcessFields,
ProcessMrz,
CaptureData
};

Expand All @@ -26,7 +27,6 @@ class Test
public Test()
{
restClient = new RestServiceClient();
restClient.ServerUrl = Properties.Settings.Default.ServerAddress;
restClient.Proxy.Credentials = CredentialCache.DefaultCredentials;

//!!! Please provide your application id and password here
Expand Down Expand Up @@ -87,8 +87,7 @@ public Test()
foreach (string filePath in sourceFiles)
{
string outputFileName = Path.GetFileNameWithoutExtension(filePath);
string ext = fullTextSettings.OutputFileExt;
string outputFilePath = Path.Combine(outputPath, outputFileName + ext);
string outputFilePath = Path.Combine(outputPath, outputFileName);

Console.WriteLine("Processing " + Path.GetFileName(filePath));

Expand All @@ -99,8 +98,7 @@ public Test()
{
ProcessingSettings fullTextSettings = settings as ProcessingSettings;
string outputFileName = "document";
string ext = fullTextSettings.OutputFileExt;
string outputFilePath = Path.Combine(outputPath, outputFileName + ext);
string outputFilePath = Path.Combine(outputPath, outputFileName);

ProcessDocument(sourceFiles, outputFilePath, fullTextSettings);
}
Expand All @@ -121,17 +119,11 @@ public Test()
}
}

public void ProcessFile(string sourceFilePath, string outputFilePath, ProcessingSettings settings)
public void ProcessFile(string sourceFilePath, string outputFileBase, ProcessingSettings settings)
{
Console.WriteLine("Uploading..");
Task task = restClient.ProcessImage(sourceFilePath, settings);

// For field-level
/*
var flSettings = new TextFieldProcessingSettings();
TaskId taskId = restClient.ProcessTextField(sourceFilePath, flSettings);
*/

TaskId taskId = task.Id;

while (true)
Expand All @@ -147,7 +139,12 @@ public void ProcessFile(string sourceFilePath, string outputFilePath, Processing
if (task.Status == TaskStatus.Completed)
{
Console.WriteLine("Processing completed.");
restClient.DownloadResult(task, outputFilePath);
for (int i = 0; i < settings.OutputFormats.Count; i++)
{
var outputFormat = settings.OutputFormats[i];
string ext = settings.GetOutputFileExt(outputFormat);
restClient.DownloadUrl(task.DownloadUrls[i], outputFileBase + ext);
}
Console.WriteLine("Download completed.");
}
else if (task.Status == TaskStatus.NotEnoughCredits)
Expand All @@ -160,7 +157,7 @@ public void ProcessFile(string sourceFilePath, string outputFilePath, Processing
}
}

public void ProcessDocument(IEnumerable<string> _sourceFiles, string outputFilePath,
public void ProcessDocument(IEnumerable<string> _sourceFiles, string outputFileBase,
ProcessingSettings settings)
{
string[] sourceFiles = _sourceFiles.ToArray();
Expand Down Expand Up @@ -193,7 +190,12 @@ public void ProcessFile(string sourceFilePath, string outputFilePath, Processing
if (task.Status == TaskStatus.Completed)
{
Console.WriteLine("Processing completed.");
restClient.DownloadResult(task, outputFilePath);
for( int i = 0; i < settings.OutputFormats.Count; i++ )
{
var outputFormat = settings.OutputFormats[i];
string ext = settings.GetOutputFileExt(outputFormat);
restClient.DownloadUrl(task.DownloadUrls[i], outputFileBase + ext);
}
Console.WriteLine("Download completed.");
}
else
Expand All @@ -202,26 +204,18 @@ public void ProcessFile(string sourceFilePath, string outputFilePath, Processing
}
}

public void ProcessTextField(string sourceFilePath, string outputFilePath, TextFieldProcessingSettings settings)
/// <summary>
/// Wait until task finishes and download result
/// </summary>
private void waitAndDownload(Task task, string outputFilePath)
{
Console.WriteLine("Uploading..");
Task task = restClient.ProcessTextField(sourceFilePath, settings);

// For field-level
/*
var flSettings = new TextFieldProcessingSettings();
TaskId taskId = restClient.ProcessTextField(sourceFilePath, flSettings);
*/

TaskId taskId = task.Id;

while (true)
while (task.IsTaskActive())
{
task = restClient.GetTaskStatus(taskId);
task = restClient.GetTaskStatus(task.Id);
if (!Task.IsTaskActive(task.Status))
break;

Console.WriteLine(String.Format("Task status: {0}", task.Status));
Console.WriteLine("Waiting..");
System.Threading.Thread.Sleep(1000);
}

Expand All @@ -237,60 +231,39 @@ public void ProcessTextField(string sourceFilePath, string outputFilePath, TextF
}
}

public void ProcessTextField(string sourceFilePath, string outputFilePath, TextFieldProcessingSettings settings)
{
Console.WriteLine("Uploading..");
Task task = restClient.ProcessTextField(sourceFilePath, settings);

waitAndDownload(task, outputFilePath);
}

public void ProcessFields(string sourceFilePath, string xmlSettingsPath, string outputFilePath)
{
Console.WriteLine("Uploading");
Task task = restClient.UploadAndAddFileToTask(sourceFilePath, null);
Console.WriteLine("Processing..");
task = restClient.ProcessFields(task, xmlSettingsPath);

while (true)
{
task = restClient.GetTaskStatus(task.Id);
if (!Task.IsTaskActive(task.Status))
break;
waitAndDownload(task, outputFilePath);
}

Console.WriteLine(String.Format("Task status: {0}", task.Status));
System.Threading.Thread.Sleep(1000);
}
public void ProcessMrz(string sourceFilePath, string outputFilePath)
{
Console.WriteLine("Uploading");
Task task = restClient.ProcessMrz(sourceFilePath);
Console.WriteLine("Processing..");

if (task.Status == TaskStatus.Completed)
{
Console.WriteLine("Processing completed.");
restClient.DownloadResult(task, outputFilePath);
Console.WriteLine("Download completed.");
}
else
{
Console.WriteLine("Error while processing the task");
}
waitAndDownload(task, outputFilePath);
}

public void CaptureData(string sourceFilePath, string templateName, string outputFilePath)
{
Console.WriteLine("Uploading");
Task task = restClient.CaptureData(sourceFilePath, templateName);

while (true)
{
task = restClient.GetTaskStatus(task.Id);
if (!Task.IsTaskActive(task.Status))
break;

Console.WriteLine(String.Format("Task status: {0}", task.Status));
System.Threading.Thread.Sleep(1000);
}

if (task.Status == TaskStatus.Completed)
{
Console.WriteLine("Processing completed.");
restClient.DownloadResult(task, outputFilePath);
Console.WriteLine("Download completed.");
}
else
{
Console.WriteLine("Error while processing the task");
}
waitAndDownload(task, outputFilePath);
}
}
}
6 changes: 3 additions & 3 deletions dotNet/GuiTest/Window1.xaml.cs
Expand Up @@ -143,13 +143,13 @@ void addFileTask(string filePath)
task.TaskStatus = "Uploading";
task.OutputFilePath = System.IO.Path.Combine(
outputDir,
System.IO.Path.GetFileNameWithoutExtension(filePath) + settings.OutputFileExt);
System.IO.Path.GetFileNameWithoutExtension(filePath) + settings.GetOutputFileExt(settings.OutputFormats[0]));

_userTasks.Add(task);

settings.Description = String.Format("{0} -> {1}",
Path.GetFileName(filePath),
settings.OutputFileExt);
settings.GetOutputFileExt(settings.OutputFormats[0]));

restClientAsync.ProcessImageAsync(filePath, settings, task);
}
Expand Down Expand Up @@ -282,7 +282,7 @@ ProcessingSettings GetProcessingSettings()
{
ProcessingSettings result = new ProcessingSettings();
result.SetLanguage(getLanguages());
result.OutputFormat = getOutputFormat();
result.SetOutputFormat( getOutputFormat() );
return result;
}

Expand Down
17 changes: 14 additions & 3 deletions dotNet/dotNetWrapper/FieldProcessingSettings.cs
Expand Up @@ -22,17 +22,28 @@ public string AsUrlParams
{
get
{
string result = "?language=" + Language + "&textType=" + TextType.AsUrlParams();
StringBuilder result = new StringBuilder("?language=" + Language +
"&textType=" + TextType.AsUrlParams());
if (!String.IsNullOrEmpty(Letterset))
{
result.AppendFormat("&letterSet={0}", Letterset);
}
if (!String.IsNullOrEmpty(Regexp))
{
result.AppendFormat("&regExp={0}", Regexp);
}
if (!String.IsNullOrEmpty(CustomOptions))
{
result += "&" + CustomOptions;
result.Append("&" + CustomOptions);
}
return result;
return result.ToString();
}
}

public string Language { get; set; }
public TextType TextType { get; set; }
public string Letterset { get; set; }
public string Regexp { get; set; }

public String CustomOptions { get; set; }
}
Expand Down

0 comments on commit f5ea19d

Please sign in to comment.