//IDictionary<string, Point> objectStartPositions = new Dictionary<string, Point>();

        public void Process(VideoAnalyticsStream analyticsStream) {
            try {
                var items = analyticsStream.items;
                if (items != null) {
                    foreach (var item in items) {
                        if (item is Frame) {
                            var frame = (Frame)item;

                            var time = frame.utcTime; //TODO synchronize displaying frame and its annotation

                            var frameTransformation = frame.transformation;
                            Tuple<Win.Vector, Win.Point> frameTransform = null;
                            if (frameTransformation != null) {
                                frameTransform = Convert(frameTransformation);
                                
                                //TODO hot fix
                                //frameTransform = new Tuple<Win.Vector, Point>(new Win.Vector(0, 0), new Point(1, 1));
                            }

                            var objects = frame.@object;
                            if (objects != null) {
                                foreach (var obj in objects) {
                                    var objId = obj.objectId;
                                    var appearance = obj.appearance;
                                    if (appearance != null) {
                                        var objectTransformation = appearance.transformation;
                                        Tuple<Win.Vector, Win.Point> objTransform = null;
                                        if (objectTransformation != null)
                                            objTransform = Convert(objectTransformation);
                                        if (frameTransform != null && objTransform != null)
                                            objTransform = Transform(frameTransform, objTransform);
                                        else if (frameTransform != null && objTransform == null)
                                            objTransform = frameTransform;

                                        var shape = appearance.shape;
                                        if (shape != null) {
                                            var bb = shape.boundingBox;
                                            var gc = shape.centerOfGravity;

                                            var boundingBox = Convert(bb);
                                            var currentPosition = Convert(gc);

                                            if (objTransform != null) {
                                                boundingBox = Transform(boundingBox, objTransform);
                                                currentPosition = Transform(currentPosition, objTransform);
                                            }

                                            var snapshot = new VAObjectSnapshot() { 
                                                Id = objId,
                                                BoundingBox = boundingBox,
                                                CurrentPosition = currentPosition,
                                                StartPosition = default(Win.Point)
                                            };

                                            //TODO you have to track that some of objects became obsolete
                                            /*Point startPosition;
                                            if (!objectStartPositions.TryGetValue(objId, out startPosition)) {
                                                startPosition = snapshot.CurrentPosition;
                                                objectStartPositions[objId] = startPosition;
                                                snapshot.StartPosition = startPosition;
                                                this.initialized(snapshot);
                                            }
                                            else {
                                                snapshot.StartPosition = startPosition;*/
                                                this.changed(snapshot);
                                            /*}*/
                                        }
                                    }
                                }
                            }

                            var objectTree = frame.objectTree;
                            if (objectTree != null) {
                                var objectIds = objectTree.delete;
                                if (objectIds != null) {
                                    foreach (var objectId in objectIds) {
                                        if (objectId.objectId != null)
                                            this.deleted(new VAObjectSnapshot() { Id = objectId.objectId });
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex) {
                dbg.Error(ex);
            }
        }
Exemplo n.º 2
0
        //IDictionary<string, Point> objectStartPositions = new Dictionary<string, Point>();

        public void Process(VideoAnalyticsStream analyticsStream)
        {
            try {
                var items = analyticsStream.items;
                if (items != null)
                {
                    foreach (var item in items)
                    {
                        if (item is Frame)
                        {
                            var frame = (Frame)item;

                            var time = frame.utcTime; //TODO synchronize displaying frame and its annotation

                            var frameTransformation = frame.transformation;
                            Tuple <Win.Vector, Win.Point> frameTransform = null;
                            if (frameTransformation != null)
                            {
                                frameTransform = Convert(frameTransformation);

                                //TODO hot fix
                                //frameTransform = new Tuple<Win.Vector, Point>(new Win.Vector(0, 0), new Point(1, 1));
                            }

                            var objects = frame.@object;
                            if (objects != null)
                            {
                                foreach (var obj in objects)
                                {
                                    var objId      = obj.objectId;
                                    var appearance = obj.appearance;
                                    if (appearance != null)
                                    {
                                        var objectTransformation = appearance.transformation;
                                        Tuple <Win.Vector, Win.Point> objTransform = null;
                                        if (objectTransformation != null)
                                        {
                                            objTransform = Convert(objectTransformation);
                                        }
                                        if (frameTransform != null && objTransform != null)
                                        {
                                            objTransform = Transform(frameTransform, objTransform);
                                        }
                                        else if (frameTransform != null && objTransform == null)
                                        {
                                            objTransform = frameTransform;
                                        }

                                        var shape = appearance.shape;
                                        if (shape != null)
                                        {
                                            var bb = shape.boundingBox;
                                            var gc = shape.centerOfGravity;

                                            var boundingBox     = Convert(bb);
                                            var currentPosition = Convert(gc);

                                            if (objTransform != null)
                                            {
                                                boundingBox     = Transform(boundingBox, objTransform);
                                                currentPosition = Transform(currentPosition, objTransform);
                                            }

                                            var snapshot = new VAObjectSnapshot()
                                            {
                                                Id              = objId,
                                                BoundingBox     = boundingBox,
                                                CurrentPosition = currentPosition,
                                                StartPosition   = default(Win.Point)
                                            };

                                            //TODO you have to track that some of objects became obsolete

                                            /*Point startPosition;
                                             * if (!objectStartPositions.TryGetValue(objId, out startPosition)) {
                                             *  startPosition = snapshot.CurrentPosition;
                                             *  objectStartPositions[objId] = startPosition;
                                             *  snapshot.StartPosition = startPosition;
                                             *  this.initialized(snapshot);
                                             * }
                                             * else {
                                             *  snapshot.StartPosition = startPosition;*/
                                            this.changed(snapshot);
                                            /*}*/
                                        }
                                    }
                                }
                            }

                            var objectTree = frame.objectTree;
                            if (objectTree != null)
                            {
                                var objectIds = objectTree.delete;
                                if (objectIds != null)
                                {
                                    foreach (var objectId in objectIds)
                                    {
                                        if (objectId.objectId != null)
                                        {
                                            this.deleted(new VAObjectSnapshot()
                                            {
                                                Id = objectId.objectId
                                            });
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex) {
                dbg.Error(ex);
            }
        }