iniciado weed worker
This commit is contained in:
parent
4bb6697c9e
commit
95cfdfe450
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -536,6 +536,7 @@
|
||||||
<Compile Include="Models\Operadores\ManagerWorkerModel.cs" />
|
<Compile Include="Models\Operadores\ManagerWorkerModel.cs" />
|
||||||
<Compile Include="Models\Operadores\OperadoresModels.cs" />
|
<Compile Include="Models\Operadores\OperadoresModels.cs" />
|
||||||
<Compile Include="Models\Operadores\VisualWorkerModel.cs" />
|
<Compile Include="Models\Operadores\VisualWorkerModel.cs" />
|
||||||
|
<Compile Include="Models\Operadores\WeedWorkerModel.cs" />
|
||||||
<Compile Include="Models\PerformanceModel.cs" />
|
<Compile Include="Models\PerformanceModel.cs" />
|
||||||
<Compile Include="Models\PIDModel.cs" />
|
<Compile Include="Models\PIDModel.cs" />
|
||||||
<Compile Include="Models\PZEMModel.cs" />
|
<Compile Include="Models\PZEMModel.cs" />
|
||||||
|
|
@ -586,6 +587,7 @@
|
||||||
<Compile Include="Services\Operadores\ManagerWorkerService.cs" />
|
<Compile Include="Services\Operadores\ManagerWorkerService.cs" />
|
||||||
<Compile Include="Services\Operadores\OperadoresService.cs" />
|
<Compile Include="Services\Operadores\OperadoresService.cs" />
|
||||||
<Compile Include="Services\Operadores\VisualWorkerService.cs" />
|
<Compile Include="Services\Operadores\VisualWorkerService.cs" />
|
||||||
|
<Compile Include="Services\Operadores\WeedWorkerService.cs" />
|
||||||
<Compile Include="Services\PythonService.cs" />
|
<Compile Include="Services\PythonService.cs" />
|
||||||
<Compile Include="Services\PZEMService.cs" />
|
<Compile Include="Services\PZEMService.cs" />
|
||||||
<Compile Include="Services\RedisService.cs" />
|
<Compile Include="Services\RedisService.cs" />
|
||||||
|
|
|
||||||
|
|
@ -266,10 +266,14 @@ namespace AgroBase.Forms.IHM
|
||||||
|
|
||||||
cmbCameraCaminho.Items.Clear();
|
cmbCameraCaminho.Items.Clear();
|
||||||
cmbCameraCaminho.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
|
cmbCameraCaminho.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
|
||||||
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id)?.Description ?? "";
|
var cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id);
|
||||||
if (cameraSelecionada != null)
|
if (cameraSelecionada != null)
|
||||||
{
|
{
|
||||||
cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.IndexOf(cameraSelecionada);
|
cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.IndexOf(cameraSelecionada.Description);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmbCameraCaminho.Text = CameraCaminho.Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -325,15 +329,15 @@ namespace AgroBase.Forms.IHM
|
||||||
CamerasSolo.Add(new OAKCameraModel());
|
CamerasSolo.Add(new OAKCameraModel());
|
||||||
}
|
}
|
||||||
|
|
||||||
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CamerasSolo[idx].Id)?.Description ?? "";
|
var cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CamerasSolo[idx].Id);
|
||||||
|
|
||||||
if (ListaCameras.Any(x => x.Id == cameraSelecionada))
|
if (cameraSelecionada != null)
|
||||||
{
|
{
|
||||||
cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada);
|
cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada.Description);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmbCamera.Text = cameraSelecionada;
|
cmbCamera.Text = CamerasSolo[idx].Id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ namespace AgroBase.Forms.IHM
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
ReqFrameSnr = true;
|
ReqFrameSnr = true;
|
||||||
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(VisualWorkerFrameType.Rgb);
|
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(CameraFrameType.Rgb);
|
||||||
pnlCameraCaminho.BackgroundImage?.Dispose();
|
pnlCameraCaminho.BackgroundImage?.Dispose();
|
||||||
try { pnlCameraCaminho.BackgroundImage = frame?.image(); } catch { }
|
try { pnlCameraCaminho.BackgroundImage = frame?.image(); } catch { }
|
||||||
lblUltimaLeituraCaminho.Text = $"Última Leitura Caminho: " + frame?.timestamp.ToString("HH:mm:ss");
|
lblUltimaLeituraCaminho.Text = $"Última Leitura Caminho: " + frame?.timestamp.ToString("HH:mm:ss");
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
this.lblMqtt = new System.Windows.Forms.Label();
|
this.lblMqtt = new System.Windows.Forms.Label();
|
||||||
this.lblD_Sen_sCOR_36V = new System.Windows.Forms.Label();
|
this.lblD_Sen_sCOR_36V = new System.Windows.Forms.Label();
|
||||||
this.lblD_Sen_sLRA = new System.Windows.Forms.Label();
|
this.lblD_Sen_sLRA = new System.Windows.Forms.Label();
|
||||||
this.lblD_Sen_sIMU = new System.Windows.Forms.Label();
|
this.lblD_Imu = new System.Windows.Forms.Label();
|
||||||
this.lblD_Mov_DT = new System.Windows.Forms.Label();
|
this.lblD_Mov_DT = new System.Windows.Forms.Label();
|
||||||
this.lblD_Dir_DF = new System.Windows.Forms.Label();
|
this.lblD_Dir_DF = new System.Windows.Forms.Label();
|
||||||
this.lblD_Dir_EF = new System.Windows.Forms.Label();
|
this.lblD_Dir_EF = new System.Windows.Forms.Label();
|
||||||
|
|
@ -45,7 +45,6 @@
|
||||||
this.lblD_Dir_ET = new System.Windows.Forms.Label();
|
this.lblD_Dir_ET = new System.Windows.Forms.Label();
|
||||||
this.lblD_Mov_ET = new System.Windows.Forms.Label();
|
this.lblD_Mov_ET = new System.Windows.Forms.Label();
|
||||||
this.lblD_Cam_0 = new System.Windows.Forms.Label();
|
this.lblD_Cam_0 = new System.Windows.Forms.Label();
|
||||||
this.lblD_Cam_1 = new System.Windows.Forms.Label();
|
|
||||||
this.lblD_Snr = new System.Windows.Forms.Label();
|
this.lblD_Snr = new System.Windows.Forms.Label();
|
||||||
this.lblDiagnosticos = new System.Windows.Forms.Label();
|
this.lblDiagnosticos = new System.Windows.Forms.Label();
|
||||||
this.lblOperacao = new System.Windows.Forms.Label();
|
this.lblOperacao = new System.Windows.Forms.Label();
|
||||||
|
|
@ -104,7 +103,7 @@
|
||||||
//
|
//
|
||||||
this.lblD_Atu.AutoSize = true;
|
this.lblD_Atu.AutoSize = true;
|
||||||
this.lblD_Atu.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.lblD_Atu.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.lblD_Atu.Location = new System.Drawing.Point(210, 547);
|
this.lblD_Atu.Location = new System.Drawing.Point(211, 483);
|
||||||
this.lblD_Atu.Name = "lblD_Atu";
|
this.lblD_Atu.Name = "lblD_Atu";
|
||||||
this.lblD_Atu.Size = new System.Drawing.Size(48, 24);
|
this.lblD_Atu.Size = new System.Drawing.Size(48, 24);
|
||||||
this.lblD_Atu.TabIndex = 4;
|
this.lblD_Atu.TabIndex = 4;
|
||||||
|
|
@ -163,24 +162,24 @@
|
||||||
this.lblD_Sen_sLRA.AutoSize = true;
|
this.lblD_Sen_sLRA.AutoSize = true;
|
||||||
this.lblD_Sen_sLRA.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
this.lblD_Sen_sLRA.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||||
this.lblD_Sen_sLRA.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.lblD_Sen_sLRA.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.lblD_Sen_sLRA.Location = new System.Drawing.Point(213, 417);
|
this.lblD_Sen_sLRA.Location = new System.Drawing.Point(213, 418);
|
||||||
this.lblD_Sen_sLRA.Name = "lblD_Sen_sLRA";
|
this.lblD_Sen_sLRA.Name = "lblD_Sen_sLRA";
|
||||||
this.lblD_Sen_sLRA.Size = new System.Drawing.Size(46, 24);
|
this.lblD_Sen_sLRA.Size = new System.Drawing.Size(46, 24);
|
||||||
this.lblD_Sen_sLRA.TabIndex = 15;
|
this.lblD_Sen_sLRA.TabIndex = 15;
|
||||||
this.lblD_Sen_sLRA.Text = "LRA";
|
this.lblD_Sen_sLRA.Text = "LRA";
|
||||||
this.lblD_Sen_sLRA.Click += new System.EventHandler(this.lblModulo_Click);
|
this.lblD_Sen_sLRA.Click += new System.EventHandler(this.lblModulo_Click);
|
||||||
//
|
//
|
||||||
// lblD_Sen_sIMU
|
// lblD_Imu
|
||||||
//
|
//
|
||||||
this.lblD_Sen_sIMU.AutoSize = true;
|
this.lblD_Imu.AutoSize = true;
|
||||||
this.lblD_Sen_sIMU.BackColor = System.Drawing.Color.Lavender;
|
this.lblD_Imu.BackColor = System.Drawing.Color.Lavender;
|
||||||
this.lblD_Sen_sIMU.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.lblD_Imu.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.lblD_Sen_sIMU.Location = new System.Drawing.Point(14, 547);
|
this.lblD_Imu.Location = new System.Drawing.Point(14, 547);
|
||||||
this.lblD_Sen_sIMU.Name = "lblD_Sen_sIMU";
|
this.lblD_Imu.Name = "lblD_Imu";
|
||||||
this.lblD_Sen_sIMU.Size = new System.Drawing.Size(43, 24);
|
this.lblD_Imu.Size = new System.Drawing.Size(43, 24);
|
||||||
this.lblD_Sen_sIMU.TabIndex = 16;
|
this.lblD_Imu.TabIndex = 16;
|
||||||
this.lblD_Sen_sIMU.Text = "IMU";
|
this.lblD_Imu.Text = "IMU";
|
||||||
this.lblD_Sen_sIMU.Click += new System.EventHandler(this.lblModulo_Click);
|
this.lblD_Imu.Click += new System.EventHandler(this.lblModulo_Click);
|
||||||
//
|
//
|
||||||
// lblD_Mov_DT
|
// lblD_Mov_DT
|
||||||
//
|
//
|
||||||
|
|
@ -269,26 +268,15 @@
|
||||||
// lblD_Cam_0
|
// lblD_Cam_0
|
||||||
//
|
//
|
||||||
this.lblD_Cam_0.AutoSize = true;
|
this.lblD_Cam_0.AutoSize = true;
|
||||||
this.lblD_Cam_0.BackColor = System.Drawing.Color.Lavender;
|
this.lblD_Cam_0.BackColor = System.Drawing.Color.White;
|
||||||
this.lblD_Cam_0.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.lblD_Cam_0.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.lblD_Cam_0.Location = new System.Drawing.Point(85, 470);
|
this.lblD_Cam_0.Location = new System.Drawing.Point(210, 547);
|
||||||
this.lblD_Cam_0.Name = "lblD_Cam_0";
|
this.lblD_Cam_0.Name = "lblD_Cam_0";
|
||||||
this.lblD_Cam_0.Size = new System.Drawing.Size(52, 24);
|
this.lblD_Cam_0.Size = new System.Drawing.Size(52, 24);
|
||||||
this.lblD_Cam_0.TabIndex = 29;
|
this.lblD_Cam_0.TabIndex = 29;
|
||||||
this.lblD_Cam_0.Text = "CAM";
|
this.lblD_Cam_0.Text = "CAM";
|
||||||
this.lblD_Cam_0.Click += new System.EventHandler(this.lblModulo_Click);
|
this.lblD_Cam_0.Click += new System.EventHandler(this.lblModulo_Click);
|
||||||
//
|
//
|
||||||
// lblD_Cam_1
|
|
||||||
//
|
|
||||||
this.lblD_Cam_1.AutoSize = true;
|
|
||||||
this.lblD_Cam_1.Cursor = System.Windows.Forms.Cursors.Hand;
|
|
||||||
this.lblD_Cam_1.Location = new System.Drawing.Point(334, 470);
|
|
||||||
this.lblD_Cam_1.Name = "lblD_Cam_1";
|
|
||||||
this.lblD_Cam_1.Size = new System.Drawing.Size(52, 24);
|
|
||||||
this.lblD_Cam_1.TabIndex = 30;
|
|
||||||
this.lblD_Cam_1.Text = "CAM";
|
|
||||||
this.lblD_Cam_1.Click += new System.EventHandler(this.lblModulo_Click);
|
|
||||||
//
|
|
||||||
// lblD_Snr
|
// lblD_Snr
|
||||||
//
|
//
|
||||||
this.lblD_Snr.AutoSize = true;
|
this.lblD_Snr.AutoSize = true;
|
||||||
|
|
@ -698,7 +686,6 @@
|
||||||
this.Controls.Add(this.picOperacao);
|
this.Controls.Add(this.picOperacao);
|
||||||
this.Controls.Add(this.lblD_Snr);
|
this.Controls.Add(this.lblD_Snr);
|
||||||
this.Controls.Add(this.picAjustes);
|
this.Controls.Add(this.picAjustes);
|
||||||
this.Controls.Add(this.lblD_Cam_1);
|
|
||||||
this.Controls.Add(this.lblD_Cam_0);
|
this.Controls.Add(this.lblD_Cam_0);
|
||||||
this.Controls.Add(this.picDesligar);
|
this.Controls.Add(this.picDesligar);
|
||||||
this.Controls.Add(this.lblD_Dir_ET);
|
this.Controls.Add(this.lblD_Dir_ET);
|
||||||
|
|
@ -708,7 +695,7 @@
|
||||||
this.Controls.Add(this.lblD_Mov_EF);
|
this.Controls.Add(this.lblD_Mov_EF);
|
||||||
this.Controls.Add(this.lblD_Dir_DF);
|
this.Controls.Add(this.lblD_Dir_DF);
|
||||||
this.Controls.Add(this.lblD_Mov_DT);
|
this.Controls.Add(this.lblD_Mov_DT);
|
||||||
this.Controls.Add(this.lblD_Sen_sIMU);
|
this.Controls.Add(this.lblD_Imu);
|
||||||
this.Controls.Add(this.lblD_Sen_sLRA);
|
this.Controls.Add(this.lblD_Sen_sLRA);
|
||||||
this.Controls.Add(this.lblD_Sen_sCOR_36V);
|
this.Controls.Add(this.lblD_Sen_sCOR_36V);
|
||||||
this.Controls.Add(this.lblMqtt);
|
this.Controls.Add(this.lblMqtt);
|
||||||
|
|
@ -747,7 +734,7 @@
|
||||||
private System.Windows.Forms.Label lblMqtt;
|
private System.Windows.Forms.Label lblMqtt;
|
||||||
private System.Windows.Forms.Label lblD_Sen_sCOR_36V;
|
private System.Windows.Forms.Label lblD_Sen_sCOR_36V;
|
||||||
private System.Windows.Forms.Label lblD_Sen_sLRA;
|
private System.Windows.Forms.Label lblD_Sen_sLRA;
|
||||||
private System.Windows.Forms.Label lblD_Sen_sIMU;
|
private System.Windows.Forms.Label lblD_Imu;
|
||||||
private System.Windows.Forms.Label lblD_Mov_DT;
|
private System.Windows.Forms.Label lblD_Mov_DT;
|
||||||
private System.Windows.Forms.Label lblD_Dir_DF;
|
private System.Windows.Forms.Label lblD_Dir_DF;
|
||||||
private System.Windows.Forms.Label lblD_Dir_EF;
|
private System.Windows.Forms.Label lblD_Dir_EF;
|
||||||
|
|
@ -759,7 +746,6 @@
|
||||||
private System.Windows.Forms.PictureBox picOperacao;
|
private System.Windows.Forms.PictureBox picOperacao;
|
||||||
private System.Windows.Forms.PictureBox picDesligar;
|
private System.Windows.Forms.PictureBox picDesligar;
|
||||||
private System.Windows.Forms.Label lblD_Cam_0;
|
private System.Windows.Forms.Label lblD_Cam_0;
|
||||||
private System.Windows.Forms.Label lblD_Cam_1;
|
|
||||||
private System.Windows.Forms.Label lblD_Snr;
|
private System.Windows.Forms.Label lblD_Snr;
|
||||||
private System.Windows.Forms.PictureBox picAjustes;
|
private System.Windows.Forms.PictureBox picAjustes;
|
||||||
private System.Windows.Forms.Label lblDiagnosticos;
|
private System.Windows.Forms.Label lblDiagnosticos;
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,20 @@ namespace AgroBase.Forms.IHM
|
||||||
? Color.DarkRed
|
? Color.DarkRed
|
||||||
: Color.DarkGreen;
|
: Color.DarkGreen;
|
||||||
}
|
}
|
||||||
|
else if (Dispositivo == T_Code.Imu)
|
||||||
|
{
|
||||||
|
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == T_Code.Snr);
|
||||||
|
bool modDesconectado = Modulo == null || Modulo.Status == StatusModulo.Desconectado;
|
||||||
|
var saudeImu = HealthWorkerService.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo);
|
||||||
|
var CameraCaminho = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho;
|
||||||
|
lbl.ForeColor =
|
||||||
|
modDesconectado || saudeImu == null ? Color.Black
|
||||||
|
: saudeImu.status == StatusModulo.Conectado ? Color.Blue
|
||||||
|
: saudeImu.status == StatusModulo.Falha ? Color.DarkRed
|
||||||
|
: saudeImu.status == StatusModulo.Alerta ? Color.Gold
|
||||||
|
: saudeImu.status == StatusModulo.Operante ? Color.DarkGreen
|
||||||
|
: Color.Black;
|
||||||
|
}
|
||||||
else if (Dispositivo == T_Code.Sen)
|
else if (Dispositivo == T_Code.Sen)
|
||||||
{
|
{
|
||||||
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
|
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
|
||||||
|
|
@ -195,15 +209,12 @@ namespace AgroBase.Forms.IHM
|
||||||
if (Mod_ID.ToLower() == Dispositivo.ToString().ToLower())
|
if (Mod_ID.ToLower() == Dispositivo.ToString().ToLower())
|
||||||
{
|
{
|
||||||
lbl.ForeColor =
|
lbl.ForeColor =
|
||||||
modDesconectado
|
modDesconectado ? Color.Black :
|
||||||
? Color.Black
|
Modulo.Status == StatusModulo.Conectado ? Color.Blue :
|
||||||
: Modulo.Status == StatusModulo.Conectado
|
Modulo.Status == StatusModulo.Falha ? Color.DarkRed :
|
||||||
? Color.Blue
|
Modulo.Status == StatusModulo.Alerta ? Color.Gold :
|
||||||
: Modulo.Status == StatusModulo.Alerta ?
|
Modulo.Status == StatusModulo.Operante ? Color.DarkGreen
|
||||||
Color.Gold :
|
: Color.Black;
|
||||||
Modulo.Status == StatusModulo.Operante
|
|
||||||
? Color.DarkGreen
|
|
||||||
: Color.DarkRed;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ namespace AgroBase.Forms
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await VariaveisOperacao.Operadores.IniciarProcessamento();
|
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,46 +79,46 @@ namespace AgroBase.Forms
|
||||||
|
|
||||||
private async void btnLeituraRGB_Click(object sender, EventArgs e)
|
private async void btnLeituraRGB_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
EnviarComandoReqFrame(VisualWorkerFrameType.Rgb);
|
EnviarComandoReqFrame(CameraFrameType.Rgb);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnLeituraHeatmap_Click(object sender, EventArgs e)
|
private void btnLeituraHeatmap_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
EnviarComandoReqFrame(VisualWorkerFrameType.Heatmap);
|
EnviarComandoReqFrame(CameraFrameType.Heatmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnLeituraRadar2D_Click(object sender, EventArgs e)
|
private void btnLeituraRadar2D_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
EnviarComandoReqFrame(VisualWorkerFrameType.RadarTopDown);
|
EnviarComandoReqFrame(CameraFrameType.RadarTopDown);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnLeituraSegmentacaoSemantica_Click(object sender, EventArgs e)
|
private void btnLeituraSegmentacaoSemantica_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
EnviarComandoReqFrame(VisualWorkerFrameType.Segmentacao);
|
EnviarComandoReqFrame(CameraFrameType.Segmentacao);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void EnviarComandoReqFrame(VisualWorkerFrameType tipo)
|
private async void EnviarComandoReqFrame(CameraFrameType tipo)
|
||||||
{
|
{
|
||||||
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(tipo);
|
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(tipo);
|
||||||
|
|
||||||
PictureBox pic =
|
PictureBox pic =
|
||||||
tipo == VisualWorkerFrameType.Rgb ? picRGB :
|
tipo == CameraFrameType.Rgb ? picRGB :
|
||||||
tipo == VisualWorkerFrameType.Heatmap ? picHeatmap :
|
tipo == CameraFrameType.Heatmap ? picHeatmap :
|
||||||
tipo == VisualWorkerFrameType.RadarTopDown ? picRadar2D :
|
tipo == CameraFrameType.RadarTopDown ? picRadar2D :
|
||||||
tipo == VisualWorkerFrameType.Segmentacao ? picSegmentacaoSemantica :
|
tipo == CameraFrameType.Segmentacao ? picSegmentacaoSemantica :
|
||||||
new PictureBox();
|
new PictureBox();
|
||||||
Label lbl =
|
Label lbl =
|
||||||
tipo == VisualWorkerFrameType.Rgb ? lblLeituraRGB :
|
tipo == CameraFrameType.Rgb ? lblLeituraRGB :
|
||||||
tipo == VisualWorkerFrameType.Heatmap ? lblLeituraHeatmap :
|
tipo == CameraFrameType.Heatmap ? lblLeituraHeatmap :
|
||||||
tipo == VisualWorkerFrameType.RadarTopDown ? lblLeituraRadar2D :
|
tipo == CameraFrameType.RadarTopDown ? lblLeituraRadar2D :
|
||||||
tipo == VisualWorkerFrameType.Segmentacao ? lblLeituraSegmentacaoSemantica :
|
tipo == CameraFrameType.Segmentacao ? lblLeituraSegmentacaoSemantica :
|
||||||
new Label();
|
new Label();
|
||||||
|
|
||||||
pic.Image?.Dispose();
|
pic.Image?.Dispose();
|
||||||
try { pic.Image = frame?.image(); } catch { }
|
try { pic.Image = frame?.image(); } catch { }
|
||||||
lbl.Text = $"Leitura em: " + frame?.timestamp.ToString("dd/MM/yyyy HH:mm:ss");
|
lbl.Text = $"Leitura em: " + frame?.timestamp.ToString("dd/MM/yyyy HH:mm:ss");
|
||||||
|
|
||||||
if (tipo == VisualWorkerFrameType.RadarTopDown && VisualWorkerService.DadosLeitura.Analises != null)
|
if (tipo == CameraFrameType.RadarTopDown && VisualWorkerService.DadosLeitura.Analises != null)
|
||||||
{
|
{
|
||||||
//pic.Image = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
|
//pic.Image = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
|
||||||
|
|
||||||
|
|
@ -152,7 +152,7 @@ namespace AgroBase.Forms
|
||||||
var analise = VisualWorkerService.DadosLeitura.Analises;
|
var analise = VisualWorkerService.DadosLeitura.Analises;
|
||||||
|
|
||||||
lblLeituraDebug.Text = $"Leitura em: " + (analise?.timestamp ?? DateTime.MinValue).ToString("dd/MM/yyyy HH:mm:ss");
|
lblLeituraDebug.Text = $"Leitura em: " + (analise?.timestamp ?? DateTime.MinValue).ToString("dd/MM/yyyy HH:mm:ss");
|
||||||
OAKCameraFrameModel frame = VisualWorkerService.DadosLeitura.CameraFrames[VisualWorkerFrameType.Heatmap];
|
OAKCameraFrameModel frame = VisualWorkerService.DadosLeitura.CameraFrames[CameraFrameType.Heatmap];
|
||||||
picDebug.Image?.Dispose();
|
picDebug.Image?.Dispose();
|
||||||
picDebug.Image = analise.PlotarAnalise(frame);
|
picDebug.Image = analise.PlotarAnalise(frame);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -687,6 +687,7 @@ namespace AgroBase
|
||||||
var Bico = DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID);
|
var Bico = DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID);
|
||||||
if (Bico != null)
|
if (Bico != null)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine($"Bico {Bico.Posicao} atualizado de {Bico.ComandoAtuar} para {Status}");
|
||||||
Bico.ComandoAtuar = Status;
|
Bico.ComandoAtuar = Status;
|
||||||
(id_num, posicao, data) = Bico.ProtocoloComando();
|
(id_num, posicao, data) = Bico.ProtocoloComando();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return $"({Index}) {Name}";
|
return $"({Index}) {Name ?? Id}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public string State { get; set; }
|
public string State { get; set; }
|
||||||
|
|
@ -36,7 +36,7 @@ namespace AgroBase.Models
|
||||||
public double DistanciaMinimaVisao { get; set; } = 500;
|
public double DistanciaMinimaVisao { get; set; } = 500;
|
||||||
public double PercentualAlturaSolo { get; set; } = 30;
|
public double PercentualAlturaSolo { get; set; } = 30;
|
||||||
|
|
||||||
public Dictionary<VisualWorkerFrameType, OAKCameraFrameModel> frames
|
public Dictionary<CameraFrameType, OAKCameraFrameModel> frames
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -44,14 +44,16 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
case T_Code.Snr:
|
case T_Code.Snr:
|
||||||
return VisualWorkerService.DadosLeitura.CameraFrames;
|
return VisualWorkerService.DadosLeitura.CameraFrames;
|
||||||
|
case T_Code.Cam:
|
||||||
|
return WeedWorkerService.DadosLeitura.CameraFrames;
|
||||||
default:
|
default:
|
||||||
return new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>();
|
return new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<Bitmap> GetNewFrame(VisualWorkerFrameType tipo = VisualWorkerFrameType.Rgb)
|
public async Task<Bitmap> GetNewFrame(CameraFrameType tipo = CameraFrameType.Rgb)
|
||||||
{
|
{
|
||||||
OAKCameraFrameModel frame = null;
|
OAKCameraFrameModel frame = null;
|
||||||
switch (Dispositivo)
|
switch (Dispositivo)
|
||||||
|
|
@ -59,18 +61,24 @@ namespace AgroBase.Models
|
||||||
case T_Code.Snr:
|
case T_Code.Snr:
|
||||||
frame = await VisualWorkerService.GetCameraFrame(tipo);
|
frame = await VisualWorkerService.GetCameraFrame(tipo);
|
||||||
break;
|
break;
|
||||||
|
case T_Code.Cam:
|
||||||
|
frame = await WeedWorkerService.GetCameraFrame(tipo);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
Bitmap bmp = frame?.image();
|
Bitmap bmp = frame?.image();
|
||||||
return bmp;
|
return bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveFrames(List<VisualWorkerFrameType> frames, string nome, string caminho)
|
public void SaveFrames(List<CameraFrameType> frames, string nome, string caminho)
|
||||||
{
|
{
|
||||||
switch (Dispositivo)
|
switch (Dispositivo)
|
||||||
{
|
{
|
||||||
case T_Code.Snr:
|
case T_Code.Snr:
|
||||||
VisualWorkerService.SaveCameraFrames(frames, nome, caminho);
|
VisualWorkerService.SaveCameraFrames(frames, nome, caminho);
|
||||||
break;
|
break;
|
||||||
|
case T_Code.Cam:
|
||||||
|
WeedWorkerService.SaveCameraFrames(frames, nome, caminho);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -648,6 +648,8 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
GPSTrajetoria = new List<GPSModel>();
|
GPSTrajetoria = new List<GPSModel>();
|
||||||
|
|
||||||
|
Controle.BicosAtuados = DispAtu.Dados.BicosPulverizadores.Select(x => x.Clone()).ToList();
|
||||||
|
|
||||||
await RealizarCalibragemInicialAsync();
|
await RealizarCalibragemInicialAsync();
|
||||||
|
|
||||||
if (Modo == ModoOperacao.Manual)
|
if (Modo == ModoOperacao.Manual)
|
||||||
|
|
@ -832,30 +834,45 @@ namespace AgroBase.Models
|
||||||
{
|
{
|
||||||
if (Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.MapaGPS)
|
if (Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.MapaGPS)
|
||||||
{
|
{
|
||||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false);
|
Variaveis.OperacaoEmAndamento.AtualizarDadosControleMovimento(false);
|
||||||
|
}
|
||||||
|
if (Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico)
|
||||||
|
{
|
||||||
|
Variaveis.OperacaoEmAndamento.AtualizarDadosControleAtuador(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AtualizarDadosControle(bool ForcarEnvio)
|
public void AtualizarDadosControleAtuador(bool ForcarEnvio)
|
||||||
{
|
{
|
||||||
DateTime Agora = DateTime.Now;
|
DateTime Agora = DateTime.Now;
|
||||||
|
|
||||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
|
|
||||||
foreach (var Ctrl in _Controle.TiposControle)
|
if (!_Controle.PulverizadorAutomatico)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var Ctrl in _Controle.TiposControle.Where(x => x.Tipo == T_Code.Atu))
|
||||||
{
|
{
|
||||||
if (ForcarEnvio || ((Agora - Ctrl.UltimoComando).TotalMilliseconds > Ctrl.DelayEnvioComando))
|
if (ForcarEnvio || ((Agora - Ctrl.UltimoComando).TotalMilliseconds > Ctrl.DelayEnvioComando))
|
||||||
{
|
{
|
||||||
if (Ctrl.Tipo == T_Code.Atu && !_Controle.PulverizadorAutomatico)
|
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispAtu, Ctrl.Tipo, ForcarEnvio);
|
||||||
{
|
Ctrl.UltimoComando = Agora;
|
||||||
return;
|
Ctrl.Comandos.AddRange(Protocolos);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IDispositivosService disp = Ctrl.Tipo == T_Code.Atu ?
|
public void AtualizarDadosControleMovimento(bool ForcarEnvio)
|
||||||
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispAtu :
|
{
|
||||||
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispMvd;
|
DateTime Agora = DateTime.Now;
|
||||||
|
|
||||||
var Protocolos = EnviarProtocoloComando(disp, Ctrl.Tipo, ForcarEnvio);
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
|
|
||||||
|
foreach (var Ctrl in _Controle.TiposControle.Where(x => x.Tipo != T_Code.Atu))
|
||||||
|
{
|
||||||
|
if (ForcarEnvio || ((Agora - Ctrl.UltimoComando).TotalMilliseconds > Ctrl.DelayEnvioComando))
|
||||||
|
{
|
||||||
|
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispMvd, Ctrl.Tipo, ForcarEnvio);
|
||||||
Ctrl.UltimoComando = Agora;
|
Ctrl.UltimoComando = Agora;
|
||||||
Ctrl.Comandos.AddRange(Protocolos);
|
Ctrl.Comandos.AddRange(Protocolos);
|
||||||
}
|
}
|
||||||
|
|
@ -942,7 +959,17 @@ namespace AgroBase.Models
|
||||||
}
|
}
|
||||||
else if (Dispositivo.Dados is AtuadorModel)
|
else if (Dispositivo.Dados is AtuadorModel)
|
||||||
{
|
{
|
||||||
if (ForcarEnvio || _ControleAnterior.BicosAtuados.Count() >= _Controle.BicosAtuados.Count())
|
bool AlteracaoDeEstado = false;
|
||||||
|
for (int i = 0; i < _Controle.BicosAtuados.Count; i++)
|
||||||
|
{
|
||||||
|
if (_Controle.BicosAtuados[i].ComandoAtuar != _ControleAnterior.BicosAtuados[i].ComandoAtuar)
|
||||||
|
{
|
||||||
|
AlteracaoDeEstado = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ForcarEnvio || AlteracaoDeEstado)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _Controle.BicosAtuados.Count; i++)
|
for (int i = 0; i < _Controle.BicosAtuados.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -1202,7 +1229,7 @@ namespace AgroBase.Models
|
||||||
|
|
||||||
string nome = Variaveis.OperacaoEmAndamento.idxLog.ToString();
|
string nome = Variaveis.OperacaoEmAndamento.idxLog.ToString();
|
||||||
|
|
||||||
Camera.SaveFrames(new List<VisualWorkerFrameType>() { VisualWorkerFrameType.Rgb, VisualWorkerFrameType.Heatmap, VisualWorkerFrameType.RadarTopDown, VisualWorkerFrameType.Segmentacao }, nome, Caminho);
|
Camera.SaveFrames(new List<CameraFrameType>() { CameraFrameType.Rgb, CameraFrameType.Heatmap, CameraFrameType.RadarTopDown, CameraFrameType.Segmentacao }, nome, Caminho);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1418,7 +1445,7 @@ namespace AgroBase.Models
|
||||||
Angulo = Angulo,
|
Angulo = Angulo,
|
||||||
Angulo_Max = Angulo_Max,
|
Angulo_Max = Angulo_Max,
|
||||||
Angulo_Min = Angulo_Min,
|
Angulo_Min = Angulo_Min,
|
||||||
BicosAtuados = new List<AtuadorBicoModel>(BicosAtuados),
|
BicosAtuados = BicosAtuados.Select(x => x.Clone()).ToList(),
|
||||||
Direcao = Direcao,
|
Direcao = Direcao,
|
||||||
PercentualInicioPulverizacao = PercentualInicioPulverizacao,
|
PercentualInicioPulverizacao = PercentualInicioPulverizacao,
|
||||||
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
||||||
|
|
|
||||||
|
|
@ -55,5 +55,14 @@ namespace AgroBase.Models.Operadores
|
||||||
{
|
{
|
||||||
ScriptCarregado = 1,
|
ScriptCarregado = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum CameraFrameType
|
||||||
|
{
|
||||||
|
Rgb = 1,
|
||||||
|
Heatmap = 2,
|
||||||
|
RadarTopDown = 3,
|
||||||
|
Segmentacao = 4,
|
||||||
|
Debug = 5
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ namespace AgroBase.Models.Operadores
|
||||||
public bool Pronto { get; set; }
|
public bool Pronto { get; set; }
|
||||||
public DateTime ProntoEm { get; set; }
|
public DateTime ProntoEm { get; set; }
|
||||||
public DateTime UltimaMensagem { get; set; }
|
public DateTime UltimaMensagem { get; set; }
|
||||||
public Dictionary<VisualWorkerFrameType, OAKCameraFrameModel> CameraFrames { get; set; }
|
public Dictionary<CameraFrameType, OAKCameraFrameModel> CameraFrames { get; set; } = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||||
//public WorkerMessageModel<VisualWorkerMessageResponseModel> Leitura { get; set; } = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
//public WorkerMessageModel<VisualWorkerMessageResponseModel> Leitura { get; set; } = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
||||||
public VisualWorkerMessageAnaliseModel Analises { get; set; } = new VisualWorkerMessageAnaliseModel();
|
public VisualWorkerMessageAnaliseModel Analises { get; set; } = new VisualWorkerMessageAnaliseModel();
|
||||||
public VisualWorkerMessageIMUModel Imu { get; set; } = new VisualWorkerMessageIMUModel();
|
public VisualWorkerMessageIMUModel Imu { get; set; } = new VisualWorkerMessageIMUModel();
|
||||||
|
|
@ -26,7 +26,7 @@ namespace AgroBase.Models.Operadores
|
||||||
IniciadoEm = IniciadoEm,
|
IniciadoEm = IniciadoEm,
|
||||||
Pronto = Pronto,
|
Pronto = Pronto,
|
||||||
ProntoEm = ProntoEm,
|
ProntoEm = ProntoEm,
|
||||||
CameraFrames = new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>(CameraFrames ?? new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>()),
|
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>(CameraFrames ?? new Dictionary<CameraFrameType, OAKCameraFrameModel>()),
|
||||||
Analises = Analises.Clone(),
|
Analises = Analises.Clone(),
|
||||||
Imu = Imu.Clone(),
|
Imu = Imu.Clone(),
|
||||||
//Leitura = Leitura.Clone(),
|
//Leitura = Leitura.Clone(),
|
||||||
|
|
@ -40,7 +40,7 @@ namespace AgroBase.Models.Operadores
|
||||||
IniciadoEm = DateTime.MinValue;
|
IniciadoEm = DateTime.MinValue;
|
||||||
Pronto = false;
|
Pronto = false;
|
||||||
ProntoEm = DateTime.MinValue;
|
ProntoEm = DateTime.MinValue;
|
||||||
CameraFrames = new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>();
|
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||||
Analises = new VisualWorkerMessageAnaliseModel();
|
Analises = new VisualWorkerMessageAnaliseModel();
|
||||||
Imu = new VisualWorkerMessageIMUModel();
|
Imu = new VisualWorkerMessageIMUModel();
|
||||||
//Leitura = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
//Leitura = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
||||||
|
|
@ -522,13 +522,6 @@ namespace AgroBase.Models.Operadores
|
||||||
SaveCameraFrames = 6,
|
SaveCameraFrames = 6,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum VisualWorkerFrameType
|
|
||||||
{
|
|
||||||
Rgb = 1,
|
|
||||||
Heatmap = 2,
|
|
||||||
RadarTopDown = 3,
|
|
||||||
Segmentacao = 4,
|
|
||||||
Debug = 5
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace AgroBase.Models.Operadores
|
||||||
|
{
|
||||||
|
public class WeedWorkerModel
|
||||||
|
{
|
||||||
|
public bool Iniciado { get; set; }
|
||||||
|
public DateTime IniciadoEm { get; set; }
|
||||||
|
public bool Pronto { get; set; }
|
||||||
|
public DateTime ProntoEm { get; set; }
|
||||||
|
public DateTime UltimaMensagem { get; set; }
|
||||||
|
public Dictionary<CameraFrameType, OAKCameraFrameModel> CameraFrames { get; set; } = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||||
|
|
||||||
|
|
||||||
|
public WeedWorkerModel Clone()
|
||||||
|
{
|
||||||
|
return new WeedWorkerModel()
|
||||||
|
{
|
||||||
|
Iniciado = Iniciado,
|
||||||
|
IniciadoEm = IniciadoEm,
|
||||||
|
Pronto = Pronto,
|
||||||
|
ProntoEm = ProntoEm,
|
||||||
|
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>(CameraFrames ?? new Dictionary<CameraFrameType, OAKCameraFrameModel>()),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReiniciarEstado()
|
||||||
|
{
|
||||||
|
Iniciado = false;
|
||||||
|
IniciadoEm = DateTime.MinValue;
|
||||||
|
Pronto = false;
|
||||||
|
ProntoEm = DateTime.MinValue;
|
||||||
|
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum WeedWorkerCommandType
|
||||||
|
{
|
||||||
|
ScriptCarregado = 1,
|
||||||
|
IniciarCameraManager = 2,
|
||||||
|
AtualizarSaudeCamera = 3,
|
||||||
|
GetCameraFrame = 4,
|
||||||
|
SaveCameraFrames = 5,
|
||||||
|
EnviarDadosControle = 6,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -153,7 +153,9 @@ namespace AgroBase.Services.Operadores
|
||||||
("largura", VariaveisEquipamento.LarguraEquipamentoMm / 1000.0),
|
("largura", VariaveisEquipamento.LarguraEquipamentoMm / 1000.0),
|
||||||
("distancia_entre_eixos", VariaveisEquipamento.DistanciaEntreEixos / 100.0),
|
("distancia_entre_eixos", VariaveisEquipamento.DistanciaEntreEixos / 100.0),
|
||||||
("percentual_reservatorio_min", VariaveisEquipamento.PercentualReservatorioMin),
|
("percentual_reservatorio_min", VariaveisEquipamento.PercentualReservatorioMin),
|
||||||
("percentual_tensao_bateria_min", VariaveisEquipamento.PercentualTensaoBateriaMin)
|
("percentual_tensao_bateria_min", VariaveisEquipamento.PercentualTensaoBateriaMin),
|
||||||
|
("camera_caminho_id", Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id),
|
||||||
|
("camera_solo_id", Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.FirstOrDefault()?.Id ?? "")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,7 +220,6 @@ namespace AgroBase.Services.Operadores
|
||||||
),
|
),
|
||||||
("Snr", new
|
("Snr", new
|
||||||
{
|
{
|
||||||
mx_id = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id,
|
|
||||||
percentual_altura_solo = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.PercentualAlturaSolo,
|
percentual_altura_solo = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.PercentualAlturaSolo,
|
||||||
distancia_maxima = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.DistanciaMaximaVisao,
|
distancia_maxima = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.DistanciaMaximaVisao,
|
||||||
distancia_minima = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.DistanciaMinimaVisao
|
distancia_minima = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.DistanciaMinimaVisao
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ namespace AgroBase.Services.Operadores
|
||||||
DadosLeitura.ProntoEm = DateTime.Now;
|
DadosLeitura.ProntoEm = DateTime.Now;
|
||||||
MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ManagerWorkerCommandType.EnviarDadosControle:
|
case ManagerWorkerCommandType.EnviarDadosControle:
|
||||||
if (Variaveis.OperacaoEmAndamento.Modo == Enums.ModoOperacao.MapaGPS)
|
if (Variaveis.OperacaoEmAndamento.Modo == Enums.ModoOperacao.MapaGPS)
|
||||||
{
|
{
|
||||||
|
|
@ -83,6 +84,7 @@ namespace AgroBase.Services.Operadores
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ManagerWorkerCommandType.FinalizarOperacao:
|
case ManagerWorkerCommandType.FinalizarOperacao:
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ namespace AgroBase.Services.Operadores
|
||||||
new VisualWorkerService(),
|
new VisualWorkerService(),
|
||||||
new HealthWorkerService(),
|
new HealthWorkerService(),
|
||||||
new CameraWorkerService(),
|
new CameraWorkerService(),
|
||||||
|
new WeedWorkerService(),
|
||||||
};
|
};
|
||||||
|
|
||||||
private bool iniciarScript = false;
|
private bool iniciarScript = false;
|
||||||
|
|
@ -96,7 +97,7 @@ namespace AgroBase.Services.Operadores
|
||||||
("velocidade_sp", _Controle.PercentualVelocidadeSP)
|
("velocidade_sp", _Controle.PercentualVelocidadeSP)
|
||||||
);
|
);
|
||||||
|
|
||||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false);
|
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
|
||||||
}
|
}
|
||||||
|
|
||||||
RedisService.DefinirEquipamentoDesconectado();
|
RedisService.DefinirEquipamentoDesconectado();
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace AgroBase.Services.Operadores
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VisualWorkerCommandType.GetCameraFrame:
|
case VisualWorkerCommandType.GetCameraFrame:
|
||||||
VisualWorkerFrameType tipo = (VisualWorkerFrameType)Convert.ToInt32(comando.@params["tipo"].ToString());
|
CameraFrameType tipo = (CameraFrameType)Convert.ToInt32(comando.@params["tipo"].ToString());
|
||||||
DadosLeitura.CameraFrames[tipo] = new OAKCameraFrameModel()
|
DadosLeitura.CameraFrames[tipo] = new OAKCameraFrameModel()
|
||||||
{
|
{
|
||||||
frame = comando.@params["frame"].ToString(),
|
frame = comando.@params["frame"].ToString(),
|
||||||
|
|
@ -101,7 +101,7 @@ namespace AgroBase.Services.Operadores
|
||||||
RedisService.Publish(CmdKey.VisualWorkerRx, JsonConvert.SerializeObject(comando));
|
RedisService.Publish(CmdKey.VisualWorkerRx, JsonConvert.SerializeObject(comando));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<OAKCameraFrameModel> GetCameraFrame(VisualWorkerFrameType tipo = VisualWorkerFrameType.Rgb)
|
public static async Task<OAKCameraFrameModel> GetCameraFrame(CameraFrameType tipo = CameraFrameType.Rgb)
|
||||||
{
|
{
|
||||||
DateTime Inicio = DateTime.Now;
|
DateTime Inicio = DateTime.Now;
|
||||||
|
|
||||||
|
|
@ -121,7 +121,7 @@ namespace AgroBase.Services.Operadores
|
||||||
return _frame;
|
return _frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SaveCameraFrames(List<VisualWorkerFrameType> frames, string nome, string caminho)
|
public static void SaveCameraFrames(List<CameraFrameType> frames, string nome, string caminho)
|
||||||
{
|
{
|
||||||
var comando = new
|
var comando = new
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,158 @@
|
||||||
|
using AgroBase.Models.Operadores;
|
||||||
|
using AgroBase.Models;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||||
|
|
||||||
|
namespace AgroBase.Services.Operadores
|
||||||
|
{
|
||||||
|
public class WeedWorkerService : IWorkerModel
|
||||||
|
{
|
||||||
|
public static WeedWorkerModel DadosLeitura = new WeedWorkerModel();
|
||||||
|
public SaudeWorkerModel Saude { get; set; } = new SaudeWorkerModel();
|
||||||
|
|
||||||
|
private bool DebugMode = true;
|
||||||
|
|
||||||
|
public void MostrarLog(string message, int limite = 500)
|
||||||
|
{
|
||||||
|
if (DebugMode)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[WeedWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> IniciarProcessamento()
|
||||||
|
{
|
||||||
|
RedisService.Subscribe(CmdKey.WeedWorkerTx, RedisCallback);
|
||||||
|
|
||||||
|
DadosLeitura.IniciadoEm = DateTime.Now;
|
||||||
|
DadosLeitura.Iniciado = true;
|
||||||
|
|
||||||
|
bool pronto() => DadosLeitura.Pronto;
|
||||||
|
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
|
||||||
|
if (pronto())
|
||||||
|
{
|
||||||
|
MostrarLog("Processamento iniciado com sucesso");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
MostrarLog("Timeout ao iniciar script");
|
||||||
|
DadosLeitura.ReiniciarEstado();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RedisCallback(string mensagem)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var comando = JsonConvert.DeserializeObject<ComandoRedis>(mensagem);
|
||||||
|
|
||||||
|
var cmd = (WeedWorkerCommandType)comando.cmd;
|
||||||
|
|
||||||
|
//MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case WeedWorkerCommandType.ScriptCarregado:
|
||||||
|
DadosLeitura.Pronto = true;
|
||||||
|
DadosLeitura.ProntoEm = DateTime.Now;
|
||||||
|
MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WeedWorkerCommandType.GetCameraFrame:
|
||||||
|
CameraFrameType tipo = (CameraFrameType)Convert.ToInt32(comando.@params["tipo"].ToString());
|
||||||
|
DadosLeitura.CameraFrames[tipo] = new OAKCameraFrameModel()
|
||||||
|
{
|
||||||
|
frame = comando.@params["frame"].ToString(),
|
||||||
|
timestamp = FuncoesGlobais.UnixToDateTime(comando.@params["timestamp"].ToString()),
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WeedWorkerCommandType.EnviarDadosControle:
|
||||||
|
if (Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico)
|
||||||
|
{
|
||||||
|
if (comando.@params == null)
|
||||||
|
break;
|
||||||
|
|
||||||
|
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||||
|
if (comando.@params is Dictionary<string, object> dictParams)
|
||||||
|
{
|
||||||
|
var novoComando = dictParams
|
||||||
|
.Select(kv => new
|
||||||
|
{
|
||||||
|
Key = int.TryParse(kv.Key, out var i) ? (i + 1) : -1,
|
||||||
|
Value = Convert.ToBoolean(kv.Value)
|
||||||
|
})
|
||||||
|
.Where(x => x.Key >= 0)
|
||||||
|
.ToDictionary(x => x.Key, x => x.Value);
|
||||||
|
foreach (var bico in _Controle.BicosAtuados)
|
||||||
|
{
|
||||||
|
novoComando.TryGetValue(bico.Posicao, out bool atuado);
|
||||||
|
bico.ComandoAtuar = atuado;
|
||||||
|
}
|
||||||
|
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
MostrarLog($"Comando não reconhecido: {comando.cmd}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MostrarLog($"Erro ao deserializar resposta: {ex.Message}");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DadosLeitura.UltimaMensagem = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AtualizarSaude()
|
||||||
|
{
|
||||||
|
Saude = OperadoresModels.AtualizarSaude(CtxKey.DadosWeedWorker);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<OAKCameraFrameModel> GetCameraFrame(CameraFrameType tipo = CameraFrameType.Rgb)
|
||||||
|
{
|
||||||
|
DateTime Inicio = DateTime.Now;
|
||||||
|
|
||||||
|
var comando = new
|
||||||
|
{
|
||||||
|
cmd = WeedWorkerCommandType.GetCameraFrame,
|
||||||
|
@params = tipo,
|
||||||
|
};
|
||||||
|
RedisService.Publish(CmdKey.WeedWorkerRx, JsonConvert.SerializeObject(comando));
|
||||||
|
|
||||||
|
bool Frame() => DadosLeitura.CameraFrames.TryGetValue(tipo, out var frame) && (frame?.timestamp ?? DateTime.MinValue) > Inicio;
|
||||||
|
|
||||||
|
await FuncoesGlobais.AguardarCondicaoAsync(Frame, 1000, 100);
|
||||||
|
|
||||||
|
DadosLeitura.CameraFrames.TryGetValue(tipo, out OAKCameraFrameModel _frame);
|
||||||
|
|
||||||
|
return _frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SaveCameraFrames(List<CameraFrameType> frames, string nome, string caminho)
|
||||||
|
{
|
||||||
|
var comando = new
|
||||||
|
{
|
||||||
|
cmd = WeedWorkerCommandType.SaveCameraFrames,
|
||||||
|
@params = new
|
||||||
|
{
|
||||||
|
nome = nome,
|
||||||
|
caminho = caminho,
|
||||||
|
tipos = frames.Select(x => (int)x).ToArray(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
RedisService.Publish(CmdKey.WeedWorkerRx, JsonConvert.SerializeObject(comando));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -187,6 +187,7 @@ namespace AgroBase.Services
|
||||||
public const string DadosControle = "ctx:dados_controle";
|
public const string DadosControle = "ctx:dados_controle";
|
||||||
public const string DadosEquipamento = "ctx:dados_equipamento";
|
public const string DadosEquipamento = "ctx:dados_equipamento";
|
||||||
public const string DadosVisualWorker = "ctx:dados_visual_worker";
|
public const string DadosVisualWorker = "ctx:dados_visual_worker";
|
||||||
|
public const string DadosWeedWorker = "ctx:dados_weed_worker";
|
||||||
public const string DadosManagerWorker = "ctx:dados_manager_worker";
|
public const string DadosManagerWorker = "ctx:dados_manager_worker";
|
||||||
public const string DadosHealthWorker = "ctx:dados_health_worker";
|
public const string DadosHealthWorker = "ctx:dados_health_worker";
|
||||||
public const string DadosCameraWorker = "ctx:dados_camera_worker";
|
public const string DadosCameraWorker = "ctx:dados_camera_worker";
|
||||||
|
|
@ -202,5 +203,7 @@ namespace AgroBase.Services
|
||||||
public const string CameraWorkerTx = "cmd_tx:camera_worker";
|
public const string CameraWorkerTx = "cmd_tx:camera_worker";
|
||||||
public const string ManagerWorkerRx = "cmd_rx:manager_worker";
|
public const string ManagerWorkerRx = "cmd_rx:manager_worker";
|
||||||
public const string ManagerWorkerTx = "cmd_tx:manager_worker";
|
public const string ManagerWorkerTx = "cmd_tx:manager_worker";
|
||||||
|
public const string WeedWorkerRx = "cmd_rx:weed_worker";
|
||||||
|
public const string WeedWorkerTx = "cmd_tx:weed_worker";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -1,12 +1,5 @@
|
||||||
{
|
{
|
||||||
"epochs": [ {
|
"epochs": [ {
|
||||||
"calculation_time": "13395172669289149",
|
|
||||||
"config_version": 0,
|
|
||||||
"model_version": "0",
|
|
||||||
"padded_top_topics_start_index": 0,
|
|
||||||
"taxonomy_version": 0,
|
|
||||||
"top_topics_and_observing_domains": [ ]
|
|
||||||
}, {
|
|
||||||
"calculation_time": "13395881044629269",
|
"calculation_time": "13395881044629269",
|
||||||
"config_version": 0,
|
"config_version": 0,
|
||||||
"model_version": "0",
|
"model_version": "0",
|
||||||
|
|
@ -29,5 +22,5 @@
|
||||||
"top_topics_and_observing_domains": [ ]
|
"top_topics_and_observing_domains": [ ]
|
||||||
} ],
|
} ],
|
||||||
"hex_encoded_hmac_key": "40F346D3248C3AFDF2BEE1FE496DBD32F7CED6E5AE98B881ABC421AA7E7B5642",
|
"hex_encoded_hmac_key": "40F346D3248C3AFDF2BEE1FE496DBD32F7CED6E5AE98B881ABC421AA7E7B5642",
|
||||||
"next_scheduled_calculation_time": "13397830127957632"
|
"next_scheduled_calculation_time": "13397830127957680"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,3 +1,3 @@
|
||||||
2025/07/18-16:42:45.122 990 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
2025/07/21-15:21:17.549 8344 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||||
2025/07/18-16:42:45.129 990 Recovering log #3
|
2025/07/21-15:21:17.555 8344 Recovering log #3
|
||||||
2025/07/18-16:42:45.133 990 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
2025/07/21-15:21:17.558 8344 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
2025/07/18-16:10:16.297 1248 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
2025/07/21-15:10:12.398 7cc4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||||
2025/07/18-16:10:16.303 1248 Recovering log #3
|
2025/07/21-15:10:12.406 7cc4 Recovering log #3
|
||||||
2025/07/18-16:10:16.306 1248 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
2025/07/21-15:10:12.409 7cc4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13397427789769984","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":13901},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:69b:cf00:d5cb:d183:c651:2afa","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}
|
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13397682078167259","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":58184},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:69b:cf00:e1c9:9847:8945:20fe","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,3 +1,3 @@
|
||||||
2025/07/18-16:56:03.153 990 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
2025/07/21-15:34:33.516 8344 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
||||||
2025/07/18-16:56:03.154 990 Recovering log #3
|
2025/07/21-15:34:33.517 8344 Recovering log #3
|
||||||
2025/07/18-16:56:03.157 990 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
2025/07/21-15:34:33.520 8344 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
2025/07/18-16:17:14.846 1248 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
2025/07/21-15:18:09.336 7cc4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
||||||
2025/07/18-16:17:14.847 1248 Recovering log #3
|
2025/07/21-15:18:09.338 7cc4 Recovering log #3
|
||||||
2025/07/18-16:17:14.850 1248 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
2025/07/21-15:18:09.342 7cc4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
2025/07/18-16:42:45.037 6640 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
2025/07/21-15:21:17.473 813c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
||||||
2025/07/18-16:42:45.039 6640 Recovering log #7
|
2025/07/21-15:21:17.474 813c Recovering log #7
|
||||||
2025/07/18-16:42:45.040 6640 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
2025/07/21-15:21:17.475 813c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
2025/07/18-16:10:16.228 5b90 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
2025/07/21-15:10:12.318 189c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
||||||
2025/07/18-16:10:16.229 5b90 Recovering log #7
|
2025/07/21-15:10:12.320 189c Recovering log #7
|
||||||
2025/07/18-16:10:16.230 5b90 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
2025/07/21-15:10:12.320 189c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -17,7 +17,7 @@
|
||||||
<meta name="viewport" content="width=device-width,
|
<meta name="viewport" content="width=device-width,
|
||||||
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
<style>
|
<style>
|
||||||
#map_da5e1542c7ab541155af4f4c041e9c23 {
|
#map_9167a3f59236bbe3ca57b08de1d97258 {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100.0%;
|
width: 100.0%;
|
||||||
height: 100.0%;
|
height: 100.0%;
|
||||||
|
|
@ -54,14 +54,14 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
|
||||||
<div class="folium-map" id="map_da5e1542c7ab541155af4f4c041e9c23" ></div>
|
<div class="folium-map" id="map_9167a3f59236bbe3ca57b08de1d97258" ></div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|
||||||
var map_da5e1542c7ab541155af4f4c041e9c23 = L.map(
|
var map_9167a3f59236bbe3ca57b08de1d97258 = L.map(
|
||||||
"map_da5e1542c7ab541155af4f4c041e9c23",
|
"map_9167a3f59236bbe3ca57b08de1d97258",
|
||||||
{
|
{
|
||||||
center: [0.0, 0.0],
|
center: [0.0, 0.0],
|
||||||
crs: L.CRS.EPSG3857,
|
crs: L.CRS.EPSG3857,
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var tile_layer_3635f6a14539c3f382434fa86536d4f3 = L.tileLayer(
|
var tile_layer_d32108711f97218804be105ee489826b = L.tileLayer(
|
||||||
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||||
{
|
{
|
||||||
"minZoom": 0,
|
"minZoom": 0,
|
||||||
|
|
@ -95,7 +95,7 @@
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
tile_layer_3635f6a14539c3f382434fa86536d4f3.addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
tile_layer_d32108711f97218804be105ee489826b.addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -116,7 +116,7 @@
|
||||||
}
|
}
|
||||||
trajeto_json_add({"features": []});
|
trajeto_json_add({"features": []});
|
||||||
|
|
||||||
trajeto_json.addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
trajeto_json.addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||||
|
|
||||||
function adicionarGeometria(novaGeometria) {
|
function adicionarGeometria(novaGeometria) {
|
||||||
trajeto_json.addData(novaGeometria);
|
trajeto_json.addData(novaGeometria);
|
||||||
|
|
@ -179,9 +179,9 @@
|
||||||
|
|
||||||
var marcadorEquipamento = L.marker([0, 0], {
|
var marcadorEquipamento = L.marker([0, 0], {
|
||||||
icon: customIcon
|
icon: customIcon
|
||||||
}).addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
}).addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||||
|
|
||||||
var marcadorBase = L.marker([0, 0], {}).addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
var marcadorBase = L.marker([0, 0], {}).addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||||
var icon = L.AwesomeMarkers.icon(
|
var icon = L.AwesomeMarkers.icon(
|
||||||
{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}
|
{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}
|
||||||
);
|
);
|
||||||
|
|
@ -246,7 +246,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foco) {
|
if (foco) {
|
||||||
map_da5e1542c7ab541155af4f4c041e9c23.setView(novaPosicao, map_da5e1542c7ab541155af4f4c041e9c23.getZoom());
|
map_9167a3f59236bbe3ca57b08de1d97258.setView(novaPosicao, map_9167a3f59236bbe3ca57b08de1d97258.getZoom());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -268,7 +268,7 @@
|
||||||
marcadorDinamico.setRotationAngle(angulo);
|
marcadorDinamico.setRotationAngle(angulo);
|
||||||
|
|
||||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||||
map_da5e1542c7ab541155af4f4c041e9c23.setView(novaPosicao, map_da5e1542c7ab541155af4f4c041e9c23.getZoom());*/
|
map_9167a3f59236bbe3ca57b08de1d97258.setView(novaPosicao, map_9167a3f59236bbe3ca57b08de1d97258.getZoom());*/
|
||||||
});
|
});
|
||||||
|
|
||||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,12 @@ class CameraOak:
|
||||||
|
|
||||||
if self.tem_depth:
|
if self.tem_depth:
|
||||||
self.q_depth = self.device.getOutputQueue(name="depth", maxSize=1, blocking=False)
|
self.q_depth = self.device.getOutputQueue(name="depth", maxSize=1, blocking=False)
|
||||||
|
|
||||||
|
if self.tem_imu:
|
||||||
|
self.q_imu = self.device.getOutputQueue(name="imu", maxSize=50, blocking=False)
|
||||||
|
self.imu = IMUCamera(self.q_imu)
|
||||||
|
|
||||||
|
if self.dispositivo == T_Code.Snr:
|
||||||
self.parametros = {
|
self.parametros = {
|
||||||
"rgb_width": 1920,
|
"rgb_width": 1920,
|
||||||
"rgb_height": 1080,
|
"rgb_height": 1080,
|
||||||
|
|
@ -90,10 +96,12 @@ class CameraOak:
|
||||||
}
|
}
|
||||||
self._set_calib()
|
self._set_calib()
|
||||||
_camera["parametros"] = self.parametros
|
_camera["parametros"] = self.parametros
|
||||||
|
elif self.dispositivo == T_Code.Cam:
|
||||||
if self.tem_imu:
|
self.parametros = {
|
||||||
self.q_imu = self.device.getOutputQueue(name="imu", maxSize=50, blocking=False)
|
"rgb_width": 1920,
|
||||||
self.imu = IMUCamera(self.q_imu)
|
"rgb_height": 1080,
|
||||||
|
}
|
||||||
|
_camera["parametros"] = self.parametros
|
||||||
|
|
||||||
self.iniciado = True
|
self.iniciado = True
|
||||||
_camera["iniciado"] = True
|
_camera["iniciado"] = True
|
||||||
|
|
@ -243,55 +251,56 @@ class CameraOak:
|
||||||
"executando": False,
|
"executando": False,
|
||||||
"velocidade": ""
|
"velocidade": ""
|
||||||
}
|
}
|
||||||
try:
|
if conectado:
|
||||||
dev = self.device
|
try:
|
||||||
temp = dev.getChipTemperature().average
|
dev = self.device
|
||||||
ddr = dev.getDdrMemoryUsage().used / 1024.0 / 1024.0
|
temp = dev.getChipTemperature().average
|
||||||
running = dev.isPipelineRunning()
|
ddr = dev.getDdrMemoryUsage().used / 1024.0 / 1024.0
|
||||||
speed = dev.getUsbSpeed().name
|
running = dev.isPipelineRunning()
|
||||||
performance = {
|
speed = dev.getUsbSpeed().name
|
||||||
"temperatura": temp,
|
performance = {
|
||||||
"memoria_usada": ddr,
|
"temperatura": temp,
|
||||||
"executando": running,
|
"memoria_usada": ddr,
|
||||||
"velocidade": speed
|
"executando": running,
|
||||||
}
|
"velocidade": speed
|
||||||
# 🔸 Temperatura (> 60 °C começa a penalizar)
|
}
|
||||||
if temp >= 80:
|
# 🔸 Temperatura (> 60 °C começa a penalizar)
|
||||||
motivos.append(f"Temperatura crítica: {temp:.1f} °C")
|
if temp >= 80:
|
||||||
saude -= 30
|
motivos.append(f"Temperatura crítica: {temp:.1f} °C")
|
||||||
elif temp >= 70:
|
saude -= 30
|
||||||
motivos.append(f"Temperatura elevada: {temp:.1f} °C")
|
elif temp >= 70:
|
||||||
saude -= 15
|
motivos.append(f"Temperatura elevada: {temp:.1f} °C")
|
||||||
elif temp >= 60:
|
saude -= 15
|
||||||
motivos.append(f"Temperatura acima do ideal: {temp:.1f} °C")
|
elif temp >= 60:
|
||||||
saude -= 5
|
motivos.append(f"Temperatura acima do ideal: {temp:.1f} °C")
|
||||||
|
saude -= 5
|
||||||
|
|
||||||
# 🔸 Memória DDR (> 300 MB começa a penalizar)
|
# 🔸 Memória DDR (> 300 MB começa a penalizar)
|
||||||
if ddr >= 500:
|
if ddr >= 500:
|
||||||
motivos.append(f"Memória DDR crítica: {ddr:.1f} MB")
|
motivos.append(f"Memória DDR crítica: {ddr:.1f} MB")
|
||||||
saude -= 30
|
saude -= 30
|
||||||
elif ddr >= 400:
|
elif ddr >= 400:
|
||||||
motivos.append(f"Memória DDR elevada: {ddr:.1f} MB")
|
motivos.append(f"Memória DDR elevada: {ddr:.1f} MB")
|
||||||
saude -= 15
|
saude -= 15
|
||||||
elif ddr >= 300:
|
elif ddr >= 300:
|
||||||
motivos.append(f"Memória DDR acima do ideal: {ddr:.1f} MB")
|
motivos.append(f"Memória DDR acima do ideal: {ddr:.1f} MB")
|
||||||
saude -= 5
|
saude -= 5
|
||||||
|
|
||||||
# 🔸 Pipeline inativa
|
# 🔸 Pipeline inativa
|
||||||
if not running:
|
if not running:
|
||||||
motivos.append("Pipeline parada")
|
motivos.append("Pipeline parada")
|
||||||
saude -= 20
|
saude -= 20
|
||||||
|
|
||||||
# 🔸 USB Speed
|
# 🔸 USB Speed
|
||||||
if speed.lower() not in ["super", "superplus"]: # USB 3.x
|
if speed.lower() not in ["super", "superplus"]: # USB 3.x
|
||||||
motivos.append(f"USB lenta: {speed}")
|
motivos.append(f"USB lenta: {speed}")
|
||||||
saude -= 15
|
saude -= 15
|
||||||
except Exception as e:
|
|
||||||
self.mostrar_log(f"Erro ao requisitar dados da camera para atualizar saude")
|
|
||||||
if "Communication exception" in str(e) or "X_LINK_ERROR" in str(e):
|
|
||||||
conectado = False
|
|
||||||
|
|
||||||
frame, resultado = self.requisitar_frame_rgb()
|
frame, resultado = self.requisitar_frame_rgb()
|
||||||
|
except Exception as e:
|
||||||
|
self.mostrar_log(f"Erro ao requisitar dados da camera para atualizar saude")
|
||||||
|
if "Communication exception" in str(e) or "X_LINK_ERROR" in str(e):
|
||||||
|
conectado = False
|
||||||
|
|
||||||
if not conectado:
|
if not conectado:
|
||||||
motivos.append("desconectado")
|
motivos.append("desconectado")
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import time
|
import time
|
||||||
import depthai as dai
|
import depthai as dai
|
||||||
from shared.enums import StatusModulo, T_Code, VisualWorkerCommandType
|
from shared.enums import StatusModulo, T_Code, VisualWorkerCommandType, WeedWorkerCommandType
|
||||||
from shared.contexto_global_redis import ContextoGlobalRedis, CtxKey, CmdKey
|
from shared.contexto_global_redis import ContextoGlobalRedis, CtxKey, CmdKey
|
||||||
|
|
||||||
class CameraManager:
|
class CameraManager:
|
||||||
|
|
@ -45,10 +45,15 @@ class CameraManager:
|
||||||
for cam in cameras_mapeadas.values():
|
for cam in cameras_mapeadas.values():
|
||||||
if cam.get("dispositivo", T_Code.Vzo.value) == T_Code.Snr.value:
|
if cam.get("dispositivo", T_Code.Vzo.value) == T_Code.Snr.value:
|
||||||
ContextoGlobalRedis.publicar_comando(CmdKey.VisualWorkerRx, { "cmd": VisualWorkerCommandType.AtualizarSaudeCamera.value } )
|
ContextoGlobalRedis.publicar_comando(CmdKey.VisualWorkerRx, { "cmd": VisualWorkerCommandType.AtualizarSaudeCamera.value } )
|
||||||
|
elif cam.get("dispositivo", T_Code.Vzo.value) == T_Code.Cam.value:
|
||||||
|
ContextoGlobalRedis.publicar_comando(CmdKey.WeedWorkerRx, { "cmd": WeedWorkerCommandType.AtualizarSaudeCamera.value } )
|
||||||
|
|
||||||
visual_worker_camera_id = ContextoGlobalRedis.get_operacao().get("Snr", {}).get("mx_id")
|
visual_worker_camera_id = ContextoGlobalRedis.get_equipamento().get("camera_caminho_id")
|
||||||
if visual_worker_camera_id is not None and visual_worker_camera_id in dispositivos_serializados:
|
if visual_worker_camera_id is not None and visual_worker_camera_id in dispositivos_serializados:
|
||||||
ContextoGlobalRedis.publicar_comando(CmdKey.VisualWorkerRx, { "cmd": VisualWorkerCommandType.IniciarCameraManager.value, "params": visual_worker_camera_id } )
|
ContextoGlobalRedis.publicar_comando(CmdKey.VisualWorkerRx, { "cmd": VisualWorkerCommandType.IniciarCameraManager.value, "params": visual_worker_camera_id } )
|
||||||
|
weed_worker_camera_id = ContextoGlobalRedis.get_equipamento().get("camera_solo_id")
|
||||||
|
if weed_worker_camera_id is not None and weed_worker_camera_id in dispositivos_serializados:
|
||||||
|
ContextoGlobalRedis.publicar_comando(CmdKey.WeedWorkerRx, { "cmd": WeedWorkerCommandType.IniciarCameraManager.value, "params": weed_worker_camera_id } )
|
||||||
|
|
||||||
|
|
||||||
def definir_saude_camera(mx_id: str, status: StatusModulo, saude: int, motivos: list, rodando: bool, performance: dict):
|
def definir_saude_camera(mx_id: str, status: StatusModulo, saude: int, motivos: list, rodando: bool, performance: dict):
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ from manager_worker.main import main as iniciar_manager_worker
|
||||||
from health_worker.main import main as iniciar_health_worker
|
from health_worker.main import main as iniciar_health_worker
|
||||||
from visual_worker.main import main as iniciar_visual_worker
|
from visual_worker.main import main as iniciar_visual_worker
|
||||||
from camera_worker.main import main as iniciar_camera_worker
|
from camera_worker.main import main as iniciar_camera_worker
|
||||||
|
from weed_worker.main import main as iniciar_weed_worker
|
||||||
from shared.contexto_global_redis import ContextoGlobalRedis
|
from shared.contexto_global_redis import ContextoGlobalRedis
|
||||||
|
|
||||||
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||||
|
|
@ -18,6 +19,7 @@ def main():
|
||||||
Process(target=iniciar_health_worker, name="HealthWorker"),
|
Process(target=iniciar_health_worker, name="HealthWorker"),
|
||||||
Process(target=iniciar_visual_worker, name="VisualWorker"),
|
Process(target=iniciar_visual_worker, name="VisualWorker"),
|
||||||
Process(target=iniciar_camera_worker, name="CameraWorker"),
|
Process(target=iniciar_camera_worker, name="CameraWorker"),
|
||||||
|
Process(target=iniciar_weed_worker, name="WeedWorker"),
|
||||||
]
|
]
|
||||||
|
|
||||||
for p in processos:
|
for p in processos:
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ class CtxKey(str, Enum):
|
||||||
DadosControle = "ctx:dados_controle"
|
DadosControle = "ctx:dados_controle"
|
||||||
DadosEquipamento = "ctx:dados_equipamento"
|
DadosEquipamento = "ctx:dados_equipamento"
|
||||||
DadosVisualWorker = "ctx:dados_visual_worker"
|
DadosVisualWorker = "ctx:dados_visual_worker"
|
||||||
|
DadosWeedWorker = "ctx:dados_weed_worker"
|
||||||
DadosManagerWorker = "ctx:dados_manager_worker"
|
DadosManagerWorker = "ctx:dados_manager_worker"
|
||||||
DadosHealthWorker = "ctx:dados_health_worker"
|
DadosHealthWorker = "ctx:dados_health_worker"
|
||||||
DadosCameraWorker = "ctx:dados_camera_worker"
|
DadosCameraWorker = "ctx:dados_camera_worker"
|
||||||
|
|
@ -29,6 +30,8 @@ class CmdKey(str, Enum):
|
||||||
CameraWorkerRx = "cmd_rx:camera_worker"
|
CameraWorkerRx = "cmd_rx:camera_worker"
|
||||||
ManagerWorkerTx = "cmd_tx:manager_worker"
|
ManagerWorkerTx = "cmd_tx:manager_worker"
|
||||||
ManagerWorkerRx = "cmd_rx:manager_worker"
|
ManagerWorkerRx = "cmd_rx:manager_worker"
|
||||||
|
WeedWorkerTx = "cmd_tx:weed_worker"
|
||||||
|
WeedWorkerRx = "cmd_rx:weed_worker"
|
||||||
|
|
||||||
|
|
||||||
def mostrar_log(mensagem):
|
def mostrar_log(mensagem):
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,14 @@ class ManagerWorkerCommandType(IntEnum):
|
||||||
EnviarDadosControle = 4
|
EnviarDadosControle = 4
|
||||||
FinalizarOperacao = 5
|
FinalizarOperacao = 5
|
||||||
|
|
||||||
|
class WeedWorkerCommandType(IntEnum):
|
||||||
|
ScriptCarregado = 1
|
||||||
|
IniciarCameraManager = 2
|
||||||
|
AtualizarSaudeCamera = 3
|
||||||
|
GetCameraFrame = 4
|
||||||
|
SaveCameraFrames = 5
|
||||||
|
EnviarDadosControle = 6
|
||||||
|
|
||||||
class ModoOperacao(IntEnum):
|
class ModoOperacao(IntEnum):
|
||||||
NaoDefinido = 0
|
NaoDefinido = 0
|
||||||
Manual = 1
|
Manual = 1
|
||||||
|
|
@ -146,26 +154,9 @@ class TipoPontoRua(IntEnum):
|
||||||
CruvaEntreCorredores = 6
|
CruvaEntreCorredores = 6
|
||||||
Desvio = 7
|
Desvio = 7
|
||||||
|
|
||||||
# Visual Worker
|
class CameraFrameType(IntEnum):
|
||||||
class VisualWorkerFrameType(IntEnum):
|
|
||||||
Rgb = 1
|
Rgb = 1
|
||||||
Heatmap = 2
|
Heatmap = 2
|
||||||
RadarTopDown = 3
|
RadarTopDown = 3
|
||||||
Segmentacao = 4
|
Segmentacao = 4
|
||||||
Debug = 5
|
Debug = 5
|
||||||
|
|
||||||
class VisualWorkerTipoDeteccao(IntEnum):
|
|
||||||
SEGURO = 1
|
|
||||||
OBSTACULO = 2
|
|
||||||
DEPRESSAO = 3
|
|
||||||
|
|
||||||
class VisualWorkerTipoRegiaoRadar(IntEnum):
|
|
||||||
SOLO = 1
|
|
||||||
AEREO = 2
|
|
||||||
|
|
||||||
class VisualWorkerTipoAnalise(IntEnum):
|
|
||||||
ANOMALIA = 1
|
|
||||||
SOLO = 2
|
|
||||||
RADAR_2D = 3
|
|
||||||
SEGMENTACAO_SEMANTICA = 4
|
|
||||||
MATRIZ_CONFIANCA = 5
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ from visual_worker.processamento.analise_solo import AnaliseSoloManager
|
||||||
from visual_worker.processamento.analise_anomalias import AnaliseAnomaliasManager
|
from visual_worker.processamento.analise_anomalias import AnaliseAnomaliasManager
|
||||||
from visual_worker.processamento.radar_top_down import Radar2DManager
|
from visual_worker.processamento.radar_top_down import Radar2DManager
|
||||||
from visual_worker.processamento.segmentacao_semantica import ClassesSegmentacao, SegmentacaoManager
|
from visual_worker.processamento.segmentacao_semantica import ClassesSegmentacao, SegmentacaoManager
|
||||||
from shared.enums import StatusModulo, T_Code, VisualWorkerFrameType
|
from shared.enums import StatusModulo, T_Code, CameraFrameType
|
||||||
from shared.utils import analisar_linhas_por_profundidade, decode_image_base64, encode_image_base64
|
from shared.utils import analisar_linhas_por_profundidade, decode_image_base64, encode_image_base64
|
||||||
from shared.gps_handler import GPSHandler
|
from shared.gps_handler import GPSHandler
|
||||||
from camera_worker.camera_oak import CameraOak
|
from camera_worker.camera_oak import CameraOak
|
||||||
|
|
@ -130,35 +130,35 @@ class CameraManager:
|
||||||
return gerar_heatmap(frame, self.camera.parametros["distancia_maxima"]), timestamp, res
|
return gerar_heatmap(frame, self.camera.parametros["distancia_maxima"]), timestamp, res
|
||||||
return None, None, None
|
return None, None, None
|
||||||
|
|
||||||
def get_select_frame(self, tipo: VisualWorkerFrameType):
|
def get_select_frame(self, tipo: CameraFrameType):
|
||||||
f = None
|
f = None
|
||||||
t = None
|
t = None
|
||||||
if tipo == VisualWorkerFrameType.Rgb:
|
if tipo == CameraFrameType.Rgb:
|
||||||
f, t, _ = self.get_rgb_frame()
|
f, t, _ = self.get_rgb_frame()
|
||||||
f = encode_image_base64(f)
|
f = encode_image_base64(f)
|
||||||
elif tipo == VisualWorkerFrameType.Heatmap:
|
elif tipo == CameraFrameType.Heatmap:
|
||||||
f, t, _ = self.get_heatmap_frame()
|
f, t, _ = self.get_heatmap_frame()
|
||||||
f = encode_image_base64(f)
|
f = encode_image_base64(f)
|
||||||
elif tipo == VisualWorkerFrameType.RadarTopDown:
|
elif tipo == CameraFrameType.RadarTopDown:
|
||||||
f = self._ultima_analise_radar.get("frame", {}).get("frame")
|
f = self._ultima_analise_radar.get("frame", {}).get("frame")
|
||||||
t = self._ultima_analise_radar.get("timestamp")
|
t = self._ultima_analise_radar.get("timestamp")
|
||||||
elif tipo == VisualWorkerFrameType.Segmentacao:
|
elif tipo == CameraFrameType.Segmentacao:
|
||||||
f = self._ultima_analise_segmentacao.get("frame", {}).get("frame")
|
f = self._ultima_analise_segmentacao.get("frame", {}).get("frame")
|
||||||
t = self._ultima_analise_segmentacao.get("timestamp")
|
t = self._ultima_analise_segmentacao.get("timestamp")
|
||||||
return f, t
|
return f, t
|
||||||
|
|
||||||
def _iniciar_loop_analise_continua(self, freq):
|
def _iniciar_loop_analise_continua(self, freq):
|
||||||
def loop():
|
def loop():
|
||||||
ultima_atualizacao = 0
|
ultima_atualizacao_saude = 0
|
||||||
while True:
|
while True:
|
||||||
if self.camera is None:
|
if self.camera is None:
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
if (t0 - ultima_atualizacao) >= 1:
|
if (t0 - ultima_atualizacao_saude) >= 1:
|
||||||
self.camera.atualizar_saude()
|
self.camera.atualizar_saude()
|
||||||
ultima_atualizacao = time.time()
|
ultima_atualizacao_saude = time.time()
|
||||||
try:
|
try:
|
||||||
status = StatusModulo((self.camera.ultima_saude or {}).get("status", StatusModulo.DESCONECTADO.value))
|
status = StatusModulo((self.camera.ultima_saude or {}).get("status", StatusModulo.DESCONECTADO.value))
|
||||||
if status == StatusModulo.DESCONECTADO:
|
if status == StatusModulo.DESCONECTADO:
|
||||||
|
|
@ -506,7 +506,7 @@ class CameraManager:
|
||||||
if nome is not None and nome != "":
|
if nome is not None and nome != "":
|
||||||
frame_name = nome
|
frame_name = nome
|
||||||
|
|
||||||
if VisualWorkerFrameType.Rgb.value in tipos:
|
if CameraFrameType.Rgb.value in tipos:
|
||||||
rgb_frame, rgb_ts, rgb_res = self.get_rgb_frame()
|
rgb_frame, rgb_ts, rgb_res = self.get_rgb_frame()
|
||||||
if rgb_frame is not None and rgb_res["frame_valido"]:
|
if rgb_frame is not None and rgb_res["frame_valido"]:
|
||||||
nome_rgb = f"{frame_name}_rgb.jpeg"
|
nome_rgb = f"{frame_name}_rgb.jpeg"
|
||||||
|
|
@ -514,7 +514,7 @@ class CameraManager:
|
||||||
cv2.imwrite(caminho_rgb, rgb_frame)
|
cv2.imwrite(caminho_rgb, rgb_frame)
|
||||||
frames_salvos.append(caminho_rgb)
|
frames_salvos.append(caminho_rgb)
|
||||||
|
|
||||||
if VisualWorkerFrameType.Heatmap.value in tipos:
|
if CameraFrameType.Heatmap.value in tipos:
|
||||||
heatmap_frame, heatmap_ts, heatmap_res = self.get_heatmap_frame()
|
heatmap_frame, heatmap_ts, heatmap_res = self.get_heatmap_frame()
|
||||||
if heatmap_frame is not None and heatmap_res["frame_valido"]:
|
if heatmap_frame is not None and heatmap_res["frame_valido"]:
|
||||||
nome_heatmap = f"{frame_name}_heatmap.jpeg"
|
nome_heatmap = f"{frame_name}_heatmap.jpeg"
|
||||||
|
|
@ -522,12 +522,12 @@ class CameraManager:
|
||||||
cv2.imwrite(caminho_heatmap, heatmap_frame)
|
cv2.imwrite(caminho_heatmap, heatmap_frame)
|
||||||
frames_salvos.append(caminho_heatmap)
|
frames_salvos.append(caminho_heatmap)
|
||||||
|
|
||||||
if VisualWorkerFrameType.RadarTopDown.value in tipos:
|
if CameraFrameType.RadarTopDown.value in tipos:
|
||||||
frame = self._salvar_frame_analise(frame_name, self._ultima_analise_radar, "radar", pasta)
|
frame = self._salvar_frame_analise(frame_name, self._ultima_analise_radar, "radar", pasta)
|
||||||
if frame is not None:
|
if frame is not None:
|
||||||
frames_salvos.append(frame)
|
frames_salvos.append(frame)
|
||||||
|
|
||||||
if VisualWorkerFrameType.Segmentacao.value in tipos:
|
if CameraFrameType.Segmentacao.value in tipos:
|
||||||
frame = self._salvar_frame_analise(frame_name, self._ultima_analise_segmentacao, "segmentacao", pasta)
|
frame = self._salvar_frame_analise(frame_name, self._ultima_analise_segmentacao, "segmentacao", pasta)
|
||||||
if frame is not None:
|
if frame is not None:
|
||||||
frames_salvos.append(frame)
|
frames_salvos.append(frame)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ def main():
|
||||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||||
print("🔎 Caminho sys.path:", os.path.abspath(os.path.join(os.path.dirname(__file__), "..")), "VisualWorker")
|
print("🔎 Caminho sys.path:", os.path.abspath(os.path.join(os.path.dirname(__file__), "..")), "VisualWorker")
|
||||||
|
|
||||||
from shared.enums import VisualWorkerCommandType, VisualWorkerFrameType
|
from shared.enums import VisualWorkerCommandType, CameraFrameType
|
||||||
from visual_worker.config import mostrar_log, get_camera_manager, iniciar_camera_manager
|
from visual_worker.config import mostrar_log, get_camera_manager, iniciar_camera_manager
|
||||||
from shared.contexto_global_redis import ContextoGlobalRedis, CmdKey, CtxKey
|
from shared.contexto_global_redis import ContextoGlobalRedis, CmdKey, CtxKey
|
||||||
|
|
||||||
|
|
@ -49,7 +49,7 @@ def main():
|
||||||
elif acao == VisualWorkerCommandType.AtualizarSaudeCamera:
|
elif acao == VisualWorkerCommandType.AtualizarSaudeCamera:
|
||||||
get_camera_manager().atualizar_saude_camera()
|
get_camera_manager().atualizar_saude_camera()
|
||||||
elif acao == VisualWorkerCommandType.GetCameraFrame:
|
elif acao == VisualWorkerCommandType.GetCameraFrame:
|
||||||
tipo = VisualWorkerFrameType(dados.get("params", VisualWorkerFrameType.Rgb.value))
|
tipo = CameraFrameType(dados.get("params", CameraFrameType.Rgb.value))
|
||||||
base64_img, ts = get_camera_manager().get_select_frame(tipo)
|
base64_img, ts = get_camera_manager().get_select_frame(tipo)
|
||||||
if base64_img is not None:
|
if base64_img is not None:
|
||||||
resposta = {
|
resposta = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue