summaryrefslogtreecommitdiff
path: root/bin
diff options
authorSylvain Pineau <sylvain.pineau@canonical.com>2015-12-18 09:21:50 +0100
committerSylvain Pineau <sylvain.pineau@canonical.com>2015-12-18 09:21:50 +0100
commit603fb26366703d5039f678629147329e70a7045b (patch)
tree41f3be5adb6e4bee87e55f48dcccccc060a6e569 /bin
parent32c8a3cd4fe2c1371bd373d6eed389b8c5830bf0 (diff)
providers:sru: New provider including SRU specific units
- The SRU testplan - The opencv screenshot validation jobs and binary Moving those tests out from the checkbox provider will avoid having tests requiring python2.7 (since screenshot validation is only used for SRU)
Diffstat (limited to 'bin')
-rwxr-xr-xbin/screenshot_validation161
1 files changed, 0 insertions, 161 deletions
diff --git a/bin/screenshot_validation b/bin/screenshot_validation
deleted file mode 100755
index 5529f799..00000000
--- a/bin/screenshot_validation
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env python2.7
-# Copyright 2014 Canonical Ltd.
-# Written by:
-# Sylvain Pineau <sylvain.pineau@canonical.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 3,
-# as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import absolute_import, print_function
-
-import argparse
-import imghdr
-import os
-
-import cv2
-
-
-def create_capture(args):
- try:
- device_no = int(os.path.realpath(args.device)[-1])
- except ValueError:
- raise SystemExit(
- "ERROR: video source not found: {}".format(args.device))
- cap = cv2.VideoCapture(device_no)
- # The camera driver will adjust the capture size
- cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, args.width)
- cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, args.height)
- if cap is None or not cap.isOpened():
- raise SystemExit(
- "ERROR: unable to open video source: {}".format(args.device))
- return cap
-
-parser = argparse.ArgumentParser(
- description='''
-Automatically validates a screenshot captured with an external camera using
-OpenCV ORB detection and a FLANN Matcher (Fast Approximate Nearest Neighbor
-Search Library)
-
-Put your camera (HD recommended) in front of your monitor.
-A query image (the INPUT positional argument) is displayed on your primary
-device and several captures (see -F) are analyzed to find a positive match.
-
-On success returns 0. Otherwise a non-zero value is returned and a
-diagnostic message is printed on standard error.
-''',
- formatter_class=argparse.RawDescriptionHelpFormatter
-)
-parser.add_argument('input',
- metavar='INPUT',
- help='Input file to use as query image')
-parser.add_argument('--min_matches',
- type=int,
- default=20,
- help='Minimum threshold value to validate a \
- positive match')
-parser.add_argument('-F', '--frames',
- type=int,
- default=10,
- help='Set the number of frames to capture and analyze \
- Minimum: 3')
-parser.add_argument('-d', '--device',
- default='/dev/video0',
- help='Set the device to use')
-parser.add_argument('--height',
- type=int,
- default=900,
- help='Set the capture height')
-parser.add_argument('--width',
- type=int,
- default=1600,
- help='Set the capture width')
-parser.add_argument('-o', '--output',
- default=None,
- help='Save the screenshot to the specified filename')
-args = parser.parse_args()
-
-if args.frames < 3:
- parser.print_help()
- raise SystemExit(1)
-if not imghdr.what(args.input):
- raise SystemExit(
- "ERROR: unable to read the input file: {}".format(args.input))
-queryImage = cv2.imread(args.input, cv2.CV_LOAD_IMAGE_GRAYSCALE)
-
-cv2.namedWindow("test", cv2.WND_PROP_FULLSCREEN)
-cv2.setWindowProperty("test",
- cv2.WND_PROP_FULLSCREEN,
- cv2.cv.CV_WINDOW_FULLSCREEN)
-cv2.imshow("test", queryImage)
-cv2.waitKey(1000)
-
-# Initiate ORB features detector
-orb = cv2.ORB(nfeatures=100000)
-
-# Find the keypoints and descriptors with ORB
-kp1, des1 = orb.detectAndCompute(queryImage, None)
-
-# Use the FLANN Matcher (Fast Approximate Nearest Neighbor Search Library)
-flann_params = dict(algorithm=6, # FLANN_INDEX_LSH
- table_number=6,
- key_size=12,
- multi_probe_level=1)
-
-flann = cv2.FlannBasedMatcher(flann_params, {})
-
-source = 0
-cap = create_capture(args)
-results = []
-img = None
-
-for i in range(args.frames):
-
- ret, img = cap.read()
- if ret is False:
- raise SystemExit(
- "ERROR: unable to capture from video source: {}".format(source))
- trainImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
-
- # Find the keypoints and descriptors with ORB
- kp2, des2 = orb.detectAndCompute(trainImage, None)
- if des2 is None:
- raise SystemExit(
- "ERROR: Not enough keypoints in video capture, aborting...")
-
- matches = flann.knnMatch(des1, des2, k=2)
-
- # store all the good matches as per Lowe's ratio test
- good_matches = [m[0] for m in matches if len(m) == 2 and
- m[0].distance < m[1].distance * 0.7]
-
- results.append(len(good_matches))
- cv2.waitKey(1000)
-
-cv2.destroyAllWindows()
-
-if args.output:
- cv2.imwrite(args.output, img)
- print('Screenshot saved to: {}'.format(args.output))
-
-# Remove Max and Min values from results
-results.remove(max(results))
-results.remove(min(results))
-
-avg = sum(results) / len(results)
-
-if avg > args.min_matches:
- print("Match found! ({} > {})".format(avg, args.min_matches))
-else:
- raise SystemExit(
- "ERROR: Not enough matches are found - {} < {}".format(
- avg,
- args.min_matches))