corrigido atuadores

This commit is contained in:
Diego Freitas 2024-03-11 17:04:48 -03:00
parent 120738582b
commit d351152f37
66 changed files with 886 additions and 321 deletions

Binary file not shown.

View File

@ -4,35 +4,19 @@ using System.ComponentModel;
using System.Data; using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO;
using System.Linq; using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using AgroBase.Models; using AgroBase.Models;
using AgroBase.Services; using AgroBase.Services;
using CefSharp.WinForms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Newtonsoft.Json; using Newtonsoft.Json;
using static MqttService;
namespace AgroBase.Forms namespace AgroBase.Forms
{ {
public partial class frmAtuCamera : Form public partial class frmAtuCamera : Form
{ {
private CameraService cameraService = new CameraService(); private CameraSoloModel cameraSolo = new CameraSoloModel();
private ChromiumWebBrowser chromiumWebBrowser = null;
private Timer tmrLeitura; private Timer tmrLeitura;
private int MaxLeituras = 10;
private string VideoPorta = VariaveisPortas.CameraSolo.ToString();
private string VideoUrl = "green_objects";
private string SocketPorta = VariaveisPortas.SocketSolo.ToString();
private string ArquivoLeitura = "objetos.json";
public frmAtuCamera() public frmAtuCamera()
{ {
InitializeComponent(); InitializeComponent();
@ -40,6 +24,21 @@ namespace AgroBase.Forms
private void frmCamera_Load(object sender, EventArgs e) private void frmCamera_Load(object sender, EventArgs e)
{ {
cameraSolo = new CameraSoloModel()
{
Nome = "T",
Posicao = Variaveis.OperacaoEmAndamento.CamerasSolo.Count(),
ArquivoLeitura = "ervas_T.json",
browser = null,
camera = new CameraService(),
CameraSelecionada = "",
combo = cmbCameras,
MaxLeituras = 10,
VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.CamerasSolo.Count()).ToString(),
VideoUrl = "green_objects_T",
MqttTopico = "green_objects_T",
panel = pnlCamera,
};
AtualizaListaCameras(); AtualizaListaCameras();
} }
@ -47,8 +46,8 @@ namespace AgroBase.Forms
{ {
try try
{ {
cameraService.pythonProcess.Kill(); cameraSolo.camera.pythonProcess.Kill();
Variaveis.MqttService.UnsubscribeAsync(cameraService._mqttTopico).GetAwaiter().GetResult(); Variaveis.MqttService.UnsubscribeAsync(cameraSolo.camera._mqttTopico).ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -77,7 +76,7 @@ namespace AgroBase.Forms
else else
{ {
btnSalvar.Text = "Editar"; btnSalvar.Text = "Editar";
cameraService.selectedCamera = cmbCameras.SelectedIndex; cameraSolo.camera.selectedCamera = cmbCameras.SelectedIndex;
} }
btnIniciar.Enabled = btnSalvar.Text == "Editar" && cmbCameras.SelectedIndex > 0; btnIniciar.Enabled = btnSalvar.Text == "Editar" && cmbCameras.SelectedIndex > 0;
cmbCameras.Enabled = btnSalvar.Text == "Salvar"; cmbCameras.Enabled = btnSalvar.Text == "Salvar";
@ -85,21 +84,20 @@ namespace AgroBase.Forms
private void btnIniciar_Click(object sender, EventArgs e) private void btnIniciar_Click(object sender, EventArgs e)
{ {
cameraService.ArquivoLeitura = ArquivoLeitura; cameraSolo.camera.IniciarCamera(
cameraService.IniciarCamera(
PythonService.ScriptWeedDetector, PythonService.ScriptWeedDetector,
new string[] { new string[] {
MaxLeituras.ToString(), cameraSolo.MaxLeituras.ToString(),
VideoPorta, cameraSolo.VideoPorta,
VideoUrl, cameraSolo.VideoUrl,
ArquivoLeitura, cameraSolo.ArquivoLeitura,
"1", "1",
VideoUrl cameraSolo.MqttTopico
}, },
VideoPorta, cameraSolo.VideoPorta,
VideoUrl, cameraSolo.VideoUrl,
VideoUrl, cameraSolo.MqttTopico,
new Timer() cameraSolo.tmrProcesso
); );
tmrLeitura = new Timer() { Interval = 200 }; tmrLeitura = new Timer() { Interval = 200 };
@ -110,32 +108,25 @@ namespace AgroBase.Forms
private void AtualizaListaCameras() private void AtualizaListaCameras()
{ {
cameraService.selectedCamera = cmbCameras.SelectedIndex > 0 ? cmbCameras.SelectedIndex : 0; cameraSolo.camera.selectedCamera = cmbCameras.SelectedIndex > 0 ? cmbCameras.SelectedIndex : 0;
cmbCameras.Items.Clear(); cmbCameras.Items.Clear();
cmbCameras.Items.AddRange(CameraService.AtualizaListaCameras().Keys.ToArray()); cmbCameras.Items.AddRange(CameraService.AtualizaListaCameras().Keys.ToArray());
if (cmbCameras.Items.Count == 1) if (cmbCameras.Items.Count == 1)
{ {
cameraService.selectedCamera = 0; cameraSolo.camera.selectedCamera = 0;
} }
cmbCameras.SelectedIndex = cameraService.selectedCamera; cmbCameras.SelectedIndex = cameraSolo.camera.selectedCamera;
} }
private void ListarObjetosDetectados() private void ListarObjetosDetectados()
{ {
if (chromiumWebBrowser == null)
{
chromiumWebBrowser = new ChromiumWebBrowser(cameraService.URLcamera);
this.pnlCamera.Controls.Add(chromiumWebBrowser);
chromiumWebBrowser.Dock = DockStyle.Fill;
}
this.pnlLeituras.Controls.Clear(); this.pnlLeituras.Controls.Clear();
int i = 0; int i = 0;
//var coordenadas = cameraService.AferirDadosCamera<CameraCoordenadasModel>(); //var coordenadas = cameraService.AferirDadosCamera<CameraCoordenadasModel>();
var MqttTopico = Variaveis.MqttService.Topicos.FirstOrDefault(x => x.Topico == VideoUrl); var MqttTopico = Variaveis.MqttService.Topicos.FirstOrDefault(x => x.Topico == cameraSolo.MqttTopico);
CameraCoordenadasFrameModel leitura = null; CameraCoordenadasFrameModel leitura = null;
var Mensagem = MqttTopico.Mensagens.LastOrDefault(x => x.Momento > cameraService.IniciadoEm); var Mensagem = MqttTopico.Mensagens.LastOrDefault(x => x.Momento > cameraSolo.camera.IniciadoEm);
if (Mensagem != null) if (Mensagem != null)
{ {
try try
@ -148,77 +139,82 @@ namespace AgroBase.Forms
} }
} }
foreach (var objeto in leitura.objetos) if (leitura != null)
{ {
GroupBox gpb = new GroupBox() foreach (var objeto in leitura.objetos)
{ {
Name = "gpbLeitura" + i, GroupBox gpb = new GroupBox()
Size = new Size(120, 170), {
Text = "Leitura " + (i + 1), Name = "gpbLeitura" + i,
Location = new Point(3, 3 + (i * 190)) Size = new Size(120, 170),
}; Text = "Leitura " + (i + 1),
Label _lblID = new Label() Location = new Point(3, 3 + (i * 190))
{ };
Name = "lblLeitura" + i + "ID", Label _lblID = new Label()
Size = new Size(100, 20), {
Text = "ID: " + objeto.id, Name = "lblLeitura" + i + "ID",
Location = new Point(6, 20) Size = new Size(100, 20),
}; Text = "ID: " + objeto.id,
Label _lblDescricao = new Label() Location = new Point(6, 20)
{ };
Name = "lblLeitura" + i + "Descricao", Label _lblDescricao = new Label()
Size = new Size(100, 20), {
Text = "Descrição: " + objeto.descricao, Name = "lblLeitura" + i + "Descricao",
Location = new Point(6, 40) Size = new Size(100, 20),
}; Text = "Descrição: " + objeto.descricao,
Label _lblConfianca = new Label() Location = new Point(6, 40)
{ };
Name = "lblLeitura" + i + "Confianca", Label _lblConfianca = new Label()
Size = new Size(100, 20), {
Text = "Confiança: " + (objeto.confianca * 100).ToString("0.00") + "%", Name = "lblLeitura" + i + "Confianca",
Location = new Point(6, 60) Size = new Size(100, 20),
}; Text = "Confiança: " + (objeto.confianca * 100).ToString("0.00") + "%",
Label _lblX = new Label() Location = new Point(6, 60)
{ };
Name = "lblLeitura" + i + "X", Label _lblX = new Label()
Size = new Size(100, 20), {
Text = "X: " + objeto.x, Name = "lblLeitura" + i + "X",
Location = new Point(6, 80) Size = new Size(100, 20),
}; Text = "X: " + objeto.x,
Label _lblY = new Label() Location = new Point(6, 80)
{ };
Name = "lblLeitura" + i + "Y", Label _lblY = new Label()
Size = new Size(100, 20), {
Text = "Y: " + objeto.y, Name = "lblLeitura" + i + "Y",
Location = new Point(6, 100) Size = new Size(100, 20),
}; Text = "Y: " + objeto.y,
Label _lblAltura = new Label() Location = new Point(6, 100)
{ };
Name = "lblLeitura" + i + "Altura", Label _lblAltura = new Label()
Size = new Size(100, 20), {
Text = "Altura: " + objeto.altura, Name = "lblLeitura" + i + "Altura",
Location = new Point(6, 120) Size = new Size(100, 20),
}; Text = "Altura: " + objeto.altura,
Label _lblLargura = new Label() Location = new Point(6, 120)
{ };
Name = "lblLeitura" + i + "Largura", Label _lblLargura = new Label()
Size = new Size(100, 20), {
Text = "Largura: " + objeto.largura, Name = "lblLeitura" + i + "Largura",
Location = new Point(6, 140) Size = new Size(100, 20),
}; Text = "Largura: " + objeto.largura,
gpb.Controls.Add(_lblID); Location = new Point(6, 140)
gpb.Controls.Add(_lblDescricao); };
gpb.Controls.Add(_lblConfianca); gpb.Controls.Add(_lblID);
gpb.Controls.Add(_lblX); gpb.Controls.Add(_lblDescricao);
gpb.Controls.Add(_lblY); gpb.Controls.Add(_lblConfianca);
gpb.Controls.Add(_lblAltura); gpb.Controls.Add(_lblX);
gpb.Controls.Add(_lblLargura); gpb.Controls.Add(_lblY);
gpb.Controls.Add(_lblAltura);
gpb.Controls.Add(_lblLargura);
pnlLeituras.Controls.Add(gpb); pnlLeituras.Controls.Add(gpb);
i++; i++;
}
} }
} }
} }

View File

@ -122,6 +122,7 @@ namespace AgroBase.Forms.IHM
{ {
if (Variaveis.OperacaoEmAndamento.ModulosConectados) if (Variaveis.OperacaoEmAndamento.ModulosConectados)
{ {
Variaveis.OperacaoEmAndamento.frmOperacao = (Form)Activator.CreateInstance(Variaveis.OperacaoEmAndamento.frmOperacao.GetType());
Variaveis.OperacaoEmAndamento.frmOperacao.ShowDialog(); Variaveis.OperacaoEmAndamento.frmOperacao.ShowDialog();
} }
else else

View File

@ -85,11 +85,25 @@ namespace AgroBase.Forms.Operacoes
{ {
Variaveis.OperacaoEmAndamento.CamerasSolo.Where(x => x.Iniciada).ToList().ForEach(CameraSolo => Variaveis.OperacaoEmAndamento.CamerasSolo.Where(x => x.Iniciada).ToList().ForEach(CameraSolo =>
{ {
AtualizaLeituraCameraSolo(CameraSolo); try
{
AtualizaLeituraCameraSolo(CameraSolo);
}
catch
{
}
}); });
Variaveis.OperacaoEmAndamento.Sensoriamento.ErvasNoRadar = Variaveis.OperacaoEmAndamento.CamerasSolo.Sum(x => x.ErvasNoRadar); Variaveis.OperacaoEmAndamento.Sensoriamento.ErvasNoRadar = Variaveis.OperacaoEmAndamento.CamerasSolo.Sum(x => x.ErvasNoRadar);
AtualizaLeituraCameraCaminho(); try
{
AtualizaLeituraCameraCaminho();
}
catch
{
}
} }
else else
{ {
@ -382,16 +396,17 @@ namespace AgroBase.Forms.Operacoes
browser = null, browser = null,
camera = new CameraService(), camera = new CameraService(),
CameraSelecionada = "", CameraSelecionada = "",
combo = cmb,
MaxLeituras = 10, MaxLeituras = 10,
VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.CamerasSolo.Count()).ToString(), VideoPorta = (VariaveisPortas.CameraSolo + Variaveis.OperacaoEmAndamento.CamerasSolo.Count()).ToString(),
VideoUrl = "green_objects_" + CamNome, VideoUrl = "green_objects_" + CamNome,
MqttTopico = "green_objects_" + CamNome, MqttTopico = "green_objects_" + CamNome,
panel = pnlCameraSolo.Controls.OfType<Panel>().Where(x => x.Name.Replace("pnl", "cmb") == cmb.Name).FirstOrDefault(),
}; };
Variaveis.OperacaoEmAndamento.CamerasSolo.Add(CameraSolo); Variaveis.OperacaoEmAndamento.CamerasSolo.Add(CameraSolo);
} }
CameraSolo.combo = cmb;
CameraSolo.panel = pnlCameraSolo.Controls.OfType<Panel>().Where(x => x.Name.Replace("pnl", "cmb") == cmb.Name).FirstOrDefault();
CameraSolo.combo.Items.Clear(); CameraSolo.combo.Items.Clear();
CameraSolo.combo.Items.AddRange(listaCameras); CameraSolo.combo.Items.AddRange(listaCameras);
CameraSolo.combo.SelectedIndex = CameraSolo.camera.selectedCamera; CameraSolo.combo.SelectedIndex = CameraSolo.camera.selectedCamera;

View File

@ -33,7 +33,13 @@
this.gpbModulos = new System.Windows.Forms.GroupBox(); this.gpbModulos = new System.Windows.Forms.GroupBox();
this.gpbP_Gps = new System.Windows.Forms.GroupBox(); this.gpbP_Gps = new System.Windows.Forms.GroupBox();
this.gpbP_Sen = new System.Windows.Forms.GroupBox(); this.gpbP_Sen = new System.Windows.Forms.GroupBox();
this.lblTemposalvarlogU = new System.Windows.Forms.Label();
this.nudTemposalvarlog = new System.Windows.Forms.NumericUpDown();
this.lblTemposalvarlog = new System.Windows.Forms.Label();
this.gpbP_Atu = new System.Windows.Forms.GroupBox(); this.gpbP_Atu = new System.Windows.Forms.GroupBox();
this.cmbScriptErvas = new System.Windows.Forms.ComboBox();
this.nudAtuarem = new System.Windows.Forms.NumericUpDown();
this.lblAtuarem = new System.Windows.Forms.Label();
this.nudQtdCameras = new System.Windows.Forms.NumericUpDown(); this.nudQtdCameras = new System.Windows.Forms.NumericUpDown();
this.lblQtdCameras = new System.Windows.Forms.Label(); this.lblQtdCameras = new System.Windows.Forms.Label();
this.nudQtdBicos = new System.Windows.Forms.NumericUpDown(); this.nudQtdBicos = new System.Windows.Forms.NumericUpDown();
@ -65,12 +71,18 @@
this.btnCarregar = new System.Windows.Forms.Button(); this.btnCarregar = new System.Windows.Forms.Button();
this.btnSalvar = new System.Windows.Forms.Button(); this.btnSalvar = new System.Windows.Forms.Button();
this.chbSalvar = new System.Windows.Forms.CheckBox(); this.chbSalvar = new System.Windows.Forms.CheckBox();
this.nudTemposalvarlog = new System.Windows.Forms.NumericUpDown(); this.gpbConfiguracoesgerais = new System.Windows.Forms.GroupBox();
this.lblTemposalvarlog = new System.Windows.Forms.Label(); this.txtDensidadeherbicida = new System.Windows.Forms.TextBox();
this.lblTemposalvarlogU = new System.Windows.Forms.Label(); this.lblUnDensidadeherbicida = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.nudCapacidadereservatorio = new System.Windows.Forms.NumericUpDown();
this.lblUnCapcaidadereservatorio = new System.Windows.Forms.Label();
this.lblCapacidadereservatorio = new System.Windows.Forms.Label();
this.gpbModulos.SuspendLayout(); this.gpbModulos.SuspendLayout();
this.gpbP_Sen.SuspendLayout(); this.gpbP_Sen.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudTemposalvarlog)).BeginInit();
this.gpbP_Atu.SuspendLayout(); this.gpbP_Atu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudAtuarem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudQtdCameras)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudQtdCameras)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudQtdBicos)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudQtdBicos)).BeginInit();
this.gpbP_Dir.SuspendLayout(); this.gpbP_Dir.SuspendLayout();
@ -80,7 +92,8 @@
this.gpbP_Mov.SuspendLayout(); this.gpbP_Mov.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeComErvas)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeComErvas)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeSemErvas)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeSemErvas)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudTemposalvarlog)).BeginInit(); this.gpbConfiguracoesgerais.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudCapacidadereservatorio)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// cmbOperacao // cmbOperacao
@ -154,8 +167,48 @@
this.gpbP_Sen.TabStop = false; this.gpbP_Sen.TabStop = false;
this.gpbP_Sen.Text = "Ajustes"; this.gpbP_Sen.Text = "Ajustes";
// //
// lblTemposalvarlogU
//
this.lblTemposalvarlogU.AutoSize = true;
this.lblTemposalvarlogU.Location = new System.Drawing.Point(136, 69);
this.lblTemposalvarlogU.Name = "lblTemposalvarlogU";
this.lblTemposalvarlogU.Size = new System.Drawing.Size(41, 24);
this.lblTemposalvarlogU.TabIndex = 13;
this.lblTemposalvarlogU.Text = "seg";
//
// nudTemposalvarlog
//
this.nudTemposalvarlog.Location = new System.Drawing.Point(10, 67);
this.nudTemposalvarlog.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nudTemposalvarlog.Name = "nudTemposalvarlog";
this.nudTemposalvarlog.Size = new System.Drawing.Size(120, 29);
this.nudTemposalvarlog.TabIndex = 10;
this.nudTemposalvarlog.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.nudTemposalvarlog.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// lblTemposalvarlog
//
this.lblTemposalvarlog.AutoSize = true;
this.lblTemposalvarlog.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTemposalvarlog.Location = new System.Drawing.Point(6, 40);
this.lblTemposalvarlog.Name = "lblTemposalvarlog";
this.lblTemposalvarlog.Size = new System.Drawing.Size(145, 20);
this.lblTemposalvarlog.TabIndex = 9;
this.lblTemposalvarlog.Text = "Tempo Salvar Log";
//
// gpbP_Atu // gpbP_Atu
// //
this.gpbP_Atu.Controls.Add(this.cmbScriptErvas);
this.gpbP_Atu.Controls.Add(this.nudAtuarem);
this.gpbP_Atu.Controls.Add(this.lblAtuarem);
this.gpbP_Atu.Controls.Add(this.nudQtdCameras); this.gpbP_Atu.Controls.Add(this.nudQtdCameras);
this.gpbP_Atu.Controls.Add(this.lblQtdCameras); this.gpbP_Atu.Controls.Add(this.lblQtdCameras);
this.gpbP_Atu.Controls.Add(this.nudQtdBicos); this.gpbP_Atu.Controls.Add(this.nudQtdBicos);
@ -167,11 +220,38 @@
this.gpbP_Atu.TabStop = false; this.gpbP_Atu.TabStop = false;
this.gpbP_Atu.Text = "Ajustes"; this.gpbP_Atu.Text = "Ajustes";
// //
// cmbScriptErvas
//
this.cmbScriptErvas.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbScriptErvas.FormattingEnabled = true;
this.cmbScriptErvas.Location = new System.Drawing.Point(10, 129);
this.cmbScriptErvas.Name = "cmbScriptErvas";
this.cmbScriptErvas.Size = new System.Drawing.Size(174, 32);
this.cmbScriptErvas.TabIndex = 15;
//
// nudAtuarem
//
this.nudAtuarem.Location = new System.Drawing.Point(130, 94);
this.nudAtuarem.Name = "nudAtuarem";
this.nudAtuarem.Size = new System.Drawing.Size(54, 29);
this.nudAtuarem.TabIndex = 13;
this.nudAtuarem.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// lblAtuarem
//
this.lblAtuarem.AutoSize = true;
this.lblAtuarem.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblAtuarem.Location = new System.Drawing.Point(6, 99);
this.lblAtuarem.Name = "lblAtuarem";
this.lblAtuarem.Size = new System.Drawing.Size(109, 20);
this.lblAtuarem.TabIndex = 12;
this.lblAtuarem.Text = "Atuar em (%)";
//
// nudQtdCameras // nudQtdCameras
// //
this.nudQtdCameras.Location = new System.Drawing.Point(10, 126); this.nudQtdCameras.Location = new System.Drawing.Point(130, 59);
this.nudQtdCameras.Name = "nudQtdCameras"; this.nudQtdCameras.Name = "nudQtdCameras";
this.nudQtdCameras.Size = new System.Drawing.Size(120, 29); this.nudQtdCameras.Size = new System.Drawing.Size(54, 29);
this.nudQtdCameras.TabIndex = 11; this.nudQtdCameras.TabIndex = 11;
this.nudQtdCameras.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.nudQtdCameras.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
// //
@ -179,17 +259,17 @@
// //
this.lblQtdCameras.AutoSize = true; this.lblQtdCameras.AutoSize = true;
this.lblQtdCameras.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblQtdCameras.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblQtdCameras.Location = new System.Drawing.Point(6, 99); this.lblQtdCameras.Location = new System.Drawing.Point(6, 64);
this.lblQtdCameras.Name = "lblQtdCameras"; this.lblQtdCameras.Name = "lblQtdCameras";
this.lblQtdCameras.Size = new System.Drawing.Size(174, 20); this.lblQtdCameras.Size = new System.Drawing.Size(77, 20);
this.lblQtdCameras.TabIndex = 9; this.lblQtdCameras.TabIndex = 9;
this.lblQtdCameras.Text = "Qtde de câmeras solo"; this.lblQtdCameras.Text = "Câmeras";
// //
// nudQtdBicos // nudQtdBicos
// //
this.nudQtdBicos.Location = new System.Drawing.Point(10, 67); this.nudQtdBicos.Location = new System.Drawing.Point(130, 24);
this.nudQtdBicos.Name = "nudQtdBicos"; this.nudQtdBicos.Name = "nudQtdBicos";
this.nudQtdBicos.Size = new System.Drawing.Size(120, 29); this.nudQtdBicos.Size = new System.Drawing.Size(54, 29);
this.nudQtdBicos.TabIndex = 8; this.nudQtdBicos.TabIndex = 8;
this.nudQtdBicos.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.nudQtdBicos.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
// //
@ -197,11 +277,11 @@
// //
this.lblQtdBicos.AutoSize = true; this.lblQtdBicos.AutoSize = true;
this.lblQtdBicos.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblQtdBicos.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblQtdBicos.Location = new System.Drawing.Point(6, 40); this.lblQtdBicos.Location = new System.Drawing.Point(6, 29);
this.lblQtdBicos.Name = "lblQtdBicos"; this.lblQtdBicos.Name = "lblQtdBicos";
this.lblQtdBicos.Size = new System.Drawing.Size(113, 20); this.lblQtdBicos.Size = new System.Drawing.Size(52, 20);
this.lblQtdBicos.TabIndex = 6; this.lblQtdBicos.TabIndex = 6;
this.lblQtdBicos.Text = "Qtde de bicos"; this.lblQtdBicos.Text = "Bicos";
// //
// gpbP_Dir // gpbP_Dir
// //
@ -520,48 +600,82 @@
this.chbSalvar.Text = "Personalizado"; this.chbSalvar.Text = "Personalizado";
this.chbSalvar.UseVisualStyleBackColor = true; this.chbSalvar.UseVisualStyleBackColor = true;
// //
// nudTemposalvarlog // gpbConfiguracoesgerais
// //
this.nudTemposalvarlog.Location = new System.Drawing.Point(10, 67); this.gpbConfiguracoesgerais.Controls.Add(this.txtDensidadeherbicida);
this.nudTemposalvarlog.Minimum = new decimal(new int[] { this.gpbConfiguracoesgerais.Controls.Add(this.lblUnDensidadeherbicida);
1, this.gpbConfiguracoesgerais.Controls.Add(this.label2);
0, this.gpbConfiguracoesgerais.Controls.Add(this.nudCapacidadereservatorio);
0, this.gpbConfiguracoesgerais.Controls.Add(this.lblUnCapcaidadereservatorio);
0}); this.gpbConfiguracoesgerais.Controls.Add(this.lblCapacidadereservatorio);
this.nudTemposalvarlog.Name = "nudTemposalvarlog"; this.gpbConfiguracoesgerais.Location = new System.Drawing.Point(15, 381);
this.nudTemposalvarlog.Size = new System.Drawing.Size(120, 29); this.gpbConfiguracoesgerais.Name = "gpbConfiguracoesgerais";
this.nudTemposalvarlog.TabIndex = 10; this.gpbConfiguracoesgerais.Size = new System.Drawing.Size(990, 286);
this.nudTemposalvarlog.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.gpbConfiguracoesgerais.TabIndex = 8;
this.nudTemposalvarlog.Value = new decimal(new int[] { this.gpbConfiguracoesgerais.TabStop = false;
1, this.gpbConfiguracoesgerais.Text = "Gerais";
0,
0,
0});
// //
// lblTemposalvarlog // txtDensidadeherbicida
// //
this.lblTemposalvarlog.AutoSize = true; this.txtDensidadeherbicida.Location = new System.Drawing.Point(18, 118);
this.lblTemposalvarlog.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.txtDensidadeherbicida.Name = "txtDensidadeherbicida";
this.lblTemposalvarlog.Location = new System.Drawing.Point(6, 40); this.txtDensidadeherbicida.Size = new System.Drawing.Size(73, 29);
this.lblTemposalvarlog.Name = "lblTemposalvarlog"; this.txtDensidadeherbicida.TabIndex = 15;
this.lblTemposalvarlog.Size = new System.Drawing.Size(145, 20); this.txtDensidadeherbicida.Text = "1,1";
this.lblTemposalvarlog.TabIndex = 9; this.txtDensidadeherbicida.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.lblTemposalvarlog.Text = "Tempo Salvar Log";
// //
// lblTemposalvarlogU // lblUnDensidadeherbicida
// //
this.lblTemposalvarlogU.AutoSize = true; this.lblUnDensidadeherbicida.AutoSize = true;
this.lblTemposalvarlogU.Location = new System.Drawing.Point(136, 69); this.lblUnDensidadeherbicida.Location = new System.Drawing.Point(97, 121);
this.lblTemposalvarlogU.Name = "lblTemposalvarlogU"; this.lblUnDensidadeherbicida.Name = "lblUnDensidadeherbicida";
this.lblTemposalvarlogU.Size = new System.Drawing.Size(41, 24); this.lblUnDensidadeherbicida.Size = new System.Drawing.Size(57, 24);
this.lblTemposalvarlogU.TabIndex = 13; this.lblUnDensidadeherbicida.TabIndex = 13;
this.lblTemposalvarlogU.Text = "seg"; this.lblUnDensidadeherbicida.Text = "g/cm³";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(14, 92);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(162, 20);
this.label2.TabIndex = 12;
this.label2.Text = "Densidade herbicida";
//
// nudCapacidadereservatorio
//
this.nudCapacidadereservatorio.Location = new System.Drawing.Point(18, 55);
this.nudCapacidadereservatorio.Name = "nudCapacidadereservatorio";
this.nudCapacidadereservatorio.Size = new System.Drawing.Size(73, 29);
this.nudCapacidadereservatorio.TabIndex = 11;
this.nudCapacidadereservatorio.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// lblUnCapcaidadereservatorio
//
this.lblUnCapcaidadereservatorio.AutoSize = true;
this.lblUnCapcaidadereservatorio.Location = new System.Drawing.Point(97, 57);
this.lblUnCapcaidadereservatorio.Name = "lblUnCapcaidadereservatorio";
this.lblUnCapcaidadereservatorio.Size = new System.Drawing.Size(48, 24);
this.lblUnCapcaidadereservatorio.TabIndex = 10;
this.lblUnCapcaidadereservatorio.Text = "litros";
//
// lblCapacidadereservatorio
//
this.lblCapacidadereservatorio.AutoSize = true;
this.lblCapacidadereservatorio.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblCapacidadereservatorio.Location = new System.Drawing.Point(14, 28);
this.lblCapacidadereservatorio.Name = "lblCapacidadereservatorio";
this.lblCapacidadereservatorio.Size = new System.Drawing.Size(191, 20);
this.lblCapacidadereservatorio.TabIndex = 9;
this.lblCapacidadereservatorio.Text = "Capacidade reservatório";
// //
// frmParametrizacaoOperacao // frmParametrizacaoOperacao
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F); this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1020, 697); this.ClientSize = new System.Drawing.Size(1020, 673);
this.Controls.Add(this.gpbConfiguracoesgerais);
this.Controls.Add(this.chbSalvar); this.Controls.Add(this.chbSalvar);
this.Controls.Add(this.btnSalvar); this.Controls.Add(this.btnSalvar);
this.Controls.Add(this.btnCarregar); this.Controls.Add(this.btnCarregar);
@ -578,8 +692,10 @@
this.gpbModulos.PerformLayout(); this.gpbModulos.PerformLayout();
this.gpbP_Sen.ResumeLayout(false); this.gpbP_Sen.ResumeLayout(false);
this.gpbP_Sen.PerformLayout(); this.gpbP_Sen.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudTemposalvarlog)).EndInit();
this.gpbP_Atu.ResumeLayout(false); this.gpbP_Atu.ResumeLayout(false);
this.gpbP_Atu.PerformLayout(); this.gpbP_Atu.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudAtuarem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudQtdCameras)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.nudQtdCameras)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudQtdBicos)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.nudQtdBicos)).EndInit();
this.gpbP_Dir.ResumeLayout(false); this.gpbP_Dir.ResumeLayout(false);
@ -591,7 +707,9 @@
this.gpbP_Mov.PerformLayout(); this.gpbP_Mov.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeComErvas)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeComErvas)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeSemErvas)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeSemErvas)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudTemposalvarlog)).EndInit(); this.gpbConfiguracoesgerais.ResumeLayout(false);
this.gpbConfiguracoesgerais.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudCapacidadereservatorio)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -639,5 +757,15 @@
private System.Windows.Forms.Label lblTemposalvarlogU; private System.Windows.Forms.Label lblTemposalvarlogU;
private System.Windows.Forms.NumericUpDown nudTemposalvarlog; private System.Windows.Forms.NumericUpDown nudTemposalvarlog;
private System.Windows.Forms.Label lblTemposalvarlog; private System.Windows.Forms.Label lblTemposalvarlog;
private System.Windows.Forms.GroupBox gpbConfiguracoesgerais;
private System.Windows.Forms.TextBox txtDensidadeherbicida;
private System.Windows.Forms.Label lblUnDensidadeherbicida;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown nudCapacidadereservatorio;
private System.Windows.Forms.Label lblUnCapcaidadereservatorio;
private System.Windows.Forms.Label lblCapacidadereservatorio;
private System.Windows.Forms.NumericUpDown nudAtuarem;
private System.Windows.Forms.Label lblAtuarem;
private System.Windows.Forms.ComboBox cmbScriptErvas;
} }
} }

