From 49c3a0d59aaab5d72e2b84dcec034b7420f3d700 Mon Sep 17 00:00:00 2001 From: r83575 Date: Mon, 1 Dec 2025 14:55:01 +0200 Subject: [PATCH 1/2] update the threshold values --- .../gpu/frame_change_detector.cpp | 9 +++++++-- ...ing_probe.cpython-310-aarch64-linux-gnu.so | Bin 183872 -> 183872 bytes 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp b/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp index 3d38bb4..f2bfc58 100644 --- a/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp +++ b/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp @@ -5,6 +5,11 @@ #include #include +const double MSE_THRESH = 20.0; +const double SSIM_THRESH = 0.998; +const double FLOW_THRESH = 0.5; +const double OPTICAL_FLOW_ACTIVE_THRESH = 0.5; + std::unique_ptr GPUFrameChangeDetector::instance = nullptr; GPUFrameChangeDetector::GPUFrameChangeDetector() @@ -88,7 +93,7 @@ double GPUFrameChangeDetector::optical_flow_gpu(const cv::cuda::GpuMat& imgA, co cv::cuda::cartToPolar(flow_xy[0], flow_xy[1], mag, angle, true); cv::cuda::GpuMat active_mask; - cv::cuda::threshold(mag, active_mask, 0.5, 1.0, cv::THRESH_BINARY); + cv::cuda::threshold(mag, active_mask, OPTICAL_FLOW_ACTIVE_THRESH, 1.0, cv::THRESH_BINARY); cv::cuda::GpuMat active_pixels; mag.copyTo(active_pixels, active_mask); @@ -116,7 +121,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); - bool is_static = (mse_val < 10.0 && ssim_val > 0.995 && flow_val < 0.05); + bool is_static = (mse_val < MSE_THRESH && ssim_val > SSIM_THRESH && flow_val < FLOW_THRESH); prev_frame_gpu = processed_curr; diff --git a/src/deepstream/probes/frame_comparison/gpu/frame_skipping_probe.cpython-310-aarch64-linux-gnu.so b/src/deepstream/probes/frame_comparison/gpu/frame_skipping_probe.cpython-310-aarch64-linux-gnu.so index 692fd04d1ce528aea6092c8d821b5a2fb68c21ac..9eb940938cfe8f2192679787747cc67430a092f3 100755 GIT binary patch delta 2927 zcmYM04Nz3q702&+EC>Sbs;r2jEV?SDQn6yuYR0wd#3rU)t+v|exSe3tDNffJoyLii zT}RtW(>7~D=HLYCCV>oL(5@A`I5Ly9V-mF3LZlHD^r4_2D2rkMrSJ6rP}@6m`MrDY zx##PCERmALNJ(PAlaOxJl-be`?-&^C`kF=t|KoeR=xB;F{j(UW{=uca{g->EZ2q(- zr+UK5lTNL6A~hXon-p%FL~GumUxepZ(hyNFoLxoVBKnXw9-}jq7`7j$ENzahV5&RQ zGgbfT(Mj;IRzIpvzhy|OL;2V0AE?va_=Y^7{1XnZ<((l)wFi$2Ka5e8`T^Ha|HpBM z_bC5Y+xSR`GSW`|Mfg;l>T5G(ogOo}@->Y0nDLbf+!&&zRLWyd&~$R~f)g~$`CHi0 zW9*fb;Q#7(Q2b%&sofIrbCJ{xN6f#&`%X};)Ay4x*?%qV?OjTfV;1LIlzJN>If8~9 zj8kd@=p3z7F<3NCDgTFt9LiKG0yfN0N(a?U=znC$KCE?v0WbiTfjU?RM!^c$(?2$( z9b8dnNX{swoaKg3HsQndi6K$Y^C=9)E7eeCNDCM_21AKTg^n9y8H@RohHRLC2x|;k zmy`T#`2)e)Y8B&ao00gyQ5NrT- zu-{auLj@4A!=W@-#{so5ID}o z8=&nL9GT;G%$w{$K*dyvS-WkStOQy2goE#$%i!vJi|;6$yfo43Q?#;}97HgJ4z)^rnfd z1Kra_{9pqZGUZN@7SJ(6B*_jtV6NSVi7b)r5ZGQ2DF!`rM0(6|wul3VE%En4gGDmx$~JJxk#j^lw3;IJEB9MO=6h{P~#o z;lsNP20(oWDli$Pd{e{=dch!=;}g+A4`@k;qXTdZ+6qM!PQUl}A}c`KpOEoX1ROvD zpyypAkbyw{2Dt+nheaAd*J%+au5t8?h%bH`7Ji13fx)w=0I2?s(t`o8AB=(%r=yg3 zJ2ru?dXY{r{}L+W#P}K#fI&BS4)lP{V9=C9FVKRDK+kpq>t?_{8jgb5IDD1t_L5Q@ zs;7dHi8=VL;kK(Zp4$1*Rhph=`!imEXBsBV<@?ZUc-}P{KfC&@At>=kGpEYXBap%A zNHb+M=q=2%ca-weAe(;ShJhfaG6J%1AlV~MdU7M*y}N6 z8Z(;%y#P~noY{iK?Yy#u=8}{5w9sOhIssv9(GlD`ZXKXhj)>xy_v0&9T>^xr&!vr&p++|9BnGd<$Q^PFtvlvv0uFCfc^g6r^7%Hzm%@)s;T+DsNk66v-hY!`A_t$p3E>8&TTrRx>|5~j2i|Os zqFiWVH=id!pSpk11Y=}&@8w4liM^CL0r5|ufhB5JMdn{>+hgsEBKT->g2XN z^pd6?@(Z2xJ=odWiI~#4v=g}ub4Mq(qn?wyFv{iiT?o|8gI z+(q!XRdIGVMoGN68#b%?H{Dq7;M1ni%U#_lVFAC`17Roc z>Y+SMm2zbd{R}Q*@4fpkAv>a8tcn_+@O!tv6cJ)3~{9Je+D!KgmeMGpA zvwM+tgbRD=DE4f26vB8u9Hsf1gROl~J;Z1G5KSHT^}*;Wp7#K$ zt>g6%=-1|HdO!!Te$7L;ck=rWVXc7w^N=oKU1LA}5*fbu2r(@T?|Os+;}|x6Lq9_L znFGizh4&1=QKl~H@s$;&cw_fo=GZx7O8eHg5HE)hu(r-gKo+L=tZX% zXnCVzt1?J!2=5xDU5-sYl!iwDZ9BL-ygpfbmljr8Rj0*LW>tscEPAriM_H<^RFr@x ztSQk_HAW35S_a3cbIGQ-VhqIRtd=^fqHv~F+cNsS5RDG|)3hvW+Vg))M?5_H6QiuE zg3o4YsgxhSlBI2lqvr6Uxmuou{NY{mwL6J8HXD~}mvQ*#xqv7qEYse><1=r$HY*%i zrr8MRtMU8V7VH{ib8(=5z8vN};l0Z>ACW6Ov_e~Iqo(kp_1c}?I8B)sw7Ch-gK_c3 b3tC=6#nq>YSMU*Ym_Phg&(ZZY6jPb)r4L* z)dW%^Hr-mN9v|Q`H;p&_EGW!$QIo5lv2gN(Z!XdR2|rqtdtK_GhzR^E<3Q+ z0hWUWLC;st4j-5cLa{2 zl&U_ei)kF@ztkmff>J?`F7^ZjZqTK6ic%GS)5VWK)!+c=1H@YkZQ^C!k z{hJb0h!+PG6`%{O2P?oP&<73}^ImiS8C%ZiQUDf%W+dtb%fZyMx*P}1f7c}w2|Lg0 z5*-QtQpkts9ECfrc1K3l%IJO0JX z_Ca(2^gh(Z2Ub5q0^?MPDjq@$v8O(hh!1o`h{WNLIn5$VL061OJ!pSQ#55jqoQNF^ zOcgl@)=d*>2J@^UL9hZ$jf35Ek(HohhDa&s1>J_;Cei|0l0~B9OW+7E^W!m*D&hpq zPm5H5d1)d&hCExuio;g%tjKY&E?r~@%=-Zn!AER)UStR8$Up$lwLqi~tXqhA3o6YN z*$U=mAuw2+k3w;19qUE1OK>|B7s3E^Zh!;Ow-Ftfj8?uSvKe%4N2OqDiHIM}15Jqt zv=f0r^KKD^)9?I+$P1wP15`W}374Y)Fz;g&Fb#?P5qc{M_J}lr_7fr{Hhjl{lOpEn zSojyT46JBG2f!d$54ye<82|&IWd>S_`(rI=KPM6Z*Iq=;_0Qhr&r@%bW2UZw* z*tuHJ5!jjAur3)Fj8go&D>P-+o=P01VOc4h4V8xBhA#7aofXW+XyM)~xZ%t^?kY{3 z{A46A#QOC=#()hW}n8KYf{EV2;Tg#TNP^RLkqxQc45~<0P zqo*k=ER1oSKeo?uyenm?BUt1kes}{l~TyW+gkDSQpbl{X&$BXWn-?0AGg9Xn-^T8 zm*^C~dkt5AGoQXj`P9kDZHTavSG8e*m3Ozn(!{3?sfj~vG!0%7{6IM`@Iz_iO@1t> z=So9z@&zD%hvPeklU~vZWdU#Nq=ges z;aV$13dUm`hD2P2RzL6WqUV3zMP?eykzMo#u&oREWO8K}nvuq>1`>J74IrA=0oqU( z@4rDak;&;Bv<4|8-9!reIQJ&{mdQs9$(u-Q~9#0R@58-EB0Exx%Cjk^Rz^wu7 z$te!+hLpy+-N@F#W!o$G_Ewzz-J8QSPmId6(`?@ zWa3q~;j@>$vPL9l*vV^+Bn4cOT8uhL-T3 z`%tf&Lw&R!hhbemtqCv97b)b$EeP`Oej1Mgy8Gchn`hlajY~QA9=&Ott$VZ+j+Wd< z9*O+^eYh>;2lweBmGYSZdL5-c_W;SIdp15mr*SCHd`B;%4+(=PGMYCHB4mIs3{uLh zQd~$QU#Rg772q=40o};=WLyiixbTWODTqe-czF($*@@iGx2SwkZJ+zFwS8#U^HX6F$}#682M***!%Z?!c?qsb7QJDk%~N*Q?>jE z@_QD{(K1Zr@@$!>-Hf7CUY(^~LM!KH13`{ltbJ&-DMw53G%VJ}63+dFA8GlxKA!g+7Oc{4Zl!8YI;+iz97)E(tIui~k?t!`igxp-hFCQ8 ML_|(!wGCna0d}N!X8-^I From 05e370139d01ed1224742f5bd19ed387a6ef1e0b Mon Sep 17 00:00:00 2001 From: r83575 Date: Mon, 1 Dec 2025 15:43:18 +0200 Subject: [PATCH 2/2] Refactor: applied named constants (MSE, SSIM, FLOW thresholds) in constructor init --- .../gpu/frame_change_detector.cpp | 4 ++-- ...ing_probe.cpython-310-aarch64-linux-gnu.so | Bin 183872 -> 183872 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp b/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp index f2bfc58..1b438e1 100644 --- a/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp +++ b/src/deepstream/probes/frame_comparison/gpu/frame_change_detector.cpp @@ -13,7 +13,7 @@ const double OPTICAL_FLOW_ACTIVE_THRESH = 0.5; std::unique_ptr GPUFrameChangeDetector::instance = nullptr; GPUFrameChangeDetector::GPUFrameChangeDetector() - : mse_thresh(500.0), ssim_thresh(0.99), flow_thresh(2.0), initialized(true) {} + : mse_thresh(MSE_THRESH), ssim_thresh(SSIM_THRESH), flow_thresh(FLOW_THRESH), initialized(true) {} GPUFrameChangeDetector* GPUFrameChangeDetector::getInstance() { if (!instance) { @@ -121,7 +121,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); - bool is_static = (mse_val < MSE_THRESH && ssim_val > SSIM_THRESH && flow_val < FLOW_THRESH); + bool is_static = (mse_val < mse_thresh && ssim_val > ssim_thresh && flow_val < flow_thresh); prev_frame_gpu = processed_curr; diff --git a/src/deepstream/probes/frame_comparison/gpu/frame_skipping_probe.cpython-310-aarch64-linux-gnu.so b/src/deepstream/probes/frame_comparison/gpu/frame_skipping_probe.cpython-310-aarch64-linux-gnu.so index 9eb940938cfe8f2192679787747cc67430a092f3..8d99c9e94f8a1b675ed4ed7ec3ddc60b3075eed6 100755 GIT binary patch delta 2770 zcmZXWe^8Xi8OPt}1@sVzsAo6=!l9t2#R^r!IpTO$+u#JJ+G6KYb;O2@N2^nvGSjo# zK}Iu!%`e)-K9>oXkQO_n)edcKk4|)YcAz<}X<#IJ3J56Rp@$xd;m*SQ^t)KvKe{vP z=l0oW_xV20?z`x(Px99%)s-ijXX~13=ATuL&#_;nslk8w_CflRzIDH$wXGr`U%>U64=d+q-YB9u~j=+9HPA|~3roS7~hd?dh z7#IXi3Gn;GkWA15mV$Qh09XPZ2c4h?^n6ln$T|FIf}tG@fn&-cfC@md?V=&&U@d5Z z&>&a`+AkS$7PS1skYWgSe`-i_BKVmh4$#wqgcPqB(hOQUvA-IF5zuzkkTO)*R2@WV z@xyiJU|V99+$_JJ+nQ84tt5I^V~#r$mefn{LuAvOX{ zV}^8s_Q!^pQ*l&ZU>+DJyT64}2G2@cCO(LbB zCq?8OSTa{6ejdhV5jz;o5@`Sf*&>~w%PJBDn?RcxehWp)K<6TnqhJthR`y(xZqSw| zk~|;#fU7`{O~f_78l_t%;(@`HFA@eV%SEiXY)xMlISU2~L?%GjS0E$}8$B;_1auZ5 z0O(mG5&;8iF>gVp#UfRpYdr#kwY!liF0J!r5yx{FS707=@5TCR{0LQ|0vRafVUYu% z8*BjW)gpbM3yjZ1pkoLOT26>)xc%;*ifjTcZzAI?2(Ci{pzG&IAR9vd47(K>`$XEo zlD~-L;xmqZEMi)Sb$=Ckr3^osE}#OS>2D}K=mE#TC}>%PQnrcg1WPW9gus1QP?=ne zyO04kbb_s*3k-ry$__tIH!1=@3wv+SlBJDaTp>I&s^Lax`RIPwij@J)ita!U^T-Wa zL>8XYMQKa@7x3x9s+w9=hkgz=RCcNR4^;NTKQxbE&9JGR(cv`ICS<&}ls-4rjAv?_L zx@iUF^ZssHOMd=H8SD8|g%TcB#tB~DgOQuJ_0SSB^PwL45(W5F53M8zUsrQSc(Mnc zTY1e*dXYN$)tj`Q2Dt4e?WQr#>qUeL-rkD^1$?3xo@Q=Sqdt!HQZ{x;?*kfmO&^S_ zcz+)jTxPEtxw!+FU-8fX)vyF9G~(Gi!0G)6SH-XNQxQaa`yr)?FZ4rSCXXoND$ct_ z-=bzdbc!oe!KIb+ZX?b+y!|#tQLa%q!e^8*lY4H%vytZyOo`q+0OJ8Z zG(c;g?ZjhN0ST(9%aDl&u%M6MAEf7hF-Rt|a^fKU05~)VJ*Dg&L@|oFM*ShY+KaOoR--U4xC<37-f$NgxcT5+Y+B4-g?7HEj8=}R(OJ&B zhmo1L--D)e{F8fFZsXr8qnrEhp^R0$It*ikE5lG>;t#`+9p=d}qPOzbMxfBfH6yeU zg=-suX9LGZkS7lIK3r3f@7L?FO@B=4O*oA=u9kD6C{u{HMR6g|u{Vm~Chm_y*d|Vhp<4C4E{0K%_rx$) z#iwG37U7thb8_JmNWjTGp~KYdn|wkUlpZ;ZKdJ~Y-SAgIJD!6VoeL)@jrx3>C+Oq2 zrSVHhOGOVaCM|&8joywvfbK_Eb`N^}pO))IGZW5clUDAloT*<+NU2N5Lx6SwJmTAu zqOVMTyO~VBqv^VBcKY=H0H<93^G}>MTWjD8Ha(4Y`mWpb-7~1&w`PT26i;s7!Ik=* zB%IDm>-B5Mx6lEEIB|pi7TLLQqrSxF-=L=w4xrF&qi$L^c~u$R}`rf#I0~=BpdH?_b delta 2758 zcmYM04@{NU6~MpyL)R$dnChgPZn#=QH{8P%)5p@S=0JNtd8+fDBKedo_T z=iGDe_d)pJ#PGq1L0>{Si=gS8!^=EB9 z)>l~f{OUcqu28Pa+^96Z(8MZ}Hz~;kzn4A1>&tfMY|Y*qdg;&RZ8P@0WUII$)bgHb zGX(^WTA3>!7v}h~3sSA(9M$xIYw8_iReUp&et4?KvR;h5W1Xsw>B3O!`=-P-!E%>o z7vUcHPU!2k=Ciy6Z@_zEP1jFSPe}GfGd1w-=jQz7P=Eh&Gi}V$k~quy1vxy`w(cEg zSsP&P1k0*|`zKje#k;od%dxC5Y|gW+2()J6|9e|^v$hBZVGtgH5!eKyu!eY%KiJw0 zR~@mnaJ*&Z9<>9yi3jf=ZH+?TF#^R~R`YRN+hO>90!_56+7q_MrC|T7ts9=F!g^a5 zXOK8->+vkhs{W^~5fatH0oV-V$Kv;it(njbUxkIx54~_NEczs1YZVVc6b-N%Hp2)U za2%TG02O=A*y@87FrGr2VGtIcwY3hq|7Ghk3if|$YhnWY%vLW9wy+_G=WVTp?hC|s zWEh2>z(re&X|dHxYoX^dg+MQChQTZBfDT04@PnQXTYn7QSLqOpbkfR13hzP>-PcLv z$lcf-_E1m~h2EfJFak?pZ7)X(1O8jKo^u@fILqf)01Kh_o~@;@7FNJWzpY_d6vLj3 zA1sE=_Xz~80b4J?!a-Y8-5k{y*r9ib4#4I|wzk6B|4;x&SusKfQ>=g$iBoMwQ8Z39 zl}qN2SA7)*lT;g^camz{WaL!U#W0$!S`EX~RWCrFM|Buh!~9hIUQjKDMKe?@U^A?B z^tr0-(37W{m_{79AT59)Uv&ox_lv4k&{v?^=g4zZJzTcxFRRwUaG~l5^nHaw(h2lc z)!ndY5eZ;$iE0#vmtvp7PM4|fg1+S>h80`bD3`YAHC69axx>sdiBi^KzGT93sKd-R zi>1Y}?UKO`JlD#+tL7DRPJVjTEH~|P`l{Jt`XsB9RGVa7CkyiBjZQoh<+LNUO03gN zCrU~LRLQ&u$^zLIVZp~z=}3M#1JXAA`~OW_%U+J~!P_AzU8F0O&0S`Z*)Nq{lu|9H zx~MNzdK_heWL-1gGBr|m&8#sVIdu)?28mt6r9rZ;ljoPR?mALb${p;IqmD9FKEICV zK}qT!EqX;a${kYHZI-5;<1u?%;eLTFOA)7d5V}G^8--ULn*7IvIpe?`P@OS zq}>3ivfe?QRNkPQ4RZR1`7X&bZj$_ntiDOdR>@IE>Xnw86m3aHFCAMT>wBpvQ{L(| zYg{95$;DnXlU6@Q#JKtvbrwnaEwi0t=yIfPNxMxIK3Q^`;{CGoHbECirGqAEbd*yh z=19jS>kd+)th+-^b@IbIEceJUN9mW#cj#cL%;`hfD_i@h!jc1hl-(_ZePnNtm+n%b zN6PP-mGtcNT|BEKc9(r}ruT5Ekn($@n>cxo0(VPRKg+{X-fs?bVi{4C@$yELb#Zbs zif6sVqUJR&!TK1U`{aWdwKPdrjF@XB=RO-Nmeu#okDRM?-|S)eiU(xRl{X&{tW@qk zFy~p^{ zyx_Ll0v#85?sD?d5o z*?)bb=BGbntYoW38uMN0rX+MZ-?e3&X$>uz>sl0NDne!RT{kCk&KsAzE^%4sc|lYX zR=D2gTQP5?YgQ<{!sRwxh?cLpw$NvEbGd+9R}#(_Dqrae7~>5+T;-beCdZz0)-^Zb gSrJ~@c-FNjq2|hyYHQ?xBbJOj5vk>@Yx|i00>fGu6aWAK