//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); } }
//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); } }