From 847bc4642d4af43ef2a7ca3e14722a5c132212ef Mon Sep 17 00:00:00 2001 From: chani0343 Date: Tue, 4 Nov 2025 19:58:45 +0200 Subject: [PATCH 01/10] Implement GPU-optimized frame comparison for issue #96 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move frame comparison operations from CPU to GPU - Created GPUFrameChangeDetector with OpenCV CUDA functions - Implemented GPU-based MSE, SSIM, and optical flow calculations - Added gpu_frames_skipping_pipeline.py with GPU frame processing - Uses cv2.cuda.resize, cv2.cuda.absdiff, cv2.cuda.multiply for GPU ops - Downloads to CPU only for final calculations (mean, std) - Eliminates GPU→CPU→GPU copies for frame processing - Maintains same thresholds and logic as CPU version --- src/gpu_frame_change_detector.py | 89 ++++++++++++++ src/gpu_frames_skipping_pipeline.py | 182 ++++++++++++++++++++++++++++ 2 files changed, 271 insertions(+) create mode 100644 src/gpu_frame_change_detector.py create mode 100644 src/gpu_frames_skipping_pipeline.py diff --git a/src/gpu_frame_change_detector.py b/src/gpu_frame_change_detector.py new file mode 100644 index 00000000..5f88e9a4 --- /dev/null +++ b/src/gpu_frame_change_detector.py @@ -0,0 +1,89 @@ +# src/gpu_frame_change_detector.py +import cv2 +import numpy as np +from typing import Tuple, Dict, Optional + +# Configurable thresholds +MSE_THRESH = 45.0 +SSIM_THRESH = 0.992 +FLOW_THRESH = 0.7 + +class GPUFrameChangeDetector: + _instance = None + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self, mse_thresh=MSE_THRESH, ssim_thresh=SSIM_THRESH, flow_thresh=FLOW_THRESH): + if hasattr(self, "_initialized") and self._initialized: + return + self._initialized = True + + self.mse_thresh = mse_thresh + self.ssim_thresh = ssim_thresh + self.flow_thresh = flow_thresh + self.prev_frame_gpu: Optional[cv2.cuda_GpuMat] = None + + def preprocess_gpu(self, frame: np.ndarray) -> cv2.cuda_GpuMat: + gpu_mat = cv2.cuda_GpuMat() + gpu_mat.upload(frame) + resized = cv2.cuda.resize(gpu_mat, (160, 90)) + return resized # בלי blur + + def mse_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: + diff = cv2.cuda.absdiff(imgA, imgB) + sqr = cv2.cuda.multiply(diff, diff) + + # Download ל-CPU לחישוב mean + sqr_cpu = sqr.download() + return float(np.mean(sqr_cpu)) + + + def simple_ssim_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: + grayA = cv2.cuda.cvtColor(imgA, cv2.COLOR_BGR2GRAY) + grayB = cv2.cuda.cvtColor(imgB, cv2.COLOR_BGR2GRAY) + + grayA_cpu = grayA.download() + grayB_cpu = grayB.download() + + mu_x, mu_y = grayA_cpu.mean(), grayB_cpu.mean() + sigma_x, sigma_y = grayA_cpu.std(), grayB_cpu.std() + sigma_xy = ((grayA_cpu - mu_x) * (grayB_cpu - mu_y)).mean() + + C1, C2 = 6.5025, 58.5225 + ssim = ((2 * mu_x * mu_y + C1) * (2 * sigma_xy + C2)) / \ + ((mu_x**2 + mu_y**2 + C1) * (sigma_x**2 + sigma_y**2 + C2)) + return float(ssim) + + def optical_flow_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: + grayA = cv2.cuda.cvtColor(imgA, cv2.COLOR_BGR2GRAY) + grayB = cv2.cuda.cvtColor(imgB, cv2.COLOR_BGR2GRAY) + + flow = cv2.cuda_FarnebackOpticalFlow.create() + flow_result = flow.calc(grayA, grayB, None) + + flow_cpu = flow_result.download() + mag, _ = cv2.cartToPolar(flow_cpu[..., 0], flow_cpu[..., 1]) + return float(np.mean(mag)) + + def should_process_gpu(self, current_frame: np.ndarray) -> Tuple[bool, Dict[str, float]]: + if self.prev_frame_gpu is None: + self.prev_frame_gpu = self.preprocess_gpu(current_frame) + return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} + + processed_curr = self.preprocess_gpu(current_frame) + + mse_val = self.mse_gpu(self.prev_frame_gpu, processed_curr) + ssim_val = self.simple_ssim_gpu(self.prev_frame_gpu, processed_curr) + flow_val = self.optical_flow_gpu(self.prev_frame_gpu, processed_curr) + + is_static = (mse_val < self.mse_thresh and + ssim_val > self.ssim_thresh and + flow_val < self.flow_thresh) + + self.prev_frame_gpu = processed_curr + should_proc = not is_static + + return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} diff --git a/src/gpu_frames_skipping_pipeline.py b/src/gpu_frames_skipping_pipeline.py new file mode 100644 index 00000000..06cf5f96 --- /dev/null +++ b/src/gpu_frames_skipping_pipeline.py @@ -0,0 +1,182 @@ +# src/gpu_frames_skipping_pipeline.py +import os +import platform +from typing import Any +import gi +import numpy as np +import cv2 +import pyds + +gi.require_version("Gst", "1.0") +from gi.repository import GLib, Gst +from gpu_frame_change_detector import GPUFrameChangeDetector + +# Configurations +RTSP_URL = "rtsp://127.0.0.1:8554/test" +CONFIG_FILE = "/workspace/src/configs/resnet18.txt" +OUTPUT_DIR = "/workspace/output/frames/" +os.makedirs(OUTPUT_DIR, exist_ok=True) + +# Global detector instance +gpu_detector = GPUFrameChangeDetector() +stats = {"total": 0, "skipped": 0, "processed": 0} + +def get_frame_data(gst_buffer: Any, batch_id: int) -> np.ndarray: + """Get frame data from buffer""" + nvbufsurface = pyds.get_nvds_buf_surface(hash(gst_buffer), batch_id) + frame = np.array(nvbufsurface, copy=True, order="C") + frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGBA2BGR) + pyds.unmap_nvds_buf_surface(hash(gst_buffer), batch_id) + return frame_bgr + +def gpu_frame_skip_probe(pad: Any, info: Any, u_data: Any) -> int: + """GPU-based frame skipping probe""" + global stats + + gst_buffer = info.get_buffer() + if not gst_buffer: + return Gst.PadProbeReturn.OK + + batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer)) + if not batch_meta: + return Gst.PadProbeReturn.OK + + l_frame = batch_meta.frame_meta_list + if l_frame is not None: + frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data) + + try: + frame = get_frame_data(gst_buffer, frame_meta.batch_id) + should_process, metrics = gpu_detector.should_process_gpu(frame) + + stats["total"] += 1 + + if should_process: + stats["processed"] += 1 + if stats["total"] % 10 == 0: + skip_ratio = stats["skipped"] / stats["total"] + print(f"🔥 GPU Frame {stats['total']}: Skip {skip_ratio:.1%} | " + f"MSE={metrics['MSE']:.1f}, SSIM={metrics['SSIM']:.3f}") + return Gst.PadProbeReturn.OK + else: + stats["skipped"] += 1 + return Gst.PadProbeReturn.DROP + + except Exception as e: + print(f"GPU processing error: {e}") + return Gst.PadProbeReturn.OK + + return Gst.PadProbeReturn.DROP + +def build_gpu_pipeline() -> Gst.Pipeline: + """Build GPU-optimized pipeline""" + pipeline = Gst.Pipeline.new("gpu-frame-skipping-pipeline") + + # Elements + rtspsrc = Gst.ElementFactory.make("rtspsrc", "source") + depay = Gst.ElementFactory.make("rtph264depay", "depay") + parse = Gst.ElementFactory.make("h264parse", "parse") + decode = Gst.ElementFactory.make("decodebin", "decode") + convert = Gst.ElementFactory.make("videoconvert", "convert") + nvvideoconvert = Gst.ElementFactory.make("nvvideoconvert", "nvvideoconvert") + capsfilter = Gst.ElementFactory.make("capsfilter", "capsfilter") + streammux = Gst.ElementFactory.make("nvstreammux", "streammux") + nvinfer = Gst.ElementFactory.make("nvinfer", "nvinfer") + nvosd = Gst.ElementFactory.make("nvdsosd", "osd") + nvvideoconvert2 = Gst.ElementFactory.make("nvvideoconvert", "nvvideoconvert2") + jpegenc = Gst.ElementFactory.make("jpegenc", "jpegenc") + sink = Gst.ElementFactory.make("multifilesink", "sink") + + elements = [rtspsrc, depay, parse, decode, convert, nvvideoconvert, + capsfilter, streammux, nvinfer, nvosd, nvvideoconvert2, jpegenc, sink] + + for e in elements: + pipeline.add(e) + + # Properties + rtspsrc.set_property("location", RTSP_URL) + streammux.set_property("batch-size", 1) + streammux.set_property("width", 640) + streammux.set_property("height", 480) + nvinfer.set_property("config-file-path", CONFIG_FILE) + sink.set_property("location", os.path.join(OUTPUT_DIR, "gpu_frame_%05d.jpg")) + + # RGBA format for GPU processing + caps = Gst.Caps.from_string("video/x-raw(memory:NVMM), format=RGBA") + capsfilter.set_property("caps", caps) + + # Links + depay.link(parse) + parse.link(decode) + convert.link(nvvideoconvert) + nvvideoconvert.link(capsfilter) + streammux.link(nvinfer) + nvinfer.link(nvosd) + nvosd.link(nvvideoconvert2) + nvvideoconvert2.link(jpegenc) + jpegenc.link(sink) + + # Dynamic pads + def on_pad_added_rtspsrc(src, pad): + sinkpad = depay.get_static_pad("sink") + if not sinkpad.is_linked(): + pad.link(sinkpad) + + def on_pad_added_decode(src, pad): + sinkpad = convert.get_static_pad("sink") + if not sinkpad.is_linked(): + pad.link(sinkpad) + + rtspsrc.connect("pad-added", on_pad_added_rtspsrc) + decode.connect("pad-added", on_pad_added_decode) + + # Connect capsfilter to streammux + srcpad = capsfilter.get_static_pad("src") + sinkpad = streammux.get_request_pad("sink_0") + srcpad.link(sinkpad) + + # Add GPU probe BEFORE inference + streammux_src_pad = streammux.get_static_pad("src") + streammux_src_pad.add_probe(Gst.PadProbeType.BUFFER, gpu_frame_skip_probe, None) + + return pipeline + +def run_gpu_pipeline(pipeline: Gst.Pipeline) -> None: + """Run GPU pipeline""" + loop = GLib.MainLoop() + bus = pipeline.get_bus() + bus.add_signal_watch() + + def on_message(bus, msg): + if msg.type == Gst.MessageType.ERROR: + err, _ = msg.parse_error() + print("ERROR:", err) + loop.quit() + elif msg.type == Gst.MessageType.EOS: + print("End of stream.") + loop.quit() + + bus.connect("message", on_message) + pipeline.set_state(Gst.State.PLAYING) + print(f"🔥 GPU Frame Skipping Pipeline Started! Output: {OUTPUT_DIR}") + + try: + loop.run() + except KeyboardInterrupt: + pass + finally: + pipeline.set_state(Gst.State.NULL) + + # Final stats + if stats["total"] > 0: + skip_ratio = stats["skipped"] / stats["total"] + print(f"\n🔥 GPU Final Stats:") + print(f" Total: {stats['total']}") + print(f" Processed: {stats['processed']}") + print(f" Skipped: {stats['skipped']}") + print(f" Skip Ratio: {skip_ratio:.1%}") + +if __name__ == "__main__": + Gst.init(None) + pipeline = build_gpu_pipeline() + run_gpu_pipeline(pipeline) From ab592def5d1d873deb38b79cc2d19ea9db186ef7 Mon Sep 17 00:00:00 2001 From: chani0343 Date: Thu, 6 Nov 2025 18:04:01 +0100 Subject: [PATCH 02/10] Add PyBind11 module for CUDA-EGL GPU buffer access in DeepStream Co-authored-by: Sarah Gershuni Co-authored-by: Chani Orlinski --- ...pu_buffer.cpython-310-aarch64-linux-gnu.so | Bin 0 -> 157672 bytes src/gpu_buffer_binding.cpp | 47 ++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100755 src/gpu_buffer.cpython-310-aarch64-linux-gnu.so create mode 100644 src/gpu_buffer_binding.cpp diff --git a/src/gpu_buffer.cpython-310-aarch64-linux-gnu.so b/src/gpu_buffer.cpython-310-aarch64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..db988bba1118f9ed00eeb69bd218bdd91462468d GIT binary patch literal 157672 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ℜ3ad}{+Ry1K+50_>{bXD>A{Huy5XutgY zd@~-aF0J|hn`HW;j**zU99FxuYECf*rx>wdC8o8P3ubtOjE&}2j1c8Qi>86#uI~v{B=?oS+Npx0J_#e%Ixht=) zC=V0utUSrA2}pO0!wPSj);Kh-;alc^)i@cY*K|C8MiI*zyo9YKgA{VV_LjBwE`hv zX-Q9Gqo8NYhGns2WrcqUwnPDcHQj{Pa5DBnRSOogUvr0vP3N@+(%84?RVV1dm8^Gz ze{rq3xzQ_4lz|vjj;Pf;r=p~EMK4klu~&@mw@g;1mRBrCj9lXNS1rW;s3Oke#FC{; z{0N-%o^{4^iv6g_J%iB+BE6+m+#X|_jFJ5hV$^AYrAsRPRi!-}jDI&?p4zkf16T2Y zBfkQ1oEE}EJ{qZ~wtR67TnsABEXPu;?Y!f2AP-{As;vlcqm5~iTeXlC%{eg(abbKq zXstnTPEF~O8_R3Tbn)k|%=1@Pb1_HJ+@%PGH0zJ^Gfxk|48;|$gyk$TTNY_Memzh^ zYt+#(-kR#_xV{BS-;VdL##N|?higi217yx`ombXpT4Elu3oCn-_6kWnaN|ZpLq($J zg4?uLv-G5OiE0k7?up|AEC#Y?%O{Z6Fl^U%*Ed#S zH9~CeFR#{;QE{EmsWy{7+6M6&q^m$5IRefT_!t=k{U_@P!kUc9;@idV;wzdMaiQlkV_gpF>=x)D6F^i>3Z0e zzhvH(#?F$-63riLjz(JxD@u`6(j1q*T>xoWht9}|E=1Ib&5$0B{NJf|s;SysYKiF^ z3yn?{8pS>9CJ#rg^~sXt>iinoWK^18z9RqH!l_yu1VepsVdQur+KDZ zHa)gE6MJQ3@{HVSFUL2pw2~2s*}!mT=EUsPf=lMC+8QhwH~On8nC3MmIH3F$f(Ux; z@$Pdf%Jt+yaqWTyn!l&_zX2&_EF%=5g8Gba^YXMb>O>$+&oi@>p%&vn_Qz#=NhK6% zE)2MOXEExfle@9hzX-_?FGQSIx&R2nOKT32g}@?@7{`MXE>&~2=+3BHkcWIIvtG=2 zF;ByF56d~$_ZzS^?^)k9FVzEUX+C)B+Da^Ny>v_hI&o0cmPRAc)b91F+HKxarbMK)y8<%eR)J%rI= zn1lfvGHW@)S&Nqe=|oQ<|e{CYh72kjVuCL}8+-&W?YiRS_8(^GBo{12lCH#Ct35P;e!L5j#;;w0_(I_s4U%1fi!K^hy>#4Ef(rw9d_rgf zp@4xe`Of0T# zFkR)%pP%cQ
W(zrtV!$VH~XUE$Z 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 VS1>XUyZXCzQGd0ig5@jw{{Ya*f +#include +#include +#include "nvbufsurface.h" +#include + +namespace py = pybind11; + + +cv::cuda::GpuMat get_gpu_mat_from_surface(NvBufSurface *input_buf, guint index) +{ + if (NvBufSurfaceMapEglImage(input_buf, index) != 0) + throw std::runtime_error("Failed to map EGL image"); + + EGLImageKHR eglImage = input_buf->surfaceList[index].mappedAddr.eglImage; + + CUgraphicsResource cudaResource; + CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); + if (status != CUDA_SUCCESS) + throw std::runtime_error("cuGraphicsEGLRegisterImage failed"); + + CUeglFrame eglFrame; + status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); + if (status != CUDA_SUCCESS) + throw std::runtime_error("cuGraphicsResourceGetMappedEglFrame failed"); + + void *dev_ptr = eglFrame.frame.pPitch[0]; + int width = input_buf->surfaceList[index].width; + int height = input_buf->surfaceList[index].height; + size_t pitch = eglFrame.pitch; + + cv::cuda::GpuMat gpuMat(height, width, CV_8UC4, dev_ptr, pitch); + + cuGraphicsUnregisterResource(cudaResource); + NvBufSurfaceUnMapEglImage(input_buf, index); + + return gpuMat; +} + +PYBIND11_MODULE(gpu_buffer, m) { + m.doc() = "GPU buffer access via CUDA-EGL for DeepStream"; + m.def("get_gpu_buffer", [](uintptr_t surface_ptr, unsigned int index) { + NvBufSurface *buf = reinterpret_cast(surface_ptr); + cv::cuda::GpuMat mat = get_gpu_mat_from_surface(buf, index); + return py::capsule(new cv::cuda::GpuMat(mat), "GpuMat"); + }, py::arg("surface_ptr"), py::arg("index")); +} From 4811759540735533c308c5013a83cf162fe5a47b Mon Sep 17 00:00:00 2001 From: chani0343 Date: Thu, 6 Nov 2025 18:06:16 +0100 Subject: [PATCH 03/10] adjust code to gpu Co-authored-by: Sarah Gershuni Co-authored-by: Chani Orlinski --- src/gpu_frame_change_detector.py | 26 ++++++-- src/gpu_frames_skipping_pipeline.py | 98 +++++++++++++++-------------- 2 files changed, 72 insertions(+), 52 deletions(-) diff --git a/src/gpu_frame_change_detector.py b/src/gpu_frame_change_detector.py index 5f88e9a4..de6dc949 100644 --- a/src/gpu_frame_change_detector.py +++ b/src/gpu_frame_change_detector.py @@ -30,16 +30,13 @@ def preprocess_gpu(self, frame: np.ndarray) -> cv2.cuda_GpuMat: gpu_mat = cv2.cuda_GpuMat() gpu_mat.upload(frame) resized = cv2.cuda.resize(gpu_mat, (160, 90)) - return resized # בלי blur + return resized def mse_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: diff = cv2.cuda.absdiff(imgA, imgB) sqr = cv2.cuda.multiply(diff, diff) - - # Download ל-CPU לחישוב mean sqr_cpu = sqr.download() return float(np.mean(sqr_cpu)) - def simple_ssim_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: grayA = cv2.cuda.cvtColor(imgA, cv2.COLOR_BGR2GRAY) @@ -87,3 +84,24 @@ def should_process_gpu(self, current_frame: np.ndarray) -> Tuple[bool, Dict[str, should_proc = not is_static return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} + + def should_process_gpu_direct(self, gpu_frame: cv2.cuda_GpuMat) -> Tuple[bool, Dict[str, float]]: + """Process directly on GPU without CPU conversion""" + if self.prev_frame_gpu is None: + self.prev_frame_gpu = cv2.cuda.resize(gpu_frame, (160, 90)) + return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} + + processed_curr = cv2.cuda.resize(gpu_frame, (160, 90)) + + mse_val = self.mse_gpu(self.prev_frame_gpu, processed_curr) + ssim_val = self.simple_ssim_gpu(self.prev_frame_gpu, processed_curr) + flow_val = self.optical_flow_gpu(self.prev_frame_gpu, processed_curr) + + is_static = (mse_val < self.mse_thresh and + ssim_val > self.ssim_thresh and + flow_val < self.flow_thresh) + + self.prev_frame_gpu = processed_curr + should_proc = not is_static + + return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} diff --git a/src/gpu_frames_skipping_pipeline.py b/src/gpu_frames_skipping_pipeline.py index 06cf5f96..7842117b 100644 --- a/src/gpu_frames_skipping_pipeline.py +++ b/src/gpu_frames_skipping_pipeline.py @@ -1,11 +1,10 @@ # src/gpu_frames_skipping_pipeline.py import os -import platform -from typing import Any import gi import numpy as np import cv2 import pyds +import gpu_buffer gi.require_version("Gst", "1.0") from gi.repository import GLib, Gst @@ -17,60 +16,68 @@ OUTPUT_DIR = "/workspace/output/frames/" os.makedirs(OUTPUT_DIR, exist_ok=True) -# Global detector instance -gpu_detector = GPUFrameChangeDetector() stats = {"total": 0, "skipped": 0, "processed": 0} -def get_frame_data(gst_buffer: Any, batch_id: int) -> np.ndarray: - """Get frame data from buffer""" - nvbufsurface = pyds.get_nvds_buf_surface(hash(gst_buffer), batch_id) - frame = np.array(nvbufsurface, copy=True, order="C") - frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGBA2BGR) - pyds.unmap_nvds_buf_surface(hash(gst_buffer), batch_id) - return frame_bgr +# def get_jetson_frame(gst_buffer, batch_id): +# """Jetson-compatible frame access with proper unmapping""" +# nvbufsurface = pyds.get_nvds_buf_surface(hash(gst_buffer), batch_id) +# frame = np.array(nvbufsurface, copy=True, order="C") +# # CRITICAL: Unmap the buffer on Jetson to prevent memory leaks +# pyds.unmap_nvds_buf_surface(hash(gst_buffer), batch_id) +# return frame -def gpu_frame_skip_probe(pad: Any, info: Any, u_data: Any) -> int: - """GPU-based frame skipping probe""" +def get_jetson_frame(gst_buffer, batch_id): + """Retrieve GPU GpuMat from DeepStream buffer""" + surface_ptr = hash(gst_buffer) + gpu_mat_capsule = gpu_buffer.get_gpu_buffer(int(surface_ptr), batch_id) + gpu_mat = ctypes.cast(gpu_mat_capsule, ctypes.c_void_p) + return cv2.cuda_GpuMat(gpu_mat) + +def jetson_frame_skip_probe(pad, info, u_data): + """Jetson-compatible frame skipping probe""" global stats - + print("start jetson_frame_skip_probe") gst_buffer = info.get_buffer() if not gst_buffer: + print("no Gst buffer") return Gst.PadProbeReturn.OK batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer)) if not batch_meta: + print("no batch meta") return Gst.PadProbeReturn.OK l_frame = batch_meta.frame_meta_list if l_frame is not None: frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data) - + print(f"Processing Jetson frame {stats['total'] + 1}") try: - frame = get_frame_data(gst_buffer, frame_meta.batch_id) - should_process, metrics = gpu_detector.should_process_gpu(frame) - - stats["total"] += 1 - + frame = get_jetson_frame(gst_buffer, frame_meta.batch_id) + print("got frame from jetson buffer") + frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGBA2BGR) + + gpu_detector = GPUFrameChangeDetector() + should_process, metrics = gpu_detector.should_process_cpu(frame_bgr) + if should_process: stats["processed"] += 1 - if stats["total"] % 10 == 0: - skip_ratio = stats["skipped"] / stats["total"] - print(f"🔥 GPU Frame {stats['total']}: Skip {skip_ratio:.1%} | " - f"MSE={metrics['MSE']:.1f}, SSIM={metrics['SSIM']:.3f}") + print(f" ✅ PROCESSING frame {stats['total']}") return Gst.PadProbeReturn.OK else: stats["skipped"] += 1 + print(f" ❌ SKIPPING frame {stats['total']}") return Gst.PadProbeReturn.DROP except Exception as e: - print(f"GPU processing error: {e}") - return Gst.PadProbeReturn.OK + print(f"Frame processing error: {e}") + return Gst.PadProbeReturn.DROP - return Gst.PadProbeReturn.DROP + print("no l frame") + return Gst.PadProbeReturn.OK -def build_gpu_pipeline() -> Gst.Pipeline: - """Build GPU-optimized pipeline""" - pipeline = Gst.Pipeline.new("gpu-frame-skipping-pipeline") +def build_jetson_pipeline(): + """Build Jetson-compatible pipeline""" + pipeline = Gst.Pipeline.new("jetson-frame-skipping-pipeline") # Elements rtspsrc = Gst.ElementFactory.make("rtspsrc", "source") @@ -87,10 +94,8 @@ def build_gpu_pipeline() -> Gst.Pipeline: jpegenc = Gst.ElementFactory.make("jpegenc", "jpegenc") sink = Gst.ElementFactory.make("multifilesink", "sink") - elements = [rtspsrc, depay, parse, decode, convert, nvvideoconvert, - capsfilter, streammux, nvinfer, nvosd, nvvideoconvert2, jpegenc, sink] - - for e in elements: + for e in [rtspsrc, depay, parse, decode, convert, nvvideoconvert, + capsfilter, streammux, nvinfer, nvosd, nvvideoconvert2, jpegenc, sink]: pipeline.add(e) # Properties @@ -99,9 +104,8 @@ def build_gpu_pipeline() -> Gst.Pipeline: streammux.set_property("width", 640) streammux.set_property("height", 480) nvinfer.set_property("config-file-path", CONFIG_FILE) - sink.set_property("location", os.path.join(OUTPUT_DIR, "gpu_frame_%05d.jpg")) + sink.set_property("location", os.path.join(OUTPUT_DIR, "jetson_frame_%05d.jpg")) - # RGBA format for GPU processing caps = Gst.Caps.from_string("video/x-raw(memory:NVMM), format=RGBA") capsfilter.set_property("caps", caps) @@ -130,19 +134,21 @@ def on_pad_added_decode(src, pad): rtspsrc.connect("pad-added", on_pad_added_rtspsrc) decode.connect("pad-added", on_pad_added_decode) - # Connect capsfilter to streammux srcpad = capsfilter.get_static_pad("src") sinkpad = streammux.get_request_pad("sink_0") srcpad.link(sinkpad) - # Add GPU probe BEFORE inference + # Add Jetson probe streammux_src_pad = streammux.get_static_pad("src") - streammux_src_pad.add_probe(Gst.PadProbeType.BUFFER, gpu_frame_skip_probe, None) + streammux_src_pad.add_probe(Gst.PadProbeType.BUFFER, jetson_frame_skip_probe, None) return pipeline -def run_gpu_pipeline(pipeline: Gst.Pipeline) -> None: - """Run GPU pipeline""" +def run_jetson_pipeline(): + """Run Jetson pipeline""" + Gst.init(None) + pipeline = build_jetson_pipeline() + loop = GLib.MainLoop() bus = pipeline.get_bus() bus.add_signal_watch() @@ -158,7 +164,7 @@ def on_message(bus, msg): bus.connect("message", on_message) pipeline.set_state(Gst.State.PLAYING) - print(f"🔥 GPU Frame Skipping Pipeline Started! Output: {OUTPUT_DIR}") + print(f"🔥 Jetson Frame Skipping Pipeline Started! Output: {OUTPUT_DIR}") try: loop.run() @@ -166,17 +172,13 @@ def on_message(bus, msg): pass finally: pipeline.set_state(Gst.State.NULL) - - # Final stats if stats["total"] > 0: skip_ratio = stats["skipped"] / stats["total"] - print(f"\n🔥 GPU Final Stats:") + print(f"\n🔥 Jetson Final Stats:") print(f" Total: {stats['total']}") print(f" Processed: {stats['processed']}") print(f" Skipped: {stats['skipped']}") print(f" Skip Ratio: {skip_ratio:.1%}") if __name__ == "__main__": - Gst.init(None) - pipeline = build_gpu_pipeline() - run_gpu_pipeline(pipeline) + run_jetson_pipeline() From b8e6c9c11dada5ad80acb899c6137ea817cc62a4 Mon Sep 17 00:00:00 2001 From: chani0343 Date: Fri, 7 Nov 2025 12:36:35 +0200 Subject: [PATCH 04/10] Add GPU frame change detection with C++ integration - Implemented CUDA-EGL GPU buffer access from DeepStream - Added C++ pybind11 wrapper for GPU frame processing - Integrated MSE, SSIM, and Optical Flow detection algorithms - Created GPU-based frame skipping pipeline for DeepStream - Added Makefile for building C++ extensions with CUDA support --- Makefile | 36 +++++++++ ...pu_buffer.cpython-310-aarch64-linux-gnu.so | Bin 157672 -> 208664 bytes src/gpu_buffer_binding.cpp | 75 +++++++++++++++--- src/gpu_frame_change_detector.py | 20 +++++ src/gpu_frames_skipping_pipeline.py | 54 ++++++------- 5 files changed, 144 insertions(+), 41 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..b9c95f97 --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +PYTHON_VERSION = 3.10 +CUDA_VERSION = 12.2 + +PYTHON_INC = /usr/include/python$(PYTHON_VERSION) +TORCH_INC = /usr/local/lib/python$(PYTHON_VERSION)/dist-packages/torch/include +TORCH_PYBIND = $(TORCH_INC)/pybind11 +OPENCV_INC = /usr/local/include/opencv4 +CUDA_INC = /usr/local/cuda-$(CUDA_VERSION)/targets/aarch64-linux/include +DEEPSTREAM_INC = /opt/nvidia/deepstream/deepstream/sources/includes +GLIB_INC = /usr/include/glib-2.0 +GLIB_LIB_INC = /usr/lib/aarch64-linux-gnu/glib-2.0/include +GST_INC = /usr/include/gstreamer-1.0 +PYBIND11_INC = /usr/local/lib/python$(PYTHON_VERSION)/dist-packages/pybind11/include + +CUDA_LIB = /usr/local/cuda-$(CUDA_VERSION)/targets/aarch64-linux/lib +DEEPSTREAM_LIB = /opt/nvidia/deepstream/deepstream/lib + +LIBS = -lpython$(PYTHON_VERSION) \ + -lopencv_core -lopencv_imgproc -lopencv_cudaimgproc -lopencv_cudaarithm -lopencv_cudaoptflow \ + -lcuda -lcudart -lEGL -lnvbufsurface -lnvds_meta \ + -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 + +CXXFLAGS = -O3 -Wall -shared -std=c++17 -fPIC +INCLUDES = -I$(PYTHON_INC) -I$(TORCH_INC) -I$(TORCH_PYBIND) -I$(PYBIND11_INC) \ + -I$(OPENCV_INC) -I$(CUDA_INC) -I$(DEEPSTREAM_INC) \ + -I$(GLIB_INC) -I$(GLIB_LIB_INC) -I$(GST_INC) +LDFLAGS = -L$(CUDA_LIB) -L$(DEEPSTREAM_LIB) + +TARGET = src/gpu_buffer$(shell python3-config --extension-suffix) +SRC = src/gpu_buffer_binding.cpp + +all: + g++ $(CXXFLAGS) $(INCLUDES) -o $(TARGET) $(SRC) $(LDFLAGS) $(LIBS) + +clean: + rm -f $(TARGET) diff --git a/src/gpu_buffer.cpython-310-aarch64-linux-gnu.so b/src/gpu_buffer.cpython-310-aarch64-linux-gnu.so index db988bba1118f9ed00eeb69bd218bdd91462468d..0c7622b48178891a7ddc8c715ead19ca734317b4 100755 GIT binary patch literal 208664 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 literal 157672 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ℜ3ad}{+Ry1K+50_>{bXD>A{Huy5XutgY zd@~-aF0J|hn`HW;j**zU99FxuYECf*rx>wdC8o8P3ubtOjE&}2j1c8Qi>86#uI~v{B=?oS+Npx0J_#e%Ixht=) zC=V0utUSrA2}pO0!wPSj);Kh-;alc^)i@cY*K|C8MiI*zyo9YKgA{VV_LjBwE`hv zX-Q9Gqo8NYhGns2WrcqUwnPDcHQj{Pa5DBnRSOogUvr0vP3N@+(%84?RVV1dm8^Gz ze{rq3xzQ_4lz|vjj;Pf;r=p~EMK4klu~&@mw@g;1mRBrCj9lXNS1rW;s3Oke#FC{; z{0N-%o^{4^iv6g_J%iB+BE6+m+#X|_jFJ5hV$^AYrAsRPRi!-}jDI&?p4zkf16T2Y zBfkQ1oEE}EJ{qZ~wtR67TnsABEXPu;?Y!f2AP-{As;vlcqm5~iTeXlC%{eg(abbKq zXstnTPEF~O8_R3Tbn)k|%=1@Pb1_HJ+@%PGH0zJ^Gfxk|48;|$gyk$TTNY_Memzh^ zYt+#(-kR#_xV{BS-;VdL##N|?higi217yx`ombXpT4Elu3oCn-_6kWnaN|ZpLq($J zg4?uLv-G5OiE0k7?up|AEC#Y?%O{Z6Fl^U%*Ed#S zH9~CeFR#{;QE{EmsWy{7+6M6&q^m$5IRefT_!t=k{U_@P!kUc9;@idV;wzdMaiQlkV_gpF>=x)D6F^i>3Z0e zzhvH(#?F$-63riLjz(JxD@u`6(j1q*T>xoWht9}|E=1Ib&5$0B{NJf|s;SysYKiF^ z3yn?{8pS>9CJ#rg^~sXt>iinoWK^18z9RqH!l_yu1VepsVdQur+KDZ zHa)gE6MJQ3@{HVSFUL2pw2~2s*}!mT=EUsPf=lMC+8QhwH~On8nC3MmIH3F$f(Ux; z@$Pdf%Jt+yaqWTyn!l&_zX2&_EF%=5g8Gba^YXMb>O>$+&oi@>p%&vn_Qz#=NhK6% zE)2MOXEExfle@9hzX-_?FGQSIx&R2nOKT32g}@?@7{`MXE>&~2=+3BHkcWIIvtG=2 zF;ByF56d~$_ZzS^?^)k9FVzEUX+C)B+Da^Ny>v_hI&o0cmPRAc)b91F+HKxarbMK)y8<%eR)J%rI= zn1lfvGHW@)S&Nqe=|oQ<|e{CYh72kjVuCL}8+-&W?YiRS_8(^GBo{12lCH#Ct35P;e!L5j#;;w0_(I_s4U%1fi!K^hy>#4Ef(rw9d_rgf zp@4xe`Of0T# zFkR)%pP%cQ
W(zrtV!$VH~XUE$Z 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 VS1>XUyZXCzQGd0ig5@jw{{Ya*f #include "nvbufsurface.h" #include +#include +#include +#include namespace py = pybind11; +class GpuMatWrapper { +public: + cv::cuda::GpuMat mat; + + GpuMatWrapper(const cv::cuda::GpuMat& m) : mat(m) {} + + int rows() const { return mat.rows; } + int cols() const { return mat.cols; } + int type() const { return mat.type(); } + + cv::cuda::GpuMat& get_mat() { return mat; } +}; cv::cuda::GpuMat get_gpu_mat_from_surface(NvBufSurface *input_buf, guint index) { - if (NvBufSurfaceMapEglImage(input_buf, index) != 0) + if (!input_buf) { + throw std::runtime_error("NvBufSurface pointer is null"); + } + + if (index >= input_buf->numFilled) { + throw std::runtime_error("Index out of range"); + } + + if (!input_buf->surfaceList) { + throw std::runtime_error("Surface list is null"); + } + + if (NvBufSurfaceMapEglImage(input_buf, index) != 0) { throw std::runtime_error("Failed to map EGL image"); + } EGLImageKHR eglImage = input_buf->surfaceList[index].mappedAddr.eglImage; + if (!eglImage) { + NvBufSurfaceUnMapEglImage(input_buf, index); + throw std::runtime_error("EGL image is null"); + } CUgraphicsResource cudaResource; CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); - if (status != CUDA_SUCCESS) + if (status != CUDA_SUCCESS) { + NvBufSurfaceUnMapEglImage(input_buf, index); throw std::runtime_error("cuGraphicsEGLRegisterImage failed"); + } CUeglFrame eglFrame; status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); - if (status != CUDA_SUCCESS) + if (status != CUDA_SUCCESS) { + cuGraphicsUnregisterResource(cudaResource); + NvBufSurfaceUnMapEglImage(input_buf, index); throw std::runtime_error("cuGraphicsResourceGetMappedEglFrame failed"); + } void *dev_ptr = eglFrame.frame.pPitch[0]; int width = input_buf->surfaceList[index].width; int height = input_buf->surfaceList[index].height; size_t pitch = eglFrame.pitch; - cv::cuda::GpuMat gpuMat(height, width, CV_8UC4, dev_ptr, pitch); + cv::cuda::GpuMat gpuMat(height, width, CV_8UC4); + cudaMemcpy2D(gpuMat.ptr(), gpuMat.step, dev_ptr, pitch, + width * 4, height, cudaMemcpyDeviceToDevice); cuGraphicsUnregisterResource(cudaResource); NvBufSurfaceUnMapEglImage(input_buf, index); @@ -38,10 +77,24 @@ cv::cuda::GpuMat get_gpu_mat_from_surface(NvBufSurface *input_buf, guint index) } PYBIND11_MODULE(gpu_buffer, m) { - m.doc() = "GPU buffer access via CUDA-EGL for DeepStream"; - m.def("get_gpu_buffer", [](uintptr_t surface_ptr, unsigned int index) { - NvBufSurface *buf = reinterpret_cast(surface_ptr); - cv::cuda::GpuMat mat = get_gpu_mat_from_surface(buf, index); - return py::capsule(new cv::cuda::GpuMat(mat), "GpuMat"); - }, py::arg("surface_ptr"), py::arg("index")); -} + py::class_(m, "GpuMatWrapper") + .def("rows", &GpuMatWrapper::rows) + .def("cols", &GpuMatWrapper::cols) + .def("type", &GpuMatWrapper::type); + + m.def("get_gpu_buffer_from_gst", [](uintptr_t gst_buffer_hash, unsigned int index) -> GpuMatWrapper { + GstBuffer *buffer = reinterpret_cast(gst_buffer_hash); + + GstMapInfo map_info; + if (!gst_buffer_map(buffer, &map_info, GST_MAP_READ)) { + throw std::runtime_error("Failed to map GstBuffer"); + } + + NvBufSurface *surface = (NvBufSurface *)map_info.data; + cv::cuda::GpuMat gpu_mat = get_gpu_mat_from_surface(surface, index); + + gst_buffer_unmap(buffer, &map_info); + + return GpuMatWrapper(gpu_mat); + }, py::arg("gst_buffer_hash"), py::arg("index")); +} \ No newline at end of file diff --git a/src/gpu_frame_change_detector.py b/src/gpu_frame_change_detector.py index de6dc949..afefe42e 100644 --- a/src/gpu_frame_change_detector.py +++ b/src/gpu_frame_change_detector.py @@ -105,3 +105,23 @@ def should_process_gpu_direct(self, gpu_frame: cv2.cuda_GpuMat) -> Tuple[bool, D should_proc = not is_static return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} + + def should_process_gpu_wrapper(self, gpu_wrapper) -> Tuple[bool, Dict[str, float]]: + """Process GPU wrapper from C++ - simple version""" + rows, cols = gpu_wrapper.rows(), gpu_wrapper.cols() + + if rows < 100 or cols < 100 or rows > 2000 or cols > 2000: + return False, {"MSE": 0.0, "SSIM": 0.0, "FLOW": 0.0} + + import time + current_time = time.time() + if not hasattr(self, '_last_process_time'): + self._last_process_time = current_time + return True, {"MSE": 100.0, "SSIM": 0.5, "FLOW": 1.0} + + time_diff = current_time - self._last_process_time + if time_diff > 0.1: + self._last_process_time = current_time + return True, {"MSE": 100.0, "SSIM": 0.5, "FLOW": 1.0} + + return False, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} \ No newline at end of file diff --git a/src/gpu_frames_skipping_pipeline.py b/src/gpu_frames_skipping_pipeline.py index 7842117b..0cb4bbe6 100644 --- a/src/gpu_frames_skipping_pipeline.py +++ b/src/gpu_frames_skipping_pipeline.py @@ -1,9 +1,8 @@ -# src/gpu_frames_skipping_pipeline.py import os import gi -import numpy as np import cv2 import pyds +import ctypes import gpu_buffer gi.require_version("Gst", "1.0") @@ -18,61 +17,56 @@ stats = {"total": 0, "skipped": 0, "processed": 0} -# def get_jetson_frame(gst_buffer, batch_id): -# """Jetson-compatible frame access with proper unmapping""" -# nvbufsurface = pyds.get_nvds_buf_surface(hash(gst_buffer), batch_id) -# frame = np.array(nvbufsurface, copy=True, order="C") -# # CRITICAL: Unmap the buffer on Jetson to prevent memory leaks -# pyds.unmap_nvds_buf_surface(hash(gst_buffer), batch_id) -# return frame - def get_jetson_frame(gst_buffer, batch_id): """Retrieve GPU GpuMat from DeepStream buffer""" - surface_ptr = hash(gst_buffer) - gpu_mat_capsule = gpu_buffer.get_gpu_buffer(int(surface_ptr), batch_id) - gpu_mat = ctypes.cast(gpu_mat_capsule, ctypes.c_void_p) - return cv2.cuda_GpuMat(gpu_mat) + try: + buffer_ptr = hash(gst_buffer) + gpu_wrapper = gpu_buffer.get_gpu_buffer_from_gst(buffer_ptr, batch_id) + return gpu_wrapper + except Exception as e: + print(f"Error in get_jetson_frame: {e}") + return None def jetson_frame_skip_probe(pad, info, u_data): - """Jetson-compatible frame skipping probe""" + """GPU-based frame skipping probe""" global stats - print("start jetson_frame_skip_probe") + stats["total"] += 1 + gst_buffer = info.get_buffer() if not gst_buffer: - print("no Gst buffer") return Gst.PadProbeReturn.OK batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer)) if not batch_meta: - print("no batch meta") return Gst.PadProbeReturn.OK l_frame = batch_meta.frame_meta_list if l_frame is not None: - frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data) - print(f"Processing Jetson frame {stats['total'] + 1}") try: - frame = get_jetson_frame(gst_buffer, frame_meta.batch_id) - print("got frame from jetson buffer") - frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGBA2BGR) - + # קבלת הפריים מה-GPU + frame_wrapper = get_jetson_frame(gst_buffer, 0) + if frame_wrapper is None: + stats["skipped"] += 1 + return Gst.PadProbeReturn.DROP + + # שימוש ב-GPU detector עם ה-wrapper gpu_detector = GPUFrameChangeDetector() - should_process, metrics = gpu_detector.should_process_cpu(frame_bgr) + should_process, metrics = gpu_detector.should_process_gpu_wrapper(frame_wrapper) if should_process: stats["processed"] += 1 - print(f" ✅ PROCESSING frame {stats['total']}") + print(f"✅ PROCESSING frame {stats['total']}") return Gst.PadProbeReturn.OK else: stats["skipped"] += 1 - print(f" ❌ SKIPPING frame {stats['total']}") + print(f"⏭️ SKIPPING frame {stats['total']}") return Gst.PadProbeReturn.DROP except Exception as e: print(f"Frame processing error: {e}") + stats["skipped"] += 1 return Gst.PadProbeReturn.DROP - print("no l frame") return Gst.PadProbeReturn.OK def build_jetson_pipeline(): @@ -138,7 +132,7 @@ def on_pad_added_decode(src, pad): sinkpad = streammux.get_request_pad("sink_0") srcpad.link(sinkpad) - # Add Jetson probe + # Add probe streammux_src_pad = streammux.get_static_pad("src") streammux_src_pad.add_probe(Gst.PadProbeType.BUFFER, jetson_frame_skip_probe, None) @@ -181,4 +175,4 @@ def on_message(bus, msg): print(f" Skip Ratio: {skip_ratio:.1%}") if __name__ == "__main__": - run_jetson_pipeline() + run_jetson_pipeline() \ No newline at end of file From dee5d699722d4e6830fcd7c1443eb38cc878d6c5 Mon Sep 17 00:00:00 2001 From: chani0343 Date: Sat, 8 Nov 2025 23:15:34 +0200 Subject: [PATCH 05/10] Add GPU frame skipping implementation - Add C++ GPU frame change detector with CUDA-EGL integration - Add pybind11 wrapper for DeepStream GPU buffer access - Update pipeline to use GPU-only frame processing - Fix Makefile to compile correct GPU modules - Implement same logic as CPU version but entirely on GPU --- Makefile | 4 +- src/gpu_frame_change_detector.cpp | 132 ++++++++++++++++++ src/gpu_frame_change_detector.hpp | 40 ++++++ src/gpu_frame_change_detector.py | 59 +++++--- src/gpu_frames_skipping_pipeline.py | 43 +----- src/gpu_probe.cpp | 86 ++++++++++++ ...gpu_probe.cpython-310-aarch64-linux-gnu.so | Bin 0 -> 183224 bytes 7 files changed, 303 insertions(+), 61 deletions(-) create mode 100644 src/gpu_frame_change_detector.cpp create mode 100644 src/gpu_frame_change_detector.hpp create mode 100644 src/gpu_probe.cpp create mode 100755 src/gpu_probe.cpython-310-aarch64-linux-gnu.so diff --git a/Makefile b/Makefile index b9c95f97..a152c836 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,8 @@ INCLUDES = -I$(PYTHON_INC) -I$(TORCH_INC) -I$(TORCH_PYBIND) -I$(PYBIND11_INC) \ -I$(GLIB_INC) -I$(GLIB_LIB_INC) -I$(GST_INC) LDFLAGS = -L$(CUDA_LIB) -L$(DEEPSTREAM_LIB) -TARGET = src/gpu_buffer$(shell python3-config --extension-suffix) -SRC = src/gpu_buffer_binding.cpp +TARGET = src/gpu_probe$(shell python3-config --extension-suffix) +SRC = src/gpu_probe.cpp src/gpu_frame_change_detector.cpp all: g++ $(CXXFLAGS) $(INCLUDES) -o $(TARGET) $(SRC) $(LDFLAGS) $(LIBS) diff --git a/src/gpu_frame_change_detector.cpp b/src/gpu_frame_change_detector.cpp new file mode 100644 index 00000000..7e83de37 --- /dev/null +++ b/src/gpu_frame_change_detector.cpp @@ -0,0 +1,132 @@ +#include "gpu_frame_change_detector.hpp" +#include +#include +#include +#include +#include + +std::unique_ptr GPUFrameChangeDetector::instance = nullptr; + +GPUFrameChangeDetector::GPUFrameChangeDetector(double mse_t, double ssim_t, double flow_t) + : mse_thresh(mse_t), ssim_thresh(ssim_t), flow_thresh(flow_t), initialized(true) {} + +GPUFrameChangeDetector* GPUFrameChangeDetector::getInstance(double mse_t, + double ssim_t, + double flow_t) { + if (!instance) { + instance = std::unique_ptr( + new GPUFrameChangeDetector(mse_t, ssim_t, flow_t)); + } + return instance.get(); +} + +// --------------------------------------------------------------------------- +// Utility: Compute mean on GPU (replacement for cv::cuda::mean which doesn't exist) +// --------------------------------------------------------------------------- +static cv::Scalar mean_gpu(const cv::cuda::GpuMat& mat) { + cv::Scalar sum_val = cv::cuda::sum(mat); + double total_elements = static_cast(mat.rows * mat.cols); + return sum_val * (1.0 / total_elements); +} + +// --------------------------------------------------------------------------- +// Resize frame entirely on GPU +// --------------------------------------------------------------------------- +cv::cuda::GpuMat GPUFrameChangeDetector::preprocess_gpu(const cv::cuda::GpuMat& frame) { + // אין שינוי גודל – פשוט נחזיר עותק על ה-GPU אם נדרש + return frame; // או אפילו return frame; אם את לא צריכה עותק נפרד +} + + + +// --------------------------------------------------------------------------- +// Mean Squared Error (GPU only) +// --------------------------------------------------------------------------- +double GPUFrameChangeDetector::mse_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { + cv::cuda::GpuMat diff, sqr; + cv::cuda::absdiff(imgA, imgB, diff); + cv::cuda::multiply(diff, diff, sqr); + + cv::Scalar mean_val = mean_gpu(sqr); + return mean_val[0]; +} + +// --------------------------------------------------------------------------- +// Simplified SSIM (GPU-only approximation) +// --------------------------------------------------------------------------- +double GPUFrameChangeDetector::simple_ssim_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { + cv::cuda::GpuMat grayA, grayB; + cv::cuda::cvtColor(imgA, grayA, cv::COLOR_RGBA2GRAY); + cv::cuda::cvtColor(imgB, grayB, cv::COLOR_RGBA2GRAY); + + cv::Scalar mu_x = mean_gpu(grayA); + cv::Scalar mu_y = mean_gpu(grayB); + + cv::cuda::GpuMat diffX, diffY; + cv::cuda::subtract(grayA, mu_x, diffX); + cv::cuda::subtract(grayB, mu_y, diffY); + + cv::cuda::GpuMat diffX2, diffY2, diffXY; + cv::cuda::multiply(diffX, diffX, diffX2); + cv::cuda::multiply(diffY, diffY, diffY2); + cv::cuda::multiply(diffX, diffY, diffXY); + + double sigma_x = std::sqrt(mean_gpu(diffX2)[0]); + double sigma_y = std::sqrt(mean_gpu(diffY2)[0]); + double sigma_xy = mean_gpu(diffXY)[0]; + + double C1 = 6.5025, C2 = 58.5225; + double ssim = ((2 * mu_x[0] * mu_y[0] + C1) * (2 * sigma_xy + C2)) / + ((mu_x[0]*mu_x[0] + mu_y[0]*mu_y[0] + C1) * + (sigma_x*sigma_x + sigma_y*sigma_y + C2)); + + return ssim; +} + +// --------------------------------------------------------------------------- +// Optical Flow magnitude mean (GPU only) +// --------------------------------------------------------------------------- +double GPUFrameChangeDetector::optical_flow_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { + cv::cuda::GpuMat grayA, grayB; + cv::cuda::cvtColor(imgA, grayA, cv::COLOR_RGBA2GRAY); + cv::cuda::cvtColor(imgB, grayB, cv::COLOR_RGBA2GRAY); + + auto flow = cv::cuda::FarnebackOpticalFlow::create(); + cv::cuda::GpuMat flow_result; + flow->calc(grayA, grayB, flow_result); + + // Split into X/Y channels (GPU) + std::vector flow_xy; + cv::cuda::split(flow_result, flow_xy); + + cv::cuda::GpuMat mag, angle; + cv::cuda::cartToPolar(flow_xy[0], flow_xy[1], mag, angle, true); + + cv::Scalar mean_mag = mean_gpu(mag); + return mean_mag[0]; +} + +// --------------------------------------------------------------------------- +// Main logic: compare with previous frame (GPU only) +// --------------------------------------------------------------------------- +std::pair> +GPUFrameChangeDetector::should_process_gpu_direct(const cv::cuda::GpuMat& gpu_frame) { + if (prev_frame_gpu.empty()) { + prev_frame_gpu = preprocess_gpu(gpu_frame); + return {true, {{"MSE", 0.0}, {"SSIM", 1.0}, {"FLOW", 0.0}}}; + } + + cv::cuda::GpuMat processed_curr = preprocess_gpu(gpu_frame); + + double mse_val = mse_gpu(prev_frame_gpu, processed_curr); + double ssim_val = simple_ssim_gpu(prev_frame_gpu, processed_curr); + double flow_val = optical_flow_gpu(prev_frame_gpu, processed_curr); + + bool is_static = (mse_val < mse_thresh && + ssim_val > ssim_thresh && + flow_val < flow_thresh); + + prev_frame_gpu = processed_curr; + + return {!is_static, {{"MSE", mse_val}, {"SSIM", ssim_val}, {"FLOW", flow_val}}}; +} diff --git a/src/gpu_frame_change_detector.hpp b/src/gpu_frame_change_detector.hpp new file mode 100644 index 00000000..3ea3b629 --- /dev/null +++ b/src/gpu_frame_change_detector.hpp @@ -0,0 +1,40 @@ +#ifndef GPU_FRAME_CHANGE_DETECTOR_HPP +#define GPU_FRAME_CHANGE_DETECTOR_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +class GPUFrameChangeDetector { +private: + static std::unique_ptr instance; + + double mse_thresh; + double ssim_thresh; + double flow_thresh; + + cv::cuda::GpuMat prev_frame_gpu; + bool initialized; + + GPUFrameChangeDetector(double mse_t, double ssim_t, double flow_t); + +public: + static GPUFrameChangeDetector* getInstance(double mse_t = 45.0, + double ssim_t = 0.992, + double flow_t = 0.7); + +cv::cuda::GpuMat preprocess_gpu(const cv::cuda::GpuMat& frame); + double mse_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB); + double simple_ssim_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB); + double optical_flow_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB); + + std::pair> should_process_gpu(const cv::Mat& current_frame); + std::pair> should_process_gpu_direct(const cv::cuda::GpuMat& gpu_frame); +}; + +#endif // GPU_FRAME_CHANGE_DETECTOR_HPP diff --git a/src/gpu_frame_change_detector.py b/src/gpu_frame_change_detector.py index afefe42e..489c63d3 100644 --- a/src/gpu_frame_change_detector.py +++ b/src/gpu_frame_change_detector.py @@ -1,6 +1,8 @@ # src/gpu_frame_change_detector.py import cv2 import numpy as np +import gpu_probe # Add this import + from typing import Tuple, Dict, Optional # Configurable thresholds @@ -30,7 +32,8 @@ def preprocess_gpu(self, frame: np.ndarray) -> cv2.cuda_GpuMat: gpu_mat = cv2.cuda_GpuMat() gpu_mat.upload(frame) resized = cv2.cuda.resize(gpu_mat, (160, 90)) - return resized + blurred = cv2.cuda.GaussianBlur(resized, (5, 5), 0) + return blurred def mse_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: diff = cv2.cuda.absdiff(imgA, imgB) @@ -63,7 +66,11 @@ def optical_flow_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> floa flow_cpu = flow_result.download() mag, _ = cv2.cartToPolar(flow_cpu[..., 0], flow_cpu[..., 1]) - return float(np.mean(mag)) + + # חישוב optical flow כמו ב-CPU - רק פיקסלים פעילים + OPTICAL_FLOW_ACTIVE_THRESH = 0.5 + active = mag[mag > OPTICAL_FLOW_ACTIVE_THRESH] + return float(np.mean(active) if active.size > 0 else 0.0) def should_process_gpu(self, current_frame: np.ndarray) -> Tuple[bool, Dict[str, float]]: if self.prev_frame_gpu is None: @@ -76,6 +83,7 @@ def should_process_gpu(self, current_frame: np.ndarray) -> Tuple[bool, Dict[str, ssim_val = self.simple_ssim_gpu(self.prev_frame_gpu, processed_curr) flow_val = self.optical_flow_gpu(self.prev_frame_gpu, processed_curr) + # אותה לוגיקה כמו ב-CPU is_static = (mse_val < self.mse_thresh and ssim_val > self.ssim_thresh and flow_val < self.flow_thresh) @@ -86,17 +94,22 @@ def should_process_gpu(self, current_frame: np.ndarray) -> Tuple[bool, Dict[str, return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} def should_process_gpu_direct(self, gpu_frame: cv2.cuda_GpuMat) -> Tuple[bool, Dict[str, float]]: - """Process directly on GPU without CPU conversion""" + """Process directly on GPU without CPU conversion - same logic as CPU version""" if self.prev_frame_gpu is None: - self.prev_frame_gpu = cv2.cuda.resize(gpu_frame, (160, 90)) + # preprocess: resize + blur + resized = cv2.cuda.resize(gpu_frame, (160, 90)) + self.prev_frame_gpu = cv2.cuda.GaussianBlur(resized, (5, 5), 0) return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} - processed_curr = cv2.cuda.resize(gpu_frame, (160, 90)) + # preprocess current frame: resize + blur + resized = cv2.cuda.resize(gpu_frame, (160, 90)) + processed_curr = cv2.cuda.GaussianBlur(resized, (5, 5), 0) mse_val = self.mse_gpu(self.prev_frame_gpu, processed_curr) ssim_val = self.simple_ssim_gpu(self.prev_frame_gpu, processed_curr) flow_val = self.optical_flow_gpu(self.prev_frame_gpu, processed_curr) + # אותה לוגיקה בדיוק כמו ב-CPU is_static = (mse_val < self.mse_thresh and ssim_val > self.ssim_thresh and flow_val < self.flow_thresh) @@ -106,22 +119,22 @@ def should_process_gpu_direct(self, gpu_frame: cv2.cuda_GpuMat) -> Tuple[bool, D return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} - def should_process_gpu_wrapper(self, gpu_wrapper) -> Tuple[bool, Dict[str, float]]: - """Process GPU wrapper from C++ - simple version""" - rows, cols = gpu_wrapper.rows(), gpu_wrapper.cols() - - if rows < 100 or cols < 100 or rows > 2000 or cols > 2000: - return False, {"MSE": 0.0, "SSIM": 0.0, "FLOW": 0.0} - import time - current_time = time.time() - if not hasattr(self, '_last_process_time'): - self._last_process_time = current_time - return True, {"MSE": 100.0, "SSIM": 0.5, "FLOW": 1.0} - - time_diff = current_time - self._last_process_time - if time_diff > 0.1: - self._last_process_time = current_time - return True, {"MSE": 100.0, "SSIM": 0.5, "FLOW": 1.0} - - return False, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} \ No newline at end of file + def should_process_gpu_wrapper(self, gpu_wrapper) -> Tuple[bool, Dict[str, float]]: + """Process GPU wrapper from C++ - same logic as CPU version""" + try: + if not hasattr(self, 'prev_gpu_wrapper'): + self.prev_gpu_wrapper = gpu_buffer.create_empty_wrapper() + + # Pass the threshold values as arguments + should_proc = gpu_wrapper.should_process( + self.prev_gpu_wrapper, + self.mse_thresh, + self.ssim_thresh, + self.flow_thresh + ) + return should_proc, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} + + except Exception as e: + print(f"GPU wrapper processing error: {e}") + return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} diff --git a/src/gpu_frames_skipping_pipeline.py b/src/gpu_frames_skipping_pipeline.py index 0cb4bbe6..fe3f5c8f 100644 --- a/src/gpu_frames_skipping_pipeline.py +++ b/src/gpu_frames_skipping_pipeline.py @@ -3,7 +3,7 @@ import cv2 import pyds import ctypes -import gpu_buffer +import gpu_probe gi.require_version("Gst", "1.0") from gi.repository import GLib, Gst @@ -28,46 +28,17 @@ def get_jetson_frame(gst_buffer, batch_id): return None def jetson_frame_skip_probe(pad, info, u_data): - """GPU-based frame skipping probe""" - global stats - stats["total"] += 1 - - gst_buffer = info.get_buffer() - if not gst_buffer: - return Gst.PadProbeReturn.OK - - batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer)) - if not batch_meta: - return Gst.PadProbeReturn.OK - - l_frame = batch_meta.frame_meta_list - if l_frame is not None: - try: - # קבלת הפריים מה-GPU - frame_wrapper = get_jetson_frame(gst_buffer, 0) - if frame_wrapper is None: - stats["skipped"] += 1 - return Gst.PadProbeReturn.DROP - - # שימוש ב-GPU detector עם ה-wrapper - gpu_detector = GPUFrameChangeDetector() - should_process, metrics = gpu_detector.should_process_gpu_wrapper(frame_wrapper) - - if should_process: + buffer_ptr = hash(info.get_buffer()) # כתובת הבאפר + batch_id = 0 # או הלולאה שלך + should_process = gpu_probe.frame_probe(buffer_ptr, batch_id) + if should_process: stats["processed"] += 1 print(f"✅ PROCESSING frame {stats['total']}") return Gst.PadProbeReturn.OK - else: - stats["skipped"] += 1 - print(f"⏭️ SKIPPING frame {stats['total']}") - return Gst.PadProbeReturn.DROP - - except Exception as e: - print(f"Frame processing error: {e}") + else: stats["skipped"] += 1 + print(f"⏭️ SKIPPING frame {stats['total']}") return Gst.PadProbeReturn.DROP - - return Gst.PadProbeReturn.OK def build_jetson_pipeline(): """Build Jetson-compatible pipeline""" diff --git a/src/gpu_probe.cpp b/src/gpu_probe.cpp new file mode 100644 index 00000000..60a83b0a --- /dev/null +++ b/src/gpu_probe.cpp @@ -0,0 +1,86 @@ +#include +#include +#include +#include +#include "nvbufsurface.h" +#include "gstnvdsmeta.h" +#include "gpu_frame_change_detector.hpp" // המחלקה שלך +#include +#include +#include + +namespace py = pybind11; + +// ----------------------------------------------------------- +// פונקציה שממפה NvBufSurface לפריים ומחזירה אם צריך לעבד +// ----------------------------------------------------------- +bool frame_probe(uintptr_t buffer_ptr, int batch_id) +{ + GstBuffer *buffer = reinterpret_cast(buffer_ptr); + + GstMapInfo map_info; + if (!gst_buffer_map(buffer, &map_info, GST_MAP_READ)) { + throw std::runtime_error("Failed to map GstBuffer"); + } + + NvBufSurface *surface = (NvBufSurface *)map_info.data; + + if (!surface) + throw std::runtime_error("Failed to get NvBufSurface from GstBuffer"); + + guint index = batch_id; + + // שלב 1 - יצירת EGL image מתוך NvBufSurface + if (NvBufSurfaceMapEglImage(surface, index) != 0) + throw std::runtime_error("Failed to map EGLImage from NvBufSurface"); + + EGLImageKHR eglImage = surface->surfaceList[index].mappedAddr.eglImage; + + // שלב 2 - רישום ה־EGLImage ב־CUDA + CUgraphicsResource cudaResource; + CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); + if (status != CUDA_SUCCESS) + throw std::runtime_error("cuGraphicsEGLRegisterImage failed"); + + // שלב 3 - מיפוי ה־EGLFrame לקבלת מצביע CUDA + CUeglFrame eglFrame; + status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); + if (status != CUDA_SUCCESS) + throw std::runtime_error("cuGraphicsResourceGetMappedEglFrame failed"); + + // שלב 4 - יצירת cv::cuda::GpuMat ישירות מה־GPU + void *dev_ptr = eglFrame.frame.pPitch[0]; + int width = surface->surfaceList[index].width; + int height = surface->surfaceList[index].height; + size_t pitch = eglFrame.pitch; + + cv::cuda::GpuMat gpuMat(height, width, CV_8UC4, dev_ptr, pitch); + + // שלב 5 - הפעלת האלגוריתם שלך + GPUFrameChangeDetector *detector = GPUFrameChangeDetector::getInstance(); + auto [should_process, metrics] = detector->should_process_gpu_direct(gpuMat); + + // שלב 6 - ניקוי משאבים + cuGraphicsUnregisterResource(cudaResource); + NvBufSurfaceUnMapEglImage(surface, index); + gst_buffer_unmap(buffer, &map_info); + + + // אופציונלי: הדפסה לבדיקה + std::cout << "MSE=" << metrics["MSE"] + << " SSIM=" << metrics["SSIM"] + << " FLOW=" << metrics["FLOW"] + << " -> " << (should_process ? "PROCESS" : "SKIP") << std::endl; + + return should_process; +} + +// ----------------------------------------------------------- +// חשיפה לפייתון עם pybind11 +// ----------------------------------------------------------- +PYBIND11_MODULE(gpu_probe, m) +{ + m.def("frame_probe", &frame_probe, + "Run DeepStream frame probe on GPU", + py::arg("buffer_ptr"), py::arg("batch_id")); +} diff --git a/src/gpu_probe.cpython-310-aarch64-linux-gnu.so b/src/gpu_probe.cpython-310-aarch64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..7b7e3c5fd5b4fd6c23a2c665f1e62e142683f665 GIT binary patch literal 183224 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%0DJ5jkJ;=$OP<`gJ+& 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 Date: Sun, 9 Nov 2025 22:37:27 +0200 Subject: [PATCH 06/10] Optimize GPU frame detection with tuned thresholds - Updated GPU thresholds: MSE<10.0, SSIM>0.995, FLOW<0.05 - Achieved 7/50 frame processing (86% skip rate) - Removed deprecated gpu_buffer files - Updated gpu_probe with improved frame processing --- src/gpu_frame_change_detector.cpp | 115 ++++++++---- src/gpu_frame_change_detector.hpp | 54 +++--- src/gpu_probe.cpp | 173 ++++++++++++------ ...gpu_probe.cpython-310-aarch64-linux-gnu.so | Bin 183224 -> 183832 bytes 4 files changed, 224 insertions(+), 118 deletions(-) diff --git a/src/gpu_frame_change_detector.cpp b/src/gpu_frame_change_detector.cpp index 7e83de37..03c0edc4 100644 --- a/src/gpu_frame_change_detector.cpp +++ b/src/gpu_frame_change_detector.cpp @@ -7,21 +7,27 @@ std::unique_ptr GPUFrameChangeDetector::instance = nullptr; -GPUFrameChangeDetector::GPUFrameChangeDetector(double mse_t, double ssim_t, double flow_t) - : mse_thresh(mse_t), ssim_thresh(ssim_t), flow_thresh(flow_t), initialized(true) {} +// --------------------------------------------------------------------------- +// Constructor - thresholds are fixed here +// --------------------------------------------------------------------------- +GPUFrameChangeDetector::GPUFrameChangeDetector() + : mse_thresh(500.0), // fixed threshold + ssim_thresh(0.99), // fixed threshold + flow_thresh(2.0), // fixed threshold + initialized(true) {} -GPUFrameChangeDetector* GPUFrameChangeDetector::getInstance(double mse_t, - double ssim_t, - double flow_t) { +// --------------------------------------------------------------------------- +// Singleton access +// --------------------------------------------------------------------------- +GPUFrameChangeDetector* GPUFrameChangeDetector::getInstance() { if (!instance) { - instance = std::unique_ptr( - new GPUFrameChangeDetector(mse_t, ssim_t, flow_t)); + instance = std::unique_ptr(new GPUFrameChangeDetector()); } return instance.get(); } // --------------------------------------------------------------------------- -// Utility: Compute mean on GPU (replacement for cv::cuda::mean which doesn't exist) +// Utility: Compute mean on GPU // --------------------------------------------------------------------------- static cv::Scalar mean_gpu(const cv::cuda::GpuMat& mat) { cv::Scalar sum_val = cv::cuda::sum(mat); @@ -30,34 +36,38 @@ static cv::Scalar mean_gpu(const cv::cuda::GpuMat& mat) { } // --------------------------------------------------------------------------- -// Resize frame entirely on GPU +// Preprocess (no resize / blur) // --------------------------------------------------------------------------- cv::cuda::GpuMat GPUFrameChangeDetector::preprocess_gpu(const cv::cuda::GpuMat& frame) { - // אין שינוי גודל – פשוט נחזיר עותק על ה-GPU אם נדרש - return frame; // או אפילו return frame; אם את לא צריכה עותק נפרד + return frame; // no preprocessing } - - // --------------------------------------------------------------------------- -// Mean Squared Error (GPU only) +// Mean Squared Error (GPU) - match CPU exactly // --------------------------------------------------------------------------- double GPUFrameChangeDetector::mse_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { + cv::cuda::GpuMat bgrA, bgrB; + cv::cuda::cvtColor(imgA, bgrA, cv::COLOR_RGBA2BGR); + cv::cuda::cvtColor(imgB, bgrB, cv::COLOR_RGBA2BGR); + cv::cuda::GpuMat diff, sqr; - cv::cuda::absdiff(imgA, imgB, diff); + cv::cuda::absdiff(bgrA, bgrB, diff); cv::cuda::multiply(diff, diff, sqr); - cv::Scalar mean_val = mean_gpu(sqr); return mean_val[0]; } // --------------------------------------------------------------------------- -// Simplified SSIM (GPU-only approximation) +// Simplified SSIM (GPU) - match CPU with BGR2GRAY // --------------------------------------------------------------------------- double GPUFrameChangeDetector::simple_ssim_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { - cv::cuda::GpuMat grayA, grayB; - cv::cuda::cvtColor(imgA, grayA, cv::COLOR_RGBA2GRAY); - cv::cuda::cvtColor(imgB, grayB, cv::COLOR_RGBA2GRAY); + cv::cuda::GpuMat bgrA, bgrB, grayA, grayB; + + // Convert RGBA to BGR first, then to GRAY (same as CPU) + cv::cuda::cvtColor(imgA, bgrA, cv::COLOR_RGBA2BGR); + cv::cuda::cvtColor(imgB, bgrB, cv::COLOR_RGBA2BGR); + cv::cuda::cvtColor(bgrA, grayA, cv::COLOR_BGR2GRAY); + cv::cuda::cvtColor(bgrB, grayB, cv::COLOR_BGR2GRAY); cv::Scalar mu_x = mean_gpu(grayA); cv::Scalar mu_y = mean_gpu(grayB); @@ -77,37 +87,73 @@ double GPUFrameChangeDetector::simple_ssim_gpu(const cv::cuda::GpuMat& imgA, con double C1 = 6.5025, C2 = 58.5225; double ssim = ((2 * mu_x[0] * mu_y[0] + C1) * (2 * sigma_xy + C2)) / - ((mu_x[0]*mu_x[0] + mu_y[0]*mu_y[0] + C1) * + ((mu_x[0]*mu_x[0] + mu_y[0]*mu_y[0] + C1) * (sigma_x*sigma_x + sigma_y*sigma_y + C2)); return ssim; } // --------------------------------------------------------------------------- -// Optical Flow magnitude mean (GPU only) +// Optical Flow magnitude mean (GPU) - match CPU with BGR2GRAY +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// Optical Flow magnitude mean (GPU) - match CPU exactly +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// Optical Flow magnitude mean (GPU) - match CPU exactly // --------------------------------------------------------------------------- double GPUFrameChangeDetector::optical_flow_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { - cv::cuda::GpuMat grayA, grayB; - cv::cuda::cvtColor(imgA, grayA, cv::COLOR_RGBA2GRAY); - cv::cuda::cvtColor(imgB, grayB, cv::COLOR_RGBA2GRAY); - - auto flow = cv::cuda::FarnebackOpticalFlow::create(); + cv::cuda::GpuMat bgrA, bgrB, grayA, grayB; + + // Convert RGBA to BGR first (to match CPU input format) + cv::cuda::cvtColor(imgA, bgrA, cv::COLOR_RGBA2BGR); + cv::cuda::cvtColor(imgB, bgrB, cv::COLOR_RGBA2BGR); + + // Then BGR to GRAY - same as CPU: cv2.cvtColor(imgA, cv2.COLOR_BGR2GRAY) + cv::cuda::cvtColor(bgrA, grayA, cv::COLOR_BGR2GRAY); + cv::cuda::cvtColor(bgrB, grayB, cv::COLOR_BGR2GRAY); + + // Match CPU parameters exactly: (None, 0.5, 3, 15, 3, 5, 1.2, 0) + auto flow = cv::cuda::FarnebackOpticalFlow::create( + 3, // numLevels + 0.5, // pyrScale + false, // fastPyramids + 15, // winSize + 3, // numIters + 5, // polyN + 1.2, // polySigma + 0 // flags + ); + cv::cuda::GpuMat flow_result; flow->calc(grayA, grayB, flow_result); - // Split into X/Y channels (GPU) std::vector flow_xy; cv::cuda::split(flow_result, flow_xy); cv::cuda::GpuMat mag, angle; cv::cuda::cartToPolar(flow_xy[0], flow_xy[1], mag, angle, true); - cv::Scalar mean_mag = mean_gpu(mag); - return mean_mag[0]; + // Match CPU logic: filter active pixels > 0.5 + cv::cuda::GpuMat active_mask; + cv::cuda::threshold(mag, active_mask, 0.5, 1.0, cv::THRESH_BINARY); + + cv::cuda::GpuMat active_pixels; + mag.copyTo(active_pixels, active_mask); + + cv::Scalar sum_active = cv::cuda::sum(active_pixels); + cv::Scalar count_active = cv::cuda::sum(active_mask); + + if (count_active[0] > 0) { + return sum_active[0] / count_active[0]; + } else { + return 0.0; + } } + // --------------------------------------------------------------------------- -// Main logic: compare with previous frame (GPU only) +// Main logic - Optimized thresholds for best frame skipping (7/50) // --------------------------------------------------------------------------- std::pair> GPUFrameChangeDetector::should_process_gpu_direct(const cv::cuda::GpuMat& gpu_frame) { @@ -122,9 +168,10 @@ GPUFrameChangeDetector::should_process_gpu_direct(const cv::cuda::GpuMat& gpu_fr double ssim_val = simple_ssim_gpu(prev_frame_gpu, processed_curr); double flow_val = optical_flow_gpu(prev_frame_gpu, processed_curr); - bool is_static = (mse_val < mse_thresh && - ssim_val > ssim_thresh && - flow_val < flow_thresh); + // Optimized thresholds for best performance (7/50 frames processed) + bool is_static = (mse_val < 10.0 && + ssim_val > 0.995 && + flow_val < 0.05); prev_frame_gpu = processed_curr; diff --git a/src/gpu_frame_change_detector.hpp b/src/gpu_frame_change_detector.hpp index 3ea3b629..0def34a1 100644 --- a/src/gpu_frame_change_detector.hpp +++ b/src/gpu_frame_change_detector.hpp @@ -1,40 +1,36 @@ -#ifndef GPU_FRAME_CHANGE_DETECTOR_HPP -#define GPU_FRAME_CHANGE_DETECTOR_HPP - -#include -#include -#include -#include -#include -#include +#pragma once +#include #include -#include +#include +#include class GPUFrameChangeDetector { -private: - static std::unique_ptr instance; - - double mse_thresh; - double ssim_thresh; - double flow_thresh; - - cv::cuda::GpuMat prev_frame_gpu; - bool initialized; +public: + // Singleton access + static GPUFrameChangeDetector* getInstance(); - GPUFrameChangeDetector(double mse_t, double ssim_t, double flow_t); + // Main logic: decide if frame should be processed + std::pair> + should_process_gpu_direct(const cv::cuda::GpuMat& gpu_frame); -public: - static GPUFrameChangeDetector* getInstance(double mse_t = 45.0, - double ssim_t = 0.992, - double flow_t = 0.7); +private: + // Constructor (private for singleton) + GPUFrameChangeDetector(); -cv::cuda::GpuMat preprocess_gpu(const cv::cuda::GpuMat& frame); + // Internal processing functions + cv::cuda::GpuMat preprocess_gpu(const cv::cuda::GpuMat& frame); double mse_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB); double simple_ssim_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB); double optical_flow_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB); - std::pair> should_process_gpu(const cv::Mat& current_frame); - std::pair> should_process_gpu_direct(const cv::cuda::GpuMat& gpu_frame); -}; + // Internal state + static std::unique_ptr instance; + cv::cuda::GpuMat prev_frame_gpu; + + // Thresholds + const double mse_thresh; + const double ssim_thresh; + const double flow_thresh; -#endif // GPU_FRAME_CHANGE_DETECTOR_HPP + bool initialized; +}; diff --git a/src/gpu_probe.cpp b/src/gpu_probe.cpp index 60a83b0a..9507cb72 100644 --- a/src/gpu_probe.cpp +++ b/src/gpu_probe.cpp @@ -16,65 +16,128 @@ namespace py = pybind11; // ----------------------------------------------------------- bool frame_probe(uintptr_t buffer_ptr, int batch_id) { - GstBuffer *buffer = reinterpret_cast(buffer_ptr); + static int frame_count = 0; + frame_count++; + + + // Initialize all resources to null for proper cleanup + GstBuffer *buffer = nullptr; + GstMapInfo map_info = {0}; + NvBufSurface *surface = nullptr; + CUgraphicsResource cudaResource = 0; + bool buffer_mapped = false; + bool egl_mapped = false; + bool cuda_registered = false; + + try { + buffer = reinterpret_cast(buffer_ptr); + if (!buffer) return true; + + if (!gst_buffer_map(buffer, &map_info, GST_MAP_READ)) { + return true; + } + buffer_mapped = true; + + surface = (NvBufSurface *)map_info.data; + if (!surface) { + goto cleanup; + } + + guint index = batch_id; + if (index >= surface->numFilled) { + goto cleanup; + } + + // Map EGL image + if (NvBufSurfaceMapEglImage(surface, index) != 0) { + goto cleanup; + } + egl_mapped = true; + + EGLImageKHR eglImage = surface->surfaceList[index].mappedAddr.eglImage; + if (eglImage == EGL_NO_IMAGE_KHR) { + goto cleanup; + } + + // Register with CUDA + CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); + if (status != CUDA_SUCCESS) { + goto cleanup; + } + cuda_registered = true; + + // Get EGL frame + CUeglFrame eglFrame; + status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); + if (status != CUDA_SUCCESS) { + goto cleanup; + } + + // Create GPU mat with proper validation + void *dev_ptr = eglFrame.frame.pPitch[0]; + if (!dev_ptr) { + goto cleanup; + } + + int width = surface->surfaceList[index].width; + int height = surface->surfaceList[index].height; + size_t pitch = eglFrame.pitch; + + // Validate dimensions + if (width <= 0 || height <= 0 || pitch <= 0) { + goto cleanup; + } + + // Create safe copy to avoid memory corruption + cv::cuda::GpuMat gpuMat(height, width, CV_8UC4, dev_ptr, pitch); + cv::cuda::GpuMat safe_copy; + gpuMat.copyTo(safe_copy); + + // Use safe_copy instead of direct pointer + GPUFrameChangeDetector *detector = GPUFrameChangeDetector::getInstance(); + auto [should_process, metrics] = detector->should_process_gpu_direct(safe_copy); + + // Force cleanup of GPU memory + safe_copy.release(); + gpuMat.release(); + + // Cleanup in reverse order + if (cuda_registered) { + cuGraphicsUnregisterResource(cudaResource); + } + if (egl_mapped) { + NvBufSurfaceUnMapEglImage(surface, index); + } + if (buffer_mapped) { + gst_buffer_unmap(buffer, &map_info); + } + // DEBUG: Print the actual values + std::cout << "Frame " << frame_count + << " MSE=" << metrics["MSE"] + << " SSIM=" << metrics["SSIM"] + << " FLOW=" << metrics["FLOW"] + << " -> " << (should_process ? "PROCESS" : "SKIP") << std::endl; + + return should_process; + + } catch (...) { + std::cout << "Exception in frame " << frame_count << std::endl; + } - GstMapInfo map_info; - if (!gst_buffer_map(buffer, &map_info, GST_MAP_READ)) { - throw std::runtime_error("Failed to map GstBuffer"); +cleanup: + // Cleanup in reverse order + if (cuda_registered) { + cuGraphicsUnregisterResource(cudaResource); + } + if (egl_mapped && surface) { + NvBufSurfaceUnMapEglImage(surface, batch_id); + } + if (buffer_mapped && buffer) { + gst_buffer_unmap(buffer, &map_info); } - NvBufSurface *surface = (NvBufSurface *)map_info.data; - - if (!surface) - throw std::runtime_error("Failed to get NvBufSurface from GstBuffer"); - - guint index = batch_id; - - // שלב 1 - יצירת EGL image מתוך NvBufSurface - if (NvBufSurfaceMapEglImage(surface, index) != 0) - throw std::runtime_error("Failed to map EGLImage from NvBufSurface"); - - EGLImageKHR eglImage = surface->surfaceList[index].mappedAddr.eglImage; - - // שלב 2 - רישום ה־EGLImage ב־CUDA - CUgraphicsResource cudaResource; - CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); - if (status != CUDA_SUCCESS) - throw std::runtime_error("cuGraphicsEGLRegisterImage failed"); - - // שלב 3 - מיפוי ה־EGLFrame לקבלת מצביע CUDA - CUeglFrame eglFrame; - status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); - if (status != CUDA_SUCCESS) - throw std::runtime_error("cuGraphicsResourceGetMappedEglFrame failed"); - - // שלב 4 - יצירת cv::cuda::GpuMat ישירות מה־GPU - void *dev_ptr = eglFrame.frame.pPitch[0]; - int width = surface->surfaceList[index].width; - int height = surface->surfaceList[index].height; - size_t pitch = eglFrame.pitch; - - cv::cuda::GpuMat gpuMat(height, width, CV_8UC4, dev_ptr, pitch); - - // שלב 5 - הפעלת האלגוריתם שלך - GPUFrameChangeDetector *detector = GPUFrameChangeDetector::getInstance(); - auto [should_process, metrics] = detector->should_process_gpu_direct(gpuMat); - - // שלב 6 - ניקוי משאבים - cuGraphicsUnregisterResource(cudaResource); - NvBufSurfaceUnMapEglImage(surface, index); - gst_buffer_unmap(buffer, &map_info); - - - // אופציונלי: הדפסה לבדיקה - std::cout << "MSE=" << metrics["MSE"] - << " SSIM=" << metrics["SSIM"] - << " FLOW=" << metrics["FLOW"] - << " -> " << (should_process ? "PROCESS" : "SKIP") << std::endl; - - return should_process; + return true; // Process by default on error } - // ----------------------------------------------------------- // חשיפה לפייתון עם pybind11 // ----------------------------------------------------------- diff --git a/src/gpu_probe.cpython-310-aarch64-linux-gnu.so b/src/gpu_probe.cpython-310-aarch64-linux-gnu.so index 7b7e3c5fd5b4fd6c23a2c665f1e62e142683f665..924f43d70deac0e5710d069ac1d55934b435afc0 100755 GIT binary patch delta 70390 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 delta 69772 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 E0RLbO{r~^~ From 9d25e99cd42239c9a5e3b55c65a104bb12534755 Mon Sep 17 00:00:00 2001 From: chani0343 Date: Sun, 9 Nov 2025 22:47:15 +0200 Subject: [PATCH 07/10] Final GPU frame detection with optimized thresholds and clean code --- src/gpu_frame_change_detector.cpp | 73 ++------------ src/gpu_frames_skipping_pipeline.py | 4 +- src/gpu_probe.cpp | 92 +++++------------- ...gpu_probe.cpython-310-aarch64-linux-gnu.so | Bin 183832 -> 183832 bytes 4 files changed, 34 insertions(+), 135 deletions(-) diff --git a/src/gpu_frame_change_detector.cpp b/src/gpu_frame_change_detector.cpp index 03c0edc4..56c97365 100644 --- a/src/gpu_frame_change_detector.cpp +++ b/src/gpu_frame_change_detector.cpp @@ -7,18 +7,9 @@ std::unique_ptr GPUFrameChangeDetector::instance = nullptr; -// --------------------------------------------------------------------------- -// Constructor - thresholds are fixed here -// --------------------------------------------------------------------------- GPUFrameChangeDetector::GPUFrameChangeDetector() - : mse_thresh(500.0), // fixed threshold - ssim_thresh(0.99), // fixed threshold - flow_thresh(2.0), // fixed threshold - initialized(true) {} - -// --------------------------------------------------------------------------- -// Singleton access -// --------------------------------------------------------------------------- + : mse_thresh(500.0), ssim_thresh(0.99), flow_thresh(2.0), initialized(true) {} + GPUFrameChangeDetector* GPUFrameChangeDetector::getInstance() { if (!instance) { instance = std::unique_ptr(new GPUFrameChangeDetector()); @@ -26,25 +17,16 @@ GPUFrameChangeDetector* GPUFrameChangeDetector::getInstance() { return instance.get(); } -// --------------------------------------------------------------------------- -// Utility: Compute mean on GPU -// --------------------------------------------------------------------------- static cv::Scalar mean_gpu(const cv::cuda::GpuMat& mat) { cv::Scalar sum_val = cv::cuda::sum(mat); double total_elements = static_cast(mat.rows * mat.cols); return sum_val * (1.0 / total_elements); } -// --------------------------------------------------------------------------- -// Preprocess (no resize / blur) -// --------------------------------------------------------------------------- cv::cuda::GpuMat GPUFrameChangeDetector::preprocess_gpu(const cv::cuda::GpuMat& frame) { - return frame; // no preprocessing + return frame; } -// --------------------------------------------------------------------------- -// Mean Squared Error (GPU) - match CPU exactly -// --------------------------------------------------------------------------- double GPUFrameChangeDetector::mse_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { cv::cuda::GpuMat bgrA, bgrB; cv::cuda::cvtColor(imgA, bgrA, cv::COLOR_RGBA2BGR); @@ -57,17 +39,10 @@ double GPUFrameChangeDetector::mse_gpu(const cv::cuda::GpuMat& imgA, const cv::c return mean_val[0]; } -// --------------------------------------------------------------------------- -// Simplified SSIM (GPU) - match CPU with BGR2GRAY -// --------------------------------------------------------------------------- double GPUFrameChangeDetector::simple_ssim_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { - cv::cuda::GpuMat bgrA, bgrB, grayA, grayB; - - // Convert RGBA to BGR first, then to GRAY (same as CPU) - cv::cuda::cvtColor(imgA, bgrA, cv::COLOR_RGBA2BGR); - cv::cuda::cvtColor(imgB, bgrB, cv::COLOR_RGBA2BGR); - cv::cuda::cvtColor(bgrA, grayA, cv::COLOR_BGR2GRAY); - cv::cuda::cvtColor(bgrB, grayB, cv::COLOR_BGR2GRAY); + cv::cuda::GpuMat grayA, grayB; + cv::cuda::cvtColor(imgA, grayA, cv::COLOR_RGBA2GRAY); + cv::cuda::cvtColor(imgB, grayB, cv::COLOR_RGBA2GRAY); cv::Scalar mu_x = mean_gpu(grayA); cv::Scalar mu_y = mean_gpu(grayB); @@ -87,43 +62,21 @@ double GPUFrameChangeDetector::simple_ssim_gpu(const cv::cuda::GpuMat& imgA, con double C1 = 6.5025, C2 = 58.5225; double ssim = ((2 * mu_x[0] * mu_y[0] + C1) * (2 * sigma_xy + C2)) / - ((mu_x[0]*mu_x[0] + mu_y[0]*mu_y[0] + C1) * + ((mu_x[0]*mu_x[0] + mu_y[0]*mu_y[0] + C1) * (sigma_x*sigma_x + sigma_y*sigma_y + C2)); return ssim; } -// --------------------------------------------------------------------------- -// Optical Flow magnitude mean (GPU) - match CPU with BGR2GRAY -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// Optical Flow magnitude mean (GPU) - match CPU exactly -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// Optical Flow magnitude mean (GPU) - match CPU exactly -// --------------------------------------------------------------------------- double GPUFrameChangeDetector::optical_flow_gpu(const cv::cuda::GpuMat& imgA, const cv::cuda::GpuMat& imgB) { cv::cuda::GpuMat bgrA, bgrB, grayA, grayB; - // Convert RGBA to BGR first (to match CPU input format) cv::cuda::cvtColor(imgA, bgrA, cv::COLOR_RGBA2BGR); cv::cuda::cvtColor(imgB, bgrB, cv::COLOR_RGBA2BGR); - - // Then BGR to GRAY - same as CPU: cv2.cvtColor(imgA, cv2.COLOR_BGR2GRAY) cv::cuda::cvtColor(bgrA, grayA, cv::COLOR_BGR2GRAY); cv::cuda::cvtColor(bgrB, grayB, cv::COLOR_BGR2GRAY); - // Match CPU parameters exactly: (None, 0.5, 3, 15, 3, 5, 1.2, 0) - auto flow = cv::cuda::FarnebackOpticalFlow::create( - 3, // numLevels - 0.5, // pyrScale - false, // fastPyramids - 15, // winSize - 3, // numIters - 5, // polyN - 1.2, // polySigma - 0 // flags - ); + auto flow = cv::cuda::FarnebackOpticalFlow::create(3, 0.5, false, 15, 3, 5, 1.2, 0); cv::cuda::GpuMat flow_result; flow->calc(grayA, grayB, flow_result); @@ -134,7 +87,6 @@ double GPUFrameChangeDetector::optical_flow_gpu(const cv::cuda::GpuMat& imgA, co cv::cuda::GpuMat mag, angle; cv::cuda::cartToPolar(flow_xy[0], flow_xy[1], mag, angle, true); - // Match CPU logic: filter active pixels > 0.5 cv::cuda::GpuMat active_mask; cv::cuda::threshold(mag, active_mask, 0.5, 1.0, cv::THRESH_BINARY); @@ -151,10 +103,6 @@ double GPUFrameChangeDetector::optical_flow_gpu(const cv::cuda::GpuMat& imgA, co } } - -// --------------------------------------------------------------------------- -// Main logic - Optimized thresholds for best frame skipping (7/50) -// --------------------------------------------------------------------------- std::pair> GPUFrameChangeDetector::should_process_gpu_direct(const cv::cuda::GpuMat& gpu_frame) { if (prev_frame_gpu.empty()) { @@ -168,10 +116,7 @@ GPUFrameChangeDetector::should_process_gpu_direct(const cv::cuda::GpuMat& gpu_fr double ssim_val = simple_ssim_gpu(prev_frame_gpu, processed_curr); double flow_val = optical_flow_gpu(prev_frame_gpu, processed_curr); - // Optimized thresholds for best performance (7/50 frames processed) - bool is_static = (mse_val < 10.0 && - ssim_val > 0.995 && - flow_val < 0.05); + bool is_static = (mse_val < 10.0 && ssim_val > 0.995 && flow_val < 0.05); prev_frame_gpu = processed_curr; diff --git a/src/gpu_frames_skipping_pipeline.py b/src/gpu_frames_skipping_pipeline.py index fe3f5c8f..4e9045b2 100644 --- a/src/gpu_frames_skipping_pipeline.py +++ b/src/gpu_frames_skipping_pipeline.py @@ -28,8 +28,8 @@ def get_jetson_frame(gst_buffer, batch_id): return None def jetson_frame_skip_probe(pad, info, u_data): - buffer_ptr = hash(info.get_buffer()) # כתובת הבאפר - batch_id = 0 # או הלולאה שלך + buffer_ptr = hash(info.get_buffer()) + batch_id = 0 should_process = gpu_probe.frame_probe(buffer_ptr, batch_id) if should_process: stats["processed"] += 1 diff --git a/src/gpu_probe.cpp b/src/gpu_probe.cpp index 9507cb72..38578bb9 100644 --- a/src/gpu_probe.cpp +++ b/src/gpu_probe.cpp @@ -4,23 +4,17 @@ #include #include "nvbufsurface.h" #include "gstnvdsmeta.h" -#include "gpu_frame_change_detector.hpp" // המחלקה שלך +#include "gpu_frame_change_detector.hpp" #include -#include #include namespace py = pybind11; -// ----------------------------------------------------------- -// פונקציה שממפה NvBufSurface לפריים ומחזירה אם צריך לעבד -// ----------------------------------------------------------- bool frame_probe(uintptr_t buffer_ptr, int batch_id) { static int frame_count = 0; frame_count++; - - // Initialize all resources to null for proper cleanup GstBuffer *buffer = nullptr; GstMapInfo map_info = {0}; NvBufSurface *surface = nullptr; @@ -39,84 +33,53 @@ bool frame_probe(uintptr_t buffer_ptr, int batch_id) buffer_mapped = true; surface = (NvBufSurface *)map_info.data; - if (!surface) { - goto cleanup; - } + if (!surface) goto cleanup; guint index = batch_id; - if (index >= surface->numFilled) { - goto cleanup; - } + if (index >= surface->numFilled) goto cleanup; - // Map EGL image - if (NvBufSurfaceMapEglImage(surface, index) != 0) { - goto cleanup; - } + if (NvBufSurfaceMapEglImage(surface, index) != 0) goto cleanup; egl_mapped = true; EGLImageKHR eglImage = surface->surfaceList[index].mappedAddr.eglImage; - if (eglImage == EGL_NO_IMAGE_KHR) { - goto cleanup; - } + if (eglImage == EGL_NO_IMAGE_KHR) goto cleanup; - // Register with CUDA CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); - if (status != CUDA_SUCCESS) { - goto cleanup; - } + if (status != CUDA_SUCCESS) goto cleanup; cuda_registered = true; - // Get EGL frame CUeglFrame eglFrame; status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); - if (status != CUDA_SUCCESS) { - goto cleanup; - } + if (status != CUDA_SUCCESS) goto cleanup; - // Create GPU mat with proper validation void *dev_ptr = eglFrame.frame.pPitch[0]; - if (!dev_ptr) { - goto cleanup; - } + if (!dev_ptr) goto cleanup; int width = surface->surfaceList[index].width; int height = surface->surfaceList[index].height; size_t pitch = eglFrame.pitch; - // Validate dimensions - if (width <= 0 || height <= 0 || pitch <= 0) { - goto cleanup; - } + if (width <= 0 || height <= 0 || pitch <= 0) goto cleanup; - // Create safe copy to avoid memory corruption cv::cuda::GpuMat gpuMat(height, width, CV_8UC4, dev_ptr, pitch); cv::cuda::GpuMat safe_copy; gpuMat.copyTo(safe_copy); - // Use safe_copy instead of direct pointer GPUFrameChangeDetector *detector = GPUFrameChangeDetector::getInstance(); auto [should_process, metrics] = detector->should_process_gpu_direct(safe_copy); - // Force cleanup of GPU memory safe_copy.release(); gpuMat.release(); - // Cleanup in reverse order - if (cuda_registered) { - cuGraphicsUnregisterResource(cudaResource); - } - if (egl_mapped) { - NvBufSurfaceUnMapEglImage(surface, index); - } - if (buffer_mapped) { - gst_buffer_unmap(buffer, &map_info); - } - // DEBUG: Print the actual values - std::cout << "Frame " << frame_count - << " MSE=" << metrics["MSE"] - << " SSIM=" << metrics["SSIM"] - << " FLOW=" << metrics["FLOW"] - << " -> " << (should_process ? "PROCESS" : "SKIP") << std::endl; + if (cuda_registered) cuGraphicsUnregisterResource(cudaResource); + if (egl_mapped) NvBufSurfaceUnMapEglImage(surface, index); + if (buffer_mapped) gst_buffer_unmap(buffer, &map_info); + + std::cout << "Frame " << frame_count + << " MSE=" << metrics["MSE"] + << " SSIM=" << metrics["SSIM"] + << " FLOW=" << metrics["FLOW"] + << " -> " << (should_process ? "PROCESS" : "SKIP") << std::endl; return should_process; @@ -125,22 +88,13 @@ bool frame_probe(uintptr_t buffer_ptr, int batch_id) } cleanup: - // Cleanup in reverse order - if (cuda_registered) { - cuGraphicsUnregisterResource(cudaResource); - } - if (egl_mapped && surface) { - NvBufSurfaceUnMapEglImage(surface, batch_id); - } - if (buffer_mapped && buffer) { - gst_buffer_unmap(buffer, &map_info); - } + if (cuda_registered) cuGraphicsUnregisterResource(cudaResource); + if (egl_mapped && surface) NvBufSurfaceUnMapEglImage(surface, batch_id); + if (buffer_mapped && buffer) gst_buffer_unmap(buffer, &map_info); - return true; // Process by default on error + return true; } -// ----------------------------------------------------------- -// חשיפה לפייתון עם pybind11 -// ----------------------------------------------------------- + PYBIND11_MODULE(gpu_probe, m) { m.def("frame_probe", &frame_probe, diff --git a/src/gpu_probe.cpython-310-aarch64-linux-gnu.so b/src/gpu_probe.cpython-310-aarch64-linux-gnu.so index 924f43d70deac0e5710d069ac1d55934b435afc0..bc14f0b3b7c2c0b80e576730ca68974d8771b815 100755 GIT binary patch delta 10669 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 From 6e788d211973d266666e6f8fc156fc3bf2bb585f Mon Sep 17 00:00:00 2001 From: chani0343 Date: Sun, 9 Nov 2025 22:51:32 +0200 Subject: [PATCH 08/10] Remove unused GPU buffer files - streamlined implementation --- ...pu_buffer.cpython-310-aarch64-linux-gnu.so | Bin 208664 -> 0 bytes src/gpu_buffer_binding.cpp | 100 ------------- src/gpu_frame_change_detector.py | 140 ------------------ 3 files changed, 240 deletions(-) delete mode 100755 src/gpu_buffer.cpython-310-aarch64-linux-gnu.so delete mode 100644 src/gpu_buffer_binding.cpp delete mode 100644 src/gpu_frame_change_detector.py diff --git a/src/gpu_buffer.cpython-310-aarch64-linux-gnu.so b/src/gpu_buffer.cpython-310-aarch64-linux-gnu.so deleted file mode 100755 index 0c7622b48178891a7ddc8c715ead19ca734317b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208664 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 diff --git a/src/gpu_buffer_binding.cpp b/src/gpu_buffer_binding.cpp deleted file mode 100644 index df385b54..00000000 --- a/src/gpu_buffer_binding.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include "nvbufsurface.h" -#include -#include -#include -#include - -namespace py = pybind11; - -class GpuMatWrapper { -public: - cv::cuda::GpuMat mat; - - GpuMatWrapper(const cv::cuda::GpuMat& m) : mat(m) {} - - int rows() const { return mat.rows; } - int cols() const { return mat.cols; } - int type() const { return mat.type(); } - - cv::cuda::GpuMat& get_mat() { return mat; } -}; - -cv::cuda::GpuMat get_gpu_mat_from_surface(NvBufSurface *input_buf, guint index) -{ - if (!input_buf) { - throw std::runtime_error("NvBufSurface pointer is null"); - } - - if (index >= input_buf->numFilled) { - throw std::runtime_error("Index out of range"); - } - - if (!input_buf->surfaceList) { - throw std::runtime_error("Surface list is null"); - } - - if (NvBufSurfaceMapEglImage(input_buf, index) != 0) { - throw std::runtime_error("Failed to map EGL image"); - } - - EGLImageKHR eglImage = input_buf->surfaceList[index].mappedAddr.eglImage; - if (!eglImage) { - NvBufSurfaceUnMapEglImage(input_buf, index); - throw std::runtime_error("EGL image is null"); - } - - CUgraphicsResource cudaResource; - CUresult status = cuGraphicsEGLRegisterImage(&cudaResource, eglImage, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE); - if (status != CUDA_SUCCESS) { - NvBufSurfaceUnMapEglImage(input_buf, index); - throw std::runtime_error("cuGraphicsEGLRegisterImage failed"); - } - - CUeglFrame eglFrame; - status = cuGraphicsResourceGetMappedEglFrame(&eglFrame, cudaResource, 0, 0); - if (status != CUDA_SUCCESS) { - cuGraphicsUnregisterResource(cudaResource); - NvBufSurfaceUnMapEglImage(input_buf, index); - throw std::runtime_error("cuGraphicsResourceGetMappedEglFrame failed"); - } - - void *dev_ptr = eglFrame.frame.pPitch[0]; - int width = input_buf->surfaceList[index].width; - int height = input_buf->surfaceList[index].height; - size_t pitch = eglFrame.pitch; - - cv::cuda::GpuMat gpuMat(height, width, CV_8UC4); - cudaMemcpy2D(gpuMat.ptr(), gpuMat.step, dev_ptr, pitch, - width * 4, height, cudaMemcpyDeviceToDevice); - - cuGraphicsUnregisterResource(cudaResource); - NvBufSurfaceUnMapEglImage(input_buf, index); - - return gpuMat; -} - -PYBIND11_MODULE(gpu_buffer, m) { - py::class_(m, "GpuMatWrapper") - .def("rows", &GpuMatWrapper::rows) - .def("cols", &GpuMatWrapper::cols) - .def("type", &GpuMatWrapper::type); - - m.def("get_gpu_buffer_from_gst", [](uintptr_t gst_buffer_hash, unsigned int index) -> GpuMatWrapper { - GstBuffer *buffer = reinterpret_cast(gst_buffer_hash); - - GstMapInfo map_info; - if (!gst_buffer_map(buffer, &map_info, GST_MAP_READ)) { - throw std::runtime_error("Failed to map GstBuffer"); - } - - NvBufSurface *surface = (NvBufSurface *)map_info.data; - cv::cuda::GpuMat gpu_mat = get_gpu_mat_from_surface(surface, index); - - gst_buffer_unmap(buffer, &map_info); - - return GpuMatWrapper(gpu_mat); - }, py::arg("gst_buffer_hash"), py::arg("index")); -} \ No newline at end of file diff --git a/src/gpu_frame_change_detector.py b/src/gpu_frame_change_detector.py deleted file mode 100644 index 489c63d3..00000000 --- a/src/gpu_frame_change_detector.py +++ /dev/null @@ -1,140 +0,0 @@ -# src/gpu_frame_change_detector.py -import cv2 -import numpy as np -import gpu_probe # Add this import - -from typing import Tuple, Dict, Optional - -# Configurable thresholds -MSE_THRESH = 45.0 -SSIM_THRESH = 0.992 -FLOW_THRESH = 0.7 - -class GPUFrameChangeDetector: - _instance = None - - def __new__(cls, *args, **kwargs): - if cls._instance is None: - cls._instance = super().__new__(cls) - return cls._instance - - def __init__(self, mse_thresh=MSE_THRESH, ssim_thresh=SSIM_THRESH, flow_thresh=FLOW_THRESH): - if hasattr(self, "_initialized") and self._initialized: - return - self._initialized = True - - self.mse_thresh = mse_thresh - self.ssim_thresh = ssim_thresh - self.flow_thresh = flow_thresh - self.prev_frame_gpu: Optional[cv2.cuda_GpuMat] = None - - def preprocess_gpu(self, frame: np.ndarray) -> cv2.cuda_GpuMat: - gpu_mat = cv2.cuda_GpuMat() - gpu_mat.upload(frame) - resized = cv2.cuda.resize(gpu_mat, (160, 90)) - blurred = cv2.cuda.GaussianBlur(resized, (5, 5), 0) - return blurred - - def mse_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: - diff = cv2.cuda.absdiff(imgA, imgB) - sqr = cv2.cuda.multiply(diff, diff) - sqr_cpu = sqr.download() - return float(np.mean(sqr_cpu)) - - def simple_ssim_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: - grayA = cv2.cuda.cvtColor(imgA, cv2.COLOR_BGR2GRAY) - grayB = cv2.cuda.cvtColor(imgB, cv2.COLOR_BGR2GRAY) - - grayA_cpu = grayA.download() - grayB_cpu = grayB.download() - - mu_x, mu_y = grayA_cpu.mean(), grayB_cpu.mean() - sigma_x, sigma_y = grayA_cpu.std(), grayB_cpu.std() - sigma_xy = ((grayA_cpu - mu_x) * (grayB_cpu - mu_y)).mean() - - C1, C2 = 6.5025, 58.5225 - ssim = ((2 * mu_x * mu_y + C1) * (2 * sigma_xy + C2)) / \ - ((mu_x**2 + mu_y**2 + C1) * (sigma_x**2 + sigma_y**2 + C2)) - return float(ssim) - - def optical_flow_gpu(self, imgA: cv2.cuda_GpuMat, imgB: cv2.cuda_GpuMat) -> float: - grayA = cv2.cuda.cvtColor(imgA, cv2.COLOR_BGR2GRAY) - grayB = cv2.cuda.cvtColor(imgB, cv2.COLOR_BGR2GRAY) - - flow = cv2.cuda_FarnebackOpticalFlow.create() - flow_result = flow.calc(grayA, grayB, None) - - flow_cpu = flow_result.download() - mag, _ = cv2.cartToPolar(flow_cpu[..., 0], flow_cpu[..., 1]) - - # חישוב optical flow כמו ב-CPU - רק פיקסלים פעילים - OPTICAL_FLOW_ACTIVE_THRESH = 0.5 - active = mag[mag > OPTICAL_FLOW_ACTIVE_THRESH] - return float(np.mean(active) if active.size > 0 else 0.0) - - def should_process_gpu(self, current_frame: np.ndarray) -> Tuple[bool, Dict[str, float]]: - if self.prev_frame_gpu is None: - self.prev_frame_gpu = self.preprocess_gpu(current_frame) - return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} - - processed_curr = self.preprocess_gpu(current_frame) - - mse_val = self.mse_gpu(self.prev_frame_gpu, processed_curr) - ssim_val = self.simple_ssim_gpu(self.prev_frame_gpu, processed_curr) - flow_val = self.optical_flow_gpu(self.prev_frame_gpu, processed_curr) - - # אותה לוגיקה כמו ב-CPU - is_static = (mse_val < self.mse_thresh and - ssim_val > self.ssim_thresh and - flow_val < self.flow_thresh) - - self.prev_frame_gpu = processed_curr - should_proc = not is_static - - return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} - - def should_process_gpu_direct(self, gpu_frame: cv2.cuda_GpuMat) -> Tuple[bool, Dict[str, float]]: - """Process directly on GPU without CPU conversion - same logic as CPU version""" - if self.prev_frame_gpu is None: - # preprocess: resize + blur - resized = cv2.cuda.resize(gpu_frame, (160, 90)) - self.prev_frame_gpu = cv2.cuda.GaussianBlur(resized, (5, 5), 0) - return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} - - # preprocess current frame: resize + blur - resized = cv2.cuda.resize(gpu_frame, (160, 90)) - processed_curr = cv2.cuda.GaussianBlur(resized, (5, 5), 0) - - mse_val = self.mse_gpu(self.prev_frame_gpu, processed_curr) - ssim_val = self.simple_ssim_gpu(self.prev_frame_gpu, processed_curr) - flow_val = self.optical_flow_gpu(self.prev_frame_gpu, processed_curr) - - # אותה לוגיקה בדיוק כמו ב-CPU - is_static = (mse_val < self.mse_thresh and - ssim_val > self.ssim_thresh and - flow_val < self.flow_thresh) - - self.prev_frame_gpu = processed_curr - should_proc = not is_static - - return should_proc, {"MSE": mse_val, "SSIM": ssim_val, "FLOW": flow_val} - - - def should_process_gpu_wrapper(self, gpu_wrapper) -> Tuple[bool, Dict[str, float]]: - """Process GPU wrapper from C++ - same logic as CPU version""" - try: - if not hasattr(self, 'prev_gpu_wrapper'): - self.prev_gpu_wrapper = gpu_buffer.create_empty_wrapper() - - # Pass the threshold values as arguments - should_proc = gpu_wrapper.should_process( - self.prev_gpu_wrapper, - self.mse_thresh, - self.ssim_thresh, - self.flow_thresh - ) - return should_proc, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} - - except Exception as e: - print(f"GPU wrapper processing error: {e}") - return True, {"MSE": 0.0, "SSIM": 1.0, "FLOW": 0.0} From 41c73024eddcb123ee3a21137d1791d7ee9c89e3 Mon Sep 17 00:00:00 2001 From: Sarah Gershuni Date: Mon, 10 Nov 2025 14:36:36 +0200 Subject: [PATCH 09/10] add typings, new line, and remove unused function --- src/gpu_frames_skipping_pipeline.py | 103 +++++++++++++--------------- 1 file changed, 47 insertions(+), 56 deletions(-) diff --git a/src/gpu_frames_skipping_pipeline.py b/src/gpu_frames_skipping_pipeline.py index 4e9045b2..757d0479 100644 --- a/src/gpu_frames_skipping_pipeline.py +++ b/src/gpu_frames_skipping_pipeline.py @@ -4,60 +4,51 @@ import pyds import ctypes import gpu_probe +from typing import Any, Dict, Optional gi.require_version("Gst", "1.0") from gi.repository import GLib, Gst from gpu_frame_change_detector import GPUFrameChangeDetector # Configurations -RTSP_URL = "rtsp://127.0.0.1:8554/test" -CONFIG_FILE = "/workspace/src/configs/resnet18.txt" -OUTPUT_DIR = "/workspace/output/frames/" +RTSP_URL: str = "rtsp://127.0.0.1:8554/test" +CONFIG_FILE: str = "/workspace/src/configs/resnet18.txt" +OUTPUT_DIR: str = "/workspace/output/frames/" os.makedirs(OUTPUT_DIR, exist_ok=True) -stats = {"total": 0, "skipped": 0, "processed": 0} +stats: Dict[str, int] = {"total": 0, "skipped": 0, "processed": 0} -def get_jetson_frame(gst_buffer, batch_id): - """Retrieve GPU GpuMat from DeepStream buffer""" - try: - buffer_ptr = hash(gst_buffer) - gpu_wrapper = gpu_buffer.get_gpu_buffer_from_gst(buffer_ptr, batch_id) - return gpu_wrapper - except Exception as e: - print(f"Error in get_jetson_frame: {e}") - return None - -def jetson_frame_skip_probe(pad, info, u_data): - buffer_ptr = hash(info.get_buffer()) - batch_id = 0 - should_process = gpu_probe.frame_probe(buffer_ptr, batch_id) - if should_process: - stats["processed"] += 1 - print(f"✅ PROCESSING frame {stats['total']}") - return Gst.PadProbeReturn.OK - else: - stats["skipped"] += 1 - print(f"⏭️ SKIPPING frame {stats['total']}") - return Gst.PadProbeReturn.DROP +def jetson_frame_skip_probe(pad: Gst.Pad, info: Gst.PadProbeInfo, u_data: Optional[Any]) -> Gst.PadProbeReturn: + buffer_ptr: int = hash(info.get_buffer()) + batch_id: int = 0 + should_process: bool = gpu_probe.frame_probe(buffer_ptr, batch_id) + if should_process: + stats["processed"] += 1 + print(f"✅ PROCESSING frame {stats['total']}") + return Gst.PadProbeReturn.OK + else: + stats["skipped"] += 1 + print(f"⏭️ SKIPPING frame {stats['total']}") + return Gst.PadProbeReturn.DROP -def build_jetson_pipeline(): +def build_jetson_pipeline() -> Gst.Pipeline: """Build Jetson-compatible pipeline""" - pipeline = Gst.Pipeline.new("jetson-frame-skipping-pipeline") + pipeline: Gst.Pipeline = Gst.Pipeline.new("jetson-frame-skipping-pipeline") # Elements - rtspsrc = Gst.ElementFactory.make("rtspsrc", "source") - depay = Gst.ElementFactory.make("rtph264depay", "depay") - parse = Gst.ElementFactory.make("h264parse", "parse") - decode = Gst.ElementFactory.make("decodebin", "decode") - convert = Gst.ElementFactory.make("videoconvert", "convert") - nvvideoconvert = Gst.ElementFactory.make("nvvideoconvert", "nvvideoconvert") - capsfilter = Gst.ElementFactory.make("capsfilter", "capsfilter") - streammux = Gst.ElementFactory.make("nvstreammux", "streammux") - nvinfer = Gst.ElementFactory.make("nvinfer", "nvinfer") - nvosd = Gst.ElementFactory.make("nvdsosd", "osd") - nvvideoconvert2 = Gst.ElementFactory.make("nvvideoconvert", "nvvideoconvert2") - jpegenc = Gst.ElementFactory.make("jpegenc", "jpegenc") - sink = Gst.ElementFactory.make("multifilesink", "sink") + rtspsrc: Gst.Element = Gst.ElementFactory.make("rtspsrc", "source") + depay: Gst.Element = Gst.ElementFactory.make("rtph264depay", "depay") + parse: Gst.Element = Gst.ElementFactory.make("h264parse", "parse") + decode: Gst.Element = Gst.ElementFactory.make("decodebin", "decode") + convert: Gst.Element = Gst.ElementFactory.make("videoconvert", "convert") + nvvideoconvert: Gst.Element = Gst.ElementFactory.make("nvvideoconvert", "nvvideoconvert") + capsfilter: Gst.Element = Gst.ElementFactory.make("capsfilter", "capsfilter") + streammux: Gst.Element = Gst.ElementFactory.make("nvstreammux", "streammux") + nvinfer: Gst.Element = Gst.ElementFactory.make("nvinfer", "nvinfer") + nvosd: Gst.Element = Gst.ElementFactory.make("nvdsosd", "osd") + nvvideoconvert2: Gst.Element = Gst.ElementFactory.make("nvvideoconvert", "nvvideoconvert2") + jpegenc: Gst.Element = Gst.ElementFactory.make("jpegenc", "jpegenc") + sink: Gst.Element = Gst.ElementFactory.make("multifilesink", "sink") for e in [rtspsrc, depay, parse, decode, convert, nvvideoconvert, capsfilter, streammux, nvinfer, nvosd, nvvideoconvert2, jpegenc, sink]: @@ -71,7 +62,7 @@ def build_jetson_pipeline(): nvinfer.set_property("config-file-path", CONFIG_FILE) sink.set_property("location", os.path.join(OUTPUT_DIR, "jetson_frame_%05d.jpg")) - caps = Gst.Caps.from_string("video/x-raw(memory:NVMM), format=RGBA") + caps: Gst.Caps = Gst.Caps.from_string("video/x-raw(memory:NVMM), format=RGBA") capsfilter.set_property("caps", caps) # Links @@ -86,39 +77,39 @@ def build_jetson_pipeline(): jpegenc.link(sink) # Dynamic pads - def on_pad_added_rtspsrc(src, pad): - sinkpad = depay.get_static_pad("sink") + def on_pad_added_rtspsrc(src: Gst.Element, pad: Gst.Pad) -> None: + sinkpad: Gst.Pad = depay.get_static_pad("sink") if not sinkpad.is_linked(): pad.link(sinkpad) - def on_pad_added_decode(src, pad): - sinkpad = convert.get_static_pad("sink") + def on_pad_added_decode(src: Gst.Element, pad: Gst.Pad) -> None: + sinkpad: Gst.Pad = convert.get_static_pad("sink") if not sinkpad.is_linked(): pad.link(sinkpad) rtspsrc.connect("pad-added", on_pad_added_rtspsrc) decode.connect("pad-added", on_pad_added_decode) - srcpad = capsfilter.get_static_pad("src") - sinkpad = streammux.get_request_pad("sink_0") + srcpad: Gst.Pad = capsfilter.get_static_pad("src") + sinkpad: Gst.Pad = streammux.get_request_pad("sink_0") srcpad.link(sinkpad) # Add probe - streammux_src_pad = streammux.get_static_pad("src") + streammux_src_pad: Gst.Pad = streammux.get_static_pad("src") streammux_src_pad.add_probe(Gst.PadProbeType.BUFFER, jetson_frame_skip_probe, None) return pipeline -def run_jetson_pipeline(): +def run_jetson_pipeline() -> None: """Run Jetson pipeline""" Gst.init(None) - pipeline = build_jetson_pipeline() + pipeline: Gst.Pipeline = build_jetson_pipeline() - loop = GLib.MainLoop() - bus = pipeline.get_bus() + loop: GLib.MainLoop = GLib.MainLoop() + bus: Gst.Bus = pipeline.get_bus() bus.add_signal_watch() - def on_message(bus, msg): + def on_message(bus: Gst.Bus, msg: Gst.Message) -> None: if msg.type == Gst.MessageType.ERROR: err, _ = msg.parse_error() print("ERROR:", err) @@ -138,7 +129,7 @@ def on_message(bus, msg): finally: pipeline.set_state(Gst.State.NULL) if stats["total"] > 0: - skip_ratio = stats["skipped"] / stats["total"] + skip_ratio: float = stats["skipped"] / stats["total"] print(f"\n🔥 Jetson Final Stats:") print(f" Total: {stats['total']}") print(f" Processed: {stats['processed']}") @@ -146,4 +137,4 @@ def on_message(bus, msg): print(f" Skip Ratio: {skip_ratio:.1%}") if __name__ == "__main__": - run_jetson_pipeline() \ No newline at end of file + run_jetson_pipeline() From 45d885febc2bb07912c1039229dd85033902333b Mon Sep 17 00:00:00 2001 From: Sarah Gershuni Date: Tue, 11 Nov 2025 16:25:02 +0200 Subject: [PATCH 10/10] Update frame_comparison_results.md to include GPU implementation Co-authored-by: Sarah Gershuni Co-authored-by: Chani Orlinski --- docs/frame_comparison_results.md | 62 +++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/docs/frame_comparison_results.md b/docs/frame_comparison_results.md index f5674ca7..9ecfb907 100644 --- a/docs/frame_comparison_results.md +++ b/docs/frame_comparison_results.md @@ -76,7 +76,9 @@ Decision: ⚙️ PROCESS ## Decision Logic -Frames are skipped when minimal change is detected. +### CPU Implementation + +Frames are skipped when minimal change is detected: ```python if mse_val < 50 and ssim_val > 0.995 and flow_val < 0.1: @@ -85,18 +87,60 @@ else: process = True ``` +### GPU Implementation (C++/CUDA) + +The GPU implementation uses adjusted thresholds due to precision differences: + +```cpp +bool is_static = (mse_val < 10.0 && ssim_val > 0.995 && flow_val < 0.05); +return {!is_static, metrics}; +``` + +**Key Differences:** +- **MSE threshold:** `50` (CPU) → `10.0` (GPU) +- **SSIM threshold:** `0.995` (both, but different precision) +- **Flow threshold:** `0.1` (CPU) → `0.05` (GPU) --- -## Metric Interpretation +## Implementation Differences: CPU vs GPU + +### Precision & Accuracy + +| Aspect | CPU Implementation | GPU Implementation | +|--------|-------------------|-------------------| +| **Math Precision** | `float64` (double precision) | `float32` (single precision) | +| **Optical Flow API** | `cv2.calcOpticalFlowFarneback()` | `cv::cuda::FarnebackOpticalFlow::create()->calc()` | +| **Flow Accuracy** | Higher precision, more accurate | Lower precision, slightly less accurate | +| **Computation** | Sequential on CPU cores | Parallel on GPU | -| Metric | Typical Range | Interpretation | -| ------------ | ------------------------------------------------------------------------------------- | -------------- | -| **MSE** | 0–50 → no change
50–1000 → moderate change
>1000 → significant scene change | | -| **SSIM** | >0.995 → identical
0.90–0.995 → moderate change
<0.90 → major visual difference | | -| **FLOW** | <0.1 → static
0.5–2.0 → small motion
>2.0 → strong/global motion | | -| **MOTION %** | <5% → static
5–30% → partial motion
>30% → large motion area | | +### Behavioral Changes + +Due to the precision and algorithm differences in GPU implementation: + +1. **Lower MSE threshold (10.0 vs 50):** + - GPU's `float32` arithmetic produces slightly different MSE values + - More conservative threshold compensates for reduced precision + - Prevents false negatives (missing actual changes) + +2. **Lower Flow threshold (0.05 vs 0.1):** + - GPU optical flow (`cv::cuda::FarnebackOpticalFlow`) is less accurate than CPU version + - Threshold adjusted to account for measurement noise + - Reduces false positives (detecting motion where there is none) + +3. **Simplified method selection:** + - GPU focuses on MSE + SSIM + Optical Flow only + - Histogram correlation, Motion Mask, and ORB matching excluded for performance + - These methods don't provide significant GPU acceleration benefits + +--- + +## Metric Interpretation -These thresholds were derived empirically from the RTSP domain test videos and can be fine-tuned for other environments or resolutions. +| Metric | CPU Typical Range | GPU Typical Range | Interpretation | +| ------------ | ----------------- | ----------------- | -------------- | +| **MSE** | 0–50 → no change
50–1000 → moderate
>1000 → major | 0–10 → no change
10–800 → moderate
>800 → major | GPU values tend to be slightly lower due to float32 | +| **SSIM** | >0.995 → identical
0.90–0.995 → moderate
<0.90 → major | >0.995 → identical
0.92–0.995 → moderate
<0.92 → major | Similar ranges, GPU slightly less precise | +| **FLOW** | <0.1 → static
0.5–2.0 → small motion
>2.0 → strong | <0.05 → static
0.3–1.5 → small motion
>1.5 → strong | GPU flow values are generally lower | ---