kamera geht

This commit is contained in:
marcinator_2 committed 2026-10-14 05:07:07 +02:00
1 parent bfecfd0640
commit d370f992ce
19 files changed
+1365 -1128

No files matched your search

+47
View File
@@ -0,0 +1,47 @@
"""Expliziter, SHA-256-geprüfter Download des lokalen Erkennungsmodells."""
import argparse
import hashlib
import json
import os
from pathlib import Path
import tempfile
import urllib.request
def main():
root = Path(__file__).resolve().parent.parent
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--state-dir", type=Path, default=Path(os.environ.get("HALLOWEEN_STATE_DIR", root / "data")))
args = parser.parse_args()
manifest = json.loads((root / "halloween/nanodet-model.json").read_text())
target = args.state_dir / "models" / manifest["file"]
if target.exists() and hashlib.sha256(target.read_bytes()).hexdigest() == manifest["sha256"]:
print(f"Modell bereits geprüft: {target}")
return
target.parent.mkdir(parents=True, exist_ok=True)
temp = None
try:
with tempfile.NamedTemporaryFile(dir=target.parent, delete=False) as output:
temp = Path(output.name)
digest, size = hashlib.sha256(), 0
with urllib.request.urlopen(manifest["url"], timeout=30) as response:
while block := response.read(65536):
size += len(block)
if size > manifest["size"]:
raise ValueError("Modell größer als erwartet")
digest.update(block)
output.write(block)
if size != manifest["size"] or digest.hexdigest() != manifest["sha256"]:
raise ValueError("Modell-Prüfsumme oder Größe stimmt nicht")
output.flush()
os.fsync(output.fileno())
os.replace(temp, target)
print(f"Modell installiert und SHA-256 geprüft: {target}")
finally:
if temp is not None:
temp.unlink(missing_ok=True)
if __name__ == "__main__":
main()
+5
View File
@@ -23,3 +23,8 @@ unter `preview/` dokumentieren.
Fiktive Scan-Videos nutzen nur synthetische Avatare und Demo-IDs.
Kegelprojektion, Zeichnen der Bildsequenz und Videoschnitt sind getrennte
Schritte; Reihenfolge im zugehörigen Vorschau-README dokumentieren.
- `install_detection_model.py` lädt auf ausdrücklichen Aufruf das im Manifest
fixierte NanoDet-Modell unter `data/models/`. Größe und SHA-256 vor atomarem
Ersetzen prüfen, TLS-Prüfung beibehalten. `--state-dir` bzw.
`HALLOWEEN_STATE_DIR` muss zum Server passen. Keine Modellgewichte hochladen.