Coverage for src/pythia/utils/str2pythia.py: 94%
24 statements
« prev ^ index » next coverage.py v6.4.4, created at 2022-10-07 19:27 +0000
« prev ^ index » next coverage.py v6.4.4, created at 2022-10-07 19:27 +0000
1"""Utilities to convert strings to pythia wrappers."""
3from __future__ import annotations
5from pythia.models.base import Analytics
6from pythia.models.base import InferenceEngine
7from pythia.models.base import Tracker
8from pythia.utils.gst import Gst
9from pythia.utils.gst import gst_iter
12def is_inference(element: Gst.Element) -> bool:
13 """Check wether a `Gst.Element` is a `nvinfer`.
15 Args:
16 element: the gstreamer element to check.
18 Returns:
19 `True` iff the element is a `nvinfer`. False otherwise.
21 """
22 return "nvinfer" in element.__class__.__name__.lower()
25def is_tracker(element: Gst.Element) -> bool:
26 """Check wether a `Gst.Element` is a `nvtracker`.
28 Args:
29 element: the gstreamer element to check.
31 Returns:
32 `True` iff the element is a `nvtracker`. False otherwise.
34 """
35 return "nvtracker" in element.__class__.__name__.lower()
38def is_analytics(element: Gst.Element) -> bool:
39 """Check wether a `Gst.Element` is a `nvdsanalytics`.
41 Args:
42 element: the gstreamer element to check.
44 Returns:
45 `True` iff the element is a `nvdsanalytics`. False otherwise.
47 """
48 return "nvdsanalytics" in element.__class__.__name__.lower()
51def find_models(pipeline: Gst.Pipeline) -> list[InferenceEngine]:
52 """Extract `nvifer` s from parsed pipeline.
54 Args:
55 pipeline: The root bin where to look for ninfer elements.
57 Returns:
58 List of all the nvinfer wrappers wrapped as
59 :class:`InferenceEngine`.
61 """
62 return [
63 InferenceEngine.from_element(element)
64 for element in gst_iter(pipeline.iterate_elements())
65 if is_inference(element)
66 ]
69def find_analytics(pipeline: Gst.Pipeline) -> Analytics | None:
70 """Extract analytics from parsed pipeline.
72 Args:
73 pipeline: The root bin where to look for `nvdsanalytics`
74 elements.
76 Returns:
77 First `nvdsanalytics` found, wrapped as :class:`Analytics`.
79 """
80 for element in gst_iter(pipeline.iterate_elements()):
81 if is_analytics(element): 81 ↛ 82line 81 didn't jump to line 82, because the condition on line 81 was never true
82 return Analytics.from_element(element)
83 return None
86def find_tracker(pipeline: Gst.Pipeline) -> Tracker | None:
87 """Extract tracker from parsed pipeline.
89 Args:
90 pipeline: The root bin where to look for `nvtracker` elements.
92 Returns:
93 First `nvtracker` found, wrapped as :class:`Tracker`.
95 """
97 for element in gst_iter(pipeline.iterate_elements()):
98 if is_tracker(element):
99 return Tracker.from_element(element)
101 return None