public bool Read(SetupProfile profile, XmlNode root)
        {
            foreach (XmlNode node in root)
            {
                if (node.Name.Equals("Cap3Point"))
                {
                    if (node.Attributes["Index"] == null)
                    {
                        return(false);
                    }
                    int index = JsonString.ParseInt(node.Attributes["Index"].InnerText, -1);
                    if (index < 0)
                    {
                        return(false);
                    }

                    EquipmentSettings settings = ReadCap3Point(node);
                    if (settings == null)
                    {
                        return(false);
                    }
                    profile.AddTracker(index, settings);
                }
            }
            return(true);
        }
 public XmlNode Write(SetupProfile profile, XmlNode root, XmlDocument target)
 {
     if (profile == null)
     {
         throw new ArgumentNullException("profile");
     }
     if (target == null)
     {
         throw new ArgumentNullException("target");
     }
     if (root == null)
     {
         throw new ArgumentNullException("root");
     }
     foreach (int i in profile.VideoCaptureIndexes)
     {
         EquipmentSettings settings = profile.GetVideoCapture(i);
         XmlNode           node     = WriteStream(i, settings, target);
         if (node != null)
         {
             root.AppendChild(node);
         }
     }
     return(root);
 }
Exemple #3
0
 public bool Write(SetupProfile profile, XmlNode root, XmlDocument target)
 {
     if (profile == null)
     {
         throw new ArgumentNullException("profile");
     }
     if (target == null)
     {
         throw new ArgumentNullException("target");
     }
     if (root == null)
     {
         throw new ArgumentNullException("root");
     }
     foreach (int i in profile.TrackerIndexes)
     {
         EquipmentSettings settings = profile.GetTracker(i);
         XmlNode           node     = WriteCap3Point(i, settings, target);
         if (node != null)
         {
             root.AppendChild(node);
         }
     }
     return(true);
 }
Exemple #4
0
 public bool ApplySettings(EquipmentSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     lock (captureSync) {
         // trivial case if not started
         if (!Capturing)
         {
             this.settings = new EquipmentSettings(settings);
             return(true);
         }
         // otherwise we have to stop the capture
         // provide new settings
         // and restart the capture
         if (!Stop())
         {
             return(false);
         }
         this.settings = new EquipmentSettings(settings);
         if (!Start())
         {
             return(false);
         }
     }
     return(true);
 }
Exemple #5
0
 public EquipmentSettings GetSettings()
 {
     lock (captureSync) {
         var result = new EquipmentSettings(settings);
         result.SetInteger(SensorProperty.Capturing, (videoFrame != IntPtr.Zero) ? 1 : 0);
         return(result);
     }
 }
Exemple #6
0
 public KeypointDetector(EquipmentSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     this.settings = settings;
 }
Exemple #7
0
 public void AddTracker(int index, EquipmentSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     trackers[index] = settings;
 }
Exemple #8
0
 public void AddVideoCapture(int index, EquipmentSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     captures[index] = settings;
 }
Exemple #9
0
 public Utility(Machine machine, string path)
 {
     Machine = machine;
     CreatePaths(path);
     Version           = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
     CharacterSettings = LoadCharacterSettings();
     BotSettings       = LoadBotSettings();
     Inventory         = LoadInventories();
     EquipmentSettings = LoadEquipmentSettings();
     LoadBuffProfiles();
 }
Exemple #10
0
 public P3PoseEstimator(EquipmentSettings settings, IObjectModel model)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     if (model == null)
     {
         throw new ArgumentNullException("model");
     }
     this.settings = settings;
     this.model    = model;
 }
Exemple #11
0
        private XmlNode WriteStream(int index, EquipmentSettings settings, XmlDocument target)
        {
            var result = target.CreateElement("Webcam");

            result.SetAttribute("Index", index.ToString(JsonString.FormatProvider));
            result.SetAttribute("Name", settings.GetText(SensorProperty.Name, "Webcam"));
            {             // camera
                XmlElement node = target.CreateElement("Camera");
                result.AppendChild(node);
                node.InnerText = settings.GetInteger(SensorProperty.CameraId, 0).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.CameraId).ToString());
            }
            {             // width
                XmlElement node = target.CreateElement("Width");
                result.AppendChild(node);
                node.InnerText = settings.GetInteger(SensorProperty.FrameWidth, 640).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.FrameWidth).ToString());
            }
            {             // height
                XmlElement node = target.CreateElement("Height");
                result.AppendChild(node);
                node.InnerText = settings.GetInteger(SensorProperty.FrameHeight, 480).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.FrameHeight).ToString());
            }
            {             // fps
                XmlElement node = target.CreateElement("FPS");
                result.AppendChild(node);
                node.InnerText = settings.GetInteger(SensorProperty.FrameRate, 30).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.FrameRate).ToString());
            }
            {             // exposure
                XmlElement node = target.CreateElement("Exposure");
                result.AppendChild(node);
                node.InnerText = settings.GetDecimal(SensorProperty.Exposure, 0.0m).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.Exposure).ToString());
            }
            {             // brightness
                XmlElement node = target.CreateElement("Brightness");
                result.AppendChild(node);
                node.InnerText = settings.GetDecimal(SensorProperty.Brightness, 0.0m).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.Brightness).ToString());
            }
            {             // contrast
                XmlElement node = target.CreateElement("Contrast");
                result.AppendChild(node);
                node.InnerText = settings.GetDecimal(SensorProperty.Contrast, 0.0m).ToString();
                node.SetAttribute("Auto", settings.IsAuto(SensorProperty.Contrast).ToString());
            }
            return(result);
        }
Exemple #12
0
 public PointLabeler(EquipmentSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     this.settings           = settings;
     this.lastLabels         = new int[0];
     this.lastPoints         = new Point2i[0];
     this.inPoints           = new Point2i[0];
     this.outPoints          = new Point2i[0];
     this.outLabels          = new int[0];
     this.permutations       = new int[0][];
     this.permutationPointNo = 0;
 }
Exemple #13
0
        public P3CapTracker(EquipmentSettings settings) : base()
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }
            this.settings      = new EquipmentSettings(settings);
            this.pointDetector = null;
            this.pointLabeler  = null;
            this.poseEstimator = null;
            IRasterImageBase frame = new TrackerVideoFrame(1, 1, new byte[1]);

            this.imageOut     = SharedRef.Create(frame);
            this.imageCleaner = new SharedRefCleaner(32);
            this.trackerSync  = new object();
        }
Exemple #14
0
 public override bool ApplySettings(EquipmentSettings settings)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     lock (trackerSync) {
         this.settings = new EquipmentSettings(settings);
         if (Running)
         {
             var model = new CapModel();
             pointDetector = new KeypointDetector(this.settings);
             pointLabeler  = new PointLabeler(this.settings);
             poseEstimator = new P3PoseEstimator(this.settings, model);
         }
     }
     return(true);
 }
Exemple #15
0
        private HttpStatusCode RespondGet(JsonString requestSubject, JsonString responseSubject, int sensorStart, int sensorEnd)
        {
            object     dataSync = new object();
            JsonString data;

            lock (dataSync) {             // TODO lock required?
                data = JsonString.CreateArray();
            }
            var readySignal = new ManualResetEvent(false);

            CaptureSystem.Instance.Invoke((object sender, EventArgs args) => {
                var system = (CaptureSystem)sender;
                for (int i = sensorStart; i <= sensorEnd; i++)
                {
                    var entry          = JsonString.CreateDict();
                    ISensorBase sensor = system.GetSensor(i);
                    if (sensor == null)
                    {
                        entry.AddTerminal("inuse", "false");
                    }
                    else if (sensor.SensorType == SensorType.Webcam)
                    {
                        var capture = (WebcamCapture)sensor;
                        EquipmentSettings settings = capture.GetSettings();
                        entry.AddTerminal("inuse", "true");
                        entry.AddJsonString("settings", EquipmentSettings.ToJson(settings));
                    }
                    else
                    {
                        entry.AddTerminal("inuse", "false");
                    }
                    data.AddJsonString(string.Empty, entry);
                }
                readySignal.Set();
            });
            readySignal.WaitOne();
            lock (dataSync) {
                responseSubject.AddJsonString("data", data);
            }
            return(HttpStatusCode.OK);
        }
Exemple #16
0
        private HttpStatusCode RespondGet(JsonString requestSubject, JsonString responseSubject, int[] positions)
        {
            object     dataSync = new object();
            JsonString data;

            lock (dataSync) {             // TODO lock required?
                data = JsonString.CreateDict();
            }
            var readySignal = new ManualResetEvent(false);

            TrackingSystem.Instance.Invoke((object sender, EventArgs args) => {
                var system = (TrackingSystem)sender;
                foreach (int pos in positions)
                {
                    var entry            = JsonString.CreateDict();
                    IPoseTracker tracker = system.GetTracker(pos);
                    if (tracker == null)
                    {
                        entry.AddTerminal("inuse", "false");
                    }
                    else if (tracker is P3CapTracker)
                    {
                        var capTracker             = (P3CapTracker)tracker;
                        EquipmentSettings settings = capTracker.GetSettings();
                        entry.AddTerminal("inuse", "true");
                        entry.AddJsonString("settings", EquipmentSettings.ToJson(settings));
                    }
                    data.AddJsonString(JsonString.Stringify(pos), entry);
                }
                readySignal.Set();
            });
            readySignal.WaitOne();
            lock (dataSync) {
                responseSubject.AddJsonString("data", data);
            }
            return(HttpStatusCode.OK);
        }
Exemple #17
0
        private XmlNode WriteCap3Point(int index, EquipmentSettings settings, XmlDocument target)
        {
            XmlElement result = target.CreateElement("Cap3Point");

            result.SetAttribute("Index", index.ToString());
            // stream
            for (int i = 0; i < 2; i++)               // stream
            {
                int stream = settings.GetInteger(TrackerProperty.Stream0 + i, -1);
                if (stream > -1)
                {
                    XmlElement node = target.CreateElement("Stream");
                    result.AppendChild(node);
                    node.InnerText = stream.ToString();
                }
            }
            {             // model
                // TODO implement
            }
            {             // mixing
                int mixing = settings.GetInteger(TrackerProperty.Smoothing, -1);
                if (mixing > -1)
                {
                    XmlElement node = target.CreateElement("Smoothing");
                    result.AppendChild(node);
                    node.InnerText = mixing.ToString();
                }
            }
            {
                decimal mixingDecline = settings.GetDecimal(TrackerProperty.SmoothingDropoff, -1.0m);
                if (mixingDecline > -1.0m)
                {
                    XmlElement node = target.CreateElement("SmoothingDropoff");
                    result.AppendChild(node);
                    node.InnerText = mixingDecline.ToString(JsonString.FormatProvider);
                }
            }
            {
                int bright = settings.GetInteger(TrackerProperty.MinBrightness, -1);
                if (bright > -1)
                {
                    XmlElement node = target.CreateElement("MinBrightness");
                    result.AppendChild(node);
                    node.InnerText = bright.ToString();
                }
            }
            {             // cluster radius
                int radius = settings.GetInteger(TrackerProperty.MinClusterRadius, -1);
                if (radius > -1)
                {
                    XmlElement node = target.CreateElement("MinClusterRadius");
                    result.AppendChild(node);
                    node.InnerText = radius.ToString();
                }
            }
            {
                int radius = settings.GetInteger(TrackerProperty.MaxClusterRadius, -1);
                if (radius > -1)
                {
                    XmlElement node = target.CreateElement("MaxClusterRadius");
                    result.AppendChild(node);
                    node.InnerText = radius.ToString();
                }
            }
            {             // cluster members
                int members = settings.GetInteger(TrackerProperty.MaxClusterMembers, -1);
                if (members > -1)
                {
                    XmlElement node = target.CreateElement("MaxClusterMembers");
                    result.AppendChild(node);
                    node.InnerText = members.ToString();
                }
            }
            {             // cluster no
                int clusterNo = settings.GetInteger(TrackerProperty.MaxClusterNo, -1);
                if (clusterNo > -1)
                {
                    XmlElement node = target.CreateElement("MaxClusters");
                    result.AppendChild(node);
                    node.InnerText = clusterNo.ToString();
                }
            }
            {             // point no
                int pointNo = settings.GetInteger(TrackerProperty.MaxPointNo, -1);
                if (pointNo > -1)
                {
                    XmlElement node = target.CreateElement("MaxPoints");
                    result.AppendChild(node);
                    node.InnerText = pointNo.ToString();
                }
            }
            {             // layer energy
                int energy = settings.GetInteger(TrackerProperty.MinLayerEnergy, -1);
                if (energy > -1)
                {
                    XmlElement node = target.CreateElement("MinLayerEnergy");
                    result.AppendChild(node);
                    node.InnerText = energy.ToString();
                }
            }
            {             // label no
                int labelNo = settings.GetInteger(TrackerProperty.LabelNo, -1);
                if (labelNo > -1)
                {
                    XmlElement node = target.CreateElement("Labels");
                    result.AppendChild(node);
                    node.InnerText = labelNo.ToString();
                }
            }
            {             // fast approx threshold
                int threshold = settings.GetInteger(TrackerProperty.FastApproxThreshold, -1);
                if (threshold > -1)
                {
                    XmlElement node = target.CreateElement("FastApproxThreshold");
                    result.AppendChild(node);
                    node.InnerText = threshold.ToString();
                }
            }
            {             // max queued images
                int imageNo = settings.GetInteger(TrackerProperty.MaxQueuedImages, -1);
                if (imageNo > -1)
                {
                    XmlElement node = target.CreateElement("MaxQueuedImages");
                    result.AppendChild(node);
                    node.InnerText = imageNo.ToString();
                }
            }
            return(result);
        }
        private EquipmentSettings ReadCap3Point(XmlNode root)
        {
            var result   = new EquipmentSettings(typeof(TrackerProperty));
            int streamNo = 0;

            foreach (XmlNode node in root.ChildNodes)
            {
                if (node.Name.Equals("Stream"))
                {
                    int stream = JsonString.ParseInt(node.InnerText, -1);
                    if (stream < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.Stream0 + streamNo, stream);
                    streamNo += 1;
                }
                else if (node.Name.Equals("Model"))
                {
                    int model = JsonString.ParseInt(node.InnerText, -1);
                    if (model < 0)
                    {
                        return(null);
                    }
                    // TODO replace with another system
                    //result.SetInteger(TrackerProperty.Model, model);
                }
                else if (node.Name.Equals("Smoothing"))
                {
                    int smoothing = JsonString.ParseInt(node.InnerText, -1);
                    if (smoothing < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.Smoothing, smoothing);
                }
                else if (node.Name.Equals("SmoothingDropoff"))
                {
                    decimal dropoff = JsonString.ParseDecimal(node.InnerText, -1.0m);
                    if (dropoff == -1.0m)
                    {
                        return(null);
                    }
                    result.SetDecimal(TrackerProperty.SmoothingDropoff, dropoff);
                }
                else if (node.Name.Equals("MinBrightness"))
                {
                    int brightness = JsonString.ParseInt(node.InnerText, -1);
                    if (brightness < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MinBrightness, brightness);
                }
                else if (node.Name.Equals("MinClusterRadius"))
                {
                    int radius = JsonString.ParseInt(node.InnerText, -1);
                    if (radius < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MinClusterRadius, radius);
                }
                else if (node.Name.Equals("MaxClusterRadius"))
                {
                    int radius = JsonString.ParseInt(node.InnerText, -1);
                    if (radius < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MaxClusterRadius, radius);
                }
                else if (node.Name.Equals("MinLayerEnergy"))
                {
                    int energy = JsonString.ParseInt(node.InnerText, -1);
                    if (energy < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MinLayerEnergy, energy);
                }
                else if (node.Name.Equals("MaxClusterMembers"))
                {
                    int members = JsonString.ParseInt(node.InnerText, -1);
                    if (members < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MaxClusterMembers, members);
                }
                else if (node.Name.Equals("MaxClusters"))
                {
                    int clusters = JsonString.ParseInt(node.InnerText, -1);
                    if (clusters < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MaxClusterNo, clusters);
                }
                else if (node.Name.Equals("MaxPoints"))
                {
                    int points = JsonString.ParseInt(node.InnerText, -1);
                    if (points < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MaxPointNo, points);
                }
                else if (node.Name.Equals("Labels"))
                {
                    int labelNo = JsonString.ParseInt(node.InnerText, -1);
                    if (labelNo < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.LabelNo, labelNo);
                }
                else if (node.Name.Equals("FastApproxThreshold"))
                {
                    int threshold = JsonString.ParseInt(node.InnerText, -1);
                    if (threshold < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.FastApproxThreshold, threshold);
                }
                else if (node.Name.Equals("MaxQueuedImages"))
                {
                    int images = JsonString.ParseInt(node.InnerText, -1);
                    if (images < 0)
                    {
                        return(null);
                    }
                    result.SetInteger(TrackerProperty.MaxQueuedImages, images);
                }
            }
            return(result);
        }
Exemple #19
0
 public abstract bool ApplySettings(EquipmentSettings settings);
Exemple #20
0
        private HttpStatusCode RespondPost(JsonString requestSubject, JsonString responseSubject, int sensorIndex)
        {
            object dataSync = new object();
            // first read the data from the data array
            JsonString data = requestSubject.GetJsonString("data");

            if (data == null || data.Type != JsonStringType.Array || data.Array.Count < 1)
            {
                return(HttpStatusCode.BadRequest);
            }
            var targetMap = new Dictionary <int, EquipmentSettings>();

            for (int i = 0; i <= 0; i++)
            {
                JsonString sensor = data.GetJsonString(0);
                if (sensor == null)
                {
                    return(HttpStatusCode.BadRequest);
                }
                bool used = JsonString.ParseBool(sensor.GetTerminal("inuse", "false"), false);
                if (used)
                {
                    JsonString jSettings = sensor.GetJsonString("settings");
                    if (jSettings == null)
                    {
                        return(HttpStatusCode.BadRequest);
                    }
                    var settings = EquipmentSettings.FromJson(jSettings, typeof(SensorProperty));
                    targetMap.Add(sensorIndex + i, settings);
                }
            }

            // secondly satisfy the request
            var status      = HttpStatusCode.OK;
            var resultMap   = new Dictionary <int, EquipmentSettings>();
            var readySignal = new ManualResetEvent(false);

            CaptureSystem.Instance.Invoke((object sender, EventArgs args) => {
                var system = (CaptureSystem)sender;
                for (int iSource = sensorIndex; iSource <= sensorIndex; iSource++)
                {
                    // first determine which operations to perform
                    int iTarget     = iSource;
                    bool connect    = false;
                    bool disconnect = false;
                    bool start      = false;
                    bool stop       = false;
                    bool apply      = false;


                    var entry          = data.GetJsonString(0);
                    ISensorBase sensor = system.GetSensor(sensorIndex);
                    EquipmentSettings sourceSettings = null;
                    SensorType sourceType            = SensorType.Webcam;
                    if (sensor != null)
                    {
                        sourceSettings = ((WebcamCapture)sensor).GetSettings();
                        int iType      = sourceSettings.GetInteger(SensorProperty.Type, -1);
                        if (iType > -1)
                        {
                            sourceType = (SensorType)iType;
                        }
                    }
                    EquipmentSettings targetSettings = null;
                    SensorType targetType            = SensorType.Webcam;
                    if (targetMap.TryGetValue(iSource, out targetSettings))
                    {
                        int iType = targetSettings.GetInteger(SensorProperty.Type, -1);
                        if (iType > -1)
                        {
                            targetType = (SensorType)iType;
                        }
                    }
                    if (sourceSettings == null && targetSettings != null)
                    {
                        connect = true;
                    }
                    else if (sourceSettings != null && targetSettings == null)
                    {
                        disconnect = true;
                    }
                    else if (sourceSettings == null && targetSettings == null)
                    {
                        // nothing to do
                    }
                    else
                    {
                        if (sourceType != targetType)
                        {
                            disconnect = true;
                            connect    = true;
                        }
                        apply = true;
                    }
                    if (targetSettings != null)
                    {
                        int iTargetCapturing = targetSettings.GetInteger(SensorProperty.Capturing, -1);
                        if (iTargetCapturing < 0)
                        {
                            // ignore if not available
                        }
                        else if (iTargetCapturing != 0)
                        {
                            start = true;
                        }
                        else
                        {
                            stop = true;
                        }
                    }
                    // TODO make restrictions or otherwise cover remaining possible cases
                    bool success = true;
                    // perform the operations which were activated above
                    if (disconnect && success)
                    {
                        if (system.DisconnectSensor(iSource))
                        {
                            LogManager.Instance.LogMessage(this, "Disconnected sensor " + iSource);
                            sensor = null;
                            // already removed from result map
                        }
                        else
                        {
                            // nothing changed
                            LogManager.Instance.LogError(this, "Failed to disconnect sensor " + iSource);
                            resultMap[iSource] = sourceSettings;
                            success            = false;
                        }
                    }
                    if (connect && success)
                    {
                        sensor    = new WebcamCapture(targetSettings);
                        int iNext = system.ConnectSensor(sensor, iTarget);
                        if (iNext == iTarget)
                        {
                            LogManager.Instance.LogMessage(this, "Connected sensor " + iNext);
                            targetSettings     = ((WebcamCapture)sensor).GetSettings();
                            resultMap[iTarget] = targetSettings;
                        }
                        else if (iNext < 0)
                        {
                            // failed, leave result map entry empty
                            LogManager.Instance.LogError(this, "Failed to connect new sensor");
                            sensor  = null;
                            success = false;
                        }
                        else
                        {
                            LogManager.Instance.LogMessage(this, "Connected sensor " + iNext);
                            // sensor connected with different index, which we can accept
                            iTarget          = iNext;
                            resultMap[iNext] = targetSettings;
                            targetSettings   = ((WebcamCapture)sensor).GetSettings();
                        }
                    }

                    if (stop && success)
                    {
                        if (system.StopSensor(iTarget))
                        {
                            LogManager.Instance.LogMessage(this, "Stopped sensor " + iTarget);
                        }
                        else
                        {
                            targetSettings = ((WebcamCapture)sensor).GetSettings();
                            success        = false;
                            LogManager.Instance.LogError(this, "Failed to stop sensor " + iTarget);
                        }
                        resultMap[iTarget] = targetSettings;
                    }
                    if (apply && success)
                    {
                        if (sensor != null)
                        {
                            if (((WebcamCapture)sensor).ApplySettings(targetSettings))
                            {
                                LogManager.Instance.LogMessage(this, "Applied new settings to sensor " + iTarget);
                            }
                            else
                            {
                                LogManager.Instance.LogError(this, "Failed to apply new settings to sensor " + iTarget);
                            }
                            targetSettings     = ((WebcamCapture)sensor).GetSettings();
                            resultMap[iTarget] = targetSettings;
                        }
                    }

                    if (start && success)
                    {
                        if (system.StartSensor(iSource))
                        {
                            LogManager.Instance.LogMessage(this, "Started sensor " + iSource);
                            targetSettings     = ((WebcamCapture)sensor).GetSettings();
                            resultMap[iTarget] = targetSettings;
                        }
                        else
                        {
                            LogManager.Instance.LogError(this, "Failed to start sensor " + iSource);
                            targetSettings     = ((WebcamCapture)sensor).GetSettings();
                            resultMap[iTarget] = targetSettings;
                            success            = false;
                        }
                    }
                    if (!success)
                    {
                        status = HttpStatusCode.InternalServerError;
                    }
                }
                readySignal.Set();
            });
            // lastly create an update for all clients
            if (!readySignal.WaitOne(10000))
            {
                return(HttpStatusCode.InternalServerError);
            }
            if (status != HttpStatusCode.OK)
            {
                return(status);
            }
            //var responseSubject = new JsonString(subject);
            {
                var updateData = JsonString.CreateArray();
                {
                    for (int i = sensorIndex; i <= sensorIndex; i++)
                    {
                        var entry = JsonString.CreateDict();
                        EquipmentSettings settings;
                        if (resultMap.TryGetValue(i, out settings))
                        {
                            entry.AddTerminal("inuse", "true");
                            entry.AddJsonString("settings", EquipmentSettings.ToJson(settings));
                        }
                        else
                        {
                            entry.AddTerminal("inuse", "false");
                        }
                        updateData.AddJsonString(string.Empty, entry);
                    }
                }
                responseSubject.AddJsonString("data", updateData);
            }
            return(HttpStatusCode.OK);
        }
