Compare commits
4
Commits
e48b9e04b3
...
v0.3.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e1114ce95 | ||
|
|
dd582fa252 | ||
|
|
c57e1a5d45 | ||
|
|
85830809f2 |
+1
-1
@@ -23,7 +23,7 @@ STRATEGY=auto
|
|||||||
# YEARS_FILTER=10 # Only include images from the last N years (default: 10)
|
# YEARS_FILTER=10 # Only include images from the last N years (default: 10)
|
||||||
|
|
||||||
# ── Image Quality ─────────────────────────────────────────────────────────────
|
# ── Image Quality ─────────────────────────────────────────────────────────────
|
||||||
# MIN_FACE_WIDTH=50 # Minimum face width in pixels (default: 50)
|
# MIN_FACE_WIDTH=90 # Minimum face width in pixels (default: 90, guarantees ≥8,100px crop)
|
||||||
# FACE_MARGIN=0.15 # Padding around face crop as fraction (default: 0.15)
|
# FACE_MARGIN=0.15 # Padding around face crop as fraction (default: 0.15)
|
||||||
# ENABLE_FACE_ALIGNMENT=true # Align face before cropping (default: true)
|
# ENABLE_FACE_ALIGNMENT=true # Align face before cropping (default: true)
|
||||||
# USE_FULL_RESOLUTION=true # Use full-res images vs thumbnails (default: true)
|
# USE_FULL_RESOLUTION=true # Use full-res images vs thumbnails (default: true)
|
||||||
|
|||||||
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.3.3] - 2026-06-13
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **`MIN_FACE_WIDTH` default raised from 50 → 90px**: 50px crops produce 2,500–4,225 total pixels, well below Frigate's own camera capture range of 16k–50k px. 90px guarantees ≥8,100 total pixels even when face margins are fully clipped by image edges, keeping winnow training crops above the floor Frigate considers useful.
|
||||||
|
|
||||||
## [0.3.2] - 2026-06-13
|
## [0.3.2] - 2026-06-13
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.3.2"
|
version = "0.3.3"
|
||||||
description = "Selects diverse, high-quality photos from Immich as training data for Frigate face recognition and object classification."
|
description = "Selects diverse, high-quality photos from Immich as training data for Frigate face recognition and object classification."
|
||||||
license = "AGPL-3.0-or-later"
|
license = "AGPL-3.0-or-later"
|
||||||
requires-python = ">=3.13"
|
requires-python = ">=3.13"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ def test_config_loads_defaults(monkeypatch):
|
|||||||
assert cfg.API_KEY == "test-key"
|
assert cfg.API_KEY == "test-key"
|
||||||
assert cfg.OUTPUT_DIR == "./frigate_train"
|
assert cfg.OUTPUT_DIR == "./frigate_train"
|
||||||
assert cfg.YEARS_FILTER == 10
|
assert cfg.YEARS_FILTER == 10
|
||||||
assert cfg.MIN_FACE_WIDTH == 50
|
assert cfg.MIN_FACE_WIDTH == 90
|
||||||
assert cfg.MIN_FACE_COUNT == 0
|
assert cfg.MIN_FACE_COUNT == 0
|
||||||
assert cfg.BLUR_THRESHOLD == 100.0
|
assert cfg.BLUR_THRESHOLD == 100.0
|
||||||
assert cfg.MIN_CONFIDENCE == 0.7
|
assert cfg.MIN_CONFIDENCE == 0.7
|
||||||
|
|||||||
@@ -2348,7 +2348,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.3.2"
|
version = "0.3.3"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "croniter" },
|
{ name = "croniter" },
|
||||||
|
|||||||
+2
-2
@@ -26,7 +26,7 @@ class _Config:
|
|||||||
YEARS_FILTER: int = 10
|
YEARS_FILTER: int = 10
|
||||||
|
|
||||||
# Quality filtering
|
# Quality filtering
|
||||||
MIN_FACE_WIDTH: int = 50
|
MIN_FACE_WIDTH: int = 90
|
||||||
BLUR_THRESHOLD: float = 100.0
|
BLUR_THRESHOLD: float = 100.0
|
||||||
MIN_CONFIDENCE: float = 0.7
|
MIN_CONFIDENCE: float = 0.7
|
||||||
MAX_AUTO_IMAGES: int = 80
|
MAX_AUTO_IMAGES: int = 80
|
||||||
@@ -56,7 +56,7 @@ class _Config:
|
|||||||
self.API_KEY = os.getenv("API_KEY")
|
self.API_KEY = os.getenv("API_KEY")
|
||||||
self.OUTPUT_DIR = os.getenv("OUTPUT_DIR", "./frigate_train")
|
self.OUTPUT_DIR = os.getenv("OUTPUT_DIR", "./frigate_train")
|
||||||
self.YEARS_FILTER = int(os.getenv("YEARS_FILTER", "10"))
|
self.YEARS_FILTER = int(os.getenv("YEARS_FILTER", "10"))
|
||||||
self.MIN_FACE_WIDTH = int(os.getenv("MIN_FACE_WIDTH", "50"))
|
self.MIN_FACE_WIDTH = int(os.getenv("MIN_FACE_WIDTH", "90"))
|
||||||
self.MIN_FACE_COUNT = int(os.getenv("MIN_FACE_COUNT", "0"))
|
self.MIN_FACE_COUNT = int(os.getenv("MIN_FACE_COUNT", "0"))
|
||||||
self.BLUR_THRESHOLD = float(os.getenv("BLUR_THRESHOLD", "100.0"))
|
self.BLUR_THRESHOLD = float(os.getenv("BLUR_THRESHOLD", "100.0"))
|
||||||
self.MIN_CONFIDENCE = float(os.getenv("MIN_CONFIDENCE", "0.7"))
|
self.MIN_CONFIDENCE = float(os.getenv("MIN_CONFIDENCE", "0.7"))
|
||||||
|
|||||||
Reference in New Issue
Block a user