/// <summary> /// Performs OMR over single image /// </summary> /// <param name="imageName">Recognized image name</param> /// <param name="imageData">The image data</param> /// <param name="templateId">The template id</param> /// <param name="wasUploaded">Indicates if image was already uploaded on cloud</param> /// <param name="additionalParams">The additional parameters</param> /// <returns>Recognition results</returns> public static ImageRecognitionResult RecognizeImage(string imageName, byte[] imageData, string templateId, bool wasUploaded, string additionalParams) { OMRResponse response = RunOmrTask(OmrFunctions.RecognizeImage, imageName, imageData, templateId, wasUploaded, true, additionalParams); OmrResponseContent responseResult = response.Payload.Result; if (responseResult.Info.SuccessfulTasksCount < 1 || responseResult.Info.Details.RecognitionStatistics[0].TaskResult != "Pass") { StringBuilder builder = new StringBuilder(); builder.AppendLine("Error recognizing image " + "\"" + imageName + "\"."); foreach (string message in responseResult.Info.Details.RecognitionStatistics[0].TaskMessages) { builder.AppendLine(message); } throw new Exception(builder.ToString()); } ImageRecognitionResult recognitionResult = new ImageRecognitionResult(); foreach (Com.Aspose.Omr.Model.FileInfo file in responseResult.ResponseFiles) { if (file.Name.Contains(".dat")) { byte[] answersBytes = responseResult.ResponseFiles.First(x => x.Name.Contains(".dat")).Data; recognitionResult.RecognizedAnswers = Encoding.UTF8.GetString(answersBytes); } else if (file.Name.Contains(".jpg")) { recognitionResult.ClippedAreas.Add(new KeyValuePair <string, byte[]>(file.Name, file.Data)); } } return(recognitionResult); }
/// <summary> /// Calls Generate template function and processes result /// </summary> /// <param name="descriptionFileName">Name of the description file</param> /// <param name="descriptionData">Template description data in bytes</param> /// <param name="imagesPath">Cloud storage folder where images are located</param> /// <param name="additionalParams">Internal parameters</param> /// <returns>Generated content with template and image</returns> public static TemplateGenerationContent GenerateTemplate(string descriptionFileName, byte[] descriptionData, string imagesPath, string additionalParams) { imagesPath = @"{ ""ExtraStoragePath"":""" + imagesPath + @"""}"; OMRResponse response = RunOmrTask(OmrFunctions.GenerateTemplate, descriptionFileName, descriptionData, imagesPath, false, false, additionalParams); OmrResponseContent responseResult = response.Payload.Result; CheckTaskResult(response.Payload.Result); byte[] template = responseResult.ResponseFiles.First(x => x.Name.Contains(".omr")).Data; byte[] imageFile = responseResult.ResponseFiles.First(x => x.Name.Contains(".png")).Data; TemplateViewModel templateViewModel = TemplateSerializer.JsonToTemplate(Encoding.UTF8.GetString(template)); templateViewModel.ImageFileFormat = ".png"; TemplateGenerationContent generationContent = new TemplateGenerationContent(); generationContent.ImageData = imageFile; generationContent.Template = templateViewModel; return(generationContent); }
/// <summary> /// Check task result in response /// </summary> /// <param name="responseResult">Response to check</param> private static void CheckTaskResult(OmrResponseContent responseResult) { if (responseResult.Info.SuccessfulTasksCount < 1 || responseResult.Info.Details.TaskResult != "Pass") { StringBuilder builder = new StringBuilder(); foreach (string message in responseResult.Info.Details.TaskMessages) { builder.AppendLine(message); } throw new Exception(builder.ToString()); } }
/// <summary> /// Performs template finalization /// </summary> /// <param name="templateName">The template file name</param> /// <param name="templateData">The template data</param> /// <param name="templateId">The template id</param> /// <param name="additionalParams">The additional parameters</param> /// <returns>Finalization data containing warnings</returns> public static FinalizationData FinalizeTemplate(string templateName, byte[] templateData, string templateId, string additionalParams) { OMRResponse response = RunOmrTask(OmrFunctions.FinalizeTemplate, templateName, templateData, templateId, false, false, additionalParams); OmrResponseContent responseResult = response.Payload.Result; CheckTaskResult(response.Payload.Result); FinalizationData data = new FinalizationData(); data.Answers = Encoding.UTF8.GetString(responseResult.ResponseFiles[0].Data); data.Warnings = responseResult.Info.Details.TaskMessages.ToArray(); return(data); }
/// <summary> /// Performs template correction /// </summary> /// <param name="imageName">The name of the template image</param> /// <param name="imageData">The template image data</param> /// <param name="templateData">The template data</param> /// <param name="wasUploaded">Indicates if image was already uploaded on cloud</param> /// <param name="additionalParams">The additional parameters</param> /// <returns>Corrected template</returns> public static TemplateViewModel CorrectTemplate(string imageName, byte[] imageData, string templateData, bool wasUploaded, string additionalParams) { OMRResponse response = RunOmrTask("CorrectTemplate", imageName, imageData, templateData, wasUploaded, false, additionalParams); OmrResponseContent responseResult = response.Payload.Result; CheckTaskResult(response.Payload.Result); byte[] correctedTemplateData = responseResult.ResponseFiles .First(x => x.Name.Equals("corrected_template.dat")) .Data; TemplateViewModel templateViewModel = TemplateSerializer.JsonToTemplate(Encoding.UTF8.GetString(correctedTemplateData)); templateViewModel.TemplateId = responseResult.TemplateId; return(templateViewModel); }
/// <summary> /// Performs template correction /// </summary> /// <param name="imageName">The name of the template image</param> /// <param name="imageData">The template image data</param> /// <param name="templateData">The template data</param> /// <param name="wasUploaded">Indicates if image was already uploaded on cloud</param> /// <param name="additionalParams">The additional parameters</param> /// <returns>Corrected template</returns> public static TemplateViewModel CorrectTemplate(string imageName, byte[] imageData, string templateData, bool wasUploaded, string additionalParams) { string packedTemplate = PackTemplate(imageName, templateData); OmrResponse response = RunOmrTask(OmrFunctions.CorrectTemplate, imageName, imageData, packedTemplate, wasUploaded, false, additionalParams); OmrResponseContent responseResult = response.Payload.Result; CheckTaskResult(response.Payload.Result); byte[] correctedTemplateData = responseResult.ResponseFiles .First(x => x.Name.Contains(".omrcr")) .Data; TemplateViewModel templateViewModel = TemplateSerializer.JsonToTemplate(Encoding.UTF8.GetString(correctedTemplateData)); templateViewModel.TemplateId = responseResult.TemplateId; return(templateViewModel); }
/// <summary> /// Performs OMR over single image /// </summary> /// <param name="imageName">Recognized image name</param> /// <param name="imageData">The image data</param> /// <param name="templateId">The template id</param> /// <param name="wasUploaded">Indicates if image was already uploaded on cloud</param> /// <param name="additionalParams">The additional parameters</param> /// <returns>Recognition results</returns> public static string RecognizeImage(string imageName, byte[] imageData, string templateId, bool wasUploaded, string additionalParams) { OMRResponse response = RunOmrTask("RecognizeImage", imageName, imageData, templateId, wasUploaded, true, additionalParams); OmrResponseContent responseResult = response.Payload.Result; if (responseResult.Info.SuccessfulTasksCount < 1 || responseResult.Info.Details.RecognitionStatistics[0].TaskResult != "Pass") { StringBuilder builder = new StringBuilder(); foreach (string message in responseResult.Info.Details.RecognitionStatistics[0].TaskMessages) { builder.AppendLine(message); } throw new Exception(builder.ToString()); } string result = Encoding.UTF8.GetString(response.Payload.Result.ResponseFiles[0].Data); return(result); }