Zählen: Aufnahme statt Dauerbetrieb
Die Zaehlanzeige sprang beim Nutzer im Dauerbetrieb wild zwischen etwa 3 und 60, obwohl dasselbe Verfahren an einem Standfoto stabil 18 lieferte - eine Schaetzung wird durch staendiges Neuanzeigen nicht praeziser, nur unruhig. "Zählen" laeuft jetzt wie "Text erkennen" auf Knopfdruck: eine Aufnahme nimmt binnen rund einer Sekunde fuenf Bilder aus dem Zielrahmen auf, zaehlt jedes einzeln (count-objects.js unveraendert) und zeigt deren Median (neues Modul count-capture.js). Das Ergebnis bleibt stehen, bis erneut angetippt wird; die Diagnosezeile zeigt zusaetzlich die fuenf Einzelmessungen. Der gleitende Median ueber neun Durchlaeufe der Dauerzaehlung (count-history.js) entfaellt, da die Aufnahme dieselbe Robustheit bereits selbst leistet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
// Reine Rechenlogik der Zaehl-Aufnahme (Funktion "Zählen", siehe main.js):
|
||||
// aus den (bis zu fuenf) Einzelmessungen einer Aufnahme wird deren Median
|
||||
// gebildet. Siehe count-capture.js fuer die Begruendung (robust gegen einen
|
||||
// einzelnen Ausreisser, ohne wie eine fortlaufende Glaettung traege zu sein).
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { combineCaptureCounts } from '../src/count-capture.js';
|
||||
|
||||
test('fuenf gleiche Messungen liefern diese Zahl', () => {
|
||||
assert.equal(combineCaptureCounts([18, 18, 18, 18, 18]), 18);
|
||||
});
|
||||
|
||||
test('fuenf verschiedene Messungen liefern deren Median (ungerade Anzahl)', () => {
|
||||
assert.equal(combineCaptureCounts([17, 19, 18, 20, 18]), 18);
|
||||
});
|
||||
|
||||
test('ein einzelner grober Ausreisser unter fuenf Messungen schlaegt nicht durch', () => {
|
||||
// Vier stabile Messungen um 18 herum, eine grob daneben (z. B.
|
||||
// Bewegungsunschaerfe oder Autofokus mitten in der Aufnahme) - der Median
|
||||
// bleibt bei 18, ein Mittelwert waere durch den Ausreisser spuerbar verzerrt.
|
||||
assert.equal(combineCaptureCounts([18, 18, 3, 18, 60]), 18);
|
||||
});
|
||||
|
||||
test('weniger als fuenf Messungen (eine Kameraaufnahme scheiterte) liefern trotzdem ein Ergebnis', () => {
|
||||
// Gerade Anzahl (vier statt fuenf) - Median ist der Mittelwert der beiden
|
||||
// mittleren Werte.
|
||||
const result = combineCaptureCounts([17, 18, 18, 19]);
|
||||
assert.equal(result, 18);
|
||||
});
|
||||
|
||||
test('nur eine einzige verwertbare Messung ist ihr eigener Median', () => {
|
||||
assert.equal(combineCaptureCounts([21]), 21);
|
||||
});
|
||||
|
||||
test('eine leere Messreihe wirft, statt stillschweigend ein sinnloses Ergebnis (NaN) zu liefern', () => {
|
||||
assert.throws(() => combineCaptureCounts([]));
|
||||
});
|
||||
|
||||
test('combineCaptureCounts veraendert die uebergebene Liste nicht (reine Funktion)', () => {
|
||||
const counts = [5, 1, 3];
|
||||
const untouched = [...counts];
|
||||
combineCaptureCounts(counts);
|
||||
assert.deepEqual(counts, untouched);
|
||||
});
|
||||
Reference in New Issue
Block a user