private void Run() { if (_doorDetector != null && _doorDetector.IsRunning) { _doorDetector.CancelAsync(); } ColorBasedDoorDetector cDetector = _doorDetector as ColorBasedDoorDetector; if (cDetector != null) { _imageStream = VideoStream.Instance; } else { DepthBasedDoorDetector dDetector = _doorDetector as DepthBasedDoorDetector; if (dDetector != null) { _imageStream = DepthStream.Instance; } else { InfraredBasedDoorDetector iDetector = _doorDetector as InfraredBasedDoorDetector; if (iDetector != null) { _imageStream = InfraredStream.Instance; } } } if (_imageStream != null && this.DoorDetector != null) { _doorDetector.RunAsync(_imageStream); } }
public void TestNegativeImageDoesNotDetectDoor() { ColorBasedDoorDetector doorDetector = CreateBasicDoorDetector(); Image <Bgr, Byte> image = new Image <Bgr, byte>(new Size(500, 500)); List <DetectedDoor> doors = doorDetector.GetDoors(image); List <DetectedDoor> expectedDoors = new List <DetectedDoor>(); Assert.AreEqual <List <DetectedDoor> >(doors, expectedDoors); }
public void MinAndMaxColorMatchInitialTest() { Hsv minColor = new Hsv(0, 150, 255); Hsv maxColor = new Hsv(33, 66, 99); ColorBasedDoorDetector doorDetector = new ColorBasedDoorDetector(minColor, maxColor); Assert.AreEqual <Hsv>(minColor, doorDetector.MinColor); Assert.AreEqual <Hsv>(maxColor, doorDetector.MaxColor); }
public void TestSimplifyImageReturnsCorrectImage() { ColorBasedDoorDetector detector = CreateBasicDoorDetector(); PrivateObject privateAccessor = new PrivateObject(detector); Image <Gray, Byte> inputImage = LoadImage <Gray, byte>("door3_filtered.JPG"); Image <Gray, Byte> expectedImage = LoadImage <Gray, byte>("door3_simplified.JPG"); Image <Gray, Byte> filtered = (Image <Gray, Byte>)privateAccessor.Invoke("SimplifyImage", inputImage, 10); Assert.AreEqual <Image <Gray, Byte> >(expectedImage, filtered); }
public void TestWellLitPositiveImageDetectsDoor() { ColorBasedDoorDetector doorDetector = CreateBasicDoorDetector(); Image <Bgr, Byte> image = LoadImage <Bgr, byte>("door3.JPG"); List <DetectedDoor> doors = doorDetector.GetDoors(image); List <DetectedDoor> expectedDoors = new List <DetectedDoor>(); expectedDoors.Add(new DetectedDoor(new Rectangle(), DetectedDoor.DetectionConfidence.HIGH, 0.323, 5.433)); Assert.AreEqual <List <DetectedDoor> >(doors, expectedDoors); }
public void TestExtractDoorsReturnsCorrectDoors() { ColorBasedDoorDetector detector = CreateBasicDoorDetector(); PrivateObject privateAccessor = new PrivateObject(detector); Image <Gray, Byte> inputImage = LoadImage <Gray, Byte>("box.JPG"); List <DetectedDoor> doors = (List <DetectedDoor>)privateAccessor.Invoke("ExtractDoors", inputImage); List <DetectedDoor> expectedDoors = new List <DetectedDoor>(); expectedDoors.Add(new DetectedDoor(new Rectangle(), DetectedDoor.DetectionConfidence.HIGH, 0, 10)); Assert.AreEqual <List <DetectedDoor> >(doors, expectedDoors); }
//Render the background private void UpdateBackground() { //const DispatcherPriority priority = DispatcherPriority.Render; while (true) { BaseFrame frame = null; WriteableBitmap frameBitmap = null; ColorBasedDoorDetector cDetector = _doorDetector as ColorBasedDoorDetector; if (cDetector != null) { frame = VideoStream.Instance.GetFrame(); if (frame != null) { frameBitmap = frame.GetBitmap(); } } else { DepthBasedDoorDetector dDetector = _doorDetector as DepthBasedDoorDetector; if (dDetector != null) { frame = DepthStream.Instance.GetFrame(); if (frame != null) { frameBitmap = frame.GetWriteableBitmapForDoorNavi(); } } else { InfraredBasedDoorDetector iDetector = _doorDetector as InfraredBasedDoorDetector; if (iDetector != null) { frame = InfraredStream.Instance.GetFrame(); if (frame != null) { frameBitmap = frame.GetBitmap(); } } } } if (frameBitmap != null) { RenderImage(frameBitmap, ImageView1); } Thread.Sleep(1000 / FRAMERATE); } }
public void TestDoorFromContourReturnsCorrectContour() { ColorBasedDoorDetector detector = CreateBasicDoorDetector(); PrivateObject privateAccessor = new PrivateObject(detector); Size imageSize = new Size(100, 100); Rectangle boundingRect = new Rectangle(10, 10, 80, 80); Contour <Point> inputContour = new MockContour <Point>(boundingRect); List <DetectedDoor> doors = (List <DetectedDoor>)privateAccessor.Invoke("DoorFromContour", inputContour); List <DetectedDoor> expectedDoors = new List <DetectedDoor>(); expectedDoors.Add(new DetectedDoor(new Rectangle(), DetectedDoor.DetectionConfidence.HIGH, 0, 10)); Assert.AreEqual <List <DetectedDoor> >(doors, expectedDoors); }
private void RadioButton_CheckedChanged(object sender, RoutedEventArgs e) { // ... Get RadioButton reference. var button = sender as RadioButton; string detectionMethodStr = button.Content.ToString(); if (detectionMethodStr == "ColorBased") { DoorDetector = new ColorBasedDoorDetector(); } else if (detectionMethodStr == "DepthBased") { DoorDetector = new DepthBasedDoorDetector(); } else if (detectionMethodStr == "InfraredBased") { DoorDetector = new InfraredBasedDoorDetector(); } this.Run(); }
public void TestDoorNavigatorNavigatesTowardsDoor() { Bitmap image = new Bitmap("ObjectDetection\\Images\\door3.JPG"); MockFrame frame = new MockFrame(image); MockImageStream stream = new MockImageStream(frame); ColorBasedDoorDetector doorDetector = new ColorBasedDoorDetector(); DoorOrientationNavigationStrategy navigator = new DoorOrientationNavigationStrategy(doorDetector); doorDetector.RunAsync(stream); // Sleep for 1 second to ensure that the door detector has time to recognize the door Thread.Sleep(1000); Vector navigatorDirection = navigator.GetDirection(); Vector expectedDirection = new Vector(0.23776, 0.7623); Assert.AreEqual <Vector>(expectedDirection, navigatorDirection); doorDetector.CancelAsync(); }