private static void CreateOCRQueueItem(Guid jobID, string blobName, string emailAddress) { var message = new OCRQueueMessage(jobID, blobName, emailAddress); var wrappedMessage = new CloudQueueMessage(message.ToString()); AzureQueues.OCRQueue.AddMessage(wrappedMessage); }
private void ProcessOCRQueueMessage(CloudQueueMessage queueMessage) { var messageContent = queueMessage.AsString; Trace.TraceInformation("Processing OCR queue message: " + messageContent); OCRQueueMessage ocrMessage = null; Exception exception = null; try { ocrMessage = OCRQueueMessage.Parse(messageContent); string imageFileName = SaveImageBlobToLocalFile(ocrMessage.ImageBlobName); string ocrTextFileName = PerformOCROnImageFile(imageFileName); string ocrBlobName = new FileInfo(ocrTextFileName).Name; CloudBlockBlob textBlob = StoreRecognizedTextAsBlob(ocrTextFileName, ocrBlobName); CreateEmailTask(ocrMessage.JobID, textBlob.Name, ocrMessage.RecipientEmail); DeleteInputImage(ocrMessage.ImageBlobName); DeleteTemporaryFiles(imageFileName, ocrTextFileName); } catch (Exception ex) { Trace.TraceError("An error occurred while processing OCR message. Details: " + ex); exception = ex; if (ocrMessage == null) { Trace.TraceError("Invalid message format. Deleting."); AzureQueues.OCRQueue.DeleteMessage(queueMessage); return; } } try { var job = AzureTables.OCRJobRepository.GetOCRJob(ocrMessage.JobID, ocrMessage.RecipientEmail); if (exception == null) { job.IsCompleted = true; job.ErrorMessage = null; AzureTables.OCRJobRepository.UpdateOCRJob(job); Trace.TraceInformation("Message (JobID = {0}) successfully processed, deleting.", ocrMessage.JobID); AzureQueues.OCRQueue.DeleteMessage(queueMessage); } else { job.IsCompleted = true; job.ErrorMessage = exception.ToString(); AzureTables.OCRJobRepository.UpdateOCRJob(job); } } catch (Exception ex) { Trace.TraceError("Failed to update job status: " + ex); } }
private static void StartOCR(ReceiptQueueMessage receiptQueueItem, ICollector <string> receiptOCRQueue) { // add message to OCR queue var OCRCallbackKey = ConfigurationManager.AppSettings["OCRCallbackKey"]; var baseCallbackAddress = ConfigurationManager.AppSettings["BaseCallbackAddress"]; string imageUrl = string.Empty; if (TryGetBlobLink(receiptQueueItem, out imageUrl)) { var message = new OCRQueueMessage() { ItemId = receiptQueueItem.ExpenseId, ItemType = "receipt", ImageUrl = imageUrl, Callback = $"{baseCallbackAddress}/ocrCallback?code={OCRCallbackKey}" }; receiptOCRQueue.Add(JsonConvert.SerializeObject(message)); } }
public async static Task Run([QueueTrigger("ocrqueue", Connection = "AzureWebJobsStorage")] OCRQueueMessage myQueueItem, int dequeueCount, TraceWriter log) { log.Info($"C# Queue trigger function processed: {myQueueItem}"); OCRResult res = await MakeOCRRequest(myQueueItem.ItemId, myQueueItem.ImageUrl, dequeueCount, log); // perform callback using (var client = new HttpClient()) { var content = new StringContent(JsonConvert.SerializeObject(res), Encoding.UTF8, "application/json"); log.Info($"callback: {myQueueItem.Callback}"); log.Info($"image: {myQueueItem.ImageUrl}"); var result = await client.PostAsync(myQueueItem.Callback, content); log.Info($"result: {result.StatusCode}"); } }