Implementasi Sistem Data Rating untuk Digital Signage di Universitas Kristen Petra menggunakan Kinect | Wijaya | Jurnal Infra 2120 3993 1 SM

menghabiskan waktu untuk membaca DIVo. Dan dari ketiga data tersebut data rating untuk DIVo bisa dicari dengan memasukan dalam formula Data Rating untuk digital signage. Formula yang digunakan untuk mendapatkan data rating untuk digital signage yaitu dengan menggunakan data Traffic yaitu berapa orang yang melewati DIVo dikalikan dengan berapa orang yang sudah membaca DIVo dikalikan dengan berapa waktu yang telah dihabiskan untuk membaca dari tiap readernya dibagi dengan waktu rotasi yang dihabiskan dari perpindahan poster satu ke poster selanjutnya. Dan hasil dari proses diatas mendapatkan

4. Implementasi Sistem

Berikut adalah beberapa fungsi yang penting untuk mendeteksi dan menggambar skeletal pada program ini. Fungsi GetTotalSkeleton merupakan fungsi dimana mengecek berapa orang yang terdeteksi oleh kinect private int GetTotalSkeletonSkeletonFrameReadyEventArgs e { using SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame { if skeletonFrameData == null { return 0; } skeletonFrameData.CopySkeletonDataToallSkele tons; People not tracked int noTrac = from s in allSkeletons where s.TrackingState == SkeletonTrackingState.PositionOnly select s.Count; People tracked int comEsq = from s in allSkeletons where s.TrackingState == SkeletonTrackingState.Tracked select s.Count; int numberOfSkeletons = noTrac + comEsq; return numberOfSkeletons; } } Fungsi SensorSkeletonFrameReady merupakan fungsi yang berjalan pada waktu aplikasi berjalan. Dan di dalam fungsi ini tersedia semua perintah yang menghitung dan mendeteksi skeleton yang ada. private void SensorSkeletonFrameReadyobject sender, SkeletonFrameReadyEventArgs e { TriggerTimer.Start; if TriggerTime = 3600 { string tanggal = DateTime.Now.ToStringd-M- y + .txt; using StreamWriter writer = File.AppendTexttanggal { writer.WriteLineTime : + DateTime.Now.ToString; writer.WriteLineDuration : + TriggerTime60 + Menit; writer.WriteLineTraffic Counter : + Traffic_Counter; writer.WriteLineReader Counter : + Count_reader; writer.WriteLineReading Time : + Count_Time_Read; writer.WriteLine; writer.WriteLine=========================== ===============================; Traffic_Counter = 0; Count_reader = 0; Count_Time_Read = 0; TriggerTime = 0; } } if Reading == true {dispatcherTimer.Start;} else {dispatcherTimer.Stop;} if faceTrackingViewer.GetFaceTrackingIsEnabled Reading == false { Reading = true; Count_reader++; label5.Content = true; } else if faceTrackingViewer.GetFaceTrackingIsEnabled Reading == true { Reading = true; label5.Content = true; } else { Reading = false; label5.Content = false; } AllSkeleton_tracked_detected = GetTotalSkeletone; Count_Detected = Getnotrace; Count_Tracked = GetTracke; Skeleton[] skeletons = new Skeleton[0]; if Count_Detected Temp_Detect Change == false { Traffic_Counter++; Temp_Detect = Count_Detected; Change = true; } if Count_Tracked + Count_Detected== Temp_Detect { Change=false; Temp_Detect = Count_Detected; } label1.Content = Traffic_Counter; label2.Content = AllSkeleton_tracked_detected; label3.Content = Count_Time_Read; label4.Content = Count_reader; if faceTrackingViewer.GetFaceTrackingIsEnabled label5.Content = true; else label5.Content = false; using SkeletonFrame skeletonFrame = e.OpenSkeletonFrame { if skeletonFrame = null { skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataToskeletons; } } using DrawingContext dc = this.drawingGroup.Open { Draw a transparent background to set the render size dc.DrawRectangleBrushes.Transparent, null, new Rect0.0, 0.0, RenderWidth, RenderHeight; if skeletons.Length = 0 { foreach Skeleton skel in skeletons { RenderClippedEdgesskel, dc; if skel.TrackingState == SkeletonTrackingState.Tracked { this.DrawBonesAndJointsskel, dc; } else if skel.TrackingState == SkeletonTrackingState.PositionOnly { dc.DrawEllipse this.centerPointBrush, null, this.SkeletonPointToScreenskel.Position, BodyCenterThickness, BodyCenterThickness; } } } prevent drawing outside of our render area this.drawingGroup.ClipGeometry = new RectangleGeometrynew Rect0.0, 0.0, RenderWidth, RenderHeight; } }

5. PENGUJIAN