vision-agent 0.2.186__py3-none-any.whl → 0.2.188__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1871,6 +1871,9 @@ def extract_frames_and_timestamps(
1871
1871
  >>> extract_frames("path/to/video.mp4")
1872
1872
  [{"frame": np.ndarray, "timestamp": 0.0}, ...]
1873
1873
  """
1874
+ if isinstance(fps, str):
1875
+ # fps could be a string when it's passed in from a web endpoint deployment
1876
+ fps = float(fps)
1874
1877
 
1875
1878
  def reformat(
1876
1879
  frames_and_timestamps: List[Tuple[np.ndarray, float]],
@@ -1934,6 +1937,7 @@ def save_json(data: Any, file_path: str) -> None:
1934
1937
  return bool(obj)
1935
1938
  return json.JSONEncoder.default(self, obj)
1936
1939
 
1940
+ Path(file_path).parent.mkdir(parents=True, exist_ok=True)
1937
1941
  with open(file_path, "w") as f:
1938
1942
  json.dump(data, f, cls=NumpyEncoder)
1939
1943
 
@@ -1976,6 +1980,7 @@ def save_image(image: np.ndarray, file_path: str) -> None:
1976
1980
  -------
1977
1981
  >>> save_image(image)
1978
1982
  """
1983
+ Path(file_path).parent.mkdir(parents=True, exist_ok=True)
1979
1984
  from IPython.display import display
1980
1985
 
1981
1986
  if not isinstance(image, np.ndarray) or (
@@ -2006,6 +2011,9 @@ def save_video(
2006
2011
  >>> save_video(frames)
2007
2012
  "/tmp/tmpvideo123.mp4"
2008
2013
  """
2014
+ if isinstance(fps, str):
2015
+ # fps could be a string when it's passed in from a web endpoint deployment
2016
+ fps = float(fps)
2009
2017
  if fps <= 0:
2010
2018
  raise ValueError(f"fps must be greater than 0 got {fps}")
2011
2019
 
@@ -2022,6 +2030,8 @@ def save_video(
2022
2030
  output_video_path = tempfile.NamedTemporaryFile(
2023
2031
  delete=False, suffix=".mp4"
2024
2032
  ).name
2033
+ else:
2034
+ Path(output_video_path).parent.mkdir(parents=True, exist_ok=True)
2025
2035
 
2026
2036
  output_video_path = video_writer(frames, fps, output_video_path)
2027
2037
  _save_video_to_result(output_video_path)
@@ -2188,6 +2198,9 @@ def overlay_segmentation_masks(
2188
2198
  }],
2189
2199
  )
2190
2200
  """
2201
+ if not masks:
2202
+ return medias
2203
+
2191
2204
  medias_int: List[np.ndarray] = (
2192
2205
  [medias] if isinstance(medias, np.ndarray) else medias
2193
2206
  )
@@ -58,6 +58,9 @@ def video_writer(
58
58
  fps: float = _DEFAULT_INPUT_FPS,
59
59
  filename: Optional[str] = None,
60
60
  ) -> str:
61
+ if isinstance(fps, str):
62
+ # fps could be a string when it's passed in from a web endpoint deployment
63
+ fps = float(fps)
61
64
  if filename is None:
62
65
  filename = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
63
66
  container = av.open(filename, mode="w")
@@ -92,6 +95,9 @@ def frames_to_bytes(
92
95
  fps: the frames per second of the video
93
96
  file_ext: the file extension of the video file
94
97
  """
98
+ if isinstance(fps, str):
99
+ # fps could be a string when it's passed in from a web endpoint deployment
100
+ fps = float(fps)
95
101
  with tempfile.NamedTemporaryFile(delete=True, suffix=file_ext) as temp_file:
96
102
  video_writer(frames, fps, temp_file.name)
97
103
 
@@ -120,6 +126,9 @@ def extract_frames_from_video(
120
126
  from the start of the video. E.g. 12.125 means 12.125 seconds from the start of
121
127
  the video. The frames are sorted by the timestamp in ascending order.
122
128
  """
129
+ if isinstance(fps, str):
130
+ # fps could be a string when it's passed in from a web endpoint deployment
131
+ fps = float(fps)
123
132
 
124
133
  cap = cv2.VideoCapture(video_uri)
125
134
  orig_fps = cap.get(cv2.CAP_PROP_FPS)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vision-agent
3
- Version: 0.2.186
3
+ Version: 0.2.188
4
4
  Summary: Toolset for Vision Agent
5
5
  Author: Landing AI
6
6
  Author-email: dev@landing.ai
@@ -20,7 +20,7 @@ vision_agent/tools/__init__.py,sha256=KVP4_6qxOb2lpFdQgQtyDfdkMLL1O6wVZNK19MXp-x
20
20
  vision_agent/tools/meta_tools.py,sha256=by7TIbH7lsLIayX_Pe2mS1iw8aeLn2T8yqAo8SkB9Kg,32074
21
21
  vision_agent/tools/prompts.py,sha256=V1z4YJLXZuUl_iZ5rY0M5hHc_2tmMEUKr0WocXKGt4E,1430
22
22
  vision_agent/tools/tool_utils.py,sha256=VPGqGJ2ZYEJA6AW7K9X7hQv6vRlMtAQcybE4izdToCw,8196
23
- vision_agent/tools/tools.py,sha256=-oq8jzITi-yVYJ3ut5MuGJ65jd3ESRtHfw4SCAruMps,83059
23
+ vision_agent/tools/tools.py,sha256=lIRQals2WLkV01pXDwFwkZdMmEa2xf7Jnv8g3UNrdOQ,83582
24
24
  vision_agent/tools/tools_types.py,sha256=8hYf2OZhI58gvf65KGaeGkt4EQ56nwLFqIQDPHioOBc,2339
25
25
  vision_agent/utils/__init__.py,sha256=7fMgbZiEwbNS0fBOS_hJI5PuEYBblw36zLi_UjUzvj4,244
26
26
  vision_agent/utils/exceptions.py,sha256=booSPSuoULF7OXRr_YbC4dtKt6gM_HyiFQHBuaW86C4,2052
@@ -28,8 +28,8 @@ vision_agent/utils/execute.py,sha256=2sIQn45llOENMyrKu3TPINVRLLbOvvZ6SVHFCB9MQUo
28
28
  vision_agent/utils/image_utils.py,sha256=rm9GfXvD4JrjnqKrP_f2gfq4SzmqYC0IdC1kKwdn6sk,11303
29
29
  vision_agent/utils/sim.py,sha256=ZuSS07TUXFGjipmiQoY8TKRmSes7XXCdtU9PI8PC1sw,5609
30
30
  vision_agent/utils/type_defs.py,sha256=BE12s3JNQy36QvauXHjwyeffVh5enfcvd4vTzSwvEZI,1384
31
- vision_agent/utils/video.py,sha256=fOPR48-SuwMbE5eB5rc2F7lVo6k1mVHn26eEJ0QCslc,5602
32
- vision_agent-0.2.186.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
33
- vision_agent-0.2.186.dist-info/METADATA,sha256=NQfESIRsq9-QWyPzNkyv6dSuRS6TGe5D2tZH4iJpeBU,18328
34
- vision_agent-0.2.186.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
35
- vision_agent-0.2.186.dist-info/RECORD,,
31
+ vision_agent/utils/video.py,sha256=tRcGp4vEnaDycigL1hBO9k0FBPtDH35fCQciVr9GqYI,6013
32
+ vision_agent-0.2.188.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
33
+ vision_agent-0.2.188.dist-info/METADATA,sha256=CoqVIiF9B_0k4j9NQtyR8RLQ6cRPByvP0CWfmALRz4A,18328
34
+ vision_agent-0.2.188.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
35
+ vision_agent-0.2.188.dist-info/RECORD,,