From e451d75ab5c2f90f7b78dc3cb9d45175c80cdb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=98=8C?= <392871505@qq.com> Date: Sun, 17 May 2026 22:44:12 +0800 Subject: [PATCH] feat(demo): Add --help, fix run_demo.bat path, add iostream to classifier - Add --help/-h CLI option to demo_offline with usage description - Fix run_demo.bat validation dataset path: dataset\val -> dataset\binary\val - Add missing #include to gunshot_classifier.cpp for error messages - All tests pass: test_core_lib 9/9, demo_offline 20/20 --- .../src/acoustic/build/demo_offline.exe | Bin 240650 -> 242222 bytes .../src/acoustic/build/extract_mel_cpp.exe | Bin 115387 -> 115387 bytes .../acoustic/build/test_classifier_cpp.exe | Bin 146751 -> 147811 bytes .../src/acoustic/build/test_core_lib.exe | Bin 313935 -> 313935 bytes src/drone-software/src/acoustic/run_demo.bat | 2 +- .../acoustic/src/core/gunshot_classifier.cpp | 1 + .../src/acoustic/tests/demo_offline.cpp | 7 +++++-- 7 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/drone-software/src/acoustic/build/demo_offline.exe b/src/drone-software/src/acoustic/build/demo_offline.exe index 2ff704c231da1516d1a4b8c27e3a96c65e32d40b..a44f22f240fa214002bfcf64c7e7a428c9ccbf9c 100644 GIT binary patch delta 36401 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 DGg21h delta 35167 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 diff --git a/src/drone-software/src/acoustic/build/extract_mel_cpp.exe b/src/drone-software/src/acoustic/build/extract_mel_cpp.exe index 6077e2b6484e29bd78aea802540bbb7976fd6468..ca4c44d4471e2b47d70d887d4eb96efe394cefce 100644 GIT binary patch delta 24 gcmdnp%D%gmeL@G5#+8X(eoPrvjkmVmVtjZI0EBuAe*gdg delta 24 gcmdnp%D%gmeL@FQ?xl%ceoSjC8gFgA#rW_b0E)&81poj5 diff --git a/src/drone-software/src/acoustic/build/test_classifier_cpp.exe b/src/drone-software/src/acoustic/build/test_classifier_cpp.exe index 46a1f6f5fad5b6f3c478682da0430ce15bf168a3..52b04660aec98719c77399fdfbc098e791f68855 100644 GIT binary patch delta 13270 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