View File

@ -1,4 +1,5 @@
using AgroBase.Models; using AgroBase.Models;
using AgroBase.Services;
using CefSharp.WinForms; using CefSharp.WinForms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -21,6 +22,8 @@ namespace AgroBase.Forms.Operacoes
private void frmParametrizacaoOperacao_Load(object sender, EventArgs e) private void frmParametrizacaoOperacao_Load(object sender, EventArgs e)
{ {
cmbScriptErvas.Items.Clear();
cmbScriptErvas.Items.AddRange(new string[] { "weed-detector", "green-detector" });
CarregarParametros(); CarregarParametros();
} }
@ -60,6 +63,10 @@ namespace AgroBase.Forms.Operacoes
nudTemposalvarlog.Value = Variaveis.OperacaoEmAndamento.tmrLogs.Interval / 1000; nudTemposalvarlog.Value = Variaveis.OperacaoEmAndamento.tmrLogs.Interval / 1000;
nudQtdBicos.Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.QuantidadeBicos; nudQtdBicos.Value = Variaveis.OperacaoEmAndamento.DispAtu.Dados.QuantidadeBicos;
nudQtdCameras.Value = Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo; nudQtdCameras.Value = Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo;
nudCapacidadereservatorio.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.DispAtu.Dados.CapacidadeReservatorio);
txtDensidadeherbicida.Text = Variaveis.OperacaoEmAndamento.DispAtu.Dados.DensidadeHerbicida.ToString("0.00");
nudAtuarem.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.DispAtu.Dados.PercentualInicioPulverizacao * 100);
cmbScriptErvas.SelectedIndex = cmbScriptErvas.Items.IndexOf(PythonService.ScriptWeedDetector.Replace(".py", ""));
} }
private void chbD_CheckedChanged(object sender, EventArgs e) private void chbD_CheckedChanged(object sender, EventArgs e)
@ -115,14 +122,18 @@ namespace AgroBase.Forms.Operacoes
void SalvarOperacao() void SalvarOperacao()
{ {
Variaveis.OperacaoEmAndamento.ModulosMandatorios = ModulosMandatorios.Where(x => x.Utilizar).ToList(); Variaveis.OperacaoEmAndamento.ModulosMandatorios = ModulosMandatorios.Where(x => x.Utilizar).ToList();
Variaveis.OperacaoEmAndamento.Controle.RPM_Max = Convert.ToInt32(nudVelocidadeSemErvas.Value); Variaveis.OperacaoEmAndamento.Controle.RPM_Max = (int)(nudVelocidadeSemErvas.Value);
Variaveis.OperacaoEmAndamento.Controle.RPM_Min = Convert.ToInt32(nudVelocidadeComErvas.Value); Variaveis.OperacaoEmAndamento.Controle.RPM_Min = (int)(nudVelocidadeComErvas.Value);
Variaveis.OperacaoEmAndamento.Controle.Angulo_Max = Convert.ToInt32(nudAnguloMaximo.Value); Variaveis.OperacaoEmAndamento.Controle.Angulo_Max = (int)(nudAnguloMaximo.Value);
Variaveis.OperacaoEmAndamento.Controle.Angulo_Min = Convert.ToInt32(nudAnguloMinimo.Value); Variaveis.OperacaoEmAndamento.Controle.Angulo_Min = (int)(nudAnguloMinimo.Value);
Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP = Convert.ToInt32(nudVelocidadeMP.Value); Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP = (int)(nudVelocidadeMP.Value);
Variaveis.OperacaoEmAndamento.tmrLogs.Interval = Convert.ToInt32(nudTemposalvarlog.Value * 1000); Variaveis.OperacaoEmAndamento.tmrLogs.Interval = (int)(nudTemposalvarlog.Value * 1000);
Variaveis.OperacaoEmAndamento.DispAtu.Dados.QuantidadeBicos = Convert.ToInt32(nudQtdBicos.Value); Variaveis.OperacaoEmAndamento.DispAtu.Dados.QuantidadeBicos = (int)nudQtdBicos.Value;
Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo = Convert.ToInt32(nudQtdCameras.Value); Variaveis.OperacaoEmAndamento.QuantidadeCamerasSolo = (int)nudQtdCameras.Value;
Variaveis.OperacaoEmAndamento.DispAtu.Dados.CapacidadeReservatorio = (double)nudCapacidadereservatorio.Value;
Variaveis.OperacaoEmAndamento.DispAtu.Dados.DensidadeHerbicida = Convert.ToDouble(txtDensidadeherbicida.Text.Replace(".", ","));
Variaveis.OperacaoEmAndamento.DispAtu.Dados.PercentualInicioPulverizacao = (double)(nudAtuarem.Value / 100);
PythonService.ScriptWeedDetector = cmbScriptErvas.Text + ".py";
if (chbSalvar.Checked) if (chbSalvar.Checked)
{ {

View File

@ -266,6 +266,7 @@ namespace AgroBase
{ {
if (Variaveis.OperacaoEmAndamento.OperacaoLiberada) if (Variaveis.OperacaoEmAndamento.OperacaoLiberada)
{ {
Variaveis.OperacaoEmAndamento.frmOperacao = (Form)Activator.CreateInstance(Variaveis.OperacaoEmAndamento.frmOperacao.GetType());
Variaveis.OperacaoEmAndamento.frmOperacao.Show(); Variaveis.OperacaoEmAndamento.frmOperacao.Show();
} }
else else

View File

@ -64,7 +64,7 @@ namespace AgroBase.Models
public string Nome { get; set; } public string Nome { get; set; }
public int Posicao { get; set; } public int Posicao { get; set; }
public bool Iniciada { get; set; } = false; public bool Iniciada { get; set; } = false;
public CameraService camera { get; set; } public CameraService camera { get; set; } = new CameraService();
public ChromiumWebBrowser browser { get; set; } public ChromiumWebBrowser browser { get; set; }
public Panel panel { get;set; } public Panel panel { get;set; }
public ComboBox combo { get;set; } public ComboBox combo { get;set; }

View File

@ -121,11 +121,11 @@ namespace AgroBase.Models.Modules
List<string> Config = BicosPulverizadores.Select(x => x.ProtocoloConfiguracaoBico(Conectar)).ToList(); List<string> Config = BicosPulverizadores.Select(x => x.ProtocoloConfiguracaoBico(Conectar)).ToList();
Config.AddRange(Sensores.Select(x => x.ProtocoloConfiguracaoSensor(Pinout, Conectar)).ToList()); Config.AddRange(Sensores.Select(x => x.ProtocoloConfiguracaoSensor(Pinout, Conectar)).ToList());
string ProtocoloMOD = ((int)F_Code.Cfg).ToString() + string ProtocoloMOD = ((int)F_Code.Cfg).ToString() +
"MD".PadRight(5, ' ') + ";" + // 0 ~ 2 "MD".PadRight(5, ' ') + ";" + // 0 ~ 4
(Conectar ? "1" : "0") + ";" + // 4 (Conectar ? "1" : "0") + ";" + // 6
_TaxaAmostragem.ToString("00000") + ";" + // 6 ~ 10 _TaxaAmostragem.ToString("00000") + ";" + // 8 ~ 12
(Pinout.Any(x => x.Funcao == FuncoesPinout.Geral) ? Pinout.FirstOrDefault(x => x.Funcao == FuncoesPinout.Geral).Pino.ToString("00") : "-1") + ";" + // 12 ~ 13 (Pinout.Any(x => x.Funcao == FuncoesPinout.Geral) ? Pinout.FirstOrDefault(x => x.Funcao == FuncoesPinout.Geral).Pino.ToString("00") : "-1") + ";" + // 14 ~ 15
(AtuacaoNivelAlto ? "1" : "0"); // 15 (AtuacaoNivelAlto ? "1" : "0"); // 17
Config.Add(ProtocoloMOD); Config.Add(ProtocoloMOD);
return Config; return Config;
} }
@ -356,5 +356,23 @@ namespace AgroBase.Models.Modules
return ""; return "";
} }
public AtuadorBicoModel Clone()
{
AtuadorBicoModel clone = new AtuadorBicoModel()
{
ID = this.ID,
Posicao = this.Posicao,
Atuado = this.Atuado,
Comandar = this.Comandar,
Inicializado = this.Inicializado,
Testando = this.Testando,
Funcoes = this.Funcoes,
StatusBico = this.StatusBico,
MediaNivelFluxo = this.MediaNivelFluxo,
};
return clone;
}
} }
} }

View File

@ -4,6 +4,7 @@ using AgroBase.Forms.Operacoes;
using AgroBase.Models.Modules; using AgroBase.Models.Modules;
using AgroBase.Services; using AgroBase.Services;
using CefSharp.DevTools.Network; using CefSharp.DevTools.Network;
using Emgu.CV.CvEnum;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -270,7 +271,7 @@ namespace AgroBase.Models
new OperacaoControleTipoModel() new OperacaoControleTipoModel()
{ {
Tipo = T_Code.Atu, Tipo = T_Code.Atu,
DelayEnvioComando = 100, DelayEnvioComando = 500,
Comandos = new List<string>(), Comandos = new List<string>(),
UltimoComando = DateTime.Now UltimoComando = DateTime.Now
}, },
@ -468,14 +469,18 @@ namespace AgroBase.Models
ControleAnterior.Angulo = Controle.Angulo; ControleAnterior.Angulo = Controle.Angulo;
} }
if (ControleAtu != null && Controle.BicosAtuados.Select(x => x.Atuado).ToList() != ControleAnterior.BicosAtuados.Select(x => x.Atuado).ToList() && (Agora - ControleAtu.UltimoComando).TotalMilliseconds > ControleAtu.DelayEnvioComando) if (ControleAtu != null && !Controle.BicosAtuados.Select(x => x.Atuado).SequenceEqual(ControleAnterior.BicosAtuados.Select(x => x.Atuado)) && (Agora - ControleAtu.UltimoComando).TotalMilliseconds > ControleAtu.DelayEnvioComando)
{ {
// Enviar comando ATU // Enviar comando ATU
var Protocolos = EnviarProtocoloComando(DispAtu); var Protocolos = EnviarProtocoloComando(DispAtu);
ControleAtu.UltimoComando = Agora; ControleAtu.UltimoComando = Agora;
ControleAtu.Comandos.AddRange(Protocolos); ControleAtu.Comandos.AddRange(Protocolos);
ControleAnterior.BicosAtuados = new List<AtuadorBicoModel>(Controle.BicosAtuados); ControleAnterior.BicosAtuados = new List<AtuadorBicoModel>();
foreach (var bico in Controle.BicosAtuados)
{
ControleAnterior.BicosAtuados.Add(bico.Clone());
}
} }
AtualizarDadosOperacao(); AtualizarDadosOperacao();
@ -704,6 +709,7 @@ namespace AgroBase.Models
if (StatusOperacoesPararCarro.Contains(statusAtual)) if (StatusOperacoesPararCarro.Contains(statusAtual))
{ {
var BicosNaoAtuados = new List<AtuadorBicoModel>(DispAtu.Dados.BicosPulverizadores); var BicosNaoAtuados = new List<AtuadorBicoModel>(DispAtu.Dados.BicosPulverizadores);
BicosNaoAtuados.ForEach(x => x.Atuado = false);
Controle.BicosAtuados = BicosNaoAtuados.ToList(); Controle.BicosAtuados = BicosNaoAtuados.ToList();
Controle.RPM = 0; Controle.RPM = 0;
Controle.Angulo = 0; Controle.Angulo = 0;

View File

@ -3,18 +3,22 @@ import numpy as np
from flask import Flask, Response, request from flask import Flask, Response, request
import json import json
import time import time
import socket
import threading import threading
import sys import sys
import os import os
import uuid
import paho.mqtt.client as mqtt
mqtt_client = mqtt.Client(f"client_weed_detector_{uuid.uuid4()}")
mqtt_client.connect("localhost", port=1883)
max_readings = int(sys.argv[1]) max_readings = int(sys.argv[1])
porta = sys.argv[2] porta = sys.argv[2]
url = sys.argv[3] url = sys.argv[3]
arquivoSaida = sys.argv[4] arquivoSaida = sys.argv[4]
mostrar_linhas = sys.argv[5] == "1" mostrar_linhas = sys.argv[5] == "1"
socket_porta = int(sys.argv[6]) mqtt_topic = sys.argv[6]
app = Flask(__name__) app = Flask(__name__)
@ -45,7 +49,6 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
# Encontrar os contornos na máscara # Encontrar os contornos na máscara
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
current_readings = [] current_readings = []
idx = 0 # Índice de detecção idx = 0 # Índice de detecção
for contour in contours: for contour in contours:
@ -75,6 +78,7 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings} json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings}
readings.append(json_data) readings.append(json_data)
mqtt_client.publish(mqtt_topic, json.dumps(json_data).encode('utf-8'))
if not os.path.exists(output_folder): if not os.path.exists(output_folder):
os.makedirs(output_folder) os.makedirs(output_folder)
@ -92,44 +96,9 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
yield (b'--frame\r\n' yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
# Função para lidar com a conexão de cada cliente # Esta função é para confirmar que script está pronto para execução
def handle_client_connection(client_socket): def send_script_ready():
try: mqtt_client.publish(mqtt_topic, "OK")
while True:
# Enviar o dicionário serializado em JSON
client_socket.send(json.dumps(json_data).encode('utf-8'))
# Aguardar um pouco antes de enviar os próximos dados
time.sleep(0.2)
except socket.error:
print(f"Cliente desconectado.")
finally:
# Fechar a conexão do socket ao sair do loop
client_socket.close()
# Configuração inicial do servidor de socket
def start_server(address='localhost', port=socket_porta):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((address, port))
server.listen()
print(f"Servidor iniciado. Aguardando conexões em {address}:{port}...")
try:
while True:
client_sock, address = server.accept()
print(f"Aceitando conexão de {address[0]}:{address[1]}")
client_handler = threading.Thread(
target=handle_client_connection,
args=(client_sock,)
)
client_handler.start()
finally:
server.close()
# Esta função é para iniciar o servidor de socket em uma thread separada
def run_socket_server():
start_server()
# Iniciar o servidor Flask em uma thread separada # Iniciar o servidor Flask em uma thread separada
def run_flask_server(): def run_flask_server():
@ -145,9 +114,9 @@ def video_feed():
# Iniciar o servidor # Iniciar o servidor
if __name__ == '__main__': if __name__ == '__main__':
# Inicia o servidor de socket em uma thread separada # Cria trhead separada para informar que o script iniciou com sucesso
socket_server_thread = threading.Thread(target=run_socket_server) mqtt_thread = threading.Thread(target=send_script_ready)
socket_server_thread.start() mqtt_thread.start()
# Inicia o servidor Flask na thread principal # Inicia o servidor Flask na thread principal
run_flask_server() run_flask_server()

View File

@ -47,6 +47,7 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
while True: while True:
ret, frame = cap.read() ret, frame = cap.read()
#frame = cv2.flip(frame, 1)
if not ret: if not ret:
break break

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T10:18:12.8119243-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T10:18:17.8102597-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339566770425247,"Longitude":-47.263998524140789,"DataHora":"2024-03-11T10:18:22.8077452-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339649665078522,"Longitude":-47.263954035496013,"DataHora":"2024-03-11T10:18:27.8115095-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:18:32.8078677-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:18:37.8077851-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339979474804096,"Longitude":-47.263754241442221,"DataHora":"2024-03-11T10:18:42.9320465-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339876852055113,"Longitude":-47.263804722781558,"DataHora":"2024-03-11T10:18:47.8100509-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339790350419388,"Longitude":-47.263848455392754,"DataHora":"2024-03-11T10:18:52.8190482-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339705045562265,"Longitude":-47.263892483009506,"DataHora":"2024-03-11T10:18:57.8090453-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339620953376617,"Longitude":-47.2639368242459,"DataHora":"2024-03-11T10:19:02.8110451-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.339538088742589,"Longitude":-47.263981496828109,"DataHora":"2024-03-11T10:19:07.8600456-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:12.8080447-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:17.8150454-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:22.809045-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:27.8100446-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:32.8650446-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:37.808045-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:19:42.8250438-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689},{"Latitude":-22.3394692684848,"Longitude":-47.264019238095237,"DataHora":"2024-03-11T10:20:24.8072454-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649627477730689}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T10:51:39.8887672-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T10:51:44.8887672-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339566770425247,"Longitude":-47.263998524140789,"DataHora":"2024-03-11T10:51:49.8857697-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339599779349204,"Longitude":-47.263980689109175,"DataHora":"2024-03-11T10:52:03.765768-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339632987002233,"Longitude":-47.26396290702327,"DataHora":"2024-03-11T10:52:04.8887663-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:52:09.8897689-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:52:14.8907652-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:52:17.8877678-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:52:19.8887655-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T10:52:24.8897648-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-03-11T13:21:29.5432427-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":2,"AtuacoesPorBico":[0,0,1,1],"DistanciaPercorrida":[],"ProgressoTrajeto":0.0,"ProgressoRua":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":2,"AnguloCarro":0.0,"AnguloCarroBussola":0.0,"AnguloRua":333.18452915675431,"AnguloRuaCamera":0.0,"AnguloDif":0.0,"Direcao":0,"DentroDaRua":false,"IdxPontoAproximadoRua":0,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:21:34.6312576-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":2,"AtuacoesPorBico":[0,0,1,1],"DistanciaPercorrida":[],"ProgressoTrajeto":0.0,"ProgressoRua":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":3,"AnguloCarro":0.0,"AnguloCarroBussola":0.0,"AnguloRua":333.18452915675431,"AnguloRuaCamera":0.0,"AnguloDif":0.0,"Direcao":0,"DentroDaRua":false,"IdxPontoAproximadoRua":0,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:21:40.0603985-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":4,"AtuacoesPorBico":[0,0,2,2],"DistanciaPercorrida":[0.0],"ProgressoTrajeto":0.0,"ProgressoRua":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":4,"AnguloCarro":0.0,"AnguloCarroBussola":0.0,"AnguloRua":333.28985968047516,"AnguloRuaCamera":0.0,"AnguloDif":0.0,"Direcao":0,"DentroDaRua":true,"IdxPontoAproximadoRua":1,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:21:45.0976968-03:00","ErvasNoRadar":1,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":7,"AtuacoesPorBico":[0,0,4,3],"DistanciaPercorrida":[13.48707115148296],"ProgressoTrajeto":1.0108292305144342,"ProgressoRua":75.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":4,"AnguloCarro":332.9300096808405,"AnguloCarroBussola":0.0,"AnguloRua":333.80259639228933,"AnguloRuaCamera":0.0,"AnguloDif":-0.87258671144883238,"Direcao":1,"DentroDaRua":true,"IdxPontoAproximadoRua":6,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:21:50.3466508-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":9,"AtuacoesPorBico":[0,0,5,4],"DistanciaPercorrida":[23.75605239910999],"ProgressoTrajeto":1.7804690059792978,"ProgressoRua":100.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":6,"AnguloCarro":333.49723623622646,"AnguloCarroBussola":0.0,"AnguloRua":333.85247665632448,"AnguloRuaCamera":0.0,"AnguloDif":-0.3552404200980277,"Direcao":1,"DentroDaRua":false,"IdxPontoAproximadoRua":8,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:21:52.6201401-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":9,"AtuacoesPorBico":[0,0,5,4],"DistanciaPercorrida":[38.903501528505942],"ProgressoTrajeto":2.9157402724944363,"ProgressoRua":100.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":1,"AnguloCarro":340.9394044514255,"AnguloCarroBussola":0.0,"AnguloRua":333.85247665632448,"AnguloRuaCamera":0.0,"AnguloDif":7.086927795101019,"Direcao":1,"DentroDaRua":false,"IdxPontoAproximadoRua":8,"IdxRuaAtual":0}],{"Momento":"2024-03-11T13:21:56.4969269-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":9,"AtuacoesPorBico":[0,0,5,4],"DistanciaPercorrida":[43.01214660499496],"ProgressoTrajeto":3.2236750712715345,"ProgressoRua":100.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":1,"AnguloCarro":346.97996461589275,"AnguloCarroBussola":0.0,"AnguloRua":333.85247665632448,"AnguloRuaCamera":0.0,"AnguloDif":7.086927795101019,"Direcao":1,"DentroDaRua":false,"IdxPontoAproximadoRua":8,"IdxRuaAtual":0}]

