Exemple #1
0
        /// <summary>
        /// Upload a file to service synchronously and start processing
        /// </summary>
        /// <param name="filePath">Path to an image to process</param>
        /// <param name="settings">Language and output format</param>
        /// <returns>Id of the task. Check task status to see if you have enough units to process the task</returns>
        /// <exception cref="ProcessingErrorException">thrown when something goes wrong</exception>
        public OcrSdkTask ProcessImage(string filePath, ProcessingSettings settings)
        {
            string url = String.Format("{0}processReceipt?{1}", ServerUrl, settings.AsUrlParams);

            try
            {
                // Build post request
                WebRequest request = createPostRequest(url);
                writeFileToRequest(filePath, request);

                XDocument  response = performRequest(request);
                OcrSdkTask task     = ServerXml.GetTaskStatus(response);

                return(task);
            }
            catch (System.Net.WebException e)
            {
                String friendlyMessage = retrieveFriendlyMessage(e);
                if (friendlyMessage != null)
                {
                    throw new ProcessingErrorException(friendlyMessage, e);
                }
                throw new ProcessingErrorException("Cannot upload file", e);
            }
        }
        public string Process(string imagePath, ProcessingSettings settings)
        {
            string result = null;

            setProgress(5);

            setStep("Uploading image...");
            OcrSdkTask task = restClient.ProcessImage(imagePath, settings);

            setProgress(70);
            setStep("Processing...");
            task = waitForTask(task);

            if (task.Status == TaskStatus.Completed)
            {
                Console.WriteLine("Processing completed.");
                result = restClient.DownloadUrl(task.DownloadUrls[0]);
                setStep("Download completed.");
            }
            else if (task.Status == TaskStatus.NotEnoughCredits)
            {
                throw new Exception("Not enough credits to process the file. Please add more pages to your application balance.");
            }
            else
            {
                throw new Exception("Error while processing the task");
            }
            setProgress(100);
            return(result);
        }
Exemple #3
0
        public OcrSdkTask GetTaskStatus(TaskId task)
        {
            string url = String.Format("{0}getTaskStatus?taskId={1}", ServerUrl,
                                       Uri.EscapeDataString(task.ToString()));

            WebRequest request    = createGetRequest(url);
            XDocument  response   = performRequest(request);
            OcrSdkTask serverTask = ServerXml.GetTaskStatus(response);

            return(serverTask);
        }
Exemple #4
0
        public static OcrSdkTask[] GetAllTasks(XDocument xml)
        {
            List <OcrSdkTask> result    = new List <OcrSdkTask>();
            XElement          xResponse = xml.Root;

            foreach (XElement xTask in xResponse.Elements("task"))
            {
                OcrSdkTask task = getTaskInfo(xTask);
                result.Add(task);
            }

            return(result.ToArray());
        }
 private OcrSdkTask waitForTask(OcrSdkTask task)
 {
     Console.WriteLine(String.Format("Task status: {0}", task.Status));
     while (task.IsTaskActive())
     {
         // Note: it's recommended that your application waits
         // at least 2 seconds before making the first getTaskStatus request
         // and also between such requests for the same task.
         // Making requests more often will not improve your application performance.
         // Note: if your application queues several files and waits for them
         // it's recommended that you use listFinishedTasks instead (which is described
         // at https://ocrsdk.com/documentation/apireference/listFinishedTasks/).
         System.Threading.Thread.Sleep(5000);
         task = restClient.GetTaskStatus(task.Id);
         Console.WriteLine(String.Format("Task status: {0}", task.Status));
     }
     return(task);
 }
Exemple #6
0
        /// <summary>
        /// Upload image of a multipage document to server.
        /// </summary>
        /// <param name="filePath">Path to an image to process</param>
        /// <param name="taskToAddFile">Id of multipage document. If null, a new document is created</param>
        /// <returns>Id of document to which image was added</returns>
        public OcrSdkTask UploadAndAddFileToTask(string filePath, TaskId taskToAddFile)
        {
            string url = String.Format("{0}submitImage", ServerUrl);

            if (taskToAddFile != null)
            {
                url = url + "?taskId=" + Uri.EscapeDataString(taskToAddFile.ToString());
            }

            // Build post request
            WebRequest request = createPostRequest(url);

            writeFileToRequest(filePath, request);

            XDocument  response = performRequest(request);
            OcrSdkTask task     = ServerXml.GetTaskStatus(response);

            return(task);
        }
Exemple #7
0
        /// <summary>
        /// Get task data from xml node "task"
        /// </summary>
        private static OcrSdkTask getTaskInfo(XElement xTask)
        {
            TaskId     id     = new TaskId(xTask.Attribute("id").Value);
            TaskStatus status = statusFromString(xTask.Attribute("status").Value);

            OcrSdkTask task = new OcrSdkTask();

            task.Id     = id;
            task.Status = status;

            XAttribute xRegistrationTime = xTask.Attribute("registrationTime");

            if (xRegistrationTime != null)
            {
                DateTime time;
                if (DateTime.TryParse(xRegistrationTime.Value, out time))
                {
                    task.RegistrationTime = time;
                }
            }

            XAttribute xStatusChangeTime = xTask.Attribute("statusChangeTime");

            if (xStatusChangeTime != null)
            {
                DateTime time;
                if (DateTime.TryParse(xStatusChangeTime.Value, out time))
                {
                    task.StatusChangeTime = time;
                }
            }

            XAttribute xFilesCount = xTask.Attribute("filesCount");

            if (xFilesCount != null)
            {
                int filesCount;
                if (Int32.TryParse(xFilesCount.Value, out filesCount))
                {
                    task.FilesCount = filesCount;
                }
            }

            XAttribute xCredits = xTask.Attribute("credits");

            if (xCredits != null)
            {
                int credits;
                if (Int32.TryParse(xCredits.Value, out credits))
                {
                    task.Credits = credits;
                }
            }

            XAttribute xDescription = xTask.Attribute("description");

            if (xDescription != null)
            {
                task.Description = xDescription.Value;
            }

            XAttribute xResultUrl = xTask.Attribute("resultUrl");

            if (xResultUrl != null)
            {
                task.DownloadUrls = new List <string> {
                    xResultUrl.Value
                };
                for (int i = 2; i < 10; i++)
                {
                    XAttribute xResultUrlI = xTask.Attribute("resultUrl" + i);
                    if (xResultUrlI != null)
                    {
                        task.DownloadUrls.Add(xResultUrlI.Value);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            XAttribute xError = xTask.Attribute("error");

            if (xError != null)
            {
                task.Error = xError.Value;
            }

            return(task);
        }