3D(B(J%P?os3xpWzuz zrjr~ViT~zs$hSokvsk)K4#8moeygb5!cscHIv}^swsb;RMw|I8Cv<^=i=|FXk1$j< z;AvR<&Ll+C+tkK8V{geeZBcCLOm4fDZbN?}R6DYWjqgQ#+2$_9Oe+70Wk6TNqWerq z$E&U+k?2`|9}?*Biz^Ol#dg`c7@`ryo{HA4OWl#?p$eh;0}sDq_G=FkLX50wPXIHg z0v&oZLGQ_#^|l$Y;YgqB@Xsw>V7a#=F3X^0NzueL%lEh#YZVz zOZ-f0!^I>&rjH}R4w>K?eHHl*;2FNGvO5V>0j)K&(m2$+nZJz7wSOPDP^k3A=L#2=(DWyDRD* zMZlk6dpRI|cBGJf(FPHzSg$0~N?hW^uI`7KWl2OwHnD?Aq@P&3lf6hns;o}jg}|?A9L!6RlY2%&NM;Sojdc zVwFAnvspvPDshO&{@zQ1na_LVHd#|ZVTKxgeO6Bil1lmy9 z&@5&e*-3V@N7Lk!wjd4Lb_+|IPV%vdWokPkX`o6K>M%Q!Ml9lGXP%c}wmzL`iNL-{ z$Fx)IW;zs;6-r{J86>2s5#NBhUprykxCN8OEkcpm=^3Pz`of!N{y;QV<=|zWGl?I$ z$lA{&PtiBaXOSSg#E~f+Y0f^4B91sa$IOB+BWHz>R7FzXnK+6!oY|#Wq%SeB#u*SL zbKo!6h!iU!J!eZZ5MZrB*|W&mpmglaY^Zlpob`#-*pQK79Pwwm1L#FP8$1U}-Yjbl zv9Qszhzsj5m-valJF|gv;nS?hHSE}2n55HeCfCC*4SOb?1uemzX}KIL68yMde|9<M&S?EVVkRQB_7l1c!Ft>C*iSym1vP1wnm2(s8l2D90#y2=5`(uy`=z3R-4jI_PBspR2gnK6xg@>i4Wu37t5CI zJ=_RYHEuNCDo(ccszqfPV&>$eG8@oFB?vVadED76VxZ0d&){IUUpo|_>M z0u^IkY|Ul}Iv`*+mO+qg6NIr{41#$Gk}WHQpja08mz^#oJ(^%|{;|yXi*4lhcXJZav zMFMMl5E**42`*C(!lhoL1ewE14w5mrUF#3RoZn^`*;z_@x@z2Q$0!La2=d}KRk(@e zB#Eru7YKi3A#{KG0=qrgovF>pIzPF@Dp^bE{<4fiq{{lCI-(7cgy9B57=E?tn~q$itp60$IxOn(Zp9Gh$iGo3;Tdb9FV*zHkl{AskQ zk?lE+CuyZkXA-MB4V~evjg=IMi8eDoThZ?t*7ywiX&#F{1C3NR>kKqfY#O?=(8y3U za@fMN$lW^Dt{h-9dsI%oBRko#b6EZBuaHUec_>>I@?94R&v!OlPco8og)acCxqGsP;Bq7xv!cuBg6o%v zH)>XW36(H1w{MU-HGBFEE;BXDx(r}ssw*TK2U)i(P|>q-p!nCN%~wd2XG0e7oeh60 zV{o5)u!mQ$gLRBtMgH~d$W=^BW_PZlH!@hzHBf36e~mTE9rWwJ*PyskaihHIFN zQxghs{Ug-HN)OhklJsq=#@7rxxKZ@)LEp$GS3;py&DK?7T5;L_N^+2hwIOWmbv&)C zYPRz_*?@vZ|DPQD2!K$X$J=JM^udehoj~@2V`L@&N7DE*-EYY8MBab_GaGh;M8A32 zC~SxUffrH-ORg5Qm~S1H}NLQ!9DfQ3SL10*}WwvCg~O&7}@Mw zNV&jJg{6EMIp5)1V;5HQ9qAYPZn~!R$9I@_{H+5gnZ19TiNkI3{;;hh40It<@2-{BkuN5fkDhZiuU zY~6oIBZAei$7BQ=u|y4CjkMl4|D(k delta 33 rcmV++0N(%4loQXC6Of1kmeY}nP6FOcf!c-I0fpKEh1vtP+5~mU6cP|r diff --git a/src/drone-software/src/acoustic/run_demo.bat b/src/drone-software/src/acoustic/run_demo.bat index 9ddc65a..e4f987a 100644 --- a/src/drone-software/src/acoustic/run_demo.bat +++ b/src/drone-software/src/acoustic/run_demo.bat @@ -8,7 +8,7 @@ echo ========================================== set BUILD_DIR=%~dp0build set MODEL=models\gunshot_classifier.onnx -set VAL_DIR=dataset\val +set VAL_DIR=dataset\binary\val REM --- Ensure executables exist --- if not exist "%BUILD_DIR%\test_core_lib.exe" ( diff --git a/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp b/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp index 67e1e15..a1eae42 100644 --- a/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp +++ b/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include diff --git a/src/drone-software/src/acoustic/tests/demo_offline.cpp b/src/drone-software/src/acoustic/tests/demo_offline.cpp index 1e40dff..f1ff187 100644 --- a/src/drone-software/src/acoustic/tests/demo_offline.cpp +++ b/src/drone-software/src/acoustic/tests/demo_offline.cpp @@ -27,6 +27,9 @@ struct Prediction { void print_usage(const char* prog) { std::cerr << "Usage: " << prog << " [--model ] [--label_map ] [--threshold ]" << std::endl; + std::cerr << " --model ONNX model path (default: models/gunshot_classifier.onnx)" << std::endl; + std::cerr << " --label_map Label map file (default: models/label_map.json)" << std::endl; + std::cerr << " --threshold Detection threshold (default: 0.5)" << std::endl; } bool ends_with(const std::string& s, const std::string& suffix) { @@ -181,9 +184,9 @@ void print_report(const std::vector& results) { } int main(int argc, char** argv) { - if (argc < 2) { + if (argc < 2 || std::strcmp(argv[1], "--help") == 0 || std::strcmp(argv[1], "-h") == 0) { print_usage(argv[0]); - return 1; + return argc < 2 ? 1 : 0; } std::string target = argv[1];