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>
45 lines
1.9 KiB
JavaScript
45 lines
1.9 KiB
JavaScript
// 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);
|
|
});
|