コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: WorkerRole.cs プロジェクト: nomada2/azure-cloud-ocr
        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);
            }
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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}");
            }
        }