OWW model tester
attempts to find models that would stop OWW from starting
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import time
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
|
||||
def try_import_tflite():
|
||||
try:
|
||||
from tflite_runtime.interpreter import Interpreter
|
||||
return Interpreter
|
||||
except ImportError:
|
||||
try:
|
||||
from ai_edge_litert.interpreter import Interpreter
|
||||
return Interpreter
|
||||
except ImportError:
|
||||
raise ImportError("Neither tflite_runtime nor ai_edge_litert is installed.")
|
||||
|
||||
def test_model(model_path, Interpreter):
|
||||
try:
|
||||
start = time.time()
|
||||
interpreter = Interpreter(model_path=str(model_path))
|
||||
interpreter.allocate_tensors()
|
||||
elapsed = time.time() - start
|
||||
return True, f"OK (loaded in {elapsed:.2f}s)"
|
||||
except Exception as e:
|
||||
return False, f"FAIL ({str(e)})"
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Test all TFLite models in a directory.")
|
||||
parser.add_argument("--models-dir", type=str, default=str(Path.home() / "wyoming-openwakeword" / "wyoming_openwakeword" / "models"),
|
||||
help="Path to the models directory")
|
||||
parser.add_argument("--skip-non-detection", action="store_true",
|
||||
help="Skip known non-detection models (embedding_model.tflite, melspectrogram.tflite)")
|
||||
parser.add_argument("--quiet", action="store_true", help="Only show failures")
|
||||
parser.add_argument("--csv", type=str, help="Output results to CSV file")
|
||||
|
||||
args = parser.parse_args()
|
||||
models_dir = Path(args.models_dir)
|
||||
|
||||
Interpreter = try_import_tflite()
|
||||
|
||||
if not models_dir.exists():
|
||||
print(f"Models directory not found: {models_dir}")
|
||||
return
|
||||
|
||||
skip_list = {"embedding_model.tflite", "melspectrogram.tflite"}
|
||||
results = []
|
||||
|
||||
for model_file in sorted(models_dir.glob("*.tflite")):
|
||||
if args.skip_non_detection and model_file.name in skip_list:
|
||||
if not args.quiet:
|
||||
print(f"SKIP {model_file.name}")
|
||||
continue
|
||||
|
||||
ok, message = test_model(model_file, Interpreter)
|
||||
results.append((model_file.name, ok, message))
|
||||
|
||||
if not args.quiet or not ok:
|
||||
status = "PASS" if ok else "FAIL"
|
||||
print(f"{status} {model_file.name}: {message}")
|
||||
|
||||
if args.csv:
|
||||
import csv
|
||||
with open(args.csv, "w", newline="") as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerow(["Model", "Status", "Message"])
|
||||
for name, ok, msg in results:
|
||||
writer.writerow([name, "PASS" if ok else "FAIL", msg])
|
||||
print(f"Results written to {args.csv}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,19 @@
|
||||
cd wyoming-openwakeword/
|
||||
source .venv/bin/activate
|
||||
python3 ~/linux-voice-assistant/wyoming-openwakeword/test_oww_models.py --skip-non-detection --models-dir /home/pi/wyoming-openwakeword/wyoming_openwakeword/models
|
||||
deactivate
|
||||
|
||||
|
||||
|
||||
# basic
|
||||
python3 test_oww_models.py
|
||||
|
||||
# skip non-detection models
|
||||
python3 test_oww_models.py --skip-non-detection
|
||||
|
||||
# specify a custom folder
|
||||
python3 test_oww_models.py --models-dir /home/pi/wyoming-openwakeword/wyoming_openwakeword/models
|
||||
|
||||
# quiet mode + CSV
|
||||
python3 test_oww_models.py --quiet --csv /home/pi/model_check.csv
|
||||
|
||||
Reference in New Issue
Block a user