private async void RunProcess(DetectFacesArgs args)
        {
            if (args.MediaItem == null)
            {
                return;
            }

            try
            {
                Log.Info("Image recognition starting...", this);

                IFaceDetection faceDetection = new AzureFaceDetection();

                var mediaStream = args.Stream ?? args.MediaItem.GetMediaStream();

                if (mediaStream == null)
                {
                    Log.Info("Weird....  media item media stream is empty...", this);
                    return;
                }

                var memoryStream = new MemoryStream();

                await mediaStream.CopyToAsync(memoryStream);

                var result = await faceDetection.DetectFacesAsync(memoryStream);

                using (new SecurityDisabler())
                {
                    args.MediaItem.InnerItem.Editing.BeginEdit();
                    args.MediaItem.InnerItem["FaceMetadata"] = JsonConvert.SerializeObject(result);
                    args.MediaItem.InnerItem.Editing.EndEdit(true, false);
                }

                PublishManager.PublishItem(args.MediaItem, new[] { Database.GetDatabase("web"), },
                                           new[] { Language.Current }, false, false);

                var index = ContentSearchManager.GetIndex("face_master_index");

                index.Refresh(new SitecoreIndexableItem(args.MediaItem), IndexingOptions.Default);

                index = ContentSearchManager.GetIndex("face_web_index");

                index.Refresh(new SitecoreIndexableItem(args.MediaItem), IndexingOptions.Default);

                Log.Info("Image recognition completed...", this);
            }
            catch (Exception e)
            {
                Log.Info("Something went wrong..." + e, this);
            }
        }
 public void Process(DetectFacesArgs args)
 {
     Task.Run(() => RunProcess(args));
 }