<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module telemetry.internal.image_processing.screen_finder</title>
<meta charset="utf-8">
</head><body bgcolor="#f0f0f8">
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong><a href="telemetry.html"><font color="#ffffff">telemetry</font></a>.<a href="telemetry.internal.html"><font color="#ffffff">internal</font></a>.<a href="telemetry.internal.image_processing.html"><font color="#ffffff">image_processing</font></a>.screen_finder</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="../telemetry/internal/image_processing/screen_finder.py">telemetry/internal/image_processing/screen_finder.py</a></font></td></tr></table>
<p><tt># Copyright 2014 The Chromium Authors. All rights reserved.<br>
# Use of this source code is governed by a BSD-style license that can be<br>
# found in the LICENSE file.<br>
#<br>
# This script attempts to detect the region of a camera's field of view that<br>
# contains the screen of the device we are testing.<br>
#<br>
# Usage: ./screen_finder.py path_to_video 0 0 --verbose</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="copy.html">copy</a><br>
<a href="cv2.html">cv2</a><br>
<a href="telemetry.internal.image_processing.cv_util.html">telemetry.internal.image_processing.cv_util</a><br>
</td><td width="25%" valign=top><a href="telemetry.internal.util.external_modules.html">telemetry.internal.util.external_modules</a><br>
<a href="telemetry.internal.image_processing.frame_generator.html">telemetry.internal.image_processing.frame_generator</a><br>
<a href="logging.html">logging</a><br>
</td><td width="25%" valign=top><a href="numpy.html">numpy</a><br>
<a href="os.html">os</a><br>
<a href="sys.html">sys</a><br>
</td><td width="25%" valign=top><a href="telemetry.internal.image_processing.video_file_frame_generator.html">telemetry.internal.image_processing.video_file_frame_generator</a><br>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt> </tt></td><td> </td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="telemetry.internal.image_processing.screen_finder.html#ScreenFinder">ScreenFinder</a>
</font></dt></dl>
</dd>
</dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom> <br>
<font color="#000000" face="helvetica, arial"><a name="ScreenFinder">class <strong>ScreenFinder</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
<td colspan=2><tt>Finds and extracts device screens from video.<br>
<br>
Sample Usage:<br>
sf = <a href="#ScreenFinder">ScreenFinder</a>(sys.argv[1])<br>
while sf.<a href="#ScreenFinder-HasNext">HasNext</a>():<br>
ret, screen = sf.<a href="#ScreenFinder-GetNext">GetNext</a>()<br>
<br>
Attributes:<br>
_lost_corners: Each index represents whether or not we lost track of that<br>
corner on the previous frame. Ordered by [top-right, top-left,<br>
bottom-left, bottom-right]<br>
_frame: An unmodified copy of the frame we're currently processing.<br>
_frame_debug: A copy of the frame we're currently processing, may be<br>
modified at any time, used for debugging.<br>
_frame_grey: A greyscale copy of the frame we're currently processing.<br>
_frame_edges: A Canny Edge detected copy of the frame we're currently<br>
processing.<br>
_screen_size: The size of device screen in the video when first detected.<br>
_avg_corners: Exponentially weighted average of the previous corner<br>
locations.<br>
_prev_corners: The location of the corners in the previous frame.<br>
_lost_corner_frames: A counter of the number of successive frames in which<br>
we've lost a corner location.<br>
_border: See |border| above.<br>
_min_line_length: The minimum length a line must be before we consider it<br>
a possible screen edge.<br>
_frame_generator: See |frame_generator| above.<br>
_width, _height: The width and height of the frame.<br>
_anglesp5, _anglesm5: The angles for each point we look at in the grid<br>
when computing brightness, constant across frames.<br> </tt></td></tr>
<tr><td> </td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="ScreenFinder-GetNext"><strong>GetNext</strong></a>(self)</dt><dd><tt>Gets the next screen image.<br>
<br>
Returns:<br>
A numpy matrix containing the screen surrounded by the number of border<br>
pixels specified in initialization, and the location of the detected<br>
screen corners in the current frame, if a screen is found. The returned<br>
screen is guaranteed to be the same size at each frame.<br>
'None' and 'None' if no screen was found on the current frame.<br>
<br>
Raises:<br>
FrameReadError: An error occurred in the FrameGenerator.<br>
RuntimeError: This method was called when no frames were available.</tt></dd></dl>
<dl><dt><a name="ScreenFinder-HasNext"><strong>HasNext</strong></a>(self)</dt><dd><tt>True if there are more frames available to process.</tt></dd></dl>
<dl><dt><a name="ScreenFinder-__init__"><strong>__init__</strong></a>(self, frame_generator, border<font color="#909090">=5</font>)</dt><dd><tt>Initializes the <a href="#ScreenFinder">ScreenFinder</a> <a href="__builtin__.html#object">object</a>.<br>
<br>
Args:<br>
frame_generator: FrameGenerator, An initialized Video Frame Generator.<br>
border: int, number of pixels of border to be kept when cropping the<br>
detected screen.<br>
<br>
Raises:<br>
FrameReadError: The frame generator may output a read error during<br>
initialization.</tt></dd></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list of weak references to the object (if defined)</tt></dd>
</dl>
<hr>
Data and other attributes defined here:<br>
<dl><dt><strong>CANNY_HYSTERESIS_THRESH_HIGH</strong> = 500</dl>
<dl><dt><strong>CANNY_HYSTERESIS_THRESH_LOW</strong> = 300</dl>
<dl><dt><strong>CORNER_AVERAGE_WEIGHT</strong> = 0.5</dl>
<dl><dt><strong>CornerData</strong> = <class 'telemetry.internal.image_processing.screen_finder.CornerData'></dl>
<dl><dt><strong>DEBUG</strong> = False</dl>
<dl><dt><strong>MAX_INTERFRAME_MOTION</strong> = 25</dl>
<dl><dt><strong>MIN_CORNER_ABSOLUTE_BRIGHTNESS</strong> = 60</dl>
<dl><dt><strong>MIN_RELATIVE_BRIGHTNESS_FACTOR</strong> = 1.5</dl>
<dl><dt><strong>MIN_SCREEN_WIDTH</strong> = 40</dl>
<dl><dt><strong>RESET_AFTER_N_BAD_FRAMES</strong> = 2</dl>
<dl><dt><strong>SMALL_ANGLE</strong> = 0.08726646259971647</dl>
<dl><dt><strong>ScreenNotFoundError</strong> = <class 'telemetry.internal.image_processing.screen_finder.ScreenNotFoundError'></dl>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
<tr><td bgcolor="#eeaa77"><tt> </tt></td><td> </td>
<td width="100%"><dl><dt><a name="-main"><strong>main</strong></a>()</dt></dl>
</td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#55aa55">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
<tr><td bgcolor="#55aa55"><tt> </tt></td><td> </td>
<td width="100%"><strong>division</strong> = _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)</td></tr></table>
</body></html>