notebookVb

This commit is contained in:
administrator
2026-05-24 07:59:25 +02:00
parent 662c890257
commit 7e05384c1f
10 changed files with 87 additions and 1261 deletions
+5 -122
View File
@@ -216,84 +216,13 @@ with Image.open(path) as img:
---
## 7. Návrh databázového schématu (draft)
## 7. Databázové schéma
```sql
CREATE TABLE photos (
id BIGSERIAL PRIMARY KEY,
-- identita (3 úrovně)
sha256_file CHAR(64) UNIQUE NOT NULL, -- byte identita
sha256_pixels CHAR(64), -- pixel identita
phash BIGINT, -- vizuální podobnost
-- soubor
file_path VARCHAR(1000) NOT NULL,
file_name VARCHAR(255) NOT NULL,
file_size BIGINT,
mime_type VARCHAR(50),
format VARCHAR(20), -- JPEG, PNG, HEIC, ...
width INT,
height INT,
-- pořízení
taken_at TIMESTAMPTZ, -- s timezone (máme OffsetTime!)
taken_at_source VARCHAR(20), -- 'exif' / 'mtime' / 'iptc' / 'unknown'
-- technika (z EXIF)
camera_make VARCHAR(100),
camera_model VARCHAR(255),
lens_model VARCHAR(255),
iso INT,
aperture NUMERIC(4,2),
exposure_time VARCHAR(20), -- "1/500"
focal_length_mm NUMERIC(5,2),
-- GPS (NULL pokud chybí)
gps_lat NUMERIC(10,7),
gps_lon NUMERIC(10,7),
gps_altitude NUMERIC(7,2),
-- klasifikace
is_screenshot BOOLEAN DEFAULT FALSE,
face_count INT, -- z XMP, rozšířit AI
-- flexibilní JSONB pro celý dump
exif_raw JSONB,
iptc_raw JSONB,
xmp_raw JSONB,
-- import / zpracování
imported_at TIMESTAMPTZ DEFAULT NOW(),
processed_at TIMESTAMPTZ,
processing_status VARCHAR(50) DEFAULT 'pending'
);
CREATE INDEX idx_photos_sha256_pixels ON photos(sha256_pixels);
CREATE INDEX idx_photos_phash ON photos(phash);
CREATE INDEX idx_photos_taken_at ON photos(taken_at);
CREATE INDEX idx_photos_camera_model ON photos(camera_model);
CREATE INDEX idx_photos_exif_gin ON photos USING GIN (exif_raw);
CREATE TABLE tags (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
parent_tag_id INT REFERENCES tags(id), -- hierarchie "místo > Praha > Karlův most"
UNIQUE(name, parent_tag_id)
);
CREATE TABLE photo_tags (
photo_id BIGINT REFERENCES photos(id) ON DELETE CASCADE,
tag_id INT REFERENCES tags(id) ON DELETE CASCADE,
source VARCHAR(20), -- 'manual' / 'iptc' / 'xmp' / 'auto'
created_at TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (photo_id, tag_id)
);
```
Kompletní aktuální schéma (tabulky, sloupce, indexy) viz **[SCHEMA.md](SCHEMA.md)**.
---
## 8. Otevřené otázky pro příště
## 8. Otevřené otázky
### Foto bez EXIF (sirotek typu [7])
@@ -326,52 +255,6 @@ CREATE TABLE photo_tags (
---
## 10. Aktuální stav projektu (k 2026-05-21)
## 10. Aktuální stav a struktura projektu
### Soubory v projektu
```
FotkyBuzalkovi/
├── demo_fotky/ # 7 ukázkových fotek
├── explore_photos.py # Explorační skript (hashe, EXIF, IPTC, XMP)
├── photo_exploration.json # Výstup exploreru
├── create_schema.py # ZASTARALÉ - obsahuje MySQL syntaxi a hardcoded hesla
├── test_db_connection.py # Test PG + Mongo + Redis (Mongo/Redis nebudou potřeba)
├── test_mongo.py # ZASTARALÉ - Mongo nepoužijeme
├── README.md
└── NAVRH.md # Tento dokument
```
### Co bude potřeba udělat
- [ ] Smazat nebo přepsat `create_schema.py` (MySQL syntaxe `INDEX` uvnitř `CREATE TABLE` v PG nefunguje)
- [ ] Migrovat hesla do `.env` + `python-dotenv`
- [ ] Smazat / archivovat `test_mongo.py`
- [ ] Vytvořit migraci podle schématu v sekci 7
- [ ] Skript pro import fotek s deduplikací (workflow v sekci 4)
- [ ] Rozhodnout otevřené otázky ze sekce 8
### Nainstalované Python balíčky
```
psycopg2-binary 2.9.12 # PostgreSQL driver
pymongo 4.17.0 # (nepotřebujeme)
redis 7.4.0 # (zatím nepotřebujeme)
pillow 12.2.0 # Základní práce s obrázky
ExifRead 3.5.1 # Primární EXIF parser (lepší než Pillow)
imagehash 4.3.2 # Perceptuální hashe (pHash, dHash, wHash)
+ numpy, scipy, PyWavelets (závislosti imagehash)
```
---
## 11. Užitečné odkazy
- [Pillow](https://pillow.readthedocs.io/) — Python Imaging Library
- [ExifRead](https://github.com/ianare/exif-py) — EXIF parser
- [imagehash](https://github.com/JohannesBuchner/imagehash) — perceptuální hashe
- [exiftool](https://exiftool.org/) — gold standard pro metadata (Perl, ale `pyexiftool` wrapper)
- [pgvector](https://github.com/pgvector/pgvector) — vektory v PostgreSQL pro sémantické hledání
- [PostgreSQL JSONB docs](https://www.postgresql.org/docs/current/datatype-json.html)
- [IPTC Photo Metadata Standard](https://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata)
- [XMP Specification (Adobe)](https://www.adobe.com/devnet/xmp.html)
Viz **[README.md](README.md)** — hlavní rozcestník projektu.