View File

@ -0,0 +1 @@
[{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T13:21:28.8756051-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T13:21:33.8565666-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339550340751185,"Longitude":-47.264007461846653,"DataHora":"2024-03-11T13:21:39.2383954-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339632987002233,"Longitude":-47.26396290702327,"DataHora":"2024-03-11T13:21:44.5054063-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339761742622606,"Longitude":-47.263914810772093,"DataHora":"2024-03-11T13:21:48.9233839-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:21:51.0337572-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:21:55.8557602-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-03-11T13:31:06.1104539-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":3,"AtuacoesPorBico":[2,1,0,0],"DistanciaPercorrida":[],"ProgressoTrajeto":0.0,"ProgressoRua":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":2,"AnguloCarro":0.0,"AnguloCarroBussola":0.0,"AnguloRua":333.18452915675431,"AnguloRuaCamera":0.0,"AnguloDif":0.0,"Direcao":0,"DentroDaRua":false,"IdxPontoAproximadoRua":0,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:31:11.0614079-03:00","ErvasNoRadar":1,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":6,"AtuacoesPorBico":[4,2,0,0],"DistanciaPercorrida":[],"ProgressoTrajeto":0.0,"ProgressoRua":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":2,"AnguloCarro":0.0,"AnguloCarroBussola":0.0,"AnguloRua":333.18452915675431,"AnguloRuaCamera":0.0,"AnguloDif":0.0,"Direcao":0,"DentroDaRua":false,"IdxPontoAproximadoRua":0,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:31:16.4857229-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":9,"AtuacoesPorBico":[6,3,0,0],"DistanciaPercorrida":[0.0],"ProgressoTrajeto":0.0,"ProgressoRua":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":3,"AnguloCarro":0.0,"AnguloCarroBussola":0.0,"AnguloRua":333.18452915675431,"AnguloRuaCamera":0.0,"AnguloDif":0.0,"Direcao":0,"DentroDaRua":false,"IdxPontoAproximadoRua":0,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:31:21.6096439-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":13,"AtuacoesPorBico":[8,5,0,0],"DistanciaPercorrida":[15.532164373823042],"ProgressoTrajeto":1.1641049109827626,"ProgressoRua":62.5,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":6,"AnguloCarro":332.97738784499131,"AnguloCarroBussola":0.0,"AnguloRua":333.70190396297835,"AnguloRuaCamera":0.0,"AnguloDif":-0.72451611798703652,"Direcao":1,"DentroDaRua":true,"IdxPontoAproximadoRua":5,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:31:26.8771969-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":13,"AtuacoesPorBico":[8,5,0,0],"DistanciaPercorrida":[25.822843000933517],"ProgressoTrajeto":1.9353708620020584,"ProgressoRua":100.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":6,"AnguloCarro":333.59977895821442,"AnguloCarroBussola":0.0,"AnguloRua":333.85247665632448,"AnguloRuaCamera":0.0,"AnguloDif":-0.25269769811006881,"Direcao":1,"DentroDaRua":false,"IdxPontoAproximadoRua":8,"IdxRuaAtual":0},{"Momento":"2024-03-11T13:31:27.5429727-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"PorcentagemBateria":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":13,"AtuacoesPorBico":[8,5,0,0],"DistanciaPercorrida":[43.0191269239837],"ProgressoTrajeto":3.224198232333924,"ProgressoRua":100.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0,"Status":1,"AnguloCarro":343.23615375058216,"AnguloCarroBussola":0.0,"AnguloRua":333.85247665632448,"AnguloRuaCamera":0.0,"AnguloDif":9.3836770942576777,"Direcao":1,"DentroDaRua":false,"IdxPontoAproximadoRua":8,"IdxRuaAtual":0}]

