| using System; |
| using UnityEngine; |
| using UnityEngine.Serialization; |
|
|
| namespace Unity.MLAgents.Sensors |
| { |
| |
| |
| |
| [AddComponentMenu("ML Agents/Camera Sensor", (int)MenuGroup.Sensors)] |
| public class CameraSensorComponent : SensorComponent, IDisposable |
| { |
| [HideInInspector, SerializeField, FormerlySerializedAs("camera")] |
| Camera m_Camera; |
|
|
| CameraSensor m_Sensor; |
|
|
| |
| |
| |
| public Camera Camera |
| { |
| get { return m_Camera; } |
| set { m_Camera = value; UpdateSensor(); } |
| } |
|
|
| [HideInInspector, SerializeField, FormerlySerializedAs("sensorName")] |
| string m_SensorName = "CameraSensor"; |
|
|
| |
| |
| |
| |
| public string SensorName |
| { |
| get { return m_SensorName; } |
| set { m_SensorName = value; } |
| } |
|
|
| [HideInInspector, SerializeField, FormerlySerializedAs("width")] |
| int m_Width = 84; |
|
|
| |
| |
| |
| |
| public int Width |
| { |
| get { return m_Width; } |
| set { m_Width = value; } |
| } |
|
|
| [HideInInspector, SerializeField, FormerlySerializedAs("height")] |
| int m_Height = 84; |
|
|
| |
| |
| |
| |
| public int Height |
| { |
| get { return m_Height; } |
| set { m_Height = value; } |
| } |
|
|
| [HideInInspector, SerializeField, FormerlySerializedAs("grayscale")] |
| bool m_Grayscale; |
|
|
| |
| |
| |
| |
| public bool Grayscale |
| { |
| get { return m_Grayscale; } |
| set { m_Grayscale = value; } |
| } |
|
|
| [HideInInspector, SerializeField] |
| ObservationType m_ObservationType; |
|
|
| |
| |
| |
| public ObservationType ObservationType |
| { |
| get { return m_ObservationType; } |
| set { m_ObservationType = value; UpdateSensor(); } |
| } |
|
|
| [HideInInspector, SerializeField] |
| bool m_RuntimeCameraEnable; |
|
|
|
|
| |
| |
| |
| |
| |
| public bool RuntimeCameraEnable |
| { |
| get { return m_RuntimeCameraEnable; } |
| set { m_RuntimeCameraEnable = value; UpdateSensor(); } |
| } |
|
|
| [HideInInspector, SerializeField] |
| [Range(1, 50)] |
| [Tooltip("Number of camera frames that will be stacked before being fed to the neural network.")] |
| int m_ObservationStacks = 1; |
|
|
| [HideInInspector, SerializeField, FormerlySerializedAs("compression")] |
| SensorCompressionType m_Compression = SensorCompressionType.PNG; |
|
|
| |
| |
| |
| public SensorCompressionType CompressionType |
| { |
| get { return m_Compression; } |
| set { m_Compression = value; UpdateSensor(); } |
| } |
|
|
| |
| |
| |
| |
| public int ObservationStacks |
| { |
| get { return m_ObservationStacks; } |
| set { m_ObservationStacks = value; } |
| } |
|
|
| void Start() |
| { |
| UpdateSensor(); |
| } |
|
|
| |
| |
| |
| |
| public override ISensor[] CreateSensors() |
| { |
| Dispose(); |
| m_Sensor = new CameraSensor(m_Camera, m_Width, m_Height, Grayscale, m_SensorName, m_Compression, m_ObservationType); |
|
|
| if (ObservationStacks != 1) |
| { |
| return new ISensor[] { new StackingSensor(m_Sensor, ObservationStacks) }; |
| } |
| return new ISensor[] { m_Sensor }; |
| } |
|
|
| |
| |
| |
| internal void UpdateSensor() |
| { |
| if (m_Sensor != null) |
| { |
| m_Sensor.Camera = m_Camera; |
| m_Sensor.CompressionType = m_Compression; |
| m_Sensor.Camera.enabled = m_RuntimeCameraEnable; |
| } |
| } |
|
|
| |
| |
| |
| public void Dispose() |
| { |
| if (!ReferenceEquals(m_Sensor, null)) |
| { |
| m_Sensor.Dispose(); |
| m_Sensor = null; |
| } |
| } |
| } |
| } |
|
|