Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Microsoft.Azure.WebJobs;
  5. using Microsoft.Extensions.Logging;
  6. using Microsoft.WindowsAzure.Storage.Queue;
  7. using Newtonsoft.Json;
  8. using ObjectDetection.Models;
  9. using ObjectDetection.Services;
  10.  
  11. namespace ObjectDetection.Functions
  12. {
  13. // Queue Trigger for processing initial upload requests, forwarding to be Resized or Infered
  14. public class ImageQueueTrigger: BaseFunc
  15. {
  16. private readonly IInferenceClient _inferenceClient;
  17. private readonly IAzureStorageClient _azureStorageClient;
  18. private readonly IAuthorizationHandler _authHandler;
  19. public ImageQueueTrigger(
  20. IInferenceClient inferenceClient,
  21. IAzureStorageClient azureStorageClient,
  22. ILogDispatcher logger,
  23. IAuthorizationHandler authHandler): base(logger, "ImageQueueTriggerFunc")
  24. {
  25. _inferenceClient = inferenceClient;
  26. _azureStorageClient = azureStorageClient;
  27. _authHandler = authHandler;
  28. }
  29.  
  30. [FunctionName("ImageQueueTrigger")]
  31. public async Task Run([QueueTrigger("image-batch-items", Connection = "AzureWebJobsStorage")]InferenceQueueMessage inferenceQueueMessage)
  32. {
  33. try
  34. {
  35. var jwt = await _authHandler.GetClientCredentialsToken(Logger.Scope());
  36. Logger.LogInformation($"Fetched Service AuthToken{jwt}");
  37. var resizeFiles = inferenceQueueMessage.ImageMetas.Where(_ => _.Resize).ToList();
  38. if (resizeFiles.Any())
  39. {
  40. var resizeQueueMessage = new InferenceBackendQueueMessage(inferenceQueueMessage)
  41. {
  42. Jwt = jwt,
  43. ActivityId = ActivityId,
  44. ImageMetas = resizeFiles,
  45. };
  46. var seriResizeQueueMessage = JsonConvert.SerializeObject(resizeQueueMessage);
  47. await _azureStorageClient.AddQueueMessage("image-resize-items",
  48. new CloudQueueMessage(seriResizeQueueMessage));
  49. }
  50.  
  51. var readyFiles = inferenceQueueMessage.ImageMetas.Where(_ => !_.Resize).ToList();
  52. if (readyFiles.Any())
  53. {
  54.  
  55. Logger.LogInformation("Fetching Blob Uris With Sas Token");
  56. var sasUriTasks = new Task<string>[readyFiles.Count];
  57.  
  58. foreach ((int index, var fileMeta) in readyFiles.Enumerate())
  59. sasUriTasks[index] = _azureStorageClient.GetBlobUriWithSasToken(fileMeta.FileId);
  60.  
  61. Task.WaitAll(sasUriTasks);
  62. var sasUris = new string[sasUriTasks.Length];
  63.  
  64. foreach ((int index, var sasUriTask) in sasUriTasks.Enumerate())
  65. sasUris[index] = await sasUriTask;
  66.  
  67. var inferenceBackendQueueMessage = new InferenceBackendQueueMessage(inferenceQueueMessage)
  68. {
  69. Jwt = jwt,
  70. ActivityId = ActivityId,
  71. BlobUris = sasUris,
  72. ImageMetas = readyFiles,
  73. };
  74. var modelValid =
  75. CvModelDefs.Models.TryGetValue(inferenceBackendQueueMessage.ModelName, out CvModelType type);
  76. if (modelValid)
  77. {
  78. if (type.Value == CvModelType.Classification.Value)
  79. {
  80. Logger.LogInformation("Queueing Classification Requests For Python Function");
  81. if (await _inferenceClient.RequestClassificationResults(inferenceBackendQueueMessage))
  82. Logger.LogInformation("Queued Classification Request");
  83. else
  84. throw new Exception("Error Queueing Classicifation Request");
  85. }
  86. if (type.Value == CvModelType.InstanceSegmentation.Value)
  87. {
  88.  
  89. Logger.LogInformation("Queueing Segmentation Requests For Python Function");
  90. if (await _inferenceClient.RequestSegmentationResults(inferenceBackendQueueMessage))
  91. Logger.LogInformation("Queued Segmentation Request");
  92. else
  93. throw new Exception("Error Queueing Segmentation Request");
  94. }
  95. }
  96. else
  97. {
  98. throw new Exception("Error getting Model Type");
  99. }
  100. }
  101. }
  102. catch (Exception e)
  103. {
  104. Logger.LogError($"Error Processing Blob or Queueing Inference Request: {e.ToString()}");
  105. }
  106. await Logger.DispatchLogs();
  107. }
  108. }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement