From 2ba1f47010cd49738113d281057269f81204f467 Mon Sep 17 00:00:00 2001 From: drastiq Date: Sat, 20 Jun 2020 14:00:42 +0200 Subject: [PATCH] Update msg pack --- squirrowse.client/ConnectionManager.cs | 2 + squirrowse.client/squirrowse.client.csproj | 5 +- squirrowse.core/squirrowse.core.csproj | 3 + squirrowse.db/squirrowse.db.csproj | 1 + squirrowse.web/Data/Detection.cs | 6 +- squirrowse.web/Data/VideoQ.cs | 2 +- squirrowse.web/Pages/Client.razor | 130 +++++++++--------- squirrowse.web/Properties/launchSettings.json | 4 +- squirrowse.web/Startup.cs | 4 +- squirrowse.web/db-log.db | Bin 4153344 -> 6504448 bytes squirrowse.web/squirrowse.web.csproj | 9 ++ 11 files changed, 90 insertions(+), 76 deletions(-) diff --git a/squirrowse.client/ConnectionManager.cs b/squirrowse.client/ConnectionManager.cs index 3117012..04ddd7f 100644 --- a/squirrowse.client/ConnectionManager.cs +++ b/squirrowse.client/ConnectionManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Client; +using Microsoft.Extensions.DependencyInjection; namespace squirrowse.client { @@ -16,6 +17,7 @@ namespace squirrowse.client _connection = new HubConnectionBuilder() .WithUrl($"{url}:{port}/hub") .WithAutomaticReconnect() + .AddMessagePackProtocol() .Build(); } diff --git a/squirrowse.client/squirrowse.client.csproj b/squirrowse.client/squirrowse.client.csproj index f623ecc..677cb2a 100644 --- a/squirrowse.client/squirrowse.client.csproj +++ b/squirrowse.client/squirrowse.client.csproj @@ -6,8 +6,9 @@ - - + + + diff --git a/squirrowse.core/squirrowse.core.csproj b/squirrowse.core/squirrowse.core.csproj index ab3c922..d826af5 100644 --- a/squirrowse.core/squirrowse.core.csproj +++ b/squirrowse.core/squirrowse.core.csproj @@ -6,6 +6,9 @@ + + + diff --git a/squirrowse.db/squirrowse.db.csproj b/squirrowse.db/squirrowse.db.csproj index 8ffcb57..6b9df67 100644 --- a/squirrowse.db/squirrowse.db.csproj +++ b/squirrowse.db/squirrowse.db.csproj @@ -7,6 +7,7 @@ + diff --git a/squirrowse.web/Data/Detection.cs b/squirrowse.web/Data/Detection.cs index 7033b97..310406d 100644 --- a/squirrowse.web/Data/Detection.cs +++ b/squirrowse.web/Data/Detection.cs @@ -21,13 +21,13 @@ namespace squirrowse.web.Data public class Detection : IDetection { private readonly CascadeClassifier CascadeFace = new CascadeClassifier( - @".\StaticFiles\haarcascade_frontalface_alt.xml"); + @"./StaticFiles/haarcascade_frontalface_alt.xml"); private readonly CascadeClassifier CascadeLowerBody = new CascadeClassifier( - @".\StaticFiles\haarcascade_lowerbody.xml"); + @"./StaticFiles/haarcascade_lowerbody.xml"); private readonly CascadeClassifier CascadeUpperBody = new CascadeClassifier( - @".\StaticFiles\haarcascade_upperbody.xml"); + @"./StaticFiles/haarcascade_upperbody.xml"); public Mat DetectTypes(Mat frame, Filters filter) { diff --git a/squirrowse.web/Data/VideoQ.cs b/squirrowse.web/Data/VideoQ.cs index c7229d0..410d5b7 100644 --- a/squirrowse.web/Data/VideoQ.cs +++ b/squirrowse.web/Data/VideoQ.cs @@ -9,7 +9,7 @@ namespace squirrowse.web.Data { public class VideoQ { - public ConcurrentFixedSizeQueue _framebuffer = new ConcurrentFixedSizeQueue(255); + public ConcurrentFixedSizeQueue _framebuffer = new ConcurrentFixedSizeQueue(33); public Mat getFrame() { diff --git a/squirrowse.web/Pages/Client.razor b/squirrowse.web/Pages/Client.razor index b51d847..e838926 100644 --- a/squirrowse.web/Pages/Client.razor +++ b/squirrowse.web/Pages/Client.razor @@ -8,9 +8,9 @@

live

- + - +
@inject SaveVideo save @inject IAzureCV azureCv @inject VideoQ Video +@inject Detection detect -@code { - // private readonly Filters filter = new Filters(false, false, false); - private string _imgSrc; - private string _tempcogni; - private byte[] buffer; - private bool fetchDataFromAzure = true; +@code { private readonly Filters filter = new Filters(false, false, false); + private string _imgSrc; + private string _tempcogni; + private byte[] buffer; + private bool fetchDataFromAzure = true; - private readonly Frame Frametest = new Frame(); + private readonly Frame Frametest = new Frame(); - private Mat tempory = new Mat(); + private Mat tempory = new Mat(); - public Action Update(Action set) - { - return v => - { - set(v); - InvokeAsync(StateHasChanged); - }; - } - - protected override async Task OnInitializedAsync() - { - using var temp = new Mat(480, 640, MatType.CV_8UC3, new Scalar(0, 0, 100)); - - Cv2.PutText(temp, "No clients".ToUpper(), - new Point(240, 320), - HersheyFonts.HersheyComplex, 0.9f, Scalar.Yellow); - var base64T = Convert.ToBase64String(temp.ToBytes()); - - - while (true) - { - - try + public Action Update(Action set) { - using var frame = Video.getFrame(); - tempory = Frametest.CopyMat(frame); - // var face = detect.DetectTypes(frame, filter); - buffer = frame.ToBytes(); - var base64 = Convert.ToBase64String(buffer); - _imgSrc = $"data:image/gif;base64,{base64}"; - Cv2.WaitKey(1); - await Task.Delay(1000 / 33); - - StateHasChanged(); + return v => + { + set(v); + InvokeAsync(StateHasChanged); + }; } - catch (Exception e) + + protected override async Task OnInitializedAsync() { - _imgSrc = $"data:image/gif;base64,{base64T}"; - await Task.Delay(1000 / 33); + using var temp = new Mat(480, 640, MatType.CV_8UC3, new Scalar(0, 0, 100)); + + Cv2.PutText(temp, "No clients".ToUpper(), + new Point(240, 320), + HersheyFonts.HersheyComplex, 0.9f, Scalar.Yellow); + var base64T = Convert.ToBase64String(temp.ToBytes()); + + + while (true) + { + + try + { + using var frame = Video.getFrame(); + tempory = Frametest.CopyMat(frame); + var face = detect.DetectTypes(frame, filter); + buffer = face.ToBytes(); + var base64 = Convert.ToBase64String(buffer); + _imgSrc = $"data:image/gif;base64,{base64}"; + Cv2.WaitKey(1); + await Task.Delay(1000 / 33); + + StateHasChanged(); + } + catch (Exception e) + { + _imgSrc = $"data:image/gif;base64,{base64T}"; + await Task.Delay(1000 / 33); + + StateHasChanged(); + } + } - StateHasChanged(); } - } - - } - private async Task GetDataFromAzure() - { - while (fetchDataFromAzure) - { - var azrespons = await azureCv.GetObjects(tempory); - var azureFrame = azureCv.DrawResults(tempory, azrespons); - var b_tempcogni = Convert.ToBase64String(azureFrame.Result.ToBytes()); - _tempcogni = $"data:image/gif;base64,{b_tempcogni}"; - await Task.Delay(TimeSpan.FromSeconds(5)); - StateHasChanged(); - } - } - -} \ No newline at end of file + private async Task GetDataFromAzure() + { + while (fetchDataFromAzure) + { + var azrespons = await azureCv.GetObjects(tempory); + var azureFrame = azureCv.DrawResults(tempory, azrespons); + var b_tempcogni = Convert.ToBase64String(azureFrame.Result.ToBytes()); + _tempcogni = $"data:image/gif;base64,{b_tempcogni}"; + await Task.Delay(TimeSpan.FromSeconds(5)); + StateHasChanged(); + } + } } \ No newline at end of file diff --git a/squirrowse.web/Properties/launchSettings.json b/squirrowse.web/Properties/launchSettings.json index 98dd5eb..2d12a77 100644 --- a/squirrowse.web/Properties/launchSettings.json +++ b/squirrowse.web/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://10.230.115.112:80", + "applicationUrl": "http://192.168.0.13:8000", "sslPort": 443 } }, @@ -22,7 +22,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://10.230.115.112:80" + "applicationUrl": "http://192.168.0.13:8000" }, "Docker": { "commandName": "Docker", diff --git a/squirrowse.web/Startup.cs b/squirrowse.web/Startup.cs index 94ff952..9347b86 100644 --- a/squirrowse.web/Startup.cs +++ b/squirrowse.web/Startup.cs @@ -32,13 +32,13 @@ namespace squirrowse.web }); services.AddSingleton(); - //services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSignalR(x => x.MaximumReceiveMessageSize = ((int)(int.MaxValue / 2))); + services.AddSignalR(x => x.MaximumReceiveMessageSize = ((int)(int.MaxValue / 2))).AddMessagePackProtocol(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/squirrowse.web/db-log.db b/squirrowse.web/db-log.db index 8d63b3344cc51ef93fe882a6cafcceffc3072131..7972c1b4368a994cef41409fcdd11530a62ad3dd 100644 GIT binary patch delta 293398 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 Ich}_qf9^*RqyPW_ delta 136 zcmV~$$58?S006)_L9&tsk(`qW$q2SWDfiefU04W>F~e>cULxW37K8#1BBCC}#3dx9 zq-8vLmX(uNP*hU(qN3_m&6~Q0rk1vjuAaVup^>qPshPQVA3lBgw(w(VWo=_?XYb(G J(dqy1d + + + @@ -24,6 +27,12 @@ Always + + Always + + + Always +