private async void OnObjectsDetected([NotNull] Task <List <DetectedObject> > detectedObjectsTask) { if (detectedObjectsTask == null) { throw new ArgumentNullException(nameof(detectedObjectsTask)); } if (detectedObjectsTask.Result == null) { return; } List <DetectedObject> detectedObjects = await detectedObjectsTask; if (detectedObjects.Count == 0) { Debug.Log("No objects detected"); } if (_objectDetectionService.detectOnRepeat) { List <TrackedObject> trackedObjects = detectedObjectsTask.Result.Select(detectedObject => new TrackedObject(detectedObject)).ToList(); FPSUtils.TrackTick(); Vector2 unprojectionOffset = ObjectTrackingService.unprojectionOffset; _visualizationManager.UpdateTrackedObjects(trackedObjects, unprojectionOffset); } else { ObjectTrackingService.Reset(); List <TrackedObject> trackedObjects = ObjectTrackingService.InitializeTrackers(detectedObjects); if (detectedObjects.Count != trackedObjects.Count) { Debug.LogWarning("Could not initialize tracker for all detected objects"); } Vector2 unprojectionOffset = ObjectTrackingService.unprojectionOffset; _visualizationManager.UpdateTrackedObjects(trackedObjects, unprojectionOffset); } }
public List <TrackedObject> TrackSync(CameraFrame frame) { if (frame == null) { throw new ArgumentNullException(nameof(frame)); } stopWatch.Reset(); stopWatch.Start(); List <TrackedObject> trackedObjects = ObjectTracker.Update(frame); stopWatch.Stop(); FPSUtils.TrackTick(); _trackedObjects = trackedObjects; return(trackedObjects); }
/// <summary> /// Depending on color format, the frame is passed on or buffered for conversion. /// </summary> private void OnFrameArrived(object sender, FrameArrivedEventArgs e) { if (Format == ColorFormat.Grayscale) { _frame = e.Frame; FPSUtils.VideoTick(); FrameArrived?.Invoke(this, e); } else { if (IsProcessingFrame) { return; } IsProcessingFrame = true; CurrentCameraFrame = e.Frame; } }
/// <summary> /// Invoked if the NV12 to RGB conversion is complete and the data is ready to be read to the CPU. /// </summary> private void OnCompleteReadback(AsyncGPUReadbackRequest request) { if (request.hasError) { Debug.LogError("GPU readback error"); return; } MatUtils.copyToMat(request.GetData <uint>(), _rgb); Core.flip(_rgb, _rgb, 0); // image is flipped on x-axis CameraFrame newFrame = new CameraFrame(_rgb, CurrentCameraFrame.Intrinsic, CurrentCameraFrame.Extrinsic, CurrentCameraFrame.Width, CurrentCameraFrame.Height, CurrentCameraFrame.FrameCount, Format); FrameArrivedEventArgs args = new FrameArrivedEventArgs(newFrame); _frame = newFrame; FrameArrived?.Invoke(this, args); FPSUtils.VideoTick(); NewFrameAvailable = true; IsProcessingFrame = false; }
private void LateUpdate() { _renderDeltaTime = FPSUtils.GetRenderDeltaTime(); _trackDeltaTime = FPSUtils.GetTrackDeltaTime(); _videoDeltaTime = FPSUtils.GetVideoDeltaTime(); if (_displayRenderFPS) { renderFPS.text = $"Render: {_renderDeltaTime:0.0} ms ({GetRenderFPS():0.} fps)"; } if (_displayVideoFPS) { videoFPS.text = $"Video: {_videoDeltaTime:0.0} ms ({GetVideoFPS():0.} fps)"; } if (_displayTrackFPS) { trackFPS.text = $"Track: {_trackDeltaTime:0.0} ms ({GetTrackFPS():0.} fps)"; } }
private void LateUpdate() { HandleKeyboardInput(); FPSUtils.RenderTick(); }
void Start() { fpsUtils = GameObject.Find("FPS").GetComponent <FPSUtils>(); }