Error Log:
future: <Task finished coro=<InsDroneExtension._capture_frame() done, defined at e:\insov\inssimulation\exts\ins.sim.drone\ins\sim\drone\extension.py:160> exception=ValueError(‘cannot reshape array of size 0 into shape (0,0,newaxis)’)>
Traceback (most recent call last):
File “e:\insov\inssimulation\exts\ins.sim.drone\ins\sim\drone\extension.py”, line 165, in _capture_frame
data = syn.sensors.get_rgb(vp)
File “e:\insov\inssimulation\app\extscore\omni.syntheticdata\omni\syntheticdata\scripts\sensors.py”, line 108, in get_rgb
return np.frombuffer(data, np.uint8).reshape(h, w, -1)
ValueError: cannot reshape array of size 0 into shape (0,0,newaxis)
code:
self._render_sub = self._usd_context.get_rendering_event_stream(
).create_subscription_to_push_by_type(int(
omni.usd.StageRenderingEventType.NEW_FRAME),
self._on_render,
name="ins drone render event",
order=10000)
async def _capture_frame(self, vp, vp_name):
global frame_count
# await self._usd_context.next_frame_async(vp.get_id())
await syn.sensors.next_sensor_data_async(vp.get_id())
data = syn.sensors.get_rgb(vp)
outFile = pathlib.Path(
self._capture_save_dir).joinpath(vp_name + "_" + str(frame_count) +
".png")
cv2.imwrite(str(outFile), cv2.cvtColor(data, cv2.COLOR_RGB2BGR))
print(f"capture frame:{frame_count} ")
frame_count = frame_count + 1
def _on_render(self, render_event):
global loop_count
if not omni.timeline.get_timeline_interface().is_playing():
return
frameNo = render_event.payload["frame_number"]
viewId = render_event.payload["viewport_handle"]
for viewport in view_port_factory.get_instance_list():
vp = view_port_factory.get_viewport_window(viewport)
vp_name = view_port_factory.get_viewport_window_name(viewport)
if vp.get_id() == viewId:
print(
f"Exec python frame:{frameNo} completed loop:{loop_count} id:{viewId} vp_name:{vp_name} "
)
asyncio.ensure_future(self._capture_frame(vp, vp_name))
loop_count = loop_count + 1
sometimes it works well, sometimes print this error log, how can I fix this?