agrobot_base/AgroBase/AgroBase/Models/OAKCameraModel.cs

170 lines
5.0 KiB
C#

using AgroBase.Models.Operadores;
using AgroBase.Services.Operadores;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading.Tasks;
using static AgroBase.Models.Enums;
namespace AgroBase.Models
{
public class OAKCameraModel
{
public T_Code Dispositivo { get; set; }
public int Index { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public string Description
{
get
{
return $"({Index}) {Name ?? Id}";
}
}
public string State { get; set; }
public string Usb_Speed { get; set; }
public string[] Available_Camera_Sensors { get; set; }
public string Version { get; set; }
public OAKCameraMemoryUsageModel Memory_Usage { get; set; }
public OAKCameraTemperaturaModel Temperature { get; set; }
public string Bootloader_Version { get; set; }
public bool Is_Pipeline_Running { get; set; }
public double fx { get; set; }
public double baseline { get; set; }
public double DistanciaMaximaVisao { get; set; } = 5000;
public double DistanciaMinimaVisao { get; set; } = 500;
public double PercentualAlturaSolo { get; set; } = 30;
public Dictionary<TipoFrameCamera, OAKCameraFrameModel> frames
{
get
{
switch (Dispositivo)
{
case T_Code.Snr:
return VisualWorkerService.DadosLeitura.CameraFrames;
case T_Code.Cam:
return WeedWorkerService.DadosLeitura.CameraFrames;
default:
return new Dictionary<TipoFrameCamera, OAKCameraFrameModel>();
}
}
}
public async Task<Bitmap> GetNewFrame(TipoFrameCamera tipo = TipoFrameCamera.Rgb)
{
OAKCameraFrameModel frame = null;
switch (Dispositivo)
{
case T_Code.Snr:
frame = await VisualWorkerService.GetCameraFrame(tipo);
break;
case T_Code.Cam:
frame = await WeedWorkerService.GetCameraFrame(tipo);
break;
}
Bitmap bmp = frame?.image();
return bmp;
}
public void SaveFrames(List<TipoFrameCamera> frames, string nome, string caminho)
{
switch (Dispositivo)
{
case T_Code.Snr:
VisualWorkerService.SaveCameraFrames(frames, nome, caminho);
break;
case T_Code.Cam:
WeedWorkerService.SaveCameraFrames(frames, nome, caminho);
break;
}
}
public OAKCameraModel Clone()
{
return new OAKCameraModel()
{
Dispositivo = Dispositivo,
Index = Index,
Id = Id,
Name = Name,
State = State,
Usb_Speed = Usb_Speed,
Available_Camera_Sensors = Available_Camera_Sensors,
Bootloader_Version = Bootloader_Version,
Is_Pipeline_Running = Is_Pipeline_Running,
Memory_Usage = Memory_Usage?.Clone(),
Temperature = Temperature?.Clone(),
Version = Version,
fx = fx,
baseline = baseline,
};
}
}
public class OAKCameraMemoryUsageModel
{
public double Remaining { get; set; }
public double Total { get; set; }
public double Used { get; set; }
public double Percent
{
get
{
return Math.Round((Used / Total) * 100, 2);
}
}
public OAKCameraMemoryUsageModel Clone()
{
return new OAKCameraMemoryUsageModel()
{
Remaining = Remaining,
Total = Total,
Used = Used
};
}
}
public class OAKCameraTemperaturaModel
{
public double css { get; set; }
public double mss { get; set; }
public double upa { get; set; }
public double dss { get; set; }
public OAKCameraTemperaturaModel Clone()
{
return new OAKCameraTemperaturaModel()
{
css = css,
mss = mss,
upa = upa,
dss = dss
};
}
}
public class OAKCameraFrameModel
{
public DateTime timestamp { get; set; } = DateTime.MinValue;
public string frame { get; set; }
public Bitmap image()
{
return FuncoesGlobais.Base64ToBitmap(frame);
}
public OAKCameraFrameModel Clone()
{
return new OAKCameraFrameModel()
{
timestamp = timestamp,
frame = frame
};
}
}
}