Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   Multiple Vision Targets using GRIP (http://www.chiefdelphi.com/forums/showthread.php?t=153951)

RileyC3826 19-01-2017 21:56

Multiple Vision Targets using GRIP
 
Our team is relatively new to vision processing, as this is actually the first year we have gotten it to work. My question is, how would we go about looking for and using multiple targets in our code? So far we can pretty easily detect a single piece of retro reflective tape, but when we put two in front of the camera, it just chooses one or the other to base its values on. To get our values, we are basically just using the example code from WPILIB, here more specifically:
https://wpilib.screenstepslive.com/s...-robot-program
We tried adding a statement that defines a second rectangle, but both of them end up getting the same values.

soundfx 20-01-2017 02:10

Re: Multiple Vision Targets using GRIP
 
The findContours method used by GRIP should generate a list of contours (MatOfPoint), and it shouldn't be limited to just one contour. I'm not too familiar with grip generated code, but you should be able to modify it if needed to either get the full list of contours or get the first and second contours.
Our team has an example based off of grip's generated code that allows getting the full list of contours here. You can tune that to accept both contours.

YairZiv 20-01-2017 07:21

Re: Multiple Vision Targets using GRIP
 
Quote:

Originally Posted by RileyC3826 (Post 1633750)
Our team is relatively new to vision processing, as this is actually the first year we have gotten it to work. My question is, how would we go about looking for and using multiple targets in our code? So far we can pretty easily detect a single piece of retro reflective tape, but when we put two in front of the camera, it just chooses one or the other to base its values on. To get our values, we are basically just using the example code from WPILIB, here more specifically:
https://wpilib.screenstepslive.com/s...-robot-program
We tried adding a statement that defines a second rectangle, but both of them end up getting the same values.

What we've done (and I persume you guys use openCV directly and not through GRiP, but if you do then please excuse me), We've used the findContours() method and then used a function we created that sorts that list of contours from biggest to smallest, then we returned only the biggest 2. Using their data, you can do an avarage of their center Xs to check if your robot is centered on the rod of the gears or something like that.

RileyC3826 20-01-2017 20:07

Re: Multiple Vision Targets using GRIP
 
Quote:

Originally Posted by soundfx (Post 1633819)
The findContours method used by GRIP should generate a list of contours (MatOfPoint), and it shouldn't be limited to just one contour. I'm not too familiar with grip generated code, but you should be able to modify it if needed to either get the full list of contours or get the first and second contours.
Our team has an example based off of grip's generated code that allows getting the full list of contours here. You can tune that to accept both contours.

Okay, so I've looked at the code you provided and I can modify it so that it is using the same values for detecting the target, but could you provide an example on how I would get that list of contours to use in the rest of our code? I attempted to use
System.out.print({Class}.getContours());
but that ended up printing out nonsense:
https://postimg.org/image/nboabyidr/
Thanks,

RileyC3826 23-01-2017 21:23

Re: Multiple Vision Targets using GRIP
 
I believe I have found the solution. I ended up modifying the code here:
https://wpilib.screenstepslive.com/s...-robot-program
I duplicated the statement that defines rectangle 'r', changed the second one to 'q', then changed the '0' in 'filterContoursOutput().get(0)' to a '1'. I also changed centerX to two different variables, one for rectangle r and one for rectangle q. My problem now is that sometimes, when running the robot, the values from the contours just suddenly stop, and will not update until I redeploy. I believe that for some reason, the visionThread is being stopped. If I try to use visionThread.start() somewhere in the program (besides robotInit), the program crashes (we suddenly lose robot code and comms in the driverstation). Anyone have an idea how I can resolve this issue?


All times are GMT -5. The time now is 21:52.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi