Merge pull request #36 from SimLeek/silent_read
removed old async read_updates in favor of silent frame grabbing. Add…
This commit is contained in:
@@ -107,3 +107,4 @@ venv.bak/
|
||||
|
||||
.idea/
|
||||
.pytest_cache/
|
||||
.coveragerc
|
||||
|
||||
@@ -4,9 +4,8 @@ Display any array, webcam, or video file.
|
||||
display is a function that displays these in their own windows.
|
||||
"""
|
||||
|
||||
__version__ = "0.7.2"
|
||||
__version__ = "0.7.3"
|
||||
|
||||
from .window.subscriber_windows import display, breakpoint_display
|
||||
from .frame.frame_updater import read_updates
|
||||
from .window.subscriber_windows import display, breakpoint_display, read_updates
|
||||
from .frame.frame_publishing import publish_updates_zero_mq, publish_updates_ros
|
||||
from . import effects
|
||||
|
||||
@@ -9,7 +9,7 @@ np_cam simulates numpy arrays as OpenCV cameras
|
||||
"""
|
||||
|
||||
from . import subscriber_dictionary
|
||||
from .frame_updater import FrameUpdater, read_updates
|
||||
from .frame_updater import FrameUpdater
|
||||
from .get_frame_ids import get_cam_ids
|
||||
from .np_to_opencv import NpCam
|
||||
from .frame_publishing import pub_cam_thread
|
||||
|
||||
@@ -20,7 +20,7 @@ def pub_cam_loop(
|
||||
cam_id: Union[int, str, np.ndarray],
|
||||
request_size: Tuple[int, int] = (-1, -1),
|
||||
high_speed: bool = True,
|
||||
fps_limit: float = 240,
|
||||
fps_limit: float = float("inf"),
|
||||
) -> bool:
|
||||
"""
|
||||
Publish whichever camera you select to CVCams.<cam_id>.Vid.
|
||||
@@ -47,7 +47,6 @@ def pub_cam_loop(
|
||||
|
||||
subscriber_dictionary.register_cam(name)
|
||||
|
||||
# cam.set(cv2.CAP_PROP_CONVERT_RGB, 0)
|
||||
frame_counter = 0
|
||||
|
||||
sub = subscriber_dictionary.cam_cmd_sub(name)
|
||||
@@ -89,7 +88,7 @@ def pub_cam_thread(
|
||||
cam_id: Union[int, str],
|
||||
request_ize: Tuple[int, int] = (-1, -1),
|
||||
high_speed: bool = True,
|
||||
fps_limit: float = 240,
|
||||
fps_limit: float = float("inf"),
|
||||
) -> threading.Thread:
|
||||
"""Run pub_cam_loop in a new thread. Starts on creation."""
|
||||
t = threading.Thread(
|
||||
@@ -186,8 +185,8 @@ async def publish_updates_ros(
|
||||
}[dtype]
|
||||
else:
|
||||
msg_type = (
|
||||
dtype
|
||||
) # allow users to use their own custom messages in numpy arrays
|
||||
dtype # allow users to use their own custom messages in numpy arrays
|
||||
)
|
||||
return msg_type
|
||||
|
||||
publishers: Dict[str, rospy.Publisher] = {}
|
||||
|
||||
@@ -26,7 +26,7 @@ class FrameUpdater(threading.Thread):
|
||||
callbacks: Optional[Union[List[FrameCallable], FrameCallable]] = None,
|
||||
request_size: Tuple[int, int] = (-1, -1),
|
||||
high_speed: bool = True,
|
||||
fps_limit: float = 240,
|
||||
fps_limit: float = float("inf"),
|
||||
):
|
||||
"""Create the frame updater thread."""
|
||||
super(FrameUpdater, self).__init__(target=self.loop, args=())
|
||||
@@ -115,7 +115,7 @@ class FrameUpdater(threading.Thread):
|
||||
raise self.exception_raised
|
||||
|
||||
|
||||
async def read_updates(
|
||||
'''async def read_updates(
|
||||
*vids,
|
||||
callbacks: Optional[
|
||||
Union[
|
||||
@@ -132,14 +132,14 @@ async def read_updates(
|
||||
"""
|
||||
Read back all updates from the requested videos.
|
||||
|
||||
Example usage:
|
||||
Examp#le usage:
|
||||
|
||||
.. code-block:: python
|
||||
.. co#de-block:: python
|
||||
|
||||
>>> from examples.videos import test_video
|
||||
>>> f = 0
|
||||
>>> for f, r in enumerate(read_updates(test_video, end_callback=lambda :f==2)):
|
||||
... print(f"Frame:{f}. Array:{r}")
|
||||
>>#> from examples.videos import test_video
|
||||
>>#> f = 0
|
||||
>>#> for f, r in enumerate(read_updates(test_video, end_callback=lambda :f==2)):
|
||||
..#. print(f"Frame:{f}. Array:{r}")
|
||||
|
||||
"""
|
||||
from displayarray.window import SubscriberWindows
|
||||
@@ -174,7 +174,7 @@ async def read_updates(
|
||||
for v in vid_names:
|
||||
subscriber_dictionary.stop_cam(v)
|
||||
for v in vid_threads:
|
||||
v.join()
|
||||
v.join()'''
|
||||
|
||||
|
||||
async def read_updates_zero_mq(
|
||||
|
||||
@@ -30,6 +30,7 @@ class SubscriberWindows(object):
|
||||
window_names: Iterable[str] = ("displayarray",),
|
||||
video_sources: Iterable[Union[str, int]] = (0,),
|
||||
callbacks: Optional[List[Callable[[np.ndarray], Any]]] = None,
|
||||
silent: bool = False,
|
||||
):
|
||||
"""Create the array displaying window."""
|
||||
self.source_names: List[Union[str, int]] = []
|
||||
@@ -39,14 +40,16 @@ class SubscriberWindows(object):
|
||||
self.window_names: List[str] = []
|
||||
self.input_cams: List[str] = []
|
||||
self.exited = False
|
||||
self.silent = silent
|
||||
|
||||
if callbacks is None:
|
||||
callbacks = []
|
||||
for name in video_sources:
|
||||
self.add_source(name)
|
||||
self.callbacks = callbacks
|
||||
for name in window_names:
|
||||
self.add_window(name)
|
||||
if not self.silent:
|
||||
for name in window_names:
|
||||
self.add_window(name)
|
||||
|
||||
self.update()
|
||||
|
||||
@@ -54,6 +57,11 @@ class SubscriberWindows(object):
|
||||
self.update()
|
||||
return not self.exited
|
||||
|
||||
def __iter__(self):
|
||||
while not self.exited:
|
||||
self.update()
|
||||
yield self.frames
|
||||
|
||||
def block(self):
|
||||
"""Update the window continuously while blocking the outer program."""
|
||||
self.loop()
|
||||
@@ -109,7 +117,8 @@ class SubscriberWindows(object):
|
||||
mousey = MouseEvent(event, x, y, flags, param)
|
||||
window_commands.mouse_pub.publish(mousey)
|
||||
|
||||
def _display_frames(self, frames, win_num=0, ids=None):
|
||||
def display_frames(self, frames, win_num=0, ids=None):
|
||||
"""Display a list of frames on multiple windows."""
|
||||
if isinstance(frames, Exception):
|
||||
raise frames
|
||||
for f in range(len(frames)):
|
||||
@@ -122,7 +131,7 @@ class SubscriberWindows(object):
|
||||
and (len(frames[f].shape) != 3 or frames[f].shape[-1] != 3)
|
||||
)
|
||||
):
|
||||
win_num = self._display_frames(frames[f], win_num, ids)
|
||||
win_num = self.display_frames(frames[f], win_num, ids)
|
||||
else:
|
||||
if len(self.window_names) <= win_num:
|
||||
self.add_window(str(win_num))
|
||||
@@ -157,7 +166,7 @@ class SubscriberWindows(object):
|
||||
self.frames[fr] = self.callbacks[-1](self.frames[fr])
|
||||
break
|
||||
|
||||
def update_window_frames(self):
|
||||
def update_frames(self):
|
||||
"""Update the windows with the newest data for all frames."""
|
||||
self.frames = []
|
||||
for i in range(len(self.input_vid_global_names)):
|
||||
@@ -172,9 +181,11 @@ class SubscriberWindows(object):
|
||||
frame = c(self.frames[-1])
|
||||
if frame is not None:
|
||||
self.frames[-1] = frame
|
||||
self.__check_too_many_channels()
|
||||
if not self.silent:
|
||||
self.__check_too_many_channels()
|
||||
self.FRAME_DICT[self.input_vid_global_names[i]] = NoData()
|
||||
self._display_frames(self.frames)
|
||||
if not self.silent:
|
||||
self.display_frames(self.frames)
|
||||
|
||||
def update(self, arr: np.ndarray = None, id: str = None):
|
||||
"""Update window frames once. Optionally add a new input and input id."""
|
||||
@@ -182,9 +193,10 @@ class SubscriberWindows(object):
|
||||
global_cv_display_callback(arr, id)
|
||||
if id not in self.input_cams:
|
||||
self.add_source(id)
|
||||
self.add_window(id)
|
||||
if not self.silent:
|
||||
self.add_window(id)
|
||||
sub_cmd = window_commands.win_cmd_sub()
|
||||
self.update_window_frames()
|
||||
self.update_frames()
|
||||
msg_cmd = sub_cmd.get()
|
||||
key = self.handle_keys(cv2.waitKey(1))
|
||||
return msg_cmd, key
|
||||
@@ -231,7 +243,7 @@ class SubscriberWindows(object):
|
||||
def _get_video_callback_dict_threads(
|
||||
*vids,
|
||||
callbacks: Optional[Dict[Any, Union[FrameCallable, List[FrameCallable]]]] = None,
|
||||
fps=240,
|
||||
fps=float("inf"),
|
||||
size=(-1, -1),
|
||||
):
|
||||
assert callbacks is not None
|
||||
@@ -264,7 +276,7 @@ def _get_video_threads(
|
||||
FrameCallable,
|
||||
]
|
||||
] = None,
|
||||
fps=240,
|
||||
fps=float("inf"),
|
||||
size=(-1, -1),
|
||||
):
|
||||
vid_threads: List[Thread] = []
|
||||
@@ -300,8 +312,9 @@ def display(
|
||||
] = None,
|
||||
window_names=None,
|
||||
blocking=False,
|
||||
fps_limit=240,
|
||||
fps_limit=float("inf"),
|
||||
size=(-1, -1),
|
||||
silent=False,
|
||||
):
|
||||
"""
|
||||
Display all the arrays, cameras, and videos passed in.
|
||||
@@ -318,11 +331,15 @@ def display(
|
||||
if window_names is None:
|
||||
window_names = ["window {}".format(i) for i in range(len(vids))]
|
||||
if blocking:
|
||||
SubscriberWindows(window_names=window_names, video_sources=vids).loop()
|
||||
SubscriberWindows(
|
||||
window_names=window_names, video_sources=vids, silent=silent
|
||||
).loop()
|
||||
for vt in vid_threads:
|
||||
vt.join()
|
||||
else:
|
||||
s = SubscriberWindows(window_names=window_names, video_sources=vids)
|
||||
s = SubscriberWindows(
|
||||
window_names=window_names, video_sources=vids, silent=silent
|
||||
)
|
||||
s.close_threads = vid_threads
|
||||
return s
|
||||
|
||||
@@ -330,3 +347,8 @@ def display(
|
||||
def breakpoint_display(*args, **kwargs):
|
||||
"""Display all the arrays, cameras, and videos passed in. Stops code execution until the window is closed."""
|
||||
return display(*args, **kwargs, blocking=True)
|
||||
|
||||
|
||||
def read_updates(*args, **kwargs):
|
||||
"""Read back all frame updates and yield a list of frames. List is empty if no frames were read."""
|
||||
return display(*args, **kwargs, silent=True)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -173,7 +173,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<span class="n">cam_id</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</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="n">request_size</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</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">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="n">fps_limit</span><span class="p">:</span> <span class="nb">float</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="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Publish whichever camera you select to CVCams.<cam_id>.Vid.</span>
|
||||
@@ -80,7 +80,6 @@
|
||||
|
||||
<span class="n">subscriber_dictionary</span><span class="o">.</span><span class="n">register_cam</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># cam.set(cv2.CAP_PROP_CONVERT_RGB, 0)</span>
|
||||
<span class="n">frame_counter</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="n">sub</span> <span class="o">=</span> <span class="n">subscriber_dictionary</span><span class="o">.</span><span class="n">cam_cmd_sub</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
@@ -122,7 +121,7 @@
|
||||
<span class="n">cam_id</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span>
|
||||
<span class="n">request_ize</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</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">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="n">fps_limit</span><span class="p">:</span> <span class="nb">float</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="p">)</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="sd">"""Run pub_cam_loop in a new thread. Starts on creation."""</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>
|
||||
@@ -219,8 +218,8 @@
|
||||
<span class="p">}[</span><span class="n">dtype</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">msg_type</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">dtype</span>
|
||||
<span class="p">)</span> <span class="c1"># allow users to use their own custom messages in numpy arrays</span>
|
||||
<span class="n">dtype</span> <span class="c1"># allow users to use their own custom messages in numpy arrays</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">msg_type</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>
|
||||
@@ -316,7 +315,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<span class="n">FrameCallable</span> <span class="o">=</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">Optional</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">]]</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FrameUpdater"><a class="viewcode-back" href="../../../../frame/#displayarray.FrameUpdater">[docs]</a><span class="k">class</span> <span class="nc">FrameUpdater</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="FrameUpdater"><a class="viewcode-back" href="../../../../frame/#displayarray.frame.FrameUpdater">[docs]</a><span class="k">class</span> <span class="nc">FrameUpdater</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span>
|
||||
<span class="sd">"""Thread for updating frames from a video source."""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span>
|
||||
@@ -59,7 +59,7 @@
|
||||
<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">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="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">request_size</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</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">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="n">fps_limit</span><span class="p">:</span> <span class="nb">float</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="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>
|
||||
@@ -110,7 +110,7 @@
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="n">global_cv_display_callback</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cam_id</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="FrameUpdater.loop"><a class="viewcode-back" href="../../../../frame/#displayarray.FrameUpdater.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="FrameUpdater.loop"><a class="viewcode-back" href="../../../../frame/#displayarray.frame.FrameUpdater.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 get frames from the video publisher, run callbacks on them, and listen to commands."""</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">pub_cam_thread</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">video_source</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">request_size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">high_speed</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fps_limit</span>
|
||||
@@ -129,7 +129,7 @@
|
||||
<span class="n">subscriber_dictionary</span><span class="o">.</span><span class="n">stop_cam</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cam_id</span><span class="p">)</span>
|
||||
<span class="n">t</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="FrameUpdater.display"><a class="viewcode-back" href="../../../../frame/#displayarray.FrameUpdater.display">[docs]</a> <span class="k">def</span> <span class="nf">display</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">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="kc">None</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="FrameUpdater.display"><a class="viewcode-back" href="../../../../frame/#displayarray.frame.FrameUpdater.display">[docs]</a> <span class="k">def</span> <span class="nf">display</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">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="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Start default display operation.</span>
|
||||
|
||||
@@ -148,66 +148,66 @@
|
||||
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">exception_raised</span></div></div>
|
||||
|
||||
|
||||
<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">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">"""</span>
|
||||
<span class="sd">'''async def read_updates(</span>
|
||||
<span class="sd"> *vids,</span>
|
||||
<span class="sd"> callbacks: Optional[</span>
|
||||
<span class="sd"> Union[</span>
|
||||
<span class="sd"> Dict[Any, Union[FrameCallable, List[FrameCallable]]],</span>
|
||||
<span class="sd"> List[FrameCallable],</span>
|
||||
<span class="sd"> FrameCallable,</span>
|
||||
<span class="sd"> ]</span>
|
||||
<span class="sd"> ] = None,</span>
|
||||
<span class="sd"> fps_limit=float("inf"),</span>
|
||||
<span class="sd"> size=(-1, -1),</span>
|
||||
<span class="sd"> end_callback: Callable[[], bool] = lambda: False,</span>
|
||||
<span class="sd"> blocking=True,</span>
|
||||
<span class="sd">):</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"> Examp#le usage:</span>
|
||||
|
||||
<span class="sd"> .. code-block:: python</span>
|
||||
<span class="sd"> .. co#de-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"> >>#> 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>
|
||||
<span class="kn">from</span> <span class="nn">displayarray.window.subscriber_windows</span> <span class="k">import</span> <span class="n">_get_video_threads</span>
|
||||
<span class="sd"> from displayarray.window import SubscriberWindows</span>
|
||||
<span class="sd"> from displayarray.window.subscriber_windows import _get_video_threads</span>
|
||||
|
||||
<span class="n">vid_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">uid_for_source</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">vids</span><span class="p">]</span>
|
||||
<span class="n">vid_threads</span> <span class="o">=</span> <span class="n">_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="o">=</span><span class="n">callbacks</span><span class="p">,</span> <span class="n">fps</span><span class="o">=</span><span class="n">fps_limit</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">size</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">vid_threads</span><span class="p">:</span>
|
||||
<span class="n">v</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<span class="sd"> vid_names = [uid_for_source(name) for name in vids]</span>
|
||||
<span class="sd"> vid_threads = _get_video_threads(</span>
|
||||
<span class="sd"> *vids, callbacks=callbacks, fps=fps_limit, size=size</span>
|
||||
<span class="sd"> )</span>
|
||||
<span class="sd"> for v in vid_threads:</span>
|
||||
<span class="sd"> v.start()</span>
|
||||
|
||||
<span class="k">while</span> <span class="ow">not</span> <span class="n">end_callback</span><span class="p">():</span>
|
||||
<span class="n">vid_update_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">dict_was_updated</span> <span class="o">=</span> <span class="kc">False</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="n">vid_names</span><span class="p">)):</span>
|
||||
<span class="k">if</span> <span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">in</span> <span class="n">SubscriberWindows</span><span class="o">.</span><span class="n">FRAME_DICT</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span>
|
||||
<span class="n">SubscriberWindows</span><span class="o">.</span><span class="n">FRAME_DICT</span><span class="p">[</span><span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]],</span> <span class="n">NoData</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">vid_update_dict</span><span class="p">[</span><span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="n">SubscriberWindows</span><span class="o">.</span><span class="n">FRAME_DICT</span><span class="p">[</span>
|
||||
<span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">if</span> <span class="p">(</span>
|
||||
<span class="nb">isinstance</span><span class="p">(</span><span class="n">vid_update_dict</span><span class="p">[</span><span class="n">vid_names</span><span class="p">[</span><span class="n">i</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="nb">len</span><span class="p">(</span><span class="n">vid_update_dict</span><span class="p">[</span><span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">3</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">vid_update_dict</span><span class="p">[</span><span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="n">vid_update_dict</span><span class="p">[</span><span class="n">vid_names</span><span class="p">[</span><span class="n">i</span><span class="p">]]]</span>
|
||||
<span class="n">dict_was_updated</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">if</span> <span class="n">dict_was_updated</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">blocking</span><span class="p">:</span>
|
||||
<span class="k">yield</span> <span class="n">vid_update_dict</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">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">vid_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">v</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">vid_threads</span><span class="p">:</span>
|
||||
<span class="n">v</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></div>
|
||||
<span class="sd"> while not end_callback():</span>
|
||||
<span class="sd"> vid_update_dict = {}</span>
|
||||
<span class="sd"> dict_was_updated = False</span>
|
||||
<span class="sd"> for i in range(len(vid_names)):</span>
|
||||
<span class="sd"> if vid_names[i] in SubscriberWindows.FRAME_DICT and not isinstance(</span>
|
||||
<span class="sd"> SubscriberWindows.FRAME_DICT[vid_names[i]], NoData</span>
|
||||
<span class="sd"> ):</span>
|
||||
<span class="sd"> vid_update_dict[vid_names[i]] = SubscriberWindows.FRAME_DICT[</span>
|
||||
<span class="sd"> vid_names[i]</span>
|
||||
<span class="sd"> ]</span>
|
||||
<span class="sd"> if (</span>
|
||||
<span class="sd"> isinstance(vid_update_dict[vid_names[i]], np.ndarray)</span>
|
||||
<span class="sd"> and len(vid_update_dict[vid_names[i]].shape) <= 3</span>
|
||||
<span class="sd"> ):</span>
|
||||
<span class="sd"> vid_update_dict[vid_names[i]] = [vid_update_dict[vid_names[i]]]</span>
|
||||
<span class="sd"> dict_was_updated = True</span>
|
||||
<span class="sd"> if dict_was_updated or not blocking:</span>
|
||||
<span class="sd"> yield vid_update_dict</span>
|
||||
<span class="sd"> await asyncio.sleep(0)</span>
|
||||
<span class="sd"> for v in vid_names:</span>
|
||||
<span class="sd"> subscriber_dictionary.stop_cam(v)</span>
|
||||
<span class="sd"> for v in vid_threads:</span>
|
||||
<span class="sd"> v.join()'''</span>
|
||||
|
||||
|
||||
<span class="k">async</span> <span class="k">def</span> <span class="nf">read_updates_zero_mq</span><span class="p">(</span>
|
||||
@@ -404,7 +404,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
<span class="n">window_names</span><span class="p">:</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"displayarray"</span><span class="p">,),</span>
|
||||
<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="n">silent</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="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>
|
||||
@@ -72,14 +73,16 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window_names</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</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">input_cams</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</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">exited</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">silent</span> <span class="o">=</span> <span class="n">silent</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">callbacks</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">callbacks</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">video_sources</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_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">callbacks</span> <span class="o">=</span> <span class="n">callbacks</span>
|
||||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">window_names</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_window</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">silent</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">window_names</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_window</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">update</span><span class="p">()</span>
|
||||
|
||||
@@ -87,6 +90,11 @@
|
||||
<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">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">exited</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
<span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">frames</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>
|
||||
@@ -142,7 +150,7 @@
|
||||
<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>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_display_frames</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">win_num</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ids</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">display_frames</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">win_num</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ids</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="ne">Exception</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="n">frames</span>
|
||||
<span class="k">for</span> <span class="n">f</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="n">frames</span><span class="p">)):</span>
|
||||
@@ -155,7 +163,7 @@
|
||||
<span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">frames</span><span class="p">[</span><span class="n">f</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">3</span> <span class="ow">or</span> <span class="n">frames</span><span class="p">[</span><span class="n">f</span><span class="p">]</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">3</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">win_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_frames</span><span class="p">(</span><span class="n">frames</span><span class="p">[</span><span class="n">f</span><span class="p">],</span> <span class="n">win_num</span><span class="p">,</span> <span class="n">ids</span><span class="p">)</span>
|
||||
<span class="n">win_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_frames</span><span class="p">(</span><span class="n">frames</span><span class="p">[</span><span class="n">f</span><span class="p">],</span> <span class="n">win_num</span><span class="p">,</span> <span class="n">ids</span><span class="p">)</span>
|
||||
<span class="k">else</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">window_names</span><span class="p">)</span> <span class="o"><=</span> <span class="n">win_num</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_window</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">win_num</span><span class="p">))</span>
|
||||
@@ -190,7 +198,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="../../../../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>
|
||||
<div class="viewcode-block" id="SubscriberWindows.update_frames"><a class="viewcode-back" href="../../../../display/#displayarray.SubscriberWindows.update_frames">[docs]</a> <span class="k">def</span> <span class="nf">update_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>
|
||||
@@ -205,9 +213,11 @@
|
||||
<span class="n">frame</span> <span class="o">=</span> <span class="n">c</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="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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">silent</span><span class="p">:</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>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">silent</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="../../../../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>
|
||||
@@ -215,9 +225,10 @@
|
||||
<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>
|
||||
<span class="k">if</span> <span class="nb">id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">input_cams</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_source</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_window</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">silent</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_window</span><span class="p">(</span><span class="nb">id</span><span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">update_window_frames</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">update_frames</span><span class="p">()</span>
|
||||
<span class="n">msg_cmd</span> <span class="o">=</span> <span class="n">sub_cmd</span><span class="o">.</span><span class="n">get</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">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>
|
||||
@@ -264,7 +275,7 @@
|
||||
<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">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">fps</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="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>
|
||||
@@ -297,7 +308,7 @@
|
||||
<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">fps</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="p">):</span>
|
||||
<span class="n">vid_threads</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>
|
||||
@@ -333,8 +344,9 @@
|
||||
<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>
|
||||
<span class="n">fps_limit</span><span class="o">=</span><span class="mi">240</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">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Display all the arrays, cameras, and videos passed in.</span>
|
||||
@@ -351,11 +363,15 @@
|
||||
<span class="k">if</span> <span class="n">window_names</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">window_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"window </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</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="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">vids</span><span class="p">))]</span>
|
||||
<span class="k">if</span> <span class="n">blocking</span><span class="p">:</span>
|
||||
<span class="n">SubscriberWindows</span><span class="p">(</span><span class="n">window_names</span><span class="o">=</span><span class="n">window_names</span><span class="p">,</span> <span class="n">video_sources</span><span class="o">=</span><span class="n">vids</span><span class="p">)</span><span class="o">.</span><span class="n">loop</span><span class="p">()</span>
|
||||
<span class="n">SubscriberWindows</span><span class="p">(</span>
|
||||
<span class="n">window_names</span><span class="o">=</span><span class="n">window_names</span><span class="p">,</span> <span class="n">video_sources</span><span class="o">=</span><span class="n">vids</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="n">silent</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">loop</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">vt</span> <span class="ow">in</span> <span class="n">vid_threads</span><span class="p">:</span>
|
||||
<span class="n">vt</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">SubscriberWindows</span><span class="p">(</span><span class="n">window_names</span><span class="o">=</span><span class="n">window_names</span><span class="p">,</span> <span class="n">video_sources</span><span class="o">=</span><span class="n">vids</span><span class="p">)</span>
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">SubscriberWindows</span><span class="p">(</span>
|
||||
<span class="n">window_names</span><span class="o">=</span><span class="n">window_names</span><span class="p">,</span> <span class="n">video_sources</span><span class="o">=</span><span class="n">vids</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="n">silent</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">s</span><span class="o">.</span><span class="n">close_threads</span> <span class="o">=</span> <span class="n">vid_threads</span>
|
||||
<span class="k">return</span> <span class="n">s</span></div>
|
||||
|
||||
@@ -363,6 +379,11 @@
|
||||
<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>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="read_updates"><a class="viewcode-back" href="../../../../display/#displayarray.read_updates">[docs]</a><span class="k">def</span> <span class="nf">read_updates</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">"""Read back all frame updates and yield a list of frames. List is empty if no frames were read."""</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">silent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
@@ -428,7 +449,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -4,6 +4,7 @@ displayarray.display
|
||||
|
||||
.. autofunction:: display
|
||||
.. autofunction:: breakpoint_display
|
||||
.. autofunction:: read_updates
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
displayarray.frame
|
||||
===================================
|
||||
|
||||
Read Updates
|
||||
------------
|
||||
.. currentmodule:: displayarray
|
||||
|
||||
.. autofunction:: read_updates
|
||||
|
||||
Frame Passing
|
||||
-------------
|
||||
.. currentmodule:: displayarray.frame
|
||||
@@ -19,7 +13,6 @@ Frame Passing
|
||||
.. autoclass:: FrameUpdater
|
||||
:members:
|
||||
|
||||
.. autofunction:: read_updates
|
||||
.. autofunction:: get_cam_ids
|
||||
|
||||
.. autoclass:: NpCam
|
||||
|
||||
+11
-5
@@ -38,7 +38,7 @@
|
||||
<p>display is a function that displays these in their own windows.</p>
|
||||
<dl class="function">
|
||||
<dt id="displayarray.display">
|
||||
<code class="sig-name descname">display</code><span class="sig-paren">(</span><em class="sig-param">*vids, callbacks: Union[Dict[Any, Union[Callable[[numpy.ndarray], Optional[numpy.ndarray]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]]]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]], Callable[[numpy.ndarray], Optional[numpy.ndarray]], None] = None, window_names=None, blocking=False, fps_limit=240, size=(-1, -1)</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#display"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.display" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">display</code><span class="sig-paren">(</span><em class="sig-param">*vids, callbacks: Union[Dict[Any, Union[Callable[[numpy.ndarray], Optional[numpy.ndarray]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]]]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]], Callable[[numpy.ndarray], Optional[numpy.ndarray]], None] = None, window_names=None, blocking=False, fps_limit=inf, size=(-1, -1), silent=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#display"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.display" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Display all the arrays, cameras, and videos passed in.</p>
|
||||
<dl class="simple">
|
||||
<dt>callbacks can be a dictionary linking functions to videos, or a list of function or functions operating on the video</dt><dd><p>data before displaying.</p>
|
||||
@@ -53,11 +53,17 @@
|
||||
<dd><p>Display all the arrays, cameras, and videos passed in. Stops code execution until the window is closed.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="displayarray.read_updates">
|
||||
<code class="sig-name descname">read_updates</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#read_updates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.read_updates" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Read back all frame updates and yield a list of frames. List is empty if no frames were read.</p>
|
||||
</dd></dl>
|
||||
|
||||
<div class="section" id="windows">
|
||||
<h2>Windows<a class="headerlink" href="#windows" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="displayarray.window.SubscriberWindows">
|
||||
<em class="property">class </em><code class="sig-name descname">SubscriberWindows</code><span class="sig-paren">(</span><em class="sig-param">window_names: Iterable[str] = ('displayarray',), video_sources: Iterable[Union[str, int]] = (0,), callbacks: Optional[List[Callable[[numpy.ndarray], Any]]] = None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#SubscriberWindows"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.window.SubscriberWindows" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-name descname">SubscriberWindows</code><span class="sig-paren">(</span><em class="sig-param">window_names: Iterable[str] = ('displayarray',), video_sources: Iterable[Union[str, int]] = (0,), callbacks: Optional[List[Callable[[numpy.ndarray], Any]]] = None, silent: bool = False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#SubscriberWindows"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.window.SubscriberWindows" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Windows that subscribe to updates to cameras, videos, and arrays.</p>
|
||||
<dl class="method">
|
||||
<dt id="displayarray.window.SubscriberWindows.add_callback">
|
||||
@@ -114,8 +120,8 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="displayarray.window.SubscriberWindows.update_window_frames">
|
||||
<code class="sig-name descname">update_window_frames</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#SubscriberWindows.update_window_frames"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.window.SubscriberWindows.update_window_frames" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="displayarray.window.SubscriberWindows.update_frames">
|
||||
<code class="sig-name descname">update_frames</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/window/subscriber_windows/#SubscriberWindows.update_frames"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.window.SubscriberWindows.update_frames" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Update the windows with the newest data for all frames.</p>
|
||||
</dd></dl>
|
||||
|
||||
@@ -197,7 +203,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
|
|
||||
|
||||
+2
-1
@@ -12,7 +12,8 @@
|
||||
#
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath(f'..{os.sep}..'))
|
||||
|
||||
sys.path.insert(0, os.path.abspath(f"..{os.sep}.."))
|
||||
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
@@ -4,6 +4,7 @@ displayarray.display
|
||||
|
||||
.. autofunction:: display
|
||||
.. autofunction:: breakpoint_display
|
||||
.. autofunction:: read_updates
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
displayarray.frame
|
||||
===================================
|
||||
|
||||
Read Updates
|
||||
------------
|
||||
.. currentmodule:: displayarray
|
||||
|
||||
.. autofunction:: read_updates
|
||||
|
||||
Frame Passing
|
||||
-------------
|
||||
.. currentmodule:: displayarray.frame
|
||||
@@ -19,7 +13,6 @@ Frame Passing
|
||||
.. autoclass:: FrameUpdater
|
||||
:members:
|
||||
|
||||
.. autofunction:: read_updates
|
||||
.. autofunction:: get_cam_ids
|
||||
|
||||
.. autoclass:: NpCam
|
||||
|
||||
@@ -273,7 +273,7 @@ Ctrl+scroll to increase/decrease channel 0.</p>
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
|
|
||||
|
||||
+3
-33
@@ -34,22 +34,6 @@
|
||||
|
||||
<div class="section" id="displayarray-frame">
|
||||
<h1>displayarray.frame<a class="headerlink" href="#displayarray-frame" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="section" id="read-updates">
|
||||
<h2>Read Updates<a class="headerlink" href="#read-updates" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="function">
|
||||
<dt id="displayarray.read_updates">
|
||||
<code class="sig-name descname">read_updates</code><span class="sig-paren">(</span><em class="sig-param">*vids, callbacks: Union[Dict[Any, Union[Callable[[numpy.ndarray], Optional[numpy.ndarray]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]]]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]], Callable[[numpy.ndarray], Optional[numpy.ndarray]], None] = None, fps_limit=inf, size=(-1, -1), end_callback: Callable[[], bool] = <function <lambda>>, blocking=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/frame/frame_updater/#read_updates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.read_updates" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Read back all updates from the requested videos.</p>
|
||||
<p>Example usage:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">examples.videos</span> <span class="kn">import</span> <span class="n">test_video</span>
|
||||
<span class="gp">>>> </span><span class="n">f</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="gp">>>> </span><span class="k">for</span> <span class="n">f</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">read_updates</span><span class="p">(</span><span class="n">test_video</span><span class="p">,</span> <span class="n">end_callback</span><span class="o">=</span><span class="k">lambda</span> <span class="p">:</span><span class="n">f</span><span class="o">==</span><span class="mi">2</span><span class="p">)):</span>
|
||||
<span class="gp">... </span> <span class="k">print</span><span class="p">(</span><span class="n">f</span><span class="s2">"Frame:{f}. Array:{r}"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
<div class="section" id="module-displayarray.frame">
|
||||
<span id="frame-passing"></span><h2>Frame Passing<a class="headerlink" href="#module-displayarray.frame" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Handles publishing arrays, videos, and cameras.</p>
|
||||
@@ -60,7 +44,7 @@ pub_cam_thread continually publishes updates to arrays, videos, and cameras
|
||||
np_cam simulates numpy arrays as OpenCV cameras</p>
|
||||
<dl class="class">
|
||||
<dt id="displayarray.frame.FrameUpdater">
|
||||
<em class="property">class </em><code class="sig-name descname">FrameUpdater</code><span class="sig-paren">(</span><em class="sig-param">video_source: Union[int, str, numpy.ndarray] = 0, callbacks: Union[List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]], Callable[[numpy.ndarray], Optional[numpy.ndarray]], None] = None, request_size: Tuple[int, int] = (-1, -1), high_speed: bool = True, fps_limit: float = 240</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/frame/frame_updater/#FrameUpdater"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.frame.FrameUpdater" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-name descname">FrameUpdater</code><span class="sig-paren">(</span><em class="sig-param">video_source: Union[int, str, numpy.ndarray] = 0, callbacks: Union[List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]], Callable[[numpy.ndarray], Optional[numpy.ndarray]], None] = None, request_size: Tuple[int, int] = (-1, -1), high_speed: bool = True, fps_limit: float = inf</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/frame/frame_updater/#FrameUpdater"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.frame.FrameUpdater" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Thread for updating frames from a video source.</p>
|
||||
<dl class="method">
|
||||
<dt id="displayarray.frame.FrameUpdater.display">
|
||||
@@ -82,19 +66,6 @@ np_cam simulates numpy arrays as OpenCV cameras</p>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="displayarray.frame.read_updates">
|
||||
<code class="sig-name descname">read_updates</code><span class="sig-paren">(</span><em class="sig-param">*vids, callbacks: Union[Dict[Any, Union[Callable[[numpy.ndarray], Optional[numpy.ndarray]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]]]], List[Callable[[numpy.ndarray], Optional[numpy.ndarray]]], Callable[[numpy.ndarray], Optional[numpy.ndarray]], None] = None, fps_limit=inf, size=(-1, -1), end_callback: Callable[[], bool] = <function <lambda>>, blocking=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/displayarray/frame/frame_updater/#read_updates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.frame.read_updates" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Read back all updates from the requested videos.</p>
|
||||
<p>Example usage:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">examples.videos</span> <span class="kn">import</span> <span class="n">test_video</span>
|
||||
<span class="gp">>>> </span><span class="n">f</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="gp">>>> </span><span class="k">for</span> <span class="n">f</span><span class="p">,</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">read_updates</span><span class="p">(</span><span class="n">test_video</span><span class="p">,</span> <span class="n">end_callback</span><span class="o">=</span><span class="k">lambda</span> <span class="p">:</span><span class="n">f</span><span class="o">==</span><span class="mi">2</span><span class="p">)):</span>
|
||||
<span class="gp">... </span> <span class="k">print</span><span class="p">(</span><span class="n">f</span><span class="s2">"Frame:{f}. Array:{r}"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="displayarray.frame.get_cam_ids">
|
||||
<code class="sig-name descname">get_cam_ids</code><span class="sig-paren">(</span><span class="sig-paren">)</span> → List[int]<a class="reference internal" href="../_modules/displayarray/frame/get_frame_ids/#get_cam_ids"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.frame.get_cam_ids" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -139,7 +110,7 @@ np_cam simulates numpy arrays as OpenCV cameras</p>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="displayarray.frame.pub_cam_thread">
|
||||
<code class="sig-name descname">pub_cam_thread</code><span class="sig-paren">(</span><em class="sig-param">cam_id: Union[int, str], request_ize: Tuple[int, int] = (-1, -1), high_speed: bool = True, fps_limit: float = 240</em><span class="sig-paren">)</span> → threading.Thread<a class="reference internal" href="../_modules/displayarray/frame/frame_publishing/#pub_cam_thread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.frame.pub_cam_thread" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">pub_cam_thread</code><span class="sig-paren">(</span><em class="sig-param">cam_id: Union[int, str], request_ize: Tuple[int, int] = (-1, -1), high_speed: bool = True, fps_limit: float = inf</em><span class="sig-paren">)</span> → threading.Thread<a class="reference internal" href="../_modules/displayarray/frame/frame_publishing/#pub_cam_thread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#displayarray.frame.pub_cam_thread" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Run pub_cam_loop in a new thread. Starts on creation.</p>
|
||||
</dd></dl>
|
||||
|
||||
@@ -167,7 +138,6 @@ np_cam simulates numpy arrays as OpenCV cameras</p>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal" href="../display/">display</a></li>
|
||||
<li class="toctree-l1 current"><a class="current reference internal" href="#">frame</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#read-updates">Read Updates</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#module-displayarray.frame">Frame Passing</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -214,7 +184,7 @@ np_cam simulates numpy arrays as OpenCV cameras</p>
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
|
|
||||
|
||||
@@ -254,12 +254,8 @@
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="../frame/#displayarray.frame.NpCam.read">read() (NpCam method)</a>
|
||||
</li>
|
||||
<li><a href="../frame/#displayarray.read_updates">read_updates() (in module displayarray)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="../frame/#displayarray.frame.read_updates">(in module displayarray.frame)</a>
|
||||
<li><a href="../display/#displayarray.read_updates">read_updates() (in module displayarray)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="../frame/#displayarray.frame.NpCam.release">release() (NpCam method)</a>
|
||||
@@ -290,7 +286,7 @@
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="../display/#displayarray.window.SubscriberWindows.update_window_frames">update_window_frames() (SubscriberWindows method)</a>
|
||||
<li><a href="../display/#displayarray.window.SubscriberWindows.update_frames">update_frames() (SubscriberWindows method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -374,7 +370,7 @@
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
+1
-2
@@ -50,7 +50,6 @@ contain the root <cite>toctree</cite> directive.</p>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="frame/">frame</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="frame/#read-updates">Read Updates</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="frame/#module-displayarray.frame">Frame Passing</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -146,7 +145,7 @@ contain the root <cite>toctree</cite> directive.</p>
|
||||
©2019, Simulator Leek.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
|
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user