Quantcast
Channel: OpenCV Q&A Forum - Latest question feed
Viewing all articles
Browse latest Browse all 19555

Very bad fps using Surf in Android

$
0
0
I'm trying to build an android app which detects a particular object in real time using SURF but I'm getting very bad fps (~0.2fps). I have little idea about OpenCv so please suggest what I can do or some alternative to improve the fps. @Override public void onCameraViewStarted(int width, int height) { DETECTED_COLOR = new Scalar(255, 0, 255, 255); Mat temp = Highgui.imread(getAbsPath()); Imgproc.cvtColor(temp, imgFile, Imgproc.COLOR_BGR2BGRA); imgKeyPoints = new MatOfKeyPoint(); featureDetector = FeatureDetector.create(FeatureDetector.SURF); featureDetector.detect(imgFile, imgKeyPoints); KeyPoint[] keypoints = imgKeyPoints.toArray(); imgDescriptors = new MatOfKeyPoint(); descriptorExtractor = DescriptorExtractor.create(DescriptorExtractor.SURF); //object image is mat of img file,object keypoints features??,object descriptor placed descriptorExtractor.compute(imgFile, imgKeyPoints, imgDescriptors); } private String getAbsPath() { File mFile = new File(getContext().getFilesDir(), "board.png"); return mFile.getAbsolutePath(); } @Override public void onCameraViewStopped() { } @Override public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { mFrame = inputFrame.rgba(); MatOfKeyPoint frameKeyPoints = new MatOfKeyPoint(); MatOfKeyPoint frameDescriptors = new MatOfKeyPoint(); featureDetector.detect(mFrame, frameKeyPoints); descriptorExtractor.compute(mFrame, frameKeyPoints, frameDescriptors); Mat matchoutput = new Mat(mFrame.rows() * 2, mFrame.cols() * 2, Highgui.CV_LOAD_IMAGE_COLOR); List matches = new LinkedList(); if(frameDescriptors.empty()){ Log.i("fall into","Descriptors not found"); return mFrame; } DescriptorMatcher descriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED); descriptorMatcher.knnMatch(imgDescriptors, frameDescriptors, matches,2); LinkedList goodMatchesList = new LinkedList<>(); float nndrRatio = 0.7f; for (int i = 0; i < matches.size(); i++) { //self MatOfDMatch matOfDMatch = (MatOfDMatch) matches.get(i); DMatch[] dmatcharray = matOfDMatch.toArray(); DMatch m1 = dmatcharray[0]; DMatch m2 = dmatcharray[1]; if (m1.distance <= m2.distance * nndrRatio) { goodMatchesList.addLast(m1); } } if (goodMatchesList.size() >= 17) { //found object Log.i("fall into","Object found :"+ goodMatchesList.size()); List imgKeypointList = imgKeyPoints.toList(); List frmKeypointList = frameKeyPoints.toList(); LinkedList imgPoints = new LinkedList<>(); LinkedList frmPoints = new LinkedList<>(); for (int i = 0; i < goodMatchesList.size(); i++) { imgPoints.addLast(imgKeypointList.get(goodMatchesList.get(i).queryIdx).pt); frmPoints.addLast(frmKeypointList.get(goodMatchesList.get(i).trainIdx).pt); } MatOfPoint2f imgMatOfPoint2f = new MatOfPoint2f(); imgMatOfPoint2f.fromList(imgPoints); MatOfPoint2f frmMatOfPoint2f = new MatOfPoint2f(); frmMatOfPoint2f.fromList(frmPoints); Mat homography = Calib3d.findHomography(imgMatOfPoint2f, frmMatOfPoint2f, Calib3d.RANSAC, 3); Mat img_corners = new Mat(4, 1, CvType.CV_32FC2); Mat frm_corners = new Mat(4, 1, CvType.CV_32FC2); img_corners.put(0, 0, new double[]{0, 0}); img_corners.put(1, 0, new double[]{imgFile.cols(), 0}); img_corners.put(2, 0, new double[]{imgFile.cols(), imgFile.rows()}); img_corners.put(3, 0, new double[]{0, imgFile.rows()}); Core.perspectiveTransform(img_corners, frm_corners, homography); Core.line(mFrame, new Point(frm_corners.get(0, 0)), new Point(frm_corners.get(1, 0)), DETECTED_COLOR, 4); Core.line(mFrame, new Point(frm_corners.get(1, 0)), new Point(frm_corners.get(2, 0)), DETECTED_COLOR, 4); Core.line(mFrame, new Point(frm_corners.get(2, 0)), new Point(frm_corners.get(3, 0)), DETECTED_COLOR, 4); Core.line(mFrame, new Point(frm_corners.get(3, 0)), new Point(frm_corners.get(0, 0)), DETECTED_COLOR, 4); } else { Log.i("fall into","Object not found"); } return mFrame; }

Viewing all articles
Browse latest Browse all 19555

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>