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();
        }
Beispiel #2
0
        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();
            }
        }