View File

@ -0,0 +1 @@
[{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T13:31:05.9494531-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T13:31:10.9967384-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339566770425247,"Longitude":-47.263998524140789,"DataHora":"2024-03-11T13:31:16.1497228-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339649665078522,"Longitude":-47.263954035496013,"DataHora":"2024-03-11T13:31:21.6086496-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:31:26.8751971-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:31:26.8751971-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:47:51.5765948-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:47:56.5424493-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:01.8100552-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:06.5418349-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:11.5416937-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:16.5707446-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:21.5445116-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:26.5426853-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:31.6023487-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:36.5439096-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:42.0669206-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:46.541417-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T13:48:46.9029468-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T14:28:18.2613975-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T14:28:23.2618557-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339478335994333,"Longitude":-47.264047138109767,"DataHora":"2024-03-11T14:28:28.2681263-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339599779349204,"Longitude":-47.263980689109175,"DataHora":"2024-03-11T14:28:33.2603432-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339725742622608,"Longitude":-47.263923810772091,"DataHora":"2024-03-11T14:28:38.2632491-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:28:43.2658595-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:28:49.5417076-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:28:53.2640355-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:28:57.261243-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:28:58.2605893-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T14:30:41.8239952-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339442335994335,"Longitude":-47.264067138109773,"DataHora":"2024-03-11T14:30:46.8356542-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339566770425247,"Longitude":-47.263998524140789,"DataHora":"2024-03-11T14:30:51.8257835-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339649665078522,"Longitude":-47.263954035496013,"DataHora":"2024-03-11T14:30:56.8234233-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:01.8264165-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:06.824916-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:11.8251428-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:16.8266843-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:21.8231112-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:26.8273181-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:26.8273181-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181},{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"2024-03-11T14:31:30.8230358-03:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":70.649306441870181}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
[{"Latitude":-22.339797742622608,"Longitude":-47.263905810772087,"DataHora":"0001-01-01T00:00:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0}] [{"Latitude":0.0,"Longitude":0.0,"DataHora":"0001-01-01T00:00:00","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":0.0,"Orientacao":0.0}]

View File

@ -1,60 +1,60 @@
[ [
{ {
"timestamp": 1709833298.4803495, "timestamp": 1710180998.39519,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833298.8259332, "timestamp": 1710180998.427191,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.103502, "timestamp": 1710180998.4591894,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.4589717, "timestamp": 1710180998.49119,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.7475274, "timestamp": 1710180998.5231917,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833300.10481, "timestamp": 1710180998.555189,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833300.3396745, "timestamp": 1710180998.587189,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833300.5852246, "timestamp": 1710180998.6361933,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833300.839123, "timestamp": 1710180998.6671896,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833301.0551696, "timestamp": 1710180998.70019,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []

View File

@ -1,60 +1,60 @@
[ [
{ {
"timestamp": 1709833297.0816422, "timestamp": 1710180997.624466,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833297.3710158, "timestamp": 1710180997.6554654,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833297.6820881, "timestamp": 1710180997.6884649,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833298.0234702, "timestamp": 1710180997.7194655,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833298.4008267, "timestamp": 1710180997.752465,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833298.70839, "timestamp": 1710180997.7834663,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.0429828, "timestamp": 1710180997.8154655,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.3404396, "timestamp": 1710180997.8476887,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.676528, "timestamp": 1710180997.8796873,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1709833299.9792745, "timestamp": 1710180997.9276876,
"x_max": 640.0, "x_max": 640.0,
"y_max": 480.0, "y_max": 480.0,
"objetos": [] "objetos": []

View File

@ -0,0 +1,215 @@
[
{
"timestamp": 1710173551.687718,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 169,
"y": 143,
"largura": 234,
"altura": 172,
"confianca": 0.5374774932861328
},
{
"id": 0,
"descricao": "crop",
"x": 169,
"y": 143,
"largura": 231,
"altura": 176,
"confianca": 0.5227176547050476
}
]
},
{
"timestamp": 1710173551.8715377,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 170,
"y": 144,
"largura": 232,
"altura": 169,
"confianca": 0.5341687798500061
},
{
"id": 0,
"descricao": "crop",
"x": 170,
"y": 144,
"largura": 229,
"altura": 174,
"confianca": 0.5135661959648132
}
]
},
{
"timestamp": 1710173552.0563934,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 168,
"y": 144,
"largura": 233,
"altura": 169,
"confianca": 0.517839252948761
}
]
},
{
"timestamp": 1710173552.244704,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710173552.427022,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 161,
"y": 124,
"largura": 240,
"altura": 179,
"confianca": 0.5095964074134827
}
]
},
{
"timestamp": 1710173552.6098726,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 159,
"y": 125,
"largura": 243,
"altura": 175,
"confianca": 0.5521326661109924
},
{
"id": 0,
"descricao": "crop",
"x": 161,
"y": 125,
"largura": 238,
"altura": 175,
"confianca": 0.5352640748023987
}
]
},
{
"timestamp": 1710173552.7977362,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 157,
"y": 127,
"largura": 244,
"altura": 173,
"confianca": 0.598517894744873
},
{
"id": 0,
"descricao": "crop",
"x": 160,
"y": 126,
"largura": 237,
"altura": 174,
"confianca": 0.5805694460868835
}
]
},
{
"timestamp": 1710173552.9800768,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 159,
"y": 126,
"largura": 240,
"altura": 176,
"confianca": 0.5590407848358154
},
{
"id": 0,
"descricao": "crop",
"x": 161,
"y": 124,
"largura": 235,
"altura": 177,
"confianca": 0.5433248281478882
}
]
},
{
"timestamp": 1710173553.163424,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 155,
"y": 125,
"largura": 246,
"altura": 175,
"confianca": 0.6474350690841675
},
{
"id": 0,
"descricao": "crop",
"x": 159,
"y": 125,
"largura": 238,
"altura": 176,
"confianca": 0.6344596743583679
}
]
},
{
"timestamp": 1710173553.3512638,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [
{
"id": 0,
"descricao": "crop",
"x": 156,
"y": 125,
"largura": 244,
"altura": 176,
"confianca": 0.6592578291893005
},
{
"id": 0,
"descricao": "crop",
"x": 159,
"y": 124,
"largura": 237,
"altura": 177,
"confianca": 0.6482002139091492
}
]
}
]

