emergency_any_test / EMERGENCY_ANY_TECH_DOC.md
dusen0528's picture
Upload folder using huggingface_hub
77c8117 verified

emergency_any 기술 λ¬Έμ„œ

1) λͺ©ν‘œ

  • κΈ΄κΈ‰ ν˜ΈμΆœμ–΄(예: μ‚΄λ €μ£Όμ„Έμš”, λ„μ™€μ£Όμ„Έμš”)λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ κ°μ§€ν•˜λŠ” 단일 wakeword λͺ¨λΈ(emergency_any.onnx)을 κ΅¬μΆ•ν•œλ‹€.
  • 일반 λŒ€ν™”/μƒν™œ μ†ŒμŒμ—μ„œ μ˜€νƒμ„ 쀄이기 μœ„ν•΄ μ‹€μ‹œκ°„ ν›„μ²˜λ¦¬ ν•„ν„°λ₯Ό ν•¨κ»˜ μ μš©ν•œλ‹€.

2) ꡬ성 파일

  • λͺ¨λΈ ν•™μŠ΅ 슀크립트: train_model.py
  • μ‹€μ‹œκ°„ μ½˜μ†” ν…ŒμŠ€νŠΈ: run_live.py
  • μ‹€μ‹œκ°„ Gradio ν…ŒμŠ€νŠΈ: gradio_live.py
  • μ΅œμ’… λͺ¨λΈ: emergency_any.onnx

3) ν•™μŠ΅ 데이터 ꡬ성

  • Positive(κΈ΄κΈ‰): positive_help/ (총 419개)
    • help_me: 212
    • save_me: 207
  • Negative(일반): /home/dusen0528/Keyword-Spotting/dataμ—μ„œ μƒ˜ν”Œλ§
    • κΈ°λ³Έ λΉ„μœ¨ negative_ratio=3.0 적용 β†’ 1257개

4) ν•™μŠ΅ νŒŒμ΄ν”„λΌμΈ

ν•™μŠ΅ λͺ…λ Ή:

cd /home/dusen0528/openWake/my_custom_model
source .venv/bin/activate
python train_model.py --positive_dir ./positive_help --model_name emergency_any --epochs 50

처리 흐름:

  1. Positive/Negative WAV λ‘œλ“œ
  2. 16kHz λ¦¬μƒ˜ν”Œ
  3. 2초(32000 μƒ˜ν”Œ) 길이둜 νŒ¨λ”©/자λ₯΄κΈ°
  4. openWakeWord AudioFeatures둜 embedding μΆ”μΆœ
  5. DNN 이진 λΆ„λ₯˜κΈ° ν•™μŠ΅
  6. ONNX export (emergency_any.onnx)

5) Gradio μ‹€μ‹œκ°„ 감지 둜직

μ‹€ν–‰ λͺ…λ Ή:

cd /home/dusen0528/openWake/my_custom_model
source .venv/bin/activate
python gradio_live.py --model ./emergency_any.onnx --threshold 0.5 --share

슀트리밍 둜직:

  • 16kHz둜 μ •κ·œν™” ν›„ 80ms ν”„λ ˆμž„(1280 μƒ˜ν”Œ) λ‹¨μœ„ μΆ”λ‘ 
  • 점수 기반 후보 κ²€μΆœ + ν›„μ²˜λ¦¬ ν•„ν„° 적용

ν•„ν„° ν•­λͺ©:

  • RMS Gate: 무음/μž‘μ€ μ†Œλ¦¬ 차단
  • Score Margin vs Baseline: ν™˜κ²½ 베이슀라인 λŒ€λΉ„ 점수 μƒμŠΉλΆ„ 쑰건
  • Min Consecutive Hits: 연속 히트 횟수 쑰건
  • Debounce: 감지 ν›„ μž¬κ°μ§€ 간격

ꢌμž₯ μ΄ˆκΈ°κ°’(ν˜„μž₯ νŠœλ‹ μ‹œμž‘μ ):

  • Threshold: 0.55 ~ 0.65
  • RMS Gate: 0.008 ~ 0.015
  • Score Margin: 0.00 ~ 0.05 (ν•„μš” μ‹œ 증가)
  • Min Consecutive Hits: 2 ~ 4
  • Debounce: 0.6 ~ 1.0

