private void OnAllFramesReady(object sender, AllFramesReadyEventArgs allFramesReadyEventArgs) { sessionEndTime = DateTime.Now; if (sessionEndTime.Subtract(sessionStartTime).TotalSeconds > sessionLength) { //publish data for the session session.startTime = sessionStartTime; session.endTime = sessionEndTime; this.dynamicRC.saveDynamicUserProfiles(session, new List<UserProfile>(userProfiles.Values)); this.staticRC.saveStaticUserProfiles(session, new List<UserProfile>(userProfiles.Values)); if (contentCounter == 3) { this.dynamicRC.ExportToFile("DynamicData_" + DateTime.Now.ToString("dd_MM_yyyy_hh_mm_ss") + ".csv"); this.staticRC.ExportToFile("StaticData_" + DateTime.Now.ToString("dd_MM_yyyy_hh_mm_ss") + ".csv"); dynamicRC = new ResultCreator(); staticRC = new ResultCreator(); contentCounter = 0; } //clear old variables userProfiles = null; userTrackStatus = null; totalDistractiony = new Dictionary<int, float>(); userTrackStatus = new Dictionary<int, Boolean>(); userProfiles = new Dictionary<int, UserProfile>(); rotationOldy = new Dictionary<int, float>(); headSD = new Dictionary<int, double>(); headSDDataset = new Dictionary<int, List<float>>(); //start new session session = null; sessionStartTime = sessionEndTime; genderdetectionCount = 0; } else { //assign current data to the session List<UserProfile> sessionUsers; sessionUsers = new List<UserProfile>(); if (session == null) { contentCounter++; //foreach (var item in userProfiles.Values) //{ // sessionUsers.Add(item); //} //session = new ElicitationSession(sessionUsers, contentCounter); session = new ElicitationSession(); } foreach (var item in userProfiles.Values) { sessionUsers.Add(item); } session.setUsers(sessionUsers); } ColorImageFrame colorImageFrame = null; DepthImageFrame depthImageFrame = null; SkeletonFrame skeletonFrame = null; try { colorImageFrame = allFramesReadyEventArgs.OpenColorImageFrame(); depthImageFrame = allFramesReadyEventArgs.OpenDepthImageFrame(); skeletonFrame = allFramesReadyEventArgs.OpenSkeletonFrame(); if (colorImageFrame == null || depthImageFrame == null || skeletonFrame == null) { return; } // Check for image format changes. The FaceTracker doesn't // deal with that so we need to reset. if (this.depthImageFormat != depthImageFrame.Format) { this.ResetFaceTracking(); this.depthImage = null; this.depthImageFormat = depthImageFrame.Format; } if (this.colorImageFormat != colorImageFrame.Format) { this.ResetFaceTracking(); this.colorImage = null; this.colorImageFormat = colorImageFrame.Format; } // Create any buffers to store copies of the data we work with if (this.depthImage == null) { this.depthImage = new short[depthImageFrame.PixelDataLength]; } if (this.colorImage == null) { this.colorImage = new byte[colorImageFrame.PixelDataLength]; } // Get the skeleton information if (this.skeletonData == null || this.skeletonData.Length != skeletonFrame.SkeletonArrayLength) { this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; } colorImageFrame.CopyPixelDataTo(this.colorImage); depthImageFrame.CopyPixelDataTo(this.depthImage); skeletonFrame.CopySkeletonDataTo(this.skeletonData); if (!this.Kinect.SkeletonStream.AppChoosesSkeletons) { //this.Kinect.SkeletonStream.AppChoosesSkeletons = true; // Ensure AppChoosesSkeletons is set } //int count = 0; //foreach (Skeleton skeleton in this.skeletonData) //{ // if (skeleton.TrackingState == SkeletonTrackingState.Tracked // || skeleton.TrackingState == SkeletonTrackingState.PositionOnly) // { // count++; // } //} //if (count > 2) //{ // count++; //} foreach (Skeleton skeleton in this.skeletonData) { if (skeleton.TrackingState == SkeletonTrackingState.Tracked || skeleton.TrackingState == SkeletonTrackingState.PositionOnly) { if (!userProfiles.ContainsKey(skeleton.TrackingId)) { UserProfile user = new UserProfile(); userProfiles.Add(skeleton.TrackingId, user); user.userID = skeleton.TrackingId; userTrackStatus.Add(skeleton.TrackingId, false); totalDistractiony.Add(skeleton.TrackingId, 0); rotationOldy.Add(skeleton.TrackingId, 0); headSD.Add(skeleton.TrackingId, 0); headSDDataset.Add(skeleton.TrackingId, new List<float>()); } if (!childDetected.ContainsKey(skeleton.TrackingId)) { childDetected.Add(skeleton.TrackingId, true); } } } foreach (int userID in userProfiles.Keys) { Skeleton skeleton = getSkeletonForID(userID, skeletonData); Boolean tempBool = userTrackStatus[userID]; // Boolean tempBool = userTrackStatus.TryGetValue(userID, out tempBool); /*if (skeleton.TrackingState != SkeletonTrackingState.Tracked && !tempBool) { this.Kinect.SkeletonStream.ChooseSkeletons(userID); userTrackStatus.Remove(userID); userTrackStatus.Add(skeleton.TrackingId, true); break; } userTrackStatus.Remove(userID); userTrackStatus.Add(skeleton.TrackingId, false);*/ if (skeleton != null) { if (skeleton.TrackingState == SkeletonTrackingState.Tracked) { userTrackStatus[skeleton.TrackingId] = true; //Debug.WriteLine("tracked Skeleton Id:" + skeleton.TrackingId); // We want keep a record of any skeleton, tracked or untracked. if (!this.trackedSkeletons.ContainsKey(skeleton.TrackingId)) { this.trackedSkeletons.Add(skeleton.TrackingId, new SkeletonFaceTracker()); } ////Sleeper Detection/* if (!skeletonPositions.ContainsKey(skeleton.TrackingId)) { if (skeleton.Joints[JointType.ShoulderLeft].TrackingState == JointTrackingState.Tracked & skeleton.Joints[JointType.ShoulderRight].TrackingState == JointTrackingState.Tracked & skeleton.Joints[JointType.Head].TrackingState == JointTrackingState.Tracked & skeleton.Joints[JointType.HandLeft].TrackingState == JointTrackingState.Tracked & skeleton.Joints[JointType.HandRight].TrackingState == JointTrackingState.Tracked) { skeletonPositions.Add(skeleton.TrackingId, new SkeletonPosition(skeleton, Kinect)); } } else { if (skeletonPositions[skeleton.TrackingId].timeElapsed().TotalSeconds > sessionLength / 2) { if (skeleton.Joints[JointType.ShoulderLeft].TrackingState != JointTrackingState.NotTracked & skeleton.Joints[JointType.ShoulderRight].TrackingState != JointTrackingState.NotTracked & skeleton.Joints[JointType.Head].TrackingState != JointTrackingState.NotTracked & skeleton.Joints[JointType.HandLeft].TrackingState != JointTrackingState.NotTracked & skeleton.Joints[JointType.HandRight].TrackingState != JointTrackingState.NotTracked) { userProfiles[skeleton.TrackingId].userSleeping = skeletonPositions[skeleton.TrackingId].userSleeping(new SkeletonPosition(skeleton, Kinect)); skeletonPositions[skeleton.TrackingId] = new SkeletonPosition(skeleton, Kinect); } } } //gender detection if (DateTime.Now.Subtract(sessionStartTime).TotalSeconds >= sessionLength / 5 * genderdetectionCount && genderdetectionCount < 5) { genderdetectionCount++; int gender = genderDetector.detectThroughKinect(Kinect, colorImageFrame, skeleton); UserProfile user = userProfiles[skeleton.TrackingId]; if (gender == 0) user.gender = "Male"; else if (gender == 1) user.gender = "Female"; else user.gender = "Unknown"; } //child detection /*UserProfile tempUserProfile = new UserProfile(); userProfiles.TryGetValue(skeleton.TrackingId, out tempUserProfile); tempUserProfile.userIsChild = childDetector.ChildOrNot(skeleton);*/ if (childDetected[skeleton.TrackingId]) { userProfiles[skeleton.TrackingId].userIsChild = childDetector.ChildOrNot(skeleton); if (!userProfiles[skeleton.TrackingId].userIsChild) { childDetected[skeleton.TrackingId] = false; } } else { userProfiles[skeleton.TrackingId].userIsChild = false; } // Give each tracker the upated frame. SkeletonFaceTracker skeletonFaceTracker; if (this.trackedSkeletons.TryGetValue(skeleton.TrackingId, out skeletonFaceTracker)) { skeletonFaceTracker.OnFrameReady(this.Kinect, colorImageFormat, colorImage, depthImageFormat, depthImage, skeleton); skeletonFaceTracker.LastTrackedFrame = skeletonFrame.FrameNumber; if (skeletonFaceTracker.faceTracked) { if (Math.Abs(skeletonFaceTracker.rotationNew - rotationOldy[skeleton.TrackingId]) > 1.5) { /* totalDistractiony[skeleton.TrackingId] = totalDistractiony[skeleton.TrackingId] + Math.Abs(skeletonFaceTracker.rotationNew - rotationOldy[skeleton.TrackingId]); rotationOldy[skeleton.TrackingId] = skeletonFaceTracker.rotationNew; skeletonFaceTracker.faceTracked = false;*/ //totalDistractiony = skeletonFaceTracker.rotationNew; headSDDataset[skeleton.TrackingId].Add(Math.Abs(skeletonFaceTracker.rotationNew - rotationOldy[skeleton.TrackingId])); headSD[skeleton.TrackingId] = CalculateSD(headSDDataset[skeleton.TrackingId]); rotationOldy[skeleton.TrackingId] = skeletonFaceTracker.rotationNew; skeletonFaceTracker.faceTracked = false; } currentTime = DateTime.Now; if (currentTime.Subtract(startTime).TotalSeconds > sessionLength / 2) { //Debug.WriteLine("Head SD :" + headSD[skeleton.TrackingId]); if (userProfiles.ContainsKey(skeleton.TrackingId) && headSD[skeleton.TrackingId] > 5) { /*userDistractionStatus.Remove(skeleton.TrackingId); userDistractionStatus.Add(skeleton.TrackingId, true); UserProfile tempUser = new UserProfile(); userProfiles.TryGetValue(skeleton.TrackingId, out tempUser); tempUser.userDistracted = true;*/ userProfiles[skeleton.TrackingId].userDistracted = true; } startTime = currentTime; } } } } } } this.RemoveOldTrackers(skeletonFrame.FrameNumber); this.InvalidateVisual(); } finally { if (colorImageFrame != null) { colorImageFrame.Dispose(); } if (depthImageFrame != null) { depthImageFrame.Dispose(); } if (skeletonFrame != null) { skeletonFrame.Dispose(); } bool allDone = true; foreach (var userID in userTrackStatus.Keys) { bool temp = userTrackStatus[userID]; // userTrackStatus.TryGetValue(userID, out temp); if (!temp) { allDone = false; break; } } if (allDone) { List<int> userIDList = new List<int>(userTrackStatus.Keys); foreach (var userID in userIDList) { userTrackStatus[userID] = false; } int tempUserID = 0; foreach (var userID in userTrackStatus.Keys) { bool temp = userTrackStatus[userID]; //userTrackStatus.TryGetValue(userID, out temp); if (!temp) { this.Kinect.SkeletonStream.ChooseSkeletons(userID); tempUserID = userID; break; } } userTrackStatus[tempUserID] = true; } else { int tempUserID = 0; foreach (var userID in userTrackStatus.Keys) { bool temp = userTrackStatus[userID]; //userTrackStatus.TryGetValue(userID, out temp); if (!temp) { this.Kinect.SkeletonStream.ChooseSkeletons(userID); tempUserID = userID; break; } } userTrackStatus[tempUserID] = true; } /* if (trackingModeSwitch) { this.Kinect.SkeletonStream.TrackingMode = SkeletonTrackingMode.Seated; trackingModeSwitch = false; } else { this.Kinect.SkeletonStream.TrackingMode = SkeletonTrackingMode.Default; trackingModeSwitch = true; }*/ } }
protected void Page_Init(object sender, EventArgs e) { if (_enabled && Request.Browser.Crawler == false && Request.IsLocal == false && BARRED_IPS.Contains(Request.UserHostAddress) == false) { var parameters = new Dictionary<string, string>(); // Add the basic header parameters. parameters.Add("v", "1"); parameters.Add("t", "pageview"); parameters.Add("tid", "INSERT GA CODE"); parameters.Add("z", Convert.ToBase64String(Guid.NewGuid().ToByteArray())); // Add client information. if (Request.Cookies[CLIENT_ID_COOKIE_NAME] != null) { // Cookie already exists so use that one. parameters.Add("cid", Request.Cookies[CLIENT_ID_COOKIE_NAME].Value); } else { // This is a new request so set the client Id. var buffer = new List<byte>(); // Use the IP Address of the client as the first part of the CID. IPAddress clientIP; if (IPAddress.TryParse(Request.UserHostAddress, out clientIP)) buffer.AddRange(clientIP.GetAddressBytes()); else buffer.AddRange(Encoding.ASCII.GetBytes(Request.UserHostAddress)); // Use the date as the second part. buffer.AddRange(BitConverter.GetBytes((short)DateTime.UtcNow.Year)); buffer.AddRange(BitConverter.GetBytes((byte)DateTime.UtcNow.Month)); buffer.AddRange(BitConverter.GetBytes((byte)DateTime.UtcNow.Day)); buffer.AddRange(BitConverter.GetBytes((short)DateTime.UtcNow.TimeOfDay.TotalMinutes)); // Use a hash code of the User-Agent for the final part. buffer.AddRange(BitConverter.GetBytes(Request.UserAgent.GetHashCode())); var clientIdCookie = new HttpCookie( CLIENT_ID_COOKIE_NAME, Convert.ToBase64String(buffer.ToArray())); clientIdCookie.HttpOnly = true; clientIdCookie.Expires = DateTime.UtcNow.AddYears(2); Response.Cookies.Add(clientIdCookie); parameters.Add("cid", clientIdCookie.Value); } parameters.Add("uip", Request.UserHostAddress); // If the session is new indicate this to google. if (Session != null && Session.IsNewSession) { parameters.Add("sc", "start"); } // Add User-Agent and device information. parameters.Add("ua", Request.UserAgent); parameters.Add("je", Request.Browser.JavaScript ? "1" : "0"); if (Request.Browser.IsMobileDevice) { var screenSize = String.Format( "{0}x{1}", Request.Browser.ScreenPixelsWidth, Request.Browser.ScreenPixelsHeight); parameters.Add("sr", screenSize); parameters.Add("vp", screenSize); } // Add language information. if (Request.UserLanguages != null && Request.UserLanguages.Length > 0) parameters.Add("ul", Request.UserLanguages[0]); // Add page information. Uri page; if (Uri.TryCreate(Request.Url, Request.RawUrl, out page) == false) page = Request.Url; parameters.Add("dp", page.AbsolutePath); if (String.IsNullOrEmpty(Page.Title) == false) parameters.Add("dt", Page.Title); parameters.Add("dh", page.Host); parameters.Add("dl", page.ToString()); parameters.Add("de", Response.ContentEncoding.WebName.ToUpperInvariant()); // Add referrer information. if (Request.UrlReferrer != null) parameters.Add("dr", Request.UrlReferrer.ToString()); // Add campaign parameters. if (Request.QueryString["utm_campaign"] != null) parameters.Add("cn", Request.QueryString["utm_campaign"]); if (Request.QueryString["utm_content"] != null) parameters.Add("cc", Request.QueryString["utm_content"]); if (Request.QueryString["utm_term"] != null) parameters.Add("ck", Request.QueryString["utm_term"]); if (Request.QueryString["utm_medium"] != null) parameters.Add("cm", Request.QueryString["utm_medium"]); if (Request.QueryString["utm_source"] != null) parameters.Add("cs", Request.QueryString["utm_term"]); // Add user id information if known. if (Page.User != null && String.IsNullOrEmpty(Page.User.Identity.Name) == false) { parameters.Add("uid", Page.User.Identity.Name); } // Build the url for google. var url = String.Concat( "https://ssl.google-analytics.com/collect?", String.Join("&", parameters.Select(p => String.Format("{0}={1}", p.Key, HttpUtility.UrlEncode(p.Value, Encoding.UTF8))).ToArray())); // Send the request asynchronously. var request = HttpWebRequest.Create(url); request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); request.Method = "GET"; request.Timeout = 20000; request.BeginGetResponse(SendGoogleAnalyticsComplete, request); } }