Added beter controls and an example. Improved documentation.
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>displayarray.__main__ — DisplayArray documentation</title>
|
||||
<link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||
<script type="text/javascript" src="../../../_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="../../../_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="../../../_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||
<link rel="index" title="Index" href="../../../genindex/" />
|
||||
<link rel="search" title="Search" href="../../../search/" />
|
||||
|
||||
<link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
||||
|
||||
</head><body>
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
|
||||
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.__main__</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">DisplayArray.</span>
|
||||
|
||||
<span class="sd">Display NumPy arrays.</span>
|
||||
|
||||
<span class="sd">Usage:</span>
|
||||
<span class="sd"> displayarray (-w <webcam-number> | -v <video-filename> | -t <topic-name>[,dtype])... [-m <msg-backend>]</span>
|
||||
<span class="sd"> displayarray -h</span>
|
||||
<span class="sd"> displayarray --version</span>
|
||||
|
||||
|
||||
<span class="sd">Options:</span>
|
||||
<span class="sd"> -h, --help Show this help text.</span>
|
||||
<span class="sd"> --version Show version number.</span>
|
||||
<span class="sd"> -w <webcam-number>, --webcam=<webcam-number> Display video from a webcam.</span>
|
||||
<span class="sd"> -v <video-filename>, --video=<video-filename> Display frames from a video file.</span>
|
||||
<span class="sd"> -t <topic-name>, --topic=<topic-name> Display frames from a topic using the chosen message broker.</span>
|
||||
<span class="sd"> -m <msg-backend>, --message-backend <msg-backend> Choose message broker backend. [Default: ROS]</span>
|
||||
<span class="sd"> Currently supported: ROS, ZeroMQ</span>
|
||||
<span class="sd"> --ros Use ROS as the backend message broker.</span>
|
||||
<span class="sd"> --zeromq Use ZeroMQ as the backend message broker.</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">docopt</span> <span class="k">import</span> <span class="n">docopt</span>
|
||||
<span class="kn">import</span> <span class="nn">asyncio</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../../displayarray_bash/#displayarray.__main__.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Process command line arguments."""</span>
|
||||
<span class="n">arguments</span> <span class="o">=</span> <span class="n">docopt</span><span class="p">(</span><span class="vm">__doc__</span><span class="p">,</span> <span class="n">argv</span><span class="o">=</span><span class="n">argv</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">arguments</span><span class="p">[</span><span class="s2">"--version"</span><span class="p">]:</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray</span> <span class="k">import</span> <span class="n">__version__</span>
|
||||
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="s2">"DisplayArray V</span><span class="si">{__version__}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray</span> <span class="k">import</span> <span class="n">display</span>
|
||||
|
||||
<span class="n">vids</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">arguments</span><span class="p">[</span><span class="s2">"--webcam"</span><span class="p">]]</span> <span class="o">+</span> <span class="n">arguments</span><span class="p">[</span><span class="s2">"--video"</span><span class="p">]</span>
|
||||
<span class="n">v_disps</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">vids</span><span class="p">:</span>
|
||||
<span class="n">v_disps</span> <span class="o">=</span> <span class="n">display</span><span class="p">(</span><span class="o">*</span><span class="n">vids</span><span class="p">,</span> <span class="n">blocking</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame.frame_updater</span> <span class="k">import</span> <span class="n">read_updates_ros</span><span class="p">,</span> <span class="n">read_updates_zero_mq</span>
|
||||
|
||||
<span class="n">topics</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="s2">"--topic"</span><span class="p">]</span>
|
||||
<span class="n">topics_split</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">topics</span><span class="p">]</span>
|
||||
<span class="n">d</span> <span class="o">=</span> <span class="n">display</span><span class="p">()</span>
|
||||
|
||||
<span class="k">async</span> <span class="k">def</span> <span class="nf">msg_recv</span><span class="p">():</span>
|
||||
<span class="k">nonlocal</span> <span class="n">d</span>
|
||||
<span class="k">while</span> <span class="n">d</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">arguments</span><span class="p">[</span><span class="s2">"--message-backend"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"ROS"</span><span class="p">:</span>
|
||||
<span class="k">async</span> <span class="k">for</span> <span class="n">v_name</span><span class="p">,</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">read_updates_ros</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">t</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">topics_split</span><span class="p">],</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">t</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">topics_split</span><span class="p">]</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">arr</span><span class="o">=</span><span class="n">frame</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">v_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">arguments</span><span class="p">[</span><span class="s2">"--message-backend"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"ZeroMQ"</span><span class="p">:</span>
|
||||
<span class="k">async</span> <span class="k">for</span> <span class="n">v_name</span><span class="p">,</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">read_updates_zero_mq</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="p">[</span><span class="nb">bytes</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">"ascii"</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">topics</span><span class="p">]</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">arr</span><span class="o">=</span><span class="n">frame</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">v_name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">async</span> <span class="k">def</span> <span class="nf">update_vids</span><span class="p">():</span>
|
||||
<span class="k">while</span> <span class="n">v_disps</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">v_disps</span><span class="p">:</span>
|
||||
<span class="n">v_disps</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
<span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="k">async</span> <span class="k">def</span> <span class="nf">runner</span><span class="p">():</span>
|
||||
<span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait</span><span class="p">([</span><span class="n">msg_recv</span><span class="p">(),</span> <span class="n">update_vids</span><span class="p">()])</span>
|
||||
|
||||
<span class="n">loop</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">get_event_loop</span><span class="p">()</span>
|
||||
<span class="n">loop</span><span class="o">.</span><span class="n">run_until_complete</span><span class="p">(</span><span class="n">runner</span><span class="p">())</span>
|
||||
<span class="n">loop</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
|
||||
|
||||
|
||||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
||||
<span class="n">main</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h1 class="logo"><a href="../../../">DisplayArray</a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../displayarray_bash/">displayarray</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="relations">
|
||||
<h3>Related Topics</h3>
|
||||
<ul>
|
||||
<li><a href="../../../">Documentation overview</a><ul>
|
||||
<li><a href="../../">Module code</a><ul>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search/" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -31,16 +31,24 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.effects.crop</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span></span><span class="sd">"""Crop any n-dimensional array."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span class="kn">from</span> <span class="nn">..input</span> <span class="k">import</span> <span class="n">mouse_loop</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Crop"><a class="viewcode-back" href="../../../../crop/#displayarray.effects.crop.Crop">[docs]</a><span class="k">class</span> <span class="nc">Crop</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Crop"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.crop.Crop">[docs]</a><span class="k">class</span> <span class="nc">Crop</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A callback class that will return the input array cropped to the output size. N-dimensional."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output_size</span><span class="o">=</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">center</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create the cropping callback class.</span>
|
||||
|
||||
<span class="sd"> :param output_size: Specified the size the input should be cropped to. Can be redefined later.</span>
|
||||
<span class="sd"> :param center: Specifies the center on the input array to take the crop out of.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_output_size</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="n">o</span> <span class="o">//</span> <span class="mi">2</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">output_size</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">odd_center</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
@@ -50,23 +58,27 @@
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">output_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Get the output size."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_output_size</span>
|
||||
|
||||
<span class="nd">@output_size</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">output_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">set</span><span class="p">):</span>
|
||||
<span class="sd">"""Set the output size."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_output_size</span> <span class="o">=</span> <span class="nb">set</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_output_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_output_size</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Get the center."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span>
|
||||
|
||||
<span class="nd">@center</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">set</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="nb">set</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
|
||||
<span class="sd">"""Set the center. Guarded so that colors need not be set."""</span>
|
||||
<span class="k">if</span> <span class="nb">set</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">)):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">[</span><span class="n">x</span><span class="p">]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="sd">"""Crop the input array to the specified output size. output is centered on self.center point on input."""</span>
|
||||
@@ -119,8 +131,8 @@
|
||||
<span class="n">out_array</span><span class="p">[</span><span class="n">put_slices</span><span class="p">]</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">get_slices</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">out_array</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="Crop.enable_mouse_control"><a class="viewcode-back" href="../../../../crop/#displayarray.effects.crop.Crop.enable_mouse_control">[docs]</a> <span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Move the mouse to move where the crop is from on the original image"""</span>
|
||||
<div class="viewcode-block" id="Crop.enable_mouse_control"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.crop.Crop.enable_mouse_control">[docs]</a> <span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Move the mouse to move where the crop is from on the original image."""</span>
|
||||
|
||||
<span class="nd">@mouse_loop</span>
|
||||
<span class="k">def</span> <span class="nf">m_loop</span><span class="p">(</span><span class="n">me</span><span class="p">):</span>
|
||||
@@ -154,13 +166,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,87 +31,159 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.effects.lens</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span></span><span class="sd">"""Create lens effects. Currently only 2D+color arrays are supported."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span class="kn">from</span> <span class="nn">..input</span> <span class="k">import</span> <span class="n">mouse_loop</span>
|
||||
<span class="kn">import</span> <span class="nn">cv2</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">import</span> <span class="nn">torch</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="n">torch</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># type: ignore</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ControllableLens"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.ControllableLens">[docs]</a><span class="k">class</span> <span class="nc">ControllableLens</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""A lens callback that can be controlled by the program or the user."""</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">ControllableLens</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">use_bleed</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">zoom</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="o">=</span> <span class="n">center</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span>
|
||||
<span class="sd">"""Create the lens callback."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="n">center</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_zoom</span> <span class="o">=</span> <span class="n">zoom</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">use_bleed</span> <span class="o">=</span> <span class="n">use_bleed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bleed</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">check_setup_bleed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">_check_setup_bleed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bleed</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_bleed</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bleed</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros_like</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">run_bleed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="ControllableLens.run_bleed"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.ControllableLens.run_bleed">[docs]</a> <span class="k">def</span> <span class="nf">run_bleed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
||||
<span class="sd">"""Spread color outwards, like food coloring in water."""</span>
|
||||
<span class="n">arr</span><span class="p">[</span><span class="n">y</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">arr</span><span class="p">[(</span><span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="o">...</span><span class="p">]</span> <span class="o">+</span> <span class="n">arr</span><span class="p">[(</span><span class="n">y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="o">...</span><span class="p">])</span> <span class="o">/</span> <span class="mi">2</span>
|
||||
<span class="n">arr</span><span class="p">[:,</span> <span class="n">x</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">arr</span><span class="p">[:,</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="o">...</span><span class="p">]</span> <span class="o">+</span> <span class="n">arr</span><span class="p">[:,</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="o">...</span><span class="p">]</span>
|
||||
<span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
|
||||
<span class="p">)</span> <span class="o">/</span> <span class="mi">2</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Barrel"><a class="viewcode-back" href="../../../../lens/#displayarray.effects.lens.Barrel">[docs]</a><span class="k">class</span> <span class="nc">Barrel</span><span class="p">(</span><span class="n">ControllableLens</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Barrel"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.Barrel">[docs]</a><span class="k">class</span> <span class="nc">Barrel</span><span class="p">(</span><span class="n">ControllableLens</span><span class="p">):</span>
|
||||
<span class="sd">"""A barrel lens distortion callback."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span> <span class="n">use_bleed</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">barrel_power</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">pincushion_power</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">zoom</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="kc">None</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Create the barrel lens distortion callback."""</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">use_bleed</span><span class="p">,</span> <span class="n">zoom</span><span class="p">,</span> <span class="n">center</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="o">=</span> <span class="n">center</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="n">center</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_zoom</span> <span class="o">=</span> <span class="n">zoom</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">use_bleed</span> <span class="o">=</span> <span class="n">use_bleed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bleed</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span> <span class="o">=</span> <span class="n">barrel_power</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_barrel_power</span> <span class="o">=</span> <span class="n">barrel_power</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<div class="viewcode-block" id="Barrel.enable_mouse_control"><a class="viewcode-back" href="../../../../lens/#displayarray.effects.lens.Barrel.enable_mouse_control">[docs]</a> <span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Guarded get center. Limits to within input."""</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="nb">min</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span>
|
||||
|
||||
<span class="nd">@center</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">setpoint</span><span class="p">):</span>
|
||||
<span class="sd">"""Guarded set center. Limits to within input."""</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">setpoint</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="nb">min</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">setpoint</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">setpoint</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">zoom</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Guarded zoom. Avoids divide by zero conditions."""</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_zoom</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mf">1e-15</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_zoom</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">barrel_power</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Guarded barrel power. Avoids divide by zero conditions."""</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_barrel_power</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mf">1e-15</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_barrel_power</span>
|
||||
|
||||
<span class="nd">@barrel_power</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">barrel_power</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">setpoint</span><span class="p">):</span>
|
||||
<span class="sd">"""Set the barrel power."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_barrel_power</span> <span class="o">=</span> <span class="n">setpoint</span>
|
||||
|
||||
<span class="nd">@zoom</span><span class="o">.</span><span class="n">setter</span> <span class="c1"># type: ignore</span>
|
||||
<span class="k">def</span> <span class="nf">zoom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">setpoint</span><span class="p">):</span>
|
||||
<span class="sd">"""Set the zoom power."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_zoom</span> <span class="o">=</span> <span class="n">setpoint</span>
|
||||
|
||||
<div class="viewcode-block" id="Barrel.enable_mouse_control"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.Barrel.enable_mouse_control">[docs]</a> <span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">crop_size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Move the mouse to center the image, scroll to increase/decrease barrel, ctrl+scroll to increase/decrease zoom</span>
|
||||
<span class="sd"> Enable the default mouse controls.</span>
|
||||
|
||||
<span class="sd"> Move the mouse to center the image</span>
|
||||
<span class="sd"> scroll to increase/decrease barrel</span>
|
||||
<span class="sd"> ctrl+scroll to increase/decrease zoom</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="nd">@mouse_loop</span>
|
||||
<span class="k">def</span> <span class="nf">m_loop</span><span class="p">(</span><span class="n">me</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">me</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">me</span><span class="o">.</span><span class="n">x</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">event</span> <span class="o">==</span> <span class="n">cv2</span><span class="o">.</span><span class="n">EVENT_MOUSEWHEEL</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">flags</span> <span class="o">&</span> <span class="n">cv2</span><span class="o">.</span><span class="n">EVENT_FLAG_CTRLKEY</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">flags</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">*=</span> <span class="mf">1.1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">/=</span> <span class="mf">1.1</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">crop_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">me</span><span class="o">.</span><span class="n">y</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">crop_size</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">me</span><span class="o">.</span><span class="n">x</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">crop_size</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">flags</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span> <span class="o">*=</span> <span class="mf">1.1</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="o">=</span> <span class="p">[</span><span class="n">me</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">me</span><span class="o">.</span><span class="n">x</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">event</span> <span class="o">==</span> <span class="n">cv2</span><span class="o">.</span><span class="n">EVENT_MOUSEWHEEL</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">flags</span> <span class="o">&</span> <span class="n">cv2</span><span class="o">.</span><span class="n">EVENT_FLAG_CTRLKEY</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">flags</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">*=</span> <span class="mf">1.1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">/=</span> <span class="mf">1.1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span> <span class="o">/=</span> <span class="mf">1.1</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">flags</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span> <span class="o">*=</span> <span class="mf">1.1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span> <span class="o">/=</span> <span class="mf">1.1</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="n">m_loop</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="sd">"""Run the lens distortion algorithm on the input."""</span>
|
||||
<span class="n">zoom_out</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">zoom</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">check_setup_bleed</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_check_setup_bleed</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="o">=</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span>
|
||||
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="o">=</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">]</span>
|
||||
<span class="n">y2_</span> <span class="o">=</span> <span class="p">(</span><span class="n">y</span> <span class="o">-</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">))</span> <span class="o">*</span> <span class="n">zoom_out</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">x2_</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">))</span> <span class="o">*</span> <span class="n">zoom_out</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">p2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">meshgrid</span><span class="p">(</span><span class="n">x2_</span><span class="p">,</span> <span class="n">y2_</span><span class="p">))</span>
|
||||
|
||||
<span class="n">cy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">cx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
<span class="n">barrel_power</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span>
|
||||
<span class="n">cy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">cx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
<span class="n">theta</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arctan2</span><span class="p">(</span><span class="n">p2</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">p2</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">p2</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">ord</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">radius</span><span class="p">,</span> <span class="n">barrel_power</span><span class="p">)</span>
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">radius</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span><span class="p">)</span>
|
||||
|
||||
<span class="n">x_new</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">radius</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">cx</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">x_new</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">clip</span><span class="p">(</span><span class="n">x_new</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||||
@@ -135,10 +207,54 @@
|
||||
<span class="k">return</span> <span class="n">arr</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Mustache"><a class="viewcode-back" href="../../../../lens/#displayarray.effects.lens.Mustache">[docs]</a><span class="k">class</span> <span class="nc">Mustache</span><span class="p">(</span><span class="n">ControllableLens</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="BarrelPyTorch"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.BarrelPyTorch">[docs]</a><span class="k">class</span> <span class="nc">BarrelPyTorch</span><span class="p">(</span><span class="n">Barrel</span><span class="p">):</span>
|
||||
<span class="sd">"""A barrel distortion callback class accelerated by PyTorch."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="sd">"""Run a pytorch accelerated lens distortion algorithm on the input."""</span>
|
||||
<span class="n">zoom_out</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">zoom</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">input_size</span> <span class="o">=</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="n">type</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">FloatTensor</span><span class="p">)</span><span class="o">.</span><span class="n">cuda</span><span class="p">()</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">type</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">FloatTensor</span><span class="p">)</span><span class="o">.</span><span class="n">cuda</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_center</span> <span class="o">=</span> <span class="p">[</span><span class="n">y</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">]</span>
|
||||
|
||||
<span class="n">y2_</span> <span class="o">=</span> <span class="p">(</span><span class="n">y</span> <span class="o">-</span> <span class="p">(</span><span class="n">y</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">))</span> <span class="o">*</span> <span class="n">zoom_out</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">x2_</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">))</span> <span class="o">*</span> <span class="n">zoom_out</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">p2</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">meshgrid</span><span class="p">(</span><span class="n">x2_</span><span class="p">,</span> <span class="n">y2_</span><span class="p">))</span>
|
||||
|
||||
<span class="n">cy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">cx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_center</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="n">theta</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">p2</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">p2</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">p2</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">radius</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span><span class="p">)</span>
|
||||
|
||||
<span class="n">x_new</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">radius</span> <span class="o">*</span> <span class="n">torch</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">cx</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">x_new</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">clamp</span><span class="p">(</span><span class="n">x_new</span> <span class="o">*</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">y_new</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">radius</span> <span class="o">*</span> <span class="n">torch</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">cy</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">y_new</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">clamp</span><span class="p">(</span><span class="n">y_new</span> <span class="o">*</span> <span class="n">y</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">meshgrid</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">]))</span><span class="o">.</span><span class="n">type</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">IntTensor</span><span class="p">)</span>
|
||||
|
||||
<span class="n">p_new</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">stack</span><span class="p">((</span><span class="n">x_new</span><span class="p">,</span> <span class="n">y_new</span><span class="p">))</span>
|
||||
<span class="n">p_new</span> <span class="o">=</span> <span class="n">p_new</span><span class="o">.</span><span class="n">type</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">IntTensor</span><span class="p">)</span>
|
||||
|
||||
<span class="n">arr</span><span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">p_new</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">p_new</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="p">:]</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">arr</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Mustache"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.Mustache">[docs]</a><span class="k">class</span> <span class="nc">Mustache</span><span class="p">(</span><span class="n">ControllableLens</span><span class="p">):</span>
|
||||
<span class="sd">"""A mustache distortion callback."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span> <span class="n">use_bleed</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">barrel_power</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">pincushion_power</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">zoom</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="kc">None</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Create the mustache distortion callback."""</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">use_bleed</span><span class="p">,</span> <span class="n">zoom</span><span class="p">,</span> <span class="n">center</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span> <span class="o">=</span> <span class="n">center</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span>
|
||||
@@ -148,7 +264,15 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pincushion_power</span> <span class="o">=</span> <span class="n">pincushion_power</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Mustache.enable_mouse_control"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.lens.Mustache.enable_mouse_control">[docs]</a> <span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Enable the default mouse loop to control the mustache distortion.</span>
|
||||
|
||||
<span class="sd"> ctrl+scroll wheel: zoom in and out</span>
|
||||
<span class="sd"> shift+scroll wheel: adjust pincushion power</span>
|
||||
<span class="sd"> scroll wheel: adjust barrel power</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="nd">@mouse_loop</span>
|
||||
<span class="k">def</span> <span class="nf">m_loop</span><span class="p">(</span><span class="n">me</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">[</span><span class="n">me</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">me</span><span class="o">.</span><span class="n">x</span><span class="p">]</span>
|
||||
@@ -169,11 +293,12 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">barrel_power</span> <span class="o">/=</span> <span class="mf">1.1</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="n">m_loop</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="n">m_loop</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="sd">"""Run the mustache distortion algorithm on the input numpy array."""</span>
|
||||
<span class="n">zoom_out</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">zoom</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">check_setup_bleed</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_check_setup_bleed</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span>
|
||||
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
@@ -234,13 +359,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,13 +31,24 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.effects.select_channels</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span></span><span class="sd">"""Reduce many color images to the three colors that your eyeballs can see."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span class="kn">from</span> <span class="nn">..input</span> <span class="k">import</span> <span class="n">mouse_loop</span>
|
||||
<span class="kn">import</span> <span class="nn">cv2</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Iterable</span>
|
||||
|
||||
<div class="viewcode-block" id="SelectChannels"><a class="viewcode-back" href="../../../../select_channels/#displayarray.effects.select_channels.SelectChannels">[docs]</a><span class="k">class</span> <span class="nc">SelectChannels</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">selected_channels</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
|
||||
<div class="viewcode-block" id="SelectChannels"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.select_channels.SelectChannels">[docs]</a><span class="k">class</span> <span class="nc">SelectChannels</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Select channels to display from an array with too many colors.</span>
|
||||
|
||||
<span class="sd"> :param selected_channels: the list of channels to display.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">selected_channels</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Select which channels from the input array to display in the output."""</span>
|
||||
<span class="k">if</span> <span class="n">selected_channels</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">selected_channels</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">selected_channels</span> <span class="o">=</span> <span class="n">selected_channels</span>
|
||||
@@ -46,6 +57,7 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">num_input_channels</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">):</span>
|
||||
<span class="sd">"""Run the channel selector."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">num_input_channels</span> <span class="o">=</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">out_arr</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">arr</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="nb">min</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">x</span><span class="p">),</span> <span class="n">arr</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selected_channels</span>
|
||||
@@ -53,7 +65,15 @@
|
||||
<span class="n">out_arr</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="n">out_arr</span><span class="p">,</span> <span class="n">axis</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">out_arr</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SelectChannels.enable_mouse_control"><a class="viewcode-back" href="../../../../effects/#displayarray.effects.select_channels.SelectChannels.enable_mouse_control">[docs]</a> <span class="k">def</span> <span class="nf">enable_mouse_control</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Enable mouse control.</span>
|
||||
|
||||
<span class="sd"> Alt+Scroll to increase/decrease channel 2.</span>
|
||||
<span class="sd"> Shift+Scroll to increase/decrease channel 1.</span>
|
||||
<span class="sd"> Ctrl+scroll to increase/decrease channel 0.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="nd">@mouse_loop</span>
|
||||
<span class="k">def</span> <span class="nf">m_loop</span><span class="p">(</span><span class="n">me</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">me</span><span class="o">.</span><span class="n">event</span> <span class="o">==</span> <span class="n">cv2</span><span class="o">.</span><span class="n">EVENT_MOUSEWHEEL</span><span class="p">:</span>
|
||||
@@ -91,7 +111,7 @@
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mouse_print_channels</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="s2">"Channel 2 now maps to </span><span class="si">{self.selected_channels[2]}</span><span class="s2">."</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="n">m_loop</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mouse_control</span> <span class="o">=</span> <span class="n">m_loop</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
@@ -112,13 +132,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.frame.frame_publishing</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||||
<span></span><span class="sd">"""Publish frames so any function within this program can find them."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">threading</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
<span class="kn">import</span> <span class="nn">asyncio</span>
|
||||
@@ -41,7 +42,7 @@
|
||||
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame</span> <span class="k">import</span> <span class="n">subscriber_dictionary</span>
|
||||
<span class="kn">from</span> <span class="nn">.np_to_opencv</span> <span class="k">import</span> <span class="n">NpCam</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.uid</span> <span class="k">import</span> <span class="n">uid_for_source</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray._uid</span> <span class="k">import</span> <span class="n">uid_for_source</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Callable</span>
|
||||
|
||||
@@ -146,6 +147,7 @@
|
||||
<span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">track</span><span class="o">=</span><span class="kc">False</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Publish frames to ZeroMQ when they're updated."""</span>
|
||||
<span class="kn">import</span> <span class="nn">zmq</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray</span> <span class="k">import</span> <span class="n">read_updates</span>
|
||||
|
||||
@@ -193,6 +195,7 @@
|
||||
<span class="n">rate_hz</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">dtype</span><span class="o">=</span><span class="kc">None</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Publish frames to ROS when they're updated."""</span>
|
||||
<span class="kn">import</span> <span class="nn">rospy</span>
|
||||
<span class="kn">from</span> <span class="nn">rospy.numpy_msg</span> <span class="k">import</span> <span class="n">numpy_msg</span>
|
||||
<span class="kn">import</span> <span class="nn">std_msgs.msg</span>
|
||||
@@ -220,7 +223,7 @@
|
||||
<span class="p">)</span> <span class="c1"># allow users to use their own custom messages in numpy arrays</span>
|
||||
<span class="k">return</span> <span class="n">msg_type</span>
|
||||
|
||||
<span class="n">publishers</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">publishers</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">rospy</span><span class="o">.</span><span class="n">Publisher</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">rospy</span><span class="o">.</span><span class="n">init_node</span><span class="p">(</span><span class="n">node_name</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">read_updates</span><span class="p">(</span><span class="n">vids</span><span class="p">,</span> <span class="n">callbacks</span><span class="p">,</span> <span class="n">fps_limit</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">end_callback</span><span class="p">,</span> <span class="n">blocking</span><span class="p">):</span>
|
||||
@@ -268,13 +271,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,14 +31,16 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.frame.frame_updater</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">threading</span>
|
||||
<span></span><span class="sd">"""Get and handle updated frames."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">threading</span>
|
||||
<span class="kn">import</span> <span class="nn">asyncio</span>
|
||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Dict</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">displayarray.callbacks</span> <span class="k">import</span> <span class="n">global_cv_display_callback</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.uid</span> <span class="k">import</span> <span class="n">uid_for_source</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray._uid</span> <span class="k">import</span> <span class="n">uid_for_source</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame</span> <span class="k">import</span> <span class="n">subscriber_dictionary</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame.frame_publishing</span> <span class="k">import</span> <span class="n">pub_cam_thread</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.window</span> <span class="k">import</span> <span class="n">window_commands</span>
|
||||
@@ -59,6 +61,7 @@
|
||||
<span class="n">high_speed</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">fps_limit</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">240</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Create the frame updater thread."""</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">FrameUpdater</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">())</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cam_id</span> <span class="o">=</span> <span class="n">uid_for_source</span><span class="p">(</span><span class="n">video_source</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">video_source</span> <span class="o">=</span> <span class="n">video_source</span>
|
||||
@@ -78,7 +81,7 @@
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__apply_callbacks_to_frame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frame</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">frame</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">frame</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">NoData</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">callbacks</span><span class="p">:</span>
|
||||
<span class="n">frame_c</span> <span class="o">=</span> <span class="n">c</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
|
||||
@@ -148,20 +151,28 @@
|
||||
<div class="viewcode-block" id="read_updates"><a class="viewcode-back" href="../../../../frame/#displayarray.read_updates">[docs]</a><span class="k">async</span> <span class="k">def</span> <span class="nf">read_updates</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="n">vids</span><span class="p">,</span>
|
||||
<span class="n">callbacks</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span>
|
||||
<span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">FrameCallable</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">],</span> <span class="n">FrameCallable</span><span class="p">]</span>
|
||||
<span class="n">Union</span><span class="p">[</span>
|
||||
<span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">]]],</span>
|
||||
<span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">],</span>
|
||||
<span class="n">FrameCallable</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">fps_limit</span><span class="o">=</span><span class="nb">float</span><span class="p">(</span><span class="s2">"inf"</span><span class="p">),</span>
|
||||
<span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
|
||||
<span class="n">end_callback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[],</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">blocking</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Reads back all updates from the requested videos.</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Read back all updates from the requested videos.</span>
|
||||
|
||||
<span class="sd"> Example usage:</span>
|
||||
<span class="sd"> >>> from examples.videos import test_video</span>
|
||||
<span class="sd"> >>> f = 0</span>
|
||||
<span class="sd"> >>> for f, r in enumerate(read_updates(test_video, end_callback=lambda :f==2)):</span>
|
||||
<span class="sd"> ... print(f"Frame:{f}. Array:{r}")</span>
|
||||
|
||||
<span class="sd"> .. code-block:: python</span>
|
||||
|
||||
<span class="sd"> >>> from examples.videos import test_video</span>
|
||||
<span class="sd"> >>> f = 0</span>
|
||||
<span class="sd"> >>> for f, r in enumerate(read_updates(test_video, end_callback=lambda :f==2)):</span>
|
||||
<span class="sd"> ... print(f"Frame:{f}. Array:{r}")</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.window</span> <span class="k">import</span> <span class="n">SubscriberWindows</span>
|
||||
@@ -201,13 +212,14 @@
|
||||
|
||||
<span class="k">async</span> <span class="k">def</span> <span class="nf">read_updates_zero_mq</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="n">topic_names</span><span class="p">,</span>
|
||||
<span class="n">address</span><span class="o">=</span><span class="s2">"tcp://127.0.0.1:5600"</span><span class="p">,</span>
|
||||
<span class="n">flags</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">track</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">blocking</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">end_callback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">Any</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">address</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"tcp://127.0.0.1:5600"</span><span class="p">,</span>
|
||||
<span class="n">flags</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="n">copy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">track</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">blocking</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">end_callback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">Any</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Read updated frames from ZeroMQ."""</span>
|
||||
<span class="kn">import</span> <span class="nn">zmq</span>
|
||||
|
||||
<span class="n">ctx</span> <span class="o">=</span> <span class="n">zmq</span><span class="o">.</span><span class="n">Context</span><span class="p">()</span>
|
||||
@@ -243,8 +255,9 @@
|
||||
<span class="n">dtypes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">listener_node_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">poll_rate_hz</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">end_callback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">Any</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">end_callback</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">Any</span><span class="p">],</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Read updated frames from ROS."""</span>
|
||||
<span class="kn">import</span> <span class="nn">rospy</span>
|
||||
<span class="kn">from</span> <span class="nn">rospy.numpy_msg</span> <span class="k">import</span> <span class="n">numpy_msg</span>
|
||||
<span class="kn">from</span> <span class="nn">rospy.client</span> <span class="k">import</span> <span class="n">_WFM</span>
|
||||
@@ -322,7 +335,8 @@
|
||||
<span class="k">pass</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">s</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">s</span><span class="o">.</span><span class="n">unregister</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">sub</span><span class="o">.</span><span class="n">unregister</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">rospy</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">is_shutdown</span><span class="p">():</span>
|
||||
<span class="k">raise</span> <span class="n">rospy</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">ROSInterruptException</span><span class="p">(</span><span class="s2">"rospy shutdown"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
@@ -345,13 +359,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.frame.get_frame_ids</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">cv2</span>
|
||||
<span></span><span class="sd">"""Get camera IDs."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">cv2</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">List</span>
|
||||
|
||||
@@ -67,13 +69,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.frame.np_to_opencv</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span></span><span class="sd">"""Allow OpenCV to handle numpy arrays as input."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span class="kn">import</span> <span class="nn">cv2</span>
|
||||
|
||||
|
||||
@@ -39,12 +41,18 @@
|
||||
<span class="sd">"""Add OpenCV camera controls to a numpy array."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">img</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a fake camera for OpenCV based on the initial array."""</span>
|
||||
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">img</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__img</span> <span class="o">=</span> <span class="n">img</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__is_opened</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__img</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__height</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__height</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__ratio</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__width</span><span class="p">)</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">__height</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__wait_for_ratio</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
@@ -105,13 +113,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.input</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span> <span class="nn">displayarray.window</span> <span class="k">import</span> <span class="n">window_commands</span>
|
||||
<span></span><span class="sd">"""Decorators for creating input loops that OpenCV handles."""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">displayarray.window</span> <span class="k">import</span> <span class="n">window_commands</span>
|
||||
<span class="kn">import</span> <span class="nn">threading</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
|
||||
@@ -42,6 +44,7 @@
|
||||
<span class="sd">"""Holds all the OpenCV mouse event information."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">param</span><span class="p">):</span>
|
||||
<span class="sd">"""Create an OpenCV mouse event."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">event</span> <span class="o">=</span> <span class="n">event</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
|
||||
@@ -95,10 +98,21 @@
|
||||
|
||||
|
||||
<div class="viewcode-block" id="mouse_loop"><a class="viewcode-back" href="../../../input/#displayarray.input.mouse_loop">[docs]</a><span class="k">class</span> <span class="nc">mouse_loop</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="c1"># NOSONAR</span>
|
||||
<span class="sd">"""Run a function on mouse information that is received by the window, continuously in a new thread."""</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Run a function on mouse information that is received by the window, continuously in a new thread.</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">run_when_no_events</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">_mouse_loop_thread</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">run_when_no_events</span><span class="p">))</span>
|
||||
<span class="sd"> .. code-block:: python</span>
|
||||
|
||||
<span class="sd"> >>> @mouse_loop</span>
|
||||
<span class="sd"> ... def fun(mouse_event):</span>
|
||||
<span class="sd"> ... print("x:{}, y:{}".format(mouse_event.x, mouse_event.y))</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">f</span><span class="p">):</span>
|
||||
<span class="sd">"""Start a new mouse thread for the decorated function."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span>
|
||||
<span class="n">target</span><span class="o">=</span><span class="n">_mouse_loop_thread</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">run_when_no_events</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
@@ -144,10 +158,19 @@
|
||||
|
||||
|
||||
<div class="viewcode-block" id="key_loop"><a class="viewcode-back" href="../../../input/#displayarray.input.key_loop">[docs]</a><span class="k">class</span> <span class="nc">key_loop</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="c1"># NOSONAR</span>
|
||||
<span class="sd">"""Run a function on mouse information that is received by the window, continuously in a new thread."""</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Run a function on mouse information that is received by the window, continuously in a new thread.</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">f</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">str</span><span class="p">],</span> <span class="kc">None</span><span class="p">],</span> <span class="n">run_when_no_events</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">_key_loop_thread</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">run_when_no_events</span><span class="p">))</span>
|
||||
<span class="sd"> .. code-block:: python</span>
|
||||
|
||||
<span class="sd"> >>> @key_loop</span>
|
||||
<span class="sd"> ... def fun(key):</span>
|
||||
<span class="sd"> ... print("key pressed:{}".format(key))</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">f</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="nb">str</span><span class="p">],</span> <span class="kc">None</span><span class="p">]):</span>
|
||||
<span class="sd">"""Start a new key thread for the decorated function."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">_key_loop_thread</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">run_when_no_events</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
@@ -173,13 +196,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for displayarray.window.subscriber_windows</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span> <span class="nn">warnings</span>
|
||||
<span></span><span class="sd">"""OpenCV windows that will display the arrays."""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">warnings</span>
|
||||
<span class="kn">from</span> <span class="nn">threading</span> <span class="k">import</span> <span class="n">Thread</span>
|
||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="k">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">,</span> <span class="n">Optional</span>
|
||||
|
||||
@@ -40,17 +42,17 @@
|
||||
<span class="kn">from</span> <span class="nn">localpubsub</span> <span class="k">import</span> <span class="n">NoData</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">displayarray.callbacks</span> <span class="k">import</span> <span class="n">global_cv_display_callback</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.uid</span> <span class="k">import</span> <span class="n">uid_for_source</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray._uid</span> <span class="k">import</span> <span class="n">uid_for_source</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame</span> <span class="k">import</span> <span class="n">subscriber_dictionary</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame.frame_updater</span> <span class="k">import</span> <span class="n">FrameCallable</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.frame.frame_updater</span> <span class="k">import</span> <span class="n">FrameUpdater</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.input</span> <span class="k">import</span> <span class="n">MouseEvent</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.window</span> <span class="k">import</span> <span class="n">window_commands</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.util</span> <span class="k">import</span> <span class="n">WeakMethod</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray._util</span> <span class="k">import</span> <span class="n">WeakMethod</span>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.effects.select_channels</span> <span class="k">import</span> <span class="n">SelectChannels</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows">[docs]</a><span class="k">class</span> <span class="nc">SubscriberWindows</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows">[docs]</a><span class="k">class</span> <span class="nc">SubscriberWindows</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""Windows that subscribe to updates to cameras, videos, and arrays."""</span>
|
||||
|
||||
<span class="n">FRAME_DICT</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
@@ -62,6 +64,7 @@
|
||||
<span class="n">video_sources</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,),</span>
|
||||
<span class="n">callbacks</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Callable</span><span class="p">[[</span><span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">],</span> <span class="n">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Create the array displaying window."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">source_names</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">close_threads</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Thread</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">frames</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -84,12 +87,13 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">exited</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">block</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.block"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.block">[docs]</a> <span class="k">def</span> <span class="nf">block</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Update the window continuously while blocking the outer program."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">ct</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">close_threads</span><span class="p">:</span>
|
||||
<span class="n">ct</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<span class="n">ct</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.add_source"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.add_source">[docs]</a> <span class="k">def</span> <span class="nf">add_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.add_source"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.add_source">[docs]</a> <span class="k">def</span> <span class="nf">add_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""Add another source for this class to display."""</span>
|
||||
<span class="n">uid</span> <span class="o">=</span> <span class="n">uid_for_source</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">source_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uid</span><span class="p">)</span>
|
||||
@@ -97,7 +101,7 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">input_cams</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.add_window"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.add_window">[docs]</a> <span class="k">def</span> <span class="nf">add_window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.add_window"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.add_window">[docs]</a> <span class="k">def</span> <span class="nf">add_window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""Add another window for this class to display sources with. The name will be the title."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">cv2</span><span class="o">.</span><span class="n">namedWindow</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" (press ESC to quit)"</span><span class="p">)</span>
|
||||
@@ -105,7 +109,7 @@
|
||||
<span class="n">cv2</span><span class="o">.</span><span class="n">setMouseCallback</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">" (press ESC to quit)"</span><span class="p">,</span> <span class="n">m</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.add_callback"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.add_callback">[docs]</a> <span class="k">def</span> <span class="nf">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.add_callback"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.add_callback">[docs]</a> <span class="k">def</span> <span class="nf">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
|
||||
<span class="sd">"""Add a callback for this class to apply to videos."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">callbacks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">callback</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
@@ -114,9 +118,7 @@
|
||||
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">source_names</span><span class="p">:</span>
|
||||
<span class="n">subscriber_dictionary</span><span class="o">.</span><span class="n">stop_cam</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.handle_keys"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.handle_keys">[docs]</a> <span class="k">def</span> <span class="nf">handle_keys</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span> <span class="n">key_input</span> <span class="c1"># type: int</span>
|
||||
<span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.handle_keys"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.handle_keys">[docs]</a> <span class="k">def</span> <span class="nf">handle_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key_input</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
|
||||
<span class="sd">"""Capture key input for the escape function and passing to key control subscriber threads."""</span>
|
||||
<span class="k">if</span> <span class="n">key_input</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ESC_KEY_CODES</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">window_names</span><span class="p">:</span>
|
||||
@@ -135,7 +137,7 @@
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.handle_mouse"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.handle_mouse">[docs]</a> <span class="k">def</span> <span class="nf">handle_mouse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">param</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.handle_mouse"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.handle_mouse">[docs]</a> <span class="k">def</span> <span class="nf">handle_mouse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">param</span><span class="p">):</span>
|
||||
<span class="sd">"""Capture mouse input for mouse control subscriber threads."""</span>
|
||||
<span class="n">mousey</span> <span class="o">=</span> <span class="n">MouseEvent</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">flags</span><span class="p">,</span> <span class="n">param</span><span class="p">)</span>
|
||||
<span class="n">window_commands</span><span class="o">.</span><span class="n">mouse_pub</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">mousey</span><span class="p">)</span></div>
|
||||
@@ -188,7 +190,7 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">frames</span><span class="p">[</span><span class="n">fr</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">callbacks</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">](</span><span class="bp">self</span><span class="o">.</span><span class="n">frames</span><span class="p">[</span><span class="n">fr</span><span class="p">])</span>
|
||||
<span class="k">break</span>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.update_window_frames"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.update_window_frames">[docs]</a> <span class="k">def</span> <span class="nf">update_window_frames</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.update_window_frames"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.update_window_frames">[docs]</a> <span class="k">def</span> <span class="nf">update_window_frames</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Update the windows with the newest data for all frames."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">frames</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">input_vid_global_names</span><span class="p">)):</span>
|
||||
@@ -204,9 +206,10 @@
|
||||
<span class="k">if</span> <span class="n">frame</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">frames</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">frame</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__check_too_many_channels</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">FRAME_DICT</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">input_vid_global_names</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="n">NoData</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_display_frames</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frames</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.update"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.update"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Update window frames once. Optionally add a new input and input id."""</span>
|
||||
<span class="k">if</span> <span class="n">arr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="nb">id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">global_cv_display_callback</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span> <span class="nb">id</span><span class="p">)</span>
|
||||
@@ -219,7 +222,7 @@
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle_keys</span><span class="p">(</span><span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">msg_cmd</span><span class="p">,</span> <span class="n">key</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.wait_for_init"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.wait_for_init">[docs]</a> <span class="k">def</span> <span class="nf">wait_for_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.wait_for_init"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.wait_for_init">[docs]</a> <span class="k">def</span> <span class="nf">wait_for_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Update window frames in a loop until they're actually updated. Useful for waiting for cameras to init."""</span>
|
||||
<span class="n">msg_cmd</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
@@ -227,7 +230,7 @@
|
||||
<span class="n">msg_cmd</span><span class="p">,</span> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.end"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.end">[docs]</a> <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.end"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.end">[docs]</a> <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Close all threads. Should be used with non-blocking mode."""</span>
|
||||
<span class="n">window_commands</span><span class="o">.</span><span class="n">quit</span><span class="p">(</span><span class="n">force_all_read</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">__stop_all_cams</span><span class="p">()</span>
|
||||
@@ -246,7 +249,7 @@
|
||||
<span class="k">def</span> <span class="nf">__delete__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="SubscriberWindows.loop"><a class="viewcode-back" href="../../../../window/#displayarray.SubscriberWindows.loop">[docs]</a> <span class="k">def</span> <span class="nf">loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SubscriberWindows.loop"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.loop">[docs]</a> <span class="k">def</span> <span class="nf">loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Continually update window frame. OpenCV only allows this in the main thread."""</span>
|
||||
<span class="n">sub_cmd</span> <span class="o">=</span> <span class="n">window_commands</span><span class="o">.</span><span class="n">win_cmd_sub</span><span class="p">()</span>
|
||||
<span class="n">msg_cmd</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
@@ -259,7 +262,10 @@
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_video_callback_dict_threads</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="n">vids</span><span class="p">,</span> <span class="n">callbacks</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">FrameCallable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">fps</span><span class="o">=</span><span class="mi">240</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="o">*</span><span class="n">vids</span><span class="p">,</span>
|
||||
<span class="n">callbacks</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">]]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">fps</span><span class="o">=</span><span class="mi">240</span><span class="p">,</span>
|
||||
<span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
|
||||
<span class="p">):</span>
|
||||
<span class="k">assert</span> <span class="n">callbacks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
||||
<span class="n">vid_threads</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
@@ -268,14 +274,14 @@
|
||||
<span class="n">v_callbacks</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Callable</span><span class="p">[[</span><span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">],</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="n">v_name</span> <span class="ow">in</span> <span class="n">callbacks</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v_name</span><span class="p">],</span> <span class="n">List</span><span class="p">):</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v_name</span><span class="p">])</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v_name</span><span class="p">])</span> <span class="c1"># type: ignore</span>
|
||||
<span class="k">elif</span> <span class="n">callable</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v_name</span><span class="p">]):</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v_name</span><span class="p">])</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v_name</span><span class="p">])</span> <span class="c1"># type: ignore</span>
|
||||
<span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">callbacks</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v</span><span class="p">],</span> <span class="n">List</span><span class="p">):</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v</span><span class="p">])</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="c1"># type: ignore</span>
|
||||
<span class="k">elif</span> <span class="n">callable</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v</span><span class="p">]):</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v</span><span class="p">])</span>
|
||||
<span class="n">v_callbacks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">callbacks</span><span class="p">[</span><span class="n">v</span><span class="p">])</span> <span class="c1"># type: ignore</span>
|
||||
<span class="n">vid_threads</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="n">FrameUpdater</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">callbacks</span><span class="o">=</span><span class="n">v_callbacks</span><span class="p">,</span> <span class="n">fps_limit</span><span class="o">=</span><span class="n">fps</span><span class="p">,</span> <span class="n">request_size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
@@ -285,7 +291,11 @@
|
||||
<span class="k">def</span> <span class="nf">_get_video_threads</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="n">vids</span><span class="p">,</span>
|
||||
<span class="n">callbacks</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span>
|
||||
<span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">FrameCallable</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">],</span> <span class="n">FrameCallable</span><span class="p">]</span>
|
||||
<span class="n">Union</span><span class="p">[</span>
|
||||
<span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">]]],</span>
|
||||
<span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">],</span>
|
||||
<span class="n">FrameCallable</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">fps</span><span class="o">=</span><span class="mi">240</span><span class="p">,</span>
|
||||
<span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
|
||||
@@ -312,10 +322,14 @@
|
||||
<span class="k">return</span> <span class="n">vid_threads</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="display"><a class="viewcode-back" href="../../../../displayarray/#displayarray.display">[docs]</a><span class="k">def</span> <span class="nf">display</span><span class="p">(</span>
|
||||
<div class="viewcode-block" id="display"><a class="viewcode-back" href="../../../../display/#displayarray.display">[docs]</a><span class="k">def</span> <span class="nf">display</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="n">vids</span><span class="p">,</span>
|
||||
<span class="n">callbacks</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span>
|
||||
<span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">FrameCallable</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">],</span> <span class="n">FrameCallable</span><span class="p">]</span>
|
||||
<span class="n">Union</span><span class="p">[</span>
|
||||
<span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">]]],</span>
|
||||
<span class="n">List</span><span class="p">[</span><span class="n">FrameCallable</span><span class="p">],</span>
|
||||
<span class="n">FrameCallable</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">window_names</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">blocking</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
@@ -346,7 +360,7 @@
|
||||
<span class="k">return</span> <span class="n">s</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="breakpoint_display"><a class="viewcode-back" href="../../../../displayarray/#displayarray.breakpoint_display">[docs]</a><span class="k">def</span> <span class="nf">breakpoint_display</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="breakpoint_display"><a class="viewcode-back" href="../../../../display/#displayarray.breakpoint_display">[docs]</a><span class="k">def</span> <span class="nf">breakpoint_display</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""Display all the arrays, cameras, and videos passed in. Stops code execution until the window is closed."""</span>
|
||||
<span class="k">return</span> <span class="n">display</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span> <span class="n">blocking</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
</pre></div>
|
||||
@@ -369,13 +383,10 @@
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Python API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../displayarray/">displayarray</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../crop/">displayarray.effects.crop</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../lens/">displayarray.effects.lens</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../select_channels/">displayarray.effects.select_channels</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">displayarray.frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../window/">displayarray.window</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">displayarray.input</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../display/">display</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../frame/">frame</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../effects/">effects</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../../input/">input</a></li>
|
||||
</ul>
|
||||
<p class="caption"><span class="caption-text">Bash API</span></p>
|
||||
<ul>
|
||||
|
||||
Reference in New Issue
Block a user