diff --git a/frigate/detectors/plugins/hailo8l.py b/frigate/detectors/plugins/hailo8l.py index ffadf0fdb..d4ef40d62 100755 --- a/frigate/detectors/plugins/hailo8l.py +++ b/frigate/detectors/plugins/hailo8l.py @@ -175,6 +175,7 @@ class HailoAsyncInference: return self.hef.get_input_vstream_infos()[0].shape def run(self) -> None: + job = None with self.infer_model.configure() as configured_infer_model: while True: batch_data = self.input_store.get() @@ -202,7 +203,9 @@ class HailoAsyncInference: bindings_list=bindings_list, ), ) - job.wait(100) + + if job is not None: + job.wait(100) # ----------------- HailoDetector Class ----------------- # diff --git a/frigate/stats/util.py b/frigate/stats/util.py index c372c2ecc..72f76c07e 100644 --- a/frigate/stats/util.py +++ b/frigate/stats/util.py @@ -24,6 +24,7 @@ from frigate.util.services import ( get_intel_gpu_stats, get_jetson_stats, get_nvidia_gpu_stats, + get_rockchip_gpu_stats, get_rockchip_npu_stats, is_vaapi_amd_driver, ) @@ -232,6 +233,11 @@ async def set_gpu_stats( else: stats["intel-vaapi"] = {"gpu": "", "mem": ""} hwaccel_errors.append(args) + elif "preset-rk" in args: + rga_usage = get_rockchip_gpu_stats() + + if rga_usage: + stats["rockchip"] = rga_usage elif "v4l2m2m" in args or "rpi" in args: # RPi v4l2m2m is currently not able to get usage stats stats["rpi-v4l2m2m"] = {"gpu": "", "mem": ""} diff --git a/frigate/util/services.py b/frigate/util/services.py index fb0e80bdd..7210837ff 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -382,8 +382,29 @@ def get_intel_gpu_stats(sriov: bool) -> dict[str, str]: return results +def get_rockchip_gpu_stats() -> dict[str, str]: + """Get GPU stats using rk.""" + try: + with open("/sys/kernel/debug/rkrga/load", "r") as f: + content = f.read() + except FileNotFoundError: + return None + + load_values = [] + for line in content.splitlines(): + match = re.search(r"load = (\d+)%", line) + if match: + load_values.append(int(match.group(1))) + + if not load_values: + return None + + average_load = f"{round(sum(load_values) / len(load_values), 2)}%" + return {"gpu": average_load, "mem": "-"} + + def get_rockchip_npu_stats() -> dict[str, str]: - """Get stats using rk.""" + """Get NPU stats using rk.""" try: with open("/sys/kernel/debug/rknpu/load", "r") as f: npu_output = f.read() diff --git a/web/src/components/Statusbar.tsx b/web/src/components/Statusbar.tsx index 2b03b750d..0ac6d10a4 100644 --- a/web/src/components/Statusbar.tsx +++ b/web/src/components/Statusbar.tsx @@ -101,6 +101,9 @@ export default function Statusbar() { case "intel-qsv": gpuTitle = "Intel GPU"; break; + case "rockchip": + gpuTitle = "Rockchip GPU"; + break; default: gpuTitle = name; break;