File diff suppressed because one or more lines are too long

View File

@ -1,42 +1,62 @@
[ [
{ {
"timestamp": 1702497316.221366, "timestamp": 1710172557.8495998,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.2529476, "timestamp": 1710172557.8816013,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.2853158, "timestamp": 1710172557.9136014,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.3178427, "timestamp": 1710172557.9456012,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.3489544, "timestamp": 1710172557.9776018,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.3819983, "timestamp": 1710172558.009603,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.4131682, "timestamp": 1710172558.0416012,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.4452527, "timestamp": 1710172558.0896037,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.4783282, "timestamp": 1710172558.1226008,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
}, },
{ {
"timestamp": 1702497316.5099552, "timestamp": 1710172558.1546042,
"x_max": 640.0,
"y_max": 480.0,
"objetos": [] "objetos": []
} }
] ]

View File

@ -3,18 +3,22 @@ import numpy as np
from flask import Flask, Response, request from flask import Flask, Response, request
import json import json
import time import time
import socket
import threading import threading
import sys import sys
import os import os
import uuid
import paho.mqtt.client as mqtt
mqtt_client = mqtt.Client(f"client_weed_detector_{uuid.uuid4()}")
mqtt_client.connect("localhost", port=1883)
max_readings = int(sys.argv[1]) max_readings = int(sys.argv[1])
porta = sys.argv[2] porta = sys.argv[2]
url = sys.argv[3] url = sys.argv[3]
arquivoSaida = sys.argv[4] arquivoSaida = sys.argv[4]
mostrar_linhas = sys.argv[5] == "1" mostrar_linhas = sys.argv[5] == "1"
socket_porta = int(sys.argv[6]) mqtt_topic = sys.argv[6]
app = Flask(__name__) app = Flask(__name__)
@ -45,7 +49,6 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
# Encontrar os contornos na máscara # Encontrar os contornos na máscara
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
current_readings = [] current_readings = []
idx = 0 # Índice de detecção idx = 0 # Índice de detecção
for contour in contours: for contour in contours:
@ -75,6 +78,7 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings} json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings}
readings.append(json_data) readings.append(json_data)
mqtt_client.publish(mqtt_topic, json.dumps(json_data).encode('utf-8'))
if not os.path.exists(output_folder): if not os.path.exists(output_folder):
os.makedirs(output_folder) os.makedirs(output_folder)
@ -92,44 +96,9 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
yield (b'--frame\r\n' yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
# Função para lidar com a conexão de cada cliente # Esta função é para confirmar que script está pronto para execução
def handle_client_connection(client_socket): def send_script_ready():
try: mqtt_client.publish(mqtt_topic, "OK")
while True:
# Enviar o dicionário serializado em JSON
client_socket.send(json.dumps(json_data).encode('utf-8'))
# Aguardar um pouco antes de enviar os próximos dados
time.sleep(0.2)
except socket.error:
print(f"Cliente desconectado.")
finally:
# Fechar a conexão do socket ao sair do loop
client_socket.close()
# Configuração inicial do servidor de socket
def start_server(address='localhost', port=socket_porta):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((address, port))
server.listen()
print(f"Servidor iniciado. Aguardando conexões em {address}:{port}...")
try:
while True:
client_sock, address = server.accept()
print(f"Aceitando conexão de {address[0]}:{address[1]}")
client_handler = threading.Thread(
target=handle_client_connection,
args=(client_sock,)
)
client_handler.start()
finally:
server.close()
# Esta função é para iniciar o servidor de socket em uma thread separada
def run_socket_server():
start_server()
# Iniciar o servidor Flask em uma thread separada # Iniciar o servidor Flask em uma thread separada
def run_flask_server(): def run_flask_server():
@ -145,9 +114,9 @@ def video_feed():
# Iniciar o servidor # Iniciar o servidor
if __name__ == '__main__': if __name__ == '__main__':
# Inicia o servidor de socket em uma thread separada # Cria trhead separada para informar que o script iniciou com sucesso
socket_server_thread = threading.Thread(target=run_socket_server) mqtt_thread = threading.Thread(target=send_script_ready)
socket_server_thread.start() mqtt_thread.start()
# Inicia o servidor Flask na thread principal # Inicia o servidor Flask na thread principal
run_flask_server() run_flask_server()

View File

@ -47,6 +47,7 @@ def detect_objects(conf_threshold, nms_threshold, _camera_index):
while True: while True:
ret, frame = cap.read() ret, frame = cap.read()
#frame = cv2.flip(frame, 1)
if not ret: if not ret:
break break

View File

@ -1 +1 @@
{"Conectado":true,"QuantidadeBicos":4,"DensidadeHerbicida":1.1,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":false,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":10,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":200,"Inicializado":true,"Testando":false,"Funcoes":[25],"Parametros":[["Calibragem","00450"]],"UnidadeMedida":"L/m","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":26.67,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Inicializado":true,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[1.0],"ValorMinimo":0.0,"ValorMaximo":1.0,"LimiteMaximo":25.0,"LimiteMinimo":3.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":true,"Testando":false,"Funcoes":[24],"Parametros":[],"UnidadeMedida":"psi","Leituras":[0.32,277.0],"ValorMinimo":0.0,"ValorMaximo":0.77,"LimiteMaximo":0.0,"LimiteMinimo":0.0}],"PercentualInicioPulverizacao":0.3,"MassaReservatorio":1.0,"VolumeReservatorio":0.90909090909090906,"PercentualReservatorio":3.03030303030303,"MediaNivelFluxo":0.02,"PressaoLinha":0.32} {"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.1,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":true,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":true,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":10,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":false,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[["Calibragem","00450"]],"UnidadeMedida":"L/m","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":26.67,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":false,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":[0.0],"ValorMinimo":0.0,"ValorMaximo":1.0,"LimiteMaximo":25.0,"LimiteMinimo":3.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":false,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[],"UnidadeMedida":"psi","Leituras":[0.22,190.0],"ValorMinimo":0.0,"ValorMaximo":0.77,"LimiteMaximo":0.0,"LimiteMinimo":0.0}],"PercentualInicioPulverizacao":0.35,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"MediaNivelFluxo":0.01,"PressaoLinha":0.22}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
[{"Tipo":1,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":36,"Descricao":"3","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":39,"Descricao":"4","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":34,"Descricao":"5","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":35,"Descricao":"6","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":32,"Descricao":"7","Funcao":21,"Habilitado":true,"ComponenteID":"B01"},{"Tipo":1,"Pino":33,"Descricao":"8","Funcao":21,"Habilitado":true,"ComponenteID":"B02"},{"Tipo":1,"Pino":25,"Descricao":"9","Funcao":21,"Habilitado":true,"ComponenteID":"B03"},{"Tipo":1,"Pino":26,"Descricao":"10","Funcao":21,"Habilitado":true,"ComponenteID":"B04"},{"Tipo":1,"Pino":27,"Descricao":"11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":14,"Descricao":"12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":12,"Descricao":"13","Funcao":24,"Habilitado":true,"ComponenteID":"PRSLN"},{"Tipo":1,"Pino":97,"Descricao":"14","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":13,"Descricao":"15","Funcao":25,"Habilitado":true,"ComponenteID":"FLXLN"},{"Tipo":1,"Pino":9,"Descricao":"16","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":10,"Descricao":"17","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":11,"Descricao":"18","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":96,"Descricao":"19","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":6,"Descricao":"26","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":7,"Descricao":"27","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":8,"Descricao":"28","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":15,"Descricao":"29","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":2,"Descricao":"30","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":4,"Descricao":"32","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":16,"Descricao":"33","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":17,"Descricao":"34","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":5,"Descricao":"35","Funcao":22,"Habilitado":true,"ComponenteID":"MASRS"},{"Tipo":1,"Pino":18,"Descricao":"36","Funcao":23,"Habilitado":true,"ComponenteID":"MASRS"},{"Tipo":1,"Pino":19,"Descricao":"37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":95,"Descricao":"38","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":21,"Descricao":"39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":3,"Descricao":"40","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":1,"Descricao":"41","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":1,"Pino":22,"Descricao":"42","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":23,"Descricao":"43","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":1,"Pino":94,"Descricao":"44","Funcao":0,"Habilitado":true,"ComponenteID":""}] [{"Tipo":0,"Pino":99,"Descricao":"1","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":98,"Descricao":"2","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":97,"Descricao":"3","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":4,"Descricao":"4","Funcao":21,"Habilitado":true,"ComponenteID":"B01"},{"Tipo":0,"Pino":5,"Descricao":"5","Funcao":21,"Habilitado":true,"ComponenteID":"B02"},{"Tipo":0,"Pino":6,"Descricao":"6","Funcao":21,"Habilitado":true,"ComponenteID":"B03"},{"Tipo":0,"Pino":7,"Descricao":"7","Funcao":21,"Habilitado":true,"ComponenteID":"B04"},{"Tipo":0,"Pino":15,"Descricao":"8","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":16,"Descricao":"9","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":17,"Descricao":"10","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":18,"Descricao":"11","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":8,"Descricao":"12","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":3,"Descricao":"13","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":46,"Descricao":"14","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":9,"Descricao":"15","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":10,"Descricao":"16","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":11,"Descricao":"17","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":12,"Descricao":"18","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":13,"Descricao":"19","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":14,"Descricao":"20","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":96,"Descricao":"21","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":95,"Descricao":"22","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":94,"Descricao":"23","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":93,"Descricao":"24","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":19,"Descricao":"25","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":20,"Descricao":"26","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":21,"Descricao":"27","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":47,"Descricao":"28","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":48,"Descricao":"29","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":45,"Descricao":"30","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":0,"Descricao":"31","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":35,"Descricao":"32","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":36,"Descricao":"33","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":37,"Descricao":"34","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":38,"Descricao":"35","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":39,"Descricao":"36","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":40,"Descricao":"37","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":41,"Descricao":"38","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":42,"Descricao":"39","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":2,"Descricao":"40","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":1,"Descricao":"41","Funcao":0,"Habilitado":true,"ComponenteID":""},{"Tipo":0,"Pino":44,"Descricao":"42","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":43,"Descricao":"43","Funcao":0,"Habilitado":false,"ComponenteID":""},{"Tipo":0,"Pino":92,"Descricao":"44","Funcao":0,"Habilitado":false,"ComponenteID":""}]

View File

@ -0,0 +1,8 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
"version": "0.2.0",
"configurations": [
]
}

View File

@ -15,7 +15,7 @@ bool Conectado = false;
int _TaxaAmostragem = 500; int _TaxaAmostragem = 500;
int BicosAtivos = 10; int BicosAtivos = 10;
bool AtuacaoNivelAlto = false; bool AtuacaoNivelAlto = true;
class BicoPulverizador { class BicoPulverizador {
public: public:
@ -44,7 +44,7 @@ class BicoPulverizador {
EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0")); EnviarDadosSerial(MontarProtocoloSensor(sCFG, _ID, Iniciado ? "1" : "0"));
return; return;
} }
if (_pinoSolenoide > -1) { if (_pinoSolenoide > -1) {
pinMode(_pinoSolenoide, OUTPUT); pinMode(_pinoSolenoide, OUTPUT);
_BicoAtuado = !AtuacaoNivelAlto; _BicoAtuado = !AtuacaoNivelAlto;
@ -498,7 +498,8 @@ SensorPressao* SPPorID(String ID) {
} }
void ZerarPinos() { void ZerarPinos() {
const int gpios[] = {2, 4, 5, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33}; //const int gpios[] = {2, 4, 5, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33};
const int gpios[] = {4, 5, 6, 7, 15, 16, 17, 18, 8, 3, 46, 9, 10, 11, 12, 13, 14, 19, 20, 21, 47, 48, 45, 0, 35, 36, 37, 38, 39, 40, 41, 42, 2, 1};
for (int i = 0; i < sizeof(gpios) / sizeof(gpios[0]); i++) { for (int i = 0; i < sizeof(gpios) / sizeof(gpios[0]); i++) {
pinMode(gpios[i], OUTPUT); pinMode(gpios[i], OUTPUT);
@ -546,6 +547,9 @@ void loop() {
if (ID == "MD ") { if (ID == "MD ") {
_TaxaAmostragem = ((String)Protocolo[8] + (String)Protocolo[9] + (String)Protocolo[10] + (String)Protocolo[11] + (String)Protocolo[12]).toInt(); _TaxaAmostragem = ((String)Protocolo[8] + (String)Protocolo[9] + (String)Protocolo[10] + (String)Protocolo[11] + (String)Protocolo[12]).toInt();
int pinoReleGeral = ((String)Protocolo[14] + (String)Protocolo[15]).toInt(); int pinoReleGeral = ((String)Protocolo[14] + (String)Protocolo[15]).toInt();
bool _AtuaNivelAlto = (String)Protocolo[17] == "1";
AtuacaoNivelAlto = _AtuaNivelAlto;
if (pinoReleGeral > -1) { if (pinoReleGeral > -1) {
pinMode(_pinoReleGeral, INPUT); pinMode(_pinoReleGeral, INPUT);
@ -565,7 +569,6 @@ void loop() {
bool bico_ativado = (String)Protocolo[8] == "1"; bool bico_ativado = (String)Protocolo[8] == "1";
int posicao = ((String)Protocolo[10] + (String)Protocolo[11]).toInt(); int posicao = ((String)Protocolo[10] + (String)Protocolo[11]).toInt();
int solenoide = ((String)Protocolo[13] + (String)Protocolo[14]).toInt(); int solenoide = ((String)Protocolo[13] + (String)Protocolo[14]).toInt();
if (bico_ativado) { if (bico_ativado) {
if (Conectar) { if (Conectar) {
_bico->_posicao = posicao; _bico->_posicao = posicao;
@ -648,7 +651,7 @@ void loop() {
else if (_funcao == Cmd) { else if (_funcao == Cmd) {
//canal;potencia;sentido;rampa;precisao;rpm //canal;potencia;sentido;rampa;precisao;rpm
//0;000;0;000;000;000 //0;000;0;000;000;000
String ID = ((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2]); String ID = ((String)Protocolo[0] + (String)Protocolo[1] + (String)Protocolo[2] + " ");
BicoPulverizador* _bico = BicoPorID(ID); BicoPulverizador* _bico = BicoPorID(ID);

View File

@ -0,0 +1,62 @@
[
{
"timestamp": 1710156769.1417994,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156769.591801,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156770.0317986,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156770.4707983,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156770.9117987,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156771.3448024,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156771.7877994,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156772.2297986,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156772.6668015,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1710156773.124801,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
}
]

117
Python/weed-detector/d1.py Normal file
View File

@ -0,0 +1,117 @@
import cv2
import numpy as np
from flask import Flask, Response, request
import json
import time
import threading
import sys
import os
import uuid
import paho.mqtt.client as mqtt
# Configurações iniciais
mqtt_client = mqtt.Client(f"client_weed_detector_{uuid.uuid4()}")
mqtt_client.connect("localhost", port=1883)
model_config = 'C:\\train\\models\\ervas\\ervas.cfg'
model_weights = 'C:\\train\\models\\ervas\\backup\\ervas_final.weights'
labels_path = 'C:\\train\\models\\ervas\\labels.txt'
with open(labels_path, 'rt') as f:
classes = f.read().rstrip('\n').split('\n')
# Utilizando a GPU com CUDA
net = cv2.dnn.readNetFromDarknet(model_config, model_weights)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
# Configurações adicionais
output_folder = 'Python/Output/'
max_readings = int(sys.argv[1])
app = Flask(__name__)
def detect_objects(conf_threshold, nms_threshold, _camera_index):
cap = cv2.VideoCapture(_camera_index, cv2.CAP_DSHOW)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
readings = []
while True:
ret, frame = cap.read()
if not ret:
break
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(net.getUnconnectedOutLayersNames())
current_readings = process_detections(outs, width, height, conf_threshold, frame) # Passando 'frame' como argumento
global json_data
timestamp = time.time()
json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings}
readings.append(json_data)
mqtt_client.publish(sys.argv[6], json.dumps(json_data).encode('utf-8'))
manage_output(readings, frame, max_readings)
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
def process_detections(outs, width, height, conf_threshold, frame): # Recebendo 'frame' como argumento
current_readings = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > conf_threshold:
x, y, w, h = calculate_box(detection, width, height)
detection_info = create_detection_info(class_id, x, y, w, h, confidence)
current_readings.append(detection_info)
if sys.argv[5] == "1":
draw_predictions(frame, class_id, confidence, x, y, w, h) # 'frame' já está disponível aqui
return current_readings
def draw_predictions(frame, class_id, confidence, x, y, w, h): # 'frame' é utilizado aqui
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, f'{classes[class_id]} {confidence:.2f}', (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
def calculate_box(detection, width, height):
center_x, center_y, w, h = detection[0:4] * np.array([width, height, width, height])
x, y = int(center_x - w / 2), int(center_y - h / 2)
return x, y, int(w), int(h)
def create_detection_info(class_id, x, y, w, h, confidence):
return {
'id': int(class_id),
'descricao': classes[class_id],
'x': x,
'y': y,
'largura': w,
'altura': h,
'confianca': float(confidence)
}
def manage_output(readings, frame, max_readings):
if len(readings) > max_readings:
readings.pop(0)
if not os.path.exists(output_folder):
os.makedirs(output_folder)
with open(output_folder + sys.argv[4], 'w') as file:
json.dump(readings, file, indent=4)
@app.route('/' + sys.argv[3], methods=['GET'])
def video_feed():
conf_threshold = float(request.args.get('conf_threshold'))
nms_threshold = float(request.args.get('nms_threshold'))
camera_index = int(request.args.get('camera_index'))
return Response(detect_objects(conf_threshold, nms_threshold, camera_index), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
threading.Thread(target=lambda: mqtt_client.publish(sys.argv[6], "OK")).start()
app.run(host='0.0.0.0', port=sys.argv[2], threaded=True, debug=False)