Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   Image processing lag (http://www.chiefdelphi.com/forums/showthread.php?t=102517)

Yppiz 11-02-2012 09:44

Image processing lag
 
We just added image processing from the AxisCamera, and our robot began lagging quite a bit. Our CPU use goes to 100 percent on the robot once we try to analyze the image. Is there any way to fix this? This is our code:

Code:

public ParticleAnalysisReport[] getRectangleParticles() throws AxisCameraException, NIVisionException
    {
        ParticleAnalysisReport[] toReturn = new ParticleAnalysisReport[0];

        trial++;
        int current = 0;
       
        try
        {
            //gets and stores the current camera image
            img = AxisCamera.getInstance().getImage();

            //Created a binary image where pixels meeting threshold
            BinaryImage binary = img.thresholdHSL(0, 1, 0, 1, 0, 1);
            img.thresholdHSL(0, 1, 0, 1, 0, 1);
            //Array of all detected rectangles, right?
            ParticleAnalysisReport[] particles = binary.getOrderedParticleAnalysisReports();

            //Makes checks to see if the rectangle meets size and ratio requirements
            for (int i = 0; i < particles.length; i++)
            {
                ParticleAnalysisReport test = particles[i];
                if (test.particleToImagePercent > .1 && test.particleToImagePercent < .4)
                {
                    double ratio = test.boundingRectWidth/test.boundingRectHeight;
                    if (ratio > ((4/3) - .2) && ratio < ((4/3) + .2))
                    {
                        toReturn = new ParticleAnalysisReport[toReturn.length + 1];
                        System.out.println("Trial: " + trial + "Current: " + current + "Raw: " + particles.length);
                        toReturn[current] = test;
                        current++;
                    }
                }
            }

            //release memory allocated to the images
            //img.free();
            binary.free();
        }
       
        catch (NIVisionException ex)
        {
            ex.printStackTrace();
        }

        //return the rectangles that meet the requirements
        System.out.println("Trial: " + trial);
        return toReturn;
    }


Patrick Chiang 11-02-2012 13:31

Re: Image processing lag
 
Lag and 100% CPU? Are you calling getRectangleParticles() repeatedly in teleopPeriodic or teleopContinuous without starting vision processing as another thread?

jesusrambo 11-02-2012 13:56

Re: Image processing lag
 
The part of your code we'll need to see are your teleopPeriodic() and teleopContinuous() loops. My bet is that you're trying to run your image processing at the beginning of one of those, and the whole robot has to stop while it waits for the image processing operations to clear.

ItzWarty 12-02-2012 03:45

Re: Image processing lag
 
Try using a timer class to see the elapsed ms of each method invocation.

Are you calling the method a ton of times? Are you checking if you have a new image?


All times are GMT -5. The time now is 11:41.

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