public async Task SendMessagesToEventHub(CustomFaceEmojiModel customFaceEmojiModel) { try { var connectionStringBuilder = new EventHubsConnectionStringBuilder(EhConnectionString) { EntityPath = EhEntityPath }; eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString()); var data = JsonConvert.SerializeObject(customFaceEmojiModel); await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(data))); //send msg to event hub await eventHubClient.CloseAsync(); } catch (Exception ex) { ShowErrorHelper.ShowDialog(ex.Message); } await eventHubClient.CloseAsync(); }
private async void ProcessCurrentVideoFrame(ThreadPoolTimer timer) { // If state is not Streaming, return. if (_state != StreamingState.Streaming) { return; } // If there has a process still running, return. if (!_semaphoreSlim.Wait(0)) { return; } const BitmapPixelFormat PixelFormat = BitmapPixelFormat.Nv12; try { using (VideoFrame currentFrame = new VideoFrame(PixelFormat, (int)_videoProperties.Width, (int)_videoProperties.Height)) { // Get current preview frame from _mediaCaputre and copy into currentFrame. await _mediaCapture.GetPreviewFrameAsync(currentFrame); // Detected face by _faceTracker. IList <DetectedFace> builtinFaces = await _faceTracker.ProcessNextFrameAsync(currentFrame); SoftwareBitmap tempBitmap = SoftwareBitmap.Convert(currentFrame.SoftwareBitmap, BitmapPixelFormat.Bgra8); if (builtinFaces.Count != 0) { var frameSize = new Size(currentFrame.SoftwareBitmap.PixelWidth, currentFrame.SoftwareBitmap.PixelHeight); //await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => //{ // ShowResult(frameSize, builtinFaces); //}); // Get picture from videoframe. IRandomAccessStream stream = new InMemoryRandomAccessStream(); BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); encoder.SetSoftwareBitmap(tempBitmap); await encoder.FlushAsync(); CustomFaceModel[] customFaces = await _faceApiHelper.GetDetectEmojiAsync(stream.AsStream()); CustomFaceEmojiModel customFaceEmojiModel = new CustomFaceEmojiModel(); EmojiNum emojiNum = new EmojiNum(); float upperleft = 0, upperrignt = 0, buttomleft = 0, buttomright = 0, averageX = 0, averageY = 0; foreach (var eachemoliModel in customFaces) { averageX += eachemoliModel.Left; averageY += eachemoliModel.Top; } averageX /= customFaces.Length; averageY /= customFaces.Length; for (int i = 0; i < customFaces.Length; i++) { emojiNum.Emoji = -1 * (customFaces[i].Anger + customFaces[i].Contempt + customFaces[i].Disgust + customFaces[i].Fear + customFaces[i].Sadness) + customFaces[i].Happiness + customFaces[i].Neutral + customFaces[i].Suprise; EmojiNum model = new EmojiNum { Emoji = -1 * (customFaces[i].Anger + customFaces[i].Contempt + customFaces[i].Disgust + customFaces[i].Fear + customFaces[i].Sadness) + customFaces[i].Happiness + customFaces[i].Neutral + customFaces[i].Suprise }; //customFaceEmojiModel.Emojis[i] = model; //customFaceEmojiModel.Emojis[i].Emoji = -1 * (customFaces[i].Anger + customFaces[i].Contempt + customFaces[i].Disgust + customFaces[i].Fear + customFaces[i].Sadness) + customFaces[i].Happiness + customFaces[i].Neutral + customFaces[i].Suprise; customFaceEmojiModel.EmojiSum += model.Emoji; //customFaceEmojiModel.EmojiSum += customFaceEmojiModel.Emojis[i].Emoji; if (customFaces[i].Left <averageX && customFaces[i].Top> averageY) { upperleft += emojiNum.Emoji; } else if (customFaces[i].Left < averageX && customFaces[i].Top < averageY) { buttomleft += emojiNum.Emoji; } else if (customFaces[i].Left > averageX && customFaces[i].Top > averageY) { upperrignt += emojiNum.Emoji; } else if (customFaces[i].Left > averageX && customFaces[i].Top < averageY) { buttomright += emojiNum.Emoji; } } customFaceEmojiModel.UpperLeft /= upperleft; customFaceEmojiModel.ButtomLeft /= buttomleft; customFaceEmojiModel.UpperRight /= upperrignt; customFaceEmojiModel.ButtoRight /= buttomright; //CustomFaceEmojiModel customFaceEmojiModel = await _faceApiHelper.GetEmojiResult(customFaces); await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => ShowFromFaceApi(frameSize, customFaces, emojiNum)); await _eventHubHelper.SendMessagesToEventHub(customFaceEmojiModel); } else { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => PaintingCanvas.Children.Clear()); } } } catch (Microsoft.ProjectOxford.Face.FaceAPIException faceEx) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => ShowErrorHelper.ShowDialog(faceEx.ErrorMessage, faceEx.ErrorCode)); } catch (Exception ex) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => ShowErrorHelper.ShowDialog(ex.Message)); } finally { _semaphoreSlim.Release(); } }