Exemple #21
0
        /// <summary>
        /// Reads stream settings from the given node.
        /// </summary>
        /// <returns><c>true</c>, if operation was successful, <c>false</c> otherwise.</returns>
        /// <param name="index">Capture index.</param>
        /// <param name="profile">Target profile.</param>
        /// <param name="root">Root node.</param>
        public bool ReadWebcam(string name, int index, SetupProfile profile, XmlNode root)
        {
            var settings = new EquipmentSettings(typeof(SensorProperty));

            // TODO read name from data
            settings.SetText(SensorProperty.Name, name);
            settings.SetText(SensorProperty.Type, "Webcam");
            // first parse the node
            foreach (XmlNode node in root.ChildNodes)
            {
                if (node.Name.Equals("Camera"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }

                    if (!auto)
                    {
                        int camera = JsonString.ParseInt(node.InnerText, -1);
                        if (camera < 0)
                        {
                            return(false);
                        }
                        settings.SetInteger(SensorProperty.CameraId, camera);
                    }
                }
                else if (node.Name.Equals("Width"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }
                    if (!auto)
                    {
                        int width = JsonString.ParseInt(node.InnerText, 640);
                        if (width < 1)
                        {
                            return(false);
                        }
                        settings.SetInteger(SensorProperty.FrameWidth, width);
                    }
                }
                else if (node.Name.Equals("Height"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }
                    if (!auto)
                    {
                        int height = JsonString.ParseInt(node.InnerText, 480);
                        if (height < 1)
                        {
                            return(false);
                        }
                        settings.SetInteger(SensorProperty.FrameHeight, height);
                    }
                }
                else if (node.Name.Equals("FPS"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }
                    if (!auto)
                    {
                        int fps = JsonString.ParseInt(node.InnerText, 30);
                        if (fps < 0)
                        {
                            return(false);
                        }
                        settings.SetInteger(SensorProperty.FrameRate, fps);
                    }
                }
                else if (node.Name.Equals("Exposure"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }
                    decimal exposure = JsonString.ParseDecimal(node.InnerText, 0.0m);
                    if (!auto)
                    {
                        settings.SetDecimal(SensorProperty.Exposure, exposure);
                    }
                }
                else if (node.Name.Equals("Brightness"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }
                    decimal bright = JsonString.ParseDecimal(node.InnerText, 0.0m);
                    if (!auto)
                    {
                        settings.SetDecimal(SensorProperty.Brightness, bright);
                    }
                }
                else if (node.Name.Equals("Contrast"))
                {
                    bool auto = true;
                    if (node.Attributes["Auto"] != null)
                    {
                        auto = JsonString.ParseBool(node.Attributes["Auto"].InnerText, true);
                    }
                    decimal contrast = JsonString.ParseDecimal(node.InnerText, 0.0m);
                    if (!auto)
                    {
                        settings.SetDecimal(SensorProperty.Contrast, contrast);
                    }
                }
            }
            // add the settings if successful
            profile.AddVideoCapture(index, settings);
            return(true);
        }
Exemple #22
0
 public WebcamCapture(EquipmentSettings settings) : this()
 {
     this.settings = new EquipmentSettings(settings);
 }