telemetry.internal.image_processing.screen_finder
index
telemetry/internal/image_processing/screen_finder.py

# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This script attempts to detect the region of a camera's field of view that
# contains the screen of the device we are testing.
#
# Usage: ./screen_finder.py path_to_video 0 0 --verbose

 
Modules
       
copy
cv2
telemetry.internal.image_processing.cv_util
telemetry.internal.util.external_modules
telemetry.internal.image_processing.frame_generator
logging
numpy
os
sys
telemetry.internal.image_processing.video_file_frame_generator

 
Classes
       
__builtin__.object
ScreenFinder

 
class ScreenFinder(__builtin__.object)
    Finds and extracts device screens from video.
 
Sample Usage:
  sf = ScreenFinder(sys.argv[1])
  while sf.HasNext():
    ret, screen = sf.GetNext()
 
Attributes:
  _lost_corners: Each index represents whether or not we lost track of that
      corner on the previous frame. Ordered by [top-right, top-left,
      bottom-left, bottom-right]
  _frame: An unmodified copy of the frame we're currently processing.
  _frame_debug: A copy of the frame we're currently processing, may be
      modified at any time, used for debugging.
  _frame_grey: A greyscale copy of the frame we're currently processing.
  _frame_edges: A Canny Edge detected copy of the frame we're currently
      processing.
  _screen_size: The size of device screen in the video when first detected.
  _avg_corners: Exponentially weighted average of the previous corner
      locations.
  _prev_corners: The location of the corners in the previous frame.
  _lost_corner_frames: A counter of the number of successive frames in which
      we've lost a corner location.
  _border: See |border| above.
  _min_line_length: The minimum length a line must be before we consider it
      a possible screen edge.
  _frame_generator: See |frame_generator| above.
  _width, _height: The width and height of the frame.
  _anglesp5, _anglesm5: The angles for each point we look at in the grid
      when computing brightness, constant across frames.
 
  Methods defined here:
GetNext(self)
Gets the next screen image.
 
Returns:
  A numpy matrix containing the screen surrounded by the number of border
  pixels specified in initialization, and the location of the detected
  screen corners in the current frame, if a screen is found. The returned
  screen is guaranteed to be the same size at each frame.
  'None' and 'None' if no screen was found on the current frame.
 
Raises:
  FrameReadError: An error occurred in the FrameGenerator.
  RuntimeError: This method was called when no frames were available.
HasNext(self)
True if there are more frames available to process.
__init__(self, frame_generator, border=5)
Initializes the ScreenFinder object.
 
Args:
  frame_generator: FrameGenerator, An initialized Video Frame Generator.
  border: int, number of pixels of border to be kept when cropping the
      detected screen.
 
Raises:
  FrameReadError: The frame generator may output a read error during
      initialization.

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
CANNY_HYSTERESIS_THRESH_HIGH = 500
CANNY_HYSTERESIS_THRESH_LOW = 300
CORNER_AVERAGE_WEIGHT = 0.5
CornerData = <class 'telemetry.internal.image_processing.screen_finder.CornerData'>
DEBUG = False
MAX_INTERFRAME_MOTION = 25
MIN_CORNER_ABSOLUTE_BRIGHTNESS = 60
MIN_RELATIVE_BRIGHTNESS_FACTOR = 1.5
MIN_SCREEN_WIDTH = 40
RESET_AFTER_N_BAD_FRAMES = 2
SMALL_ANGLE = 0.08726646259971647
ScreenNotFoundError = <class 'telemetry.internal.image_processing.screen_finder.ScreenNotFoundError'>

 
Functions
       
main()

 
Data
        division = _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)