This tutorial shows how to extract check data from an image using the LEADTOOLS Cloud Services in a C# .NET Core console application.
Overview | |
---|---|
Summary | This tutorial covers how to make ExtractCheck requests and process the results using the LEADTOOLS Cloud Services in a C# .NET Core console application. |
Completion Time | 30 minutes |
Project | Download tutorial project (2 KB) |
Platform | LEADTOOLS Cloud Services API |
IDE | Visual Studio 2019 |
Language | C# .NET Core |
Development License | Download LEADTOOLS |
Try it in another language |
Be sure to review the following sites for information about LEADTOOLS Cloud Services API.
LEADTOOLS Service Plan offerings:
Service Plan | Description |
---|---|
Free Trial | Free Evaluation |
Page Packages | Prepaid Page Packs |
Subscriptions | Prepaid Monthly Processed Pages |
To further explore the offerings, refer to Pricing Information for LEADTOOLS Hosted Cloud Services > Service Plan Terms.
For pricing details, refer to https://www.leadtools.com/sdk/products/hosted-services#pricing > Page Packages and Subscriptions.
To obtain the necessary Application ID and Application Password, refer to Create an Account and Application with the LEADTOOLS Hosted Cloud Services.
In Visual Studio, create a new C# .NET Core Console project, and add the following required NuGet package:
Newtonsoft.Json
With the project created and the package added, coding can begin.
In the Solution Explorer, open Program.cs
. Add the following statements to the using
block at the top.
// Using block at the top
using System;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.IO;
using Newtonsoft.Json.Linq;
Add the class level variable called hostedServicesUrl
an async Task called ExtractCheck()
.
This sends an ExtractCheck
request to the LEADTOOLS Cloud Services API, if successful a unique identifier (GUID) will be returned and then a query using this GUID will be made.
private string hostedServicesUrl = "https://azure.leadtools.com/api/";
public async Task ExtractCheck()
{
var client = InitClient();
//The first page in the file to mark for processing
int firstPage = 1;
//Sending a value of -1 will indicate to the service that all pages in the file should be processed.
int lastPage = -1;
// If using URL to the file
string fileURL = "http://demo.leadtools.com/images/cloud_samples/micr_sample.jpg";
string recognitionUrl = string.Format("Recognition/ExtractCheck?firstPage={0}&lastPage={1}&fileurl={2}", firstPage, lastPage, fileURL);
var result = await client.PostAsync(recognitionUrl, null);
/*
//If uploading a file as multi-part content:
HttpContent byteContent = new ByteArrayContent(File.ReadAllBytes(@"path/to/file"));
byteContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "attachment",
FileName = "file-name"
};
var formData = new MultipartFormDataContent();
formData.Add(byteContent, "formFieldName");
string recognitionUrl = string.Format("Recognition/ExtractCheck?firstPage={0}&lastPage={1}", firstPage, lastPage);
var result = await client.PostAsync(recognitionUrl, formData);
formData.Dispose();
*/
if (result.StatusCode == HttpStatusCode.OK)
{
//Unique ID returned by the services
string id = await result.Content.ReadAsStringAsync();
Console.WriteLine("Unique ID returned by the services: " + id);
await Query(id, client);
}
else
Console.WriteLine("Request failed with the following response: " + result.StatusCode);
}
Next, create an async Task called Task Query(string id, HttpClient client)
that utilizes the GUID provided by ExtractCheck
task.
If successful the response body will contain all the request data in JSON format.
private sync Task Query(string id, HttpClient client)
{
string queryUrl = string.Format("Query?id={0}", id.ToString());
HttpResponseMessage result;
string returnedContent;
JObject returnedData;
int fileStatus;
do
{
result = await client.PostAsync(queryUrl, null);
returnedContent = await result.Content.ReadAsStringAsync();
returnedData = JObject.Parse(returnedContent);
fileStatus = (int)returnedData.SelectToken("FileStatus");
//The file is still being processed -- we will sleep the current thread for 5 seconds before trying again.
await Task.Delay(5000);
} while (fileStatus == 100 || fileStatus == 123);
Console.WriteLine("File has finished processing with return code: " + returnedData.SelectToken("FileStatus"));
if ((int)returnedData.SelectToken("FileStatus") != 200)
return;
ParseJson(returnedData.SelectToken("RequestData").ToString());
}
Then, create the function ParseJson(string json)
to process the returned JSON data.
private void ParseJson(string json)
{
JArray requestArray = JArray.Parse(json);
foreach(var requestReturn in requestArray)
{
Console.WriteLine("Service Type: " + requestReturn.SelectToken("ServiceType"));
Console.WriteLine("Returned Data:");
var objArray = JArray.Parse(requestReturn.SelectToken("data").ToString());
foreach(var obj in objArray)
{
var jObj = JObject.Parse(obj.ToString());
foreach (var val in jObj)
Console.WriteLine(val.Key + ": " + val.Value.ToString());
Console.WriteLine("------------------------------------");
}
}
}
Finally, create the function InitClient()
to create a client connection to request the GUID and JSON data through.
Where it states Replace with Application ID
and Replace with Application Password
be sure to place your Application ID and Password accordingly.
private HttpClient InitClient()
{
string AppId = "Replace with Application ID";
string Password = "Replace with Application Password";
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(hostedServicesUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string authData = string.Format("{0}:{1}", AppId, Password);
string authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);
return client;
}
In order to test run this code be sure to add ExtractCheck().GetAwaiter().GetResults();
to the static void Main
section.
Run the project by pressing F5, or by selecting Debug -> Start Debugging.
If the steps were followed correctly, the console appears and the application displays the parsed check information from the returned JSON data.
This tutorial showed how to extract check information via the LEADTOOLS Cloud Services API.