5-1) ν…ŒμŠ€νŠΈ 버전 ν™•μ •κ°’ (2026-02-27)

μ‹€μ œ ν…ŒμŠ€νŠΈμ—μ„œ 인식/μ˜€νƒ κ· ν˜•μ΄ κ°€μž₯ μ•ˆμ •μ μ΄μ—ˆλ˜ κ°’:

  • Detection Threshold: 0.55
  • Debounce: 0.6
  • RMS Gate: 0.014
  • Score Margin vs Baseline: 0.0 (off)
  • Min Consecutive Hits: 2 (μ˜€νƒ 증가 μ‹œ 3)

λ©”λͺ¨:

  • μœ„ 섀정은 μ‚΄λ €μ£Όμ„Έμš” 감지λ₯Ό μœ μ§€ν•˜λ©΄μ„œ 책상/λΆ€μŠ€λŸ­ μ†Œλ¦¬ μ˜€νƒμ„ μ€„μ΄λŠ” λͺ©μ μ˜ ν…ŒμŠ€νŠΈ μ„ΈνŒ…μ΄λ‹€.
  • ν™˜κ²½ μ†ŒμŒμ΄ λ†’μ•„μ§€λ©΄ RMS Gateλ₯Ό 0.016~0.020κΉŒμ§€ 올렀 μž¬μ‘°μ •ν•œλ‹€.

6) νŠΈλŸ¬λΈ”μŠˆνŒ… μš”μ•½

A. onnxscript λˆ„λ½μœΌλ‘œ export μ‹€νŒ¨

  • 증상: ModuleNotFoundError: No module named 'onnxscript'
  • 쑰치:
python -m ensurepip --upgrade
python -m pip install -U pip onnx onnxscript

B. melspectrogram.onnx 파일 μ—†μŒ 였λ₯˜

  • 증상: NO_SUCHFILE ... openwakeword/resources/models/melspectrogram.onnx
  • 원인: 둜컬 리포 κ²½λ‘œμ— λ¦¬μ†ŒμŠ€κ°€ μ—†κ³ , site-packages 경둜λ₯Ό λͺ» μ°Έμ‘°
  • 쑰치: train_model.py, gradio_live.pyμ—μ„œ .venv/site-packages/openwakeword/resources/models μžλ™ 폴백 적용 μ™„λ£Œ

7) μž¬ν˜„μ— ν•„μš”ν•œ μ΅œμ†Œ 파일

λ‹€λ₯Έ μ„œλ²„/PCμ—μ„œ λ™μΌν•˜κ²Œ ν…ŒμŠ€νŠΈν•˜λ €λ©΄ μ•„λž˜ νŒŒμΌμ„ μš°μ„  κ°€μ Έκ°„λ‹€.

ν•„μˆ˜:

  1. emergency_any.onnx
  2. gradio_live.py

ꢌμž₯(μž¬ν•™μŠ΅/μœ μ§€λ³΄μˆ˜ λŒ€λΉ„):

  1. train_model.py
  2. run_live.py
  3. requirements.txt
  4. positive_help/ (λ˜λŠ” 원본 positive 데이터)

8) 운영 λ©”λͺ¨

  • 단일 λͺ¨λΈ(emergency_any)은 κΈ΄κΈ‰ ν‚€μ›Œλ“œλ₯Ό "톡합 감지"ν•œλ‹€. (μ–΄λŠ 단어인지 κ΅¬λΆ„ν•˜μ§€ μ•ŠμŒ)
  • ν‚€μ›Œλ“œλ³„ ꡬ뢄이 ν•„μš”ν•˜λ©΄ λͺ¨λΈμ„ ν‚€μ›Œλ“œλ³„λ‘œ 뢄리(help_me.onnx, save_me.onnx λ“±)ν•΄ λ©€ν‹°λͺ¨λΈ λ°©μ‹μœΌλ‘œ μš΄μš©ν•œλ‹€.