notebookVb
This commit is contained in:
+1
-1
@@ -68,4 +68,4 @@ ENV.bak/
|
|||||||
|
|
||||||
# Generovaná data (velké soubory, nepatří do gitu)
|
# Generovaná data (velké soubory, nepatří do gitu)
|
||||||
output/
|
output/
|
||||||
photo_exploration.json
|
30 SběrDat/photo_exploration.json
|
||||||
|
|||||||
@@ -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
|
Kompletní aktuální schéma (tabulky, sloupce, indexy) viz **[SCHEMA.md](SCHEMA.md)**.
|
||||||
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)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. Otevřené otázky pro příště
|
## 8. Otevřené otázky
|
||||||
|
|
||||||
### Foto bez EXIF (sirotek typu [7])
|
### 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
|
Viz **[README.md](README.md)** — hlavní rozcestník 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)
|
|
||||||
|
|||||||
@@ -1,153 +1,98 @@
|
|||||||
# FotkyBuzalkovi
|
# FotkyBuzalkovi
|
||||||
|
|
||||||
Systém pro zpracování, ukládání a vyhledávání rodinných fotografií s automatickou extrakcí EXIF metadat.
|
Systém pro organizaci a tagování ~200 000 rodinných fotek. Lokální nasazení, bez cloudu.
|
||||||
|
|
||||||
## Architektura
|
## Kde jsme
|
||||||
|
|
||||||
Projekt používá kombinaci tří databází, kde každá řeší specifickou úlohu:
|
- **85 833 fotek** zpracovaných v DB (EXIF, hashe, metadata)
|
||||||
|
- **39 961 unikátních souborů** fyzicky zálohovaných na Tower1
|
||||||
|
- Sběr fotek běží ze dvou serverů (tower, Tower1) i z Windows PC
|
||||||
|
- Průzkumný Streamlit dashboard hotový (`run_webreport.py`)
|
||||||
|
|
||||||
```
|
## Stack
|
||||||
┌─────────────────────────────────────────────────────────┐
|
|
||||||
│ Python aplikace │
|
|
||||||
│ (zpracování fotek, EXIF, hash) │
|
|
||||||
└────────────┬──────────────┬──────────────┬───────────────┘
|
|
||||||
│ │ │
|
|
||||||
▼ ▼ ▼
|
|
||||||
┌────────────┐ ┌────────────┐ ┌────────────┐
|
|
||||||
│ PostgreSQL │ │ MongoDB │ │ Redis │
|
|
||||||
│ (relační) │ │ (EXIF/doc) │ │ (cache) │
|
|
||||||
└────────────┘ └────────────┘ └────────────┘
|
|
||||||
192.168.1.76 192.168.1.76 localhost
|
|
||||||
:5432 :27017 :6379
|
|
||||||
```
|
|
||||||
|
|
||||||
### Proč tři databáze?
|
- **PostgreSQL** (192.168.1.76:5432) — jediná databáze, JSONB nahrazuje MongoDB
|
||||||
|
- **Filesystem** — fotky zůstávají na disku, v DB jen cesty a metadata
|
||||||
| Databáze | Role | Co ukládá |
|
- **Python** — veškeré skripty (ExifRead pro EXIF, imagehash pro pHash, blake3 pro zálohy)
|
||||||
|----------|------|-----------|
|
|
||||||
| **PostgreSQL** | Strukturovaná data, relace | `photos`, `cameras`, `photo_tags` - ID, cesty, hashe, FK |
|
|
||||||
| **MongoDB** | Flexibilní dokumenty | Plná EXIF metadata (různé fotoaparáty = různá pole) |
|
|
||||||
| **Redis** | Cache + fronty | Miniatury, výsledky vyhledávání, fronta zpracování |
|
|
||||||
|
|
||||||
## Datové úložiště
|
|
||||||
|
|
||||||
### PostgreSQL - `fotky_buzalkovi`
|
|
||||||
|
|
||||||
- **cameras** - seznam fotoaparátů (model, vyrobce)
|
|
||||||
- **photos** - hlavní tabulka (file_name, file_path, file_hash, taken_at, rozměry, FK na camera)
|
|
||||||
- **photo_tags** - tagy ke každé fotce (many-to-many)
|
|
||||||
|
|
||||||
### MongoDB - `fotky_buzalkovi`
|
|
||||||
|
|
||||||
- **photos** kolekce - kompletní EXIF data, GPS souřadnice, nastavení clony, ISO, atd.
|
|
||||||
|
|
||||||
### Redis (plánováno)
|
|
||||||
|
|
||||||
- **cache:thumb:{photo_id}** - cached miniatury (TTL 1h)
|
|
||||||
- **queue:process** - fronta nezpracovaných fotek
|
|
||||||
- **session:{user_id}** - session data
|
|
||||||
|
|
||||||
## K čemu Redis
|
|
||||||
|
|
||||||
1. **Cache miniatur** - generování miniatur je drahé, Redis je drží v RAM (rychlost ~0.1ms vs ~50ms z disku)
|
|
||||||
2. **Cache vyhledávání** - "fotky z dovolené 2025" se může opakovat, výsledek se cachuje
|
|
||||||
3. **Fronta zpracování** - když nahrajete 1000 fotek, Redis funguje jako worker queue
|
|
||||||
4. **Deduplikace** - rychlá kontrola, zda hash fotky už existuje
|
|
||||||
5. **Rate limiting** - omezení uploadů
|
|
||||||
|
|
||||||
## Instalace
|
|
||||||
|
|
||||||
### 1. Python prostředí
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
python -m venv .venv
|
|
||||||
.venv\Scripts\Activate.ps1
|
|
||||||
pip install psycopg2-binary pymongo redis pillow exifread python-dotenv
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. PostgreSQL
|
|
||||||
|
|
||||||
Předpoklad: PostgreSQL běží na `192.168.1.76:5432`.
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
python create_schema.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. MongoDB
|
|
||||||
|
|
||||||
Předpoklad: MongoDB běží na `192.168.1.76:27017`.
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
python test_mongo.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Redis (Windows)
|
|
||||||
|
|
||||||
Redis oficiálně Windows nepodporuje. Tři možnosti:
|
|
||||||
|
|
||||||
**Možnost A - WSL2 (doporučeno):**
|
|
||||||
```powershell
|
|
||||||
wsl --install
|
|
||||||
# v WSL:
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install redis-server
|
|
||||||
sudo service redis-server start
|
|
||||||
```
|
|
||||||
|
|
||||||
**Možnost B - Docker:**
|
|
||||||
```powershell
|
|
||||||
docker run -d --name redis -p 6379:6379 redis:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
**Možnost C - Memurai (Windows-native Redis-kompatibilní):**
|
|
||||||
- Stáhnout z https://www.memurai.com/
|
|
||||||
|
|
||||||
Test:
|
|
||||||
```powershell
|
|
||||||
python test_db_connection.py
|
|
||||||
```
|
|
||||||
|
|
||||||
## Konfigurace
|
|
||||||
|
|
||||||
**⚠️ Hesla v současných skriptech jsou v plain textu - před nasazením přesunout do `.env`:**
|
|
||||||
|
|
||||||
```env
|
|
||||||
PG_HOST=192.168.1.76
|
|
||||||
PG_PORT=5432
|
|
||||||
PG_USER=vladimir.buzalka
|
|
||||||
PG_PASSWORD=...
|
|
||||||
PG_DB=fotky_buzalkovi
|
|
||||||
|
|
||||||
MONGO_URI=mongodb://192.168.1.76:27017/
|
|
||||||
MONGO_DB=fotky_buzalkovi
|
|
||||||
|
|
||||||
REDIS_HOST=localhost
|
|
||||||
REDIS_PORT=6379
|
|
||||||
```
|
|
||||||
|
|
||||||
## Struktura projektu
|
## Struktura projektu
|
||||||
|
|
||||||
```
|
```
|
||||||
FotkyBuzalkovi/
|
FotkyBuzalkovi/
|
||||||
├── demo_fotky/ # Testovací fotografie
|
├── 00 PictureCollector/ # Sběr fotek ze všech počítačů na Tower1
|
||||||
├── create_schema.py # Vytvoření PostgreSQL schématu
|
│ ├── collect_pictures.py # Hlavní skript (Linux, běží na tower + Tower1)
|
||||||
├── test_db_connection.py # Test všech tří databází
|
│ ├── collect_pictures_windows.py # Windows verze (pro libovolný PC v síti)
|
||||||
├── test_mongo.py # Test MongoDB + vytvoření kolekcí
|
│ ├── create_tables.py # Vytvoření tabulek zaloha_obrazku + zdrojove_soubory
|
||||||
|
│ ├── verify_tables.py # Ověření struktury tabulek
|
||||||
|
│ ├── clear_tables.py # TRUNCATE obou tabulek (pozor!)
|
||||||
|
│ ├── stats.py # Statistiky sběru
|
||||||
|
│ ├── ssh_deploy.py # Nasazení skriptu na tower
|
||||||
|
│ ├── ssh_deploy_tower1.py # Nasazení skriptu na Tower1
|
||||||
|
│ ├── ssh_install_deps.py # Instalace závislostí na tower
|
||||||
|
│ ├── ssh_install_tower1.py # Instalace závislostí na Tower1
|
||||||
|
│ ├── ssh_check_mount.py # Kontrola NFS mountu
|
||||||
|
│ ├── ssh_check_tower1.py # Kontrola Tower1
|
||||||
|
│ └── ssh_find_userscripts.py # Hledání Unraid user scriptů
|
||||||
|
│
|
||||||
|
├── 20 PrůzkumFotek/ # Průzkum a vizualizace dat
|
||||||
|
│ ├── report.py # Streamlit dashboard (spouštět přes run_webreport.py)
|
||||||
|
│ └── analyze_all.py # Konzolová analýza (jednorázová)
|
||||||
|
│
|
||||||
|
├── 30 SběrDat/ # Zpracování fotek — EXIF parsing, import do DB
|
||||||
|
│ ├── explore_photos.py # Explorační skript (hashe, EXIF, IPTC, XMP)
|
||||||
|
│ ├── 10_collect_metadata.py # Sběr metadat z fotek
|
||||||
|
│ ├── import_to_db.py # Import do tabulky photos
|
||||||
|
│ ├── create_schema.py # Vytvoření tabulek photos/tags/photo_tags
|
||||||
|
│ └── photo_exploration.json # Výstup exploreru (7 demo fotek)
|
||||||
|
│
|
||||||
|
├── demo_fotky/ # 7 testovacích fotek (iPhone, screenshot, sirotek)
|
||||||
|
├── output/ # Výstupy skriptů
|
||||||
|
│ └── 10_metadata.jsonl # Nasbíraná metadata
|
||||||
|
├── trash/ # Zastaralé skripty (test_mongo.py, test_db_connection.py)
|
||||||
|
│
|
||||||
|
├── run_webreport.py # Spustí Streamlit dashboard (1 klik v PyCharm)
|
||||||
|
├── .env # Konfigurace (hesla)
|
||||||
├── .gitignore
|
├── .gitignore
|
||||||
└── README.md
|
│
|
||||||
|
├── NAVRH.md # → viz docs/NAVRH.md (architektonická rozhodnutí, hashe, metadata)
|
||||||
|
└── SCHEMA.md # → viz docs/SCHEMA.md (kompletní DB schéma)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Známé problémy
|
## Detailní dokumentace
|
||||||
|
|
||||||
- `create_schema.py` používá MySQL syntaxi `INDEX idx_x` uvnitř `CREATE TABLE` - v PostgreSQL je potřeba `CREATE INDEX` zvlášť po `CREATE TABLE`
|
| Soubor | Obsah |
|
||||||
- Hesla jsou hardcodovaná v Python souborech - migrovat do `.env` + `python-dotenv`
|
|--------|-------|
|
||||||
|
| [SCHEMA.md](SCHEMA.md) | Kompletní DB schéma — všechny tabulky, sloupce, indexy, constrainty |
|
||||||
|
| [NAVRH.md](NAVRH.md) | Architektonická rozhodnutí, 4 úrovně hashů, EXIF/IPTC/XMP, workflow importu |
|
||||||
|
|
||||||
## Roadmap
|
## Infrastruktura
|
||||||
|
|
||||||
- [ ] Opravit PostgreSQL schéma (INDEX syntaxe)
|
| Server | IP | Role |
|
||||||
- [ ] Migrace hesel do `.env`
|
|--------|----|------|
|
||||||
- [ ] Instalace Redis
|
| **tower** | 192.168.1.76 | Hlavní NAS, PostgreSQL, spouští skripty |
|
||||||
- [ ] Skript pro hromadný import fotek z `demo_fotky/`
|
| **Tower1** | 192.168.1.50 | Archivní NAS, fyzická záloha fotek (`/mnt/user/ZalohaVsechObrazku`) |
|
||||||
- [ ] EXIF parser (pillow + exifread)
|
|
||||||
- [ ] Generování miniatur s Redis cache
|
SSH klíče sdílené mezi servery. Z tower přístup na Tower1 přes NFS mount.
|
||||||
- [ ] Web UI pro prohlížení galerie
|
|
||||||
|
## Rychlý start
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Spustit dashboard
|
||||||
|
python run_webreport.py
|
||||||
|
|
||||||
|
# Nasadit collect_pictures na server
|
||||||
|
python "00 PictureCollector/ssh_deploy.py"
|
||||||
|
python "00 PictureCollector/ssh_deploy_tower1.py"
|
||||||
|
|
||||||
|
# Spustit sběr fotek z Windows PC
|
||||||
|
python "00 PictureCollector/collect_pictures_windows.py"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Otevřené otázky
|
||||||
|
|
||||||
|
1. Fotky bez EXIF (7 % fotek) — importovat s mtime / odmítnout / označit?
|
||||||
|
2. Shoda `sha256_pixels` — přeskočit / sloučit metadata / uložit oba?
|
||||||
|
3. Storage layout — in-place / `archiv/YYYY/MM/` / content-addressable?
|
||||||
|
4. Propojení tabulek skupiny 1 (photos) a skupiny 2 (zaloha_obrazku) — zatím žádný FK
|
||||||
|
5. Fotky 2013–2021 — velký propad, chybí zdroje (mobily, iCloud?)
|
||||||
|
6. 4 210 fotek z 2022 bez kamery — pravděpodobně hromadný export z iCloudu (25.9.2023)
|
||||||
|
|||||||
@@ -1,906 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-04-22 09.05.08.jpg",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-04-22 09.05.08.jpg",
|
|
||||||
"file_size_bytes": 10186179,
|
|
||||||
"file_size_mb": 9.71,
|
|
||||||
"mtime": "2026-04-22T09:05:08",
|
|
||||||
"ctime": "2026-05-19T06:22:12.659966",
|
|
||||||
"extension": ".jpg"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "4ea38e22f815c4512e6bfe06d9203180e5920ac7324d2e0e9271e918d53adff5",
|
|
||||||
"sha256_pixels": "b95b72d63a300cde544091c11f8e884896d583afa0dc380cdebc47b3ade8d05f",
|
|
||||||
"phash": "f7a2c8606d4c76d4",
|
|
||||||
"dhash": "c4884c4c4c4cc010",
|
|
||||||
"ahash": "feffe6a702246098",
|
|
||||||
"whash": "feffe7a702006098"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "JPEG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 5712,
|
|
||||||
"height": 4284,
|
|
||||||
"megapixels": 24.47,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": [
|
|
||||||
"72.0",
|
|
||||||
"72.0"
|
|
||||||
],
|
|
||||||
"icc_profile_present": true,
|
|
||||||
"exif_present": true,
|
|
||||||
"xmp_snippet": "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?> <x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"XMP Core 6.0.0\"> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> <rdf:Description rdf:about=\"\" xmlns:exif=\"http://ns.adobe.com/exif/1.0/\" xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\" xmlns:tiff=\"http://ns.adobe.com/tiff/1.0/\" xmlns:exifEX=\"http://cipa.jp/exif/1.0/\" xmlns:mwg-rs=\"http://www.metadataworkinggroup.com/schemas/regions/\" xmlns:stDim=\"http://ns.adobe.com/xap/1.0/sType/Dimens",
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {
|
|
||||||
"_error": "'int' object has no attribute 'items'"
|
|
||||||
},
|
|
||||||
"exif_exifread": {
|
|
||||||
"Image Make": "Apple",
|
|
||||||
"Image Model": "iPhone 16 Pro Max",
|
|
||||||
"Image Orientation": "Rotated 90 CW",
|
|
||||||
"Image XResolution": "72",
|
|
||||||
"Image YResolution": "72",
|
|
||||||
"Image ResolutionUnit": "Pixels/Inch",
|
|
||||||
"Image Software": "26.3.1",
|
|
||||||
"Image DateTime": "2026:04:22 09:05:07",
|
|
||||||
"Image HostComputer": "iPhone 16 Pro Max",
|
|
||||||
"Image ExifOffset": "232",
|
|
||||||
"GPS GPSLatitudeRef": "N",
|
|
||||||
"GPS GPSLatitude": "[50, 5, 1009/100]",
|
|
||||||
"GPS GPSLongitudeRef": "E",
|
|
||||||
"GPS GPSLongitude": "[14, 24, 3089/100]",
|
|
||||||
"GPS GPSAltitudeRef": "0",
|
|
||||||
"GPS GPSAltitude": "299875/1571",
|
|
||||||
"GPS GPSTimeStamp": "[7, 5, 6]",
|
|
||||||
"GPS GPSSpeedRef": "K",
|
|
||||||
"GPS GPSSpeed": "0",
|
|
||||||
"GPS GPSImgDirectionRef": "T",
|
|
||||||
"GPS GPSImgDirection": "379301/2482",
|
|
||||||
"GPS GPSDestBearingRef": "T",
|
|
||||||
"GPS GPSDestBearing": "379301/2482",
|
|
||||||
"GPS GPSDate": "2026:04:22",
|
|
||||||
"GPS Tag 0x001F": "43090/3283",
|
|
||||||
"Image GPSInfo": "2808",
|
|
||||||
"Thumbnail JPEGInterchangeFormat": "3224",
|
|
||||||
"Thumbnail JPEGInterchangeFormatLength": "10108",
|
|
||||||
"EXIF ExposureTime": "1/715",
|
|
||||||
"EXIF FNumber": "1244236/699009",
|
|
||||||
"EXIF ExposureProgram": "Program Normal",
|
|
||||||
"EXIF ISOSpeedRatings": "80",
|
|
||||||
"EXIF ExifVersion": "0232",
|
|
||||||
"EXIF DateTimeOriginal": "2026:04:22 09:05:07",
|
|
||||||
"EXIF DateTimeDigitized": "2026:04:22 09:05:07",
|
|
||||||
"EXIF OffsetTime": "+02:00",
|
|
||||||
"EXIF OffsetTimeOriginal": "+02:00",
|
|
||||||
"EXIF OffsetTimeDigitized": "+02:00",
|
|
||||||
"EXIF ComponentsConfiguration": "YCbCr",
|
|
||||||
"EXIF ShutterSpeedValue": "18849/1988",
|
|
||||||
"EXIF ApertureValue": "42657/25639",
|
|
||||||
"EXIF BrightnessValue": "72829/10013",
|
|
||||||
"EXIF ExposureBiasValue": "0",
|
|
||||||
"EXIF MeteringMode": "Pattern",
|
|
||||||
"EXIF Flash": "Flash did not fire, compulsory flash mode",
|
|
||||||
"EXIF FocalLength": "251773/37217",
|
|
||||||
"EXIF SubjectArea": "[1375, 2179, 413, 416]",
|
|
||||||
"EXIF MakerNote": "[65, 112, 112, 108, 101, 32, 105, 79, 83, 0, 0, 1, 77, 77, 0, 59, 0, 1, 0, 9, ... ]",
|
|
||||||
"EXIF SubSecTimeOriginal": "565",
|
|
||||||
"EXIF SubSecTimeDigitized": "565",
|
|
||||||
"EXIF FlashPixVersion": "0100",
|
|
||||||
"EXIF ColorSpace": "Uncalibrated",
|
|
||||||
"EXIF ExifImageWidth": "5712",
|
|
||||||
"EXIF ExifImageLength": "4284",
|
|
||||||
"EXIF SensingMethod": "One-chip color area",
|
|
||||||
"EXIF SceneType": "Directly Photographed",
|
|
||||||
"EXIF ExposureMode": "Auto Exposure",
|
|
||||||
"EXIF WhiteBalance": "Auto",
|
|
||||||
"EXIF FocalLengthIn35mmFilm": "24",
|
|
||||||
"EXIF SceneCaptureType": "Standard",
|
|
||||||
"EXIF LensSpecification": "[253126/37417, 2052196/131047, 1244236/699009, 14/5]",
|
|
||||||
"EXIF LensMake": "Apple",
|
|
||||||
"EXIF LensModel": "iPhone 16 Pro Max back triple camera 6.765mm f/1.78",
|
|
||||||
"EXIF Tag 0xA460": "2",
|
|
||||||
"MakerNote MakerNoteVersion": "16",
|
|
||||||
"MakerNote Tag 0x0002": "[161, 0, 127, 0, 112, 0, 61, 0, 40, 0, 49, 0, 45, 0, 10, 0, 31, 0, 213, 1, ... ]",
|
|
||||||
"MakerNote Tag 0x0003": "[6, 7, 8, 85, 102, 108, 97, 103, 115, 85, 118, 97, 108, 117, 101, 89, 116, 105, 109, 101, ... ]",
|
|
||||||
"MakerNote AEStable": "No",
|
|
||||||
"MakerNote AETarget": "188",
|
|
||||||
"MakerNote AEAverage": "204",
|
|
||||||
"MakerNote AFStable": "Yes",
|
|
||||||
"MakerNote Tag 0x0008": "[-856227839/729350144, -1321/103, 64/3]",
|
|
||||||
"MakerNote Tag 0x000C": "[279109/1162032945, 876031301/809906477]",
|
|
||||||
"MakerNote Tag 0x000D": "41",
|
|
||||||
"MakerNote Tag 0x000E": "0",
|
|
||||||
"MakerNote Tag 0x0010": "1",
|
|
||||||
"MakerNote Tag 0x0011": "4E88-B357-FC9658AA6BCC",
|
|
||||||
"MakerNote ImageCaptureType": "Scene",
|
|
||||||
"MakerNote Tag 0x0019": "19013666",
|
|
||||||
"MakerNote Tag 0x001A": "8D88B1",
|
|
||||||
"MakerNote Tag 0x001D": "842542391/1128675373",
|
|
||||||
"MakerNote Tag 0x001F": "1",
|
|
||||||
"MakerNote Tag 0x0020": "497E-A420-FA5685058AE3",
|
|
||||||
"MakerNote Tag 0x0021": "106496/43",
|
|
||||||
"MakerNote Tag 0x0023": "[277217292, 1443889152]",
|
|
||||||
"MakerNote Tag 0x0026": "3",
|
|
||||||
"MakerNote Tag 0x0027": "909192513/926431021",
|
|
||||||
"MakerNote Tag 0x002B": "459C-B603-F499EADDB45A",
|
|
||||||
"MakerNote Tag 0x002D": "5227",
|
|
||||||
"MakerNote CameraType": "Back Normal",
|
|
||||||
"MakerNote Tag 0x002F": "51",
|
|
||||||
"MakerNote Tag 0x0030": "71686300/454712541",
|
|
||||||
"MakerNote Tag 0x0036": "13797",
|
|
||||||
"MakerNote Tag 0x0037": "8",
|
|
||||||
"MakerNote Tag 0x0038": "121",
|
|
||||||
"MakerNote Tag 0x0039": "1",
|
|
||||||
"MakerNote Tag 0x003A": "164",
|
|
||||||
"MakerNote Tag 0x003B": "0",
|
|
||||||
"MakerNote Tag 0x003C": "4",
|
|
||||||
"MakerNote Tag 0x003D": "100",
|
|
||||||
"MakerNote Tag 0x003F": "0",
|
|
||||||
"MakerNote Tag 0x0041": "0",
|
|
||||||
"MakerNote Tag 0x0042": "0",
|
|
||||||
"MakerNote Tag 0x0043": "0",
|
|
||||||
"MakerNote Tag 0x0044": "0",
|
|
||||||
"MakerNote Tag 0x0045": "0",
|
|
||||||
"MakerNote Tag 0x0046": "0",
|
|
||||||
"MakerNote Tag 0x0048": "0",
|
|
||||||
"MakerNote Tag 0x0049": "0",
|
|
||||||
"MakerNote Tag 0x004A": "2",
|
|
||||||
"MakerNote Tag 0x004D": "808505857/33752145",
|
|
||||||
"MakerNote Tag 0x004E": "[49, 81, 50, 16, 3, 162, 5, 10, 210, 6, 7, 8, 9, 83, 50, 46, 49, 83, 50, 46, ... ]",
|
|
||||||
"MakerNote Tag 0x004F": "[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 98, 112, 108, 105, 115, 116, 48, 48, 216, 1, 2, 3, 4, 5]",
|
|
||||||
"MakerNote Tag 0x0052": "3",
|
|
||||||
"MakerNote Tag 0x0053": "2",
|
|
||||||
"MakerNote Tag 0x0054": "[6, 7, 8, 9, 10, 11, 11, 11, 12, 13, 12, 81, 55, 81, 51, 81, 52, 81, 48, 81, ... ]",
|
|
||||||
"MakerNote Tag 0x0055": "126",
|
|
||||||
"MakerNote Tag 0x0058": "2307",
|
|
||||||
"MakerNote Tag 0x005A": "[6, 7, 8, 7, 9, 81, 51, 81, 49, 81, 52, 81, 50, 81, 48, 34, 60, 189, 98, 49, ... ]",
|
|
||||||
"MakerNote Tag 0x0060": "2048",
|
|
||||||
"MakerNote Tag 0x0061": "24"
|
|
||||||
},
|
|
||||||
"iptc": {},
|
|
||||||
"xmp": {
|
|
||||||
"creator_tool": "26.3.1",
|
|
||||||
"create_date": "2026-04-22T09:05:07.565",
|
|
||||||
"modify_date": "2026-04-22T09:05:07",
|
|
||||||
"face_regions_count": 1,
|
|
||||||
"_xmp_length_bytes": 6047
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-04-24 15.15.47.jpg",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-04-24 15.15.47.jpg",
|
|
||||||
"file_size_bytes": 5928247,
|
|
||||||
"file_size_mb": 5.65,
|
|
||||||
"mtime": "2026-04-24T15:15:47",
|
|
||||||
"ctime": "2026-05-19T06:22:06.110438",
|
|
||||||
"extension": ".jpg"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "500ac874b758feb80f02d5c95d7cb60fd3d651de6220631e9e836c0e9efcf9bf",
|
|
||||||
"sha256_pixels": "48e05ab5ee5e532117c76d7f6000ede03c1e382ebdb90e22b3df158a90e3933e",
|
|
||||||
"phash": "e99c96b8b493a4b4",
|
|
||||||
"dhash": "182062829393cb4e",
|
|
||||||
"ahash": "fff8f8f0c1c1e0e3",
|
|
||||||
"whash": "fff8f8e0c0c0e0e1"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "JPEG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 4032,
|
|
||||||
"height": 3024,
|
|
||||||
"megapixels": 12.19,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": [
|
|
||||||
"72.0",
|
|
||||||
"72.0"
|
|
||||||
],
|
|
||||||
"icc_profile_present": true,
|
|
||||||
"exif_present": true,
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {
|
|
||||||
"ResolutionUnit": 2.0,
|
|
||||||
"ExifOffset": 232.0,
|
|
||||||
"Make": "Apple",
|
|
||||||
"Model": "iPhone 13 Pro Max",
|
|
||||||
"Software": "26.4.1",
|
|
||||||
"Orientation": 1.0,
|
|
||||||
"DateTime": "2026:04:24 15:15:46",
|
|
||||||
"YCbCrPositioning": 1.0,
|
|
||||||
"XResolution": 72.0,
|
|
||||||
"YResolution": 72.0,
|
|
||||||
"HostComputer": "iPhone 13 Pro Max"
|
|
||||||
},
|
|
||||||
"exif_exifread": {
|
|
||||||
"Image Make": "Apple",
|
|
||||||
"Image Model": "iPhone 13 Pro Max",
|
|
||||||
"Image Orientation": "Horizontal (normal)",
|
|
||||||
"Image XResolution": "72",
|
|
||||||
"Image YResolution": "72",
|
|
||||||
"Image ResolutionUnit": "Pixels/Inch",
|
|
||||||
"Image Software": "26.4.1",
|
|
||||||
"Image DateTime": "2026:04:24 15:15:46",
|
|
||||||
"Image HostComputer": "iPhone 13 Pro Max",
|
|
||||||
"Image YCbCrPositioning": "Centered",
|
|
||||||
"Image ExifOffset": "232",
|
|
||||||
"Thumbnail JPEGInterchangeFormat": "2750",
|
|
||||||
"Thumbnail JPEGInterchangeFormatLength": "7338",
|
|
||||||
"EXIF ExposureTime": "1/184",
|
|
||||||
"EXIF FNumber": "3/2",
|
|
||||||
"EXIF ExposureProgram": "Program Normal",
|
|
||||||
"EXIF ISOSpeedRatings": "40",
|
|
||||||
"EXIF ExifVersion": "0232",
|
|
||||||
"EXIF DateTimeOriginal": "2026:04:24 15:15:46",
|
|
||||||
"EXIF DateTimeDigitized": "2026:04:24 15:15:46",
|
|
||||||
"EXIF OffsetTime": "+02:00",
|
|
||||||
"EXIF OffsetTimeOriginal": "+02:00",
|
|
||||||
"EXIF OffsetTimeDigitized": "+02:00",
|
|
||||||
"EXIF ComponentsConfiguration": "YCbCr",
|
|
||||||
"EXIF ShutterSpeedValue": "83635/11111",
|
|
||||||
"EXIF ApertureValue": "27767/23734",
|
|
||||||
"EXIF BrightnessValue": "80499/13364",
|
|
||||||
"EXIF ExposureBiasValue": "0",
|
|
||||||
"EXIF MeteringMode": "Pattern",
|
|
||||||
"EXIF Flash": "Flash did not fire, compulsory flash mode",
|
|
||||||
"EXIF FocalLength": "57/10",
|
|
||||||
"EXIF SubjectArea": "[2014, 1508, 2218, 1328]",
|
|
||||||
"EXIF MakerNote": "[65, 112, 112, 108, 101, 32, 105, 79, 83, 0, 0, 1, 77, 77, 0, 60, 0, 1, 0, 9, ... ]",
|
|
||||||
"EXIF SubSecTimeOriginal": "964",
|
|
||||||
"EXIF SubSecTimeDigitized": "964",
|
|
||||||
"EXIF FlashPixVersion": "0100",
|
|
||||||
"EXIF ColorSpace": "Uncalibrated",
|
|
||||||
"EXIF ExifImageWidth": "4032",
|
|
||||||
"EXIF ExifImageLength": "3024",
|
|
||||||
"EXIF SensingMethod": "One-chip color area",
|
|
||||||
"EXIF SceneType": "Directly Photographed",
|
|
||||||
"EXIF ExposureMode": "Auto Exposure",
|
|
||||||
"EXIF WhiteBalance": "Auto",
|
|
||||||
"EXIF FocalLengthIn35mmFilm": "26",
|
|
||||||
"EXIF SceneCaptureType": "Standard",
|
|
||||||
"EXIF LensSpecification": "[299253/190607, 9, 3/2, 14/5]",
|
|
||||||
"EXIF LensMake": "Apple",
|
|
||||||
"EXIF LensModel": "iPhone 13 Pro Max back triple camera 5.7mm f/1.5",
|
|
||||||
"EXIF Tag 0xA460": "2",
|
|
||||||
"MakerNote MakerNoteVersion": "16",
|
|
||||||
"MakerNote Tag 0x0002": "[171, 1, 108, 1, 146, 1, 148, 1, 102, 1, 61, 1, 15, 1, 225, 0, 191, 0, 107, 2, ... ]",
|
|
||||||
"MakerNote Tag 0x0003": "[6, 7, 8, 85, 102, 108, 97, 103, 115, 85, 118, 97, 108, 117, 101, 89, 116, 105, 109, 101, ... ]",
|
|
||||||
"MakerNote AEStable": "Yes",
|
|
||||||
"MakerNote AETarget": "199",
|
|
||||||
"MakerNote AEAverage": "208",
|
|
||||||
"MakerNote AFStable": "Yes",
|
|
||||||
"MakerNote Tag 0x0008": "[401975979/194379776, 22723/23, 256/9]",
|
|
||||||
"MakerNote Tag 0x000C": "[16384/1061, 67112487/105295456]",
|
|
||||||
"MakerNote Tag 0x000D": "34",
|
|
||||||
"MakerNote Tag 0x000E": "0",
|
|
||||||
"MakerNote Tag 0x0010": "1",
|
|
||||||
"MakerNote ImageCaptureType": "Photo",
|
|
||||||
"MakerNote Tag 0x0019": "2",
|
|
||||||
"MakerNote Tag 0x001A": "-9193-",
|
|
||||||
"MakerNote Tag 0x001F": "0",
|
|
||||||
"MakerNote Tag 0x0020": "4018-B96D-3A65CF0E00D6",
|
|
||||||
"MakerNote Tag 0x0021": "2228224/0",
|
|
||||||
"MakerNote Tag 0x0023": "[8781826, -950272000]",
|
|
||||||
"MakerNote Tag 0x0026": "3",
|
|
||||||
"MakerNote Tag 0x0027": "163616959/158636587",
|
|
||||||
"MakerNote Tag 0x0028": "1",
|
|
||||||
"MakerNote Tag 0x002B": "443A-AA33-717906FF9D4E",
|
|
||||||
"MakerNote Tag 0x002D": "5365",
|
|
||||||
"MakerNote CameraType": "Back Normal",
|
|
||||||
"MakerNote Tag 0x002F": "71",
|
|
||||||
"MakerNote Tag 0x0030": "808506369/33752069",
|
|
||||||
"MakerNote Tag 0x0033": "4096",
|
|
||||||
"MakerNote Tag 0x0034": "4",
|
|
||||||
"MakerNote Tag 0x0035": "3",
|
|
||||||
"MakerNote Tag 0x0036": "4214",
|
|
||||||
"MakerNote Tag 0x0037": "4",
|
|
||||||
"MakerNote Tag 0x0038": "121",
|
|
||||||
"MakerNote Tag 0x0039": "0",
|
|
||||||
"MakerNote Tag 0x003A": "0",
|
|
||||||
"MakerNote Tag 0x003B": "0",
|
|
||||||
"MakerNote Tag 0x003C": "4",
|
|
||||||
"MakerNote Tag 0x003D": "34",
|
|
||||||
"MakerNote Tag 0x003F": "45",
|
|
||||||
"MakerNote Tag 0x0040": "[6, 6, 7, 81, 51, 81, 49, 81, 50, 81, 48, 16, 0, 34, 0, 0, 0, 0, 16, 1, ... ]",
|
|
||||||
"MakerNote Tag 0x0041": "0",
|
|
||||||
"MakerNote Tag 0x0042": "0",
|
|
||||||
"MakerNote Tag 0x0043": "0",
|
|
||||||
"MakerNote Tag 0x0044": "0",
|
|
||||||
"MakerNote Tag 0x0045": "0",
|
|
||||||
"MakerNote Tag 0x0046": "0",
|
|
||||||
"MakerNote Tag 0x0048": "570",
|
|
||||||
"MakerNote Tag 0x0049": "0",
|
|
||||||
"MakerNote Tag 0x004A": "2",
|
|
||||||
"MakerNote Tag 0x004D": "808505857/33752145",
|
|
||||||
"MakerNote Tag 0x004E": "[49, 81, 50, 16, 3, 162, 5, 10, 210, 6, 7, 8, 9, 83, 50, 46, 49, 83, 50, 46, ... ]",
|
|
||||||
"MakerNote Tag 0x004F": "[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 144, 245, 0, 2, 232, 143, 0, 0, 0, 9, 0, 0]",
|
|
||||||
"MakerNote Tag 0x0052": "3",
|
|
||||||
"MakerNote Tag 0x0053": "1",
|
|
||||||
"MakerNote Tag 0x0055": "0",
|
|
||||||
"MakerNote Tag 0x0058": "1795",
|
|
||||||
"MakerNote Tag 0x0060": "11057",
|
|
||||||
"MakerNote Tag 0x0061": "26"
|
|
||||||
},
|
|
||||||
"iptc": {},
|
|
||||||
"xmp": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-05-02 10.04.44.png",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-05-02 10.04.44.png",
|
|
||||||
"file_size_bytes": 652043,
|
|
||||||
"file_size_mb": 0.62,
|
|
||||||
"mtime": "2026-05-02T10:04:44",
|
|
||||||
"ctime": "2026-05-19T06:22:01.483987",
|
|
||||||
"extension": ".png"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "bfbebc9c3db1b1c50af4925c7208c422425e637da1b497271096e298382ca2c3",
|
|
||||||
"sha256_pixels": "53bb4fd7cb92bb3e709f3bef385324034ed608a0fb23f54de1f5b5d1c3b3fa67",
|
|
||||||
"phash": "8f4be06bd2f0161e",
|
|
||||||
"dhash": "4b6b755d7b6f6fea",
|
|
||||||
"ahash": "f9b91fff17839fff",
|
|
||||||
"whash": "b8980fef030303ff"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "PNG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 1284,
|
|
||||||
"height": 2778,
|
|
||||||
"megapixels": 3.57,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": [
|
|
||||||
143.99259999999998,
|
|
||||||
143.99259999999998
|
|
||||||
],
|
|
||||||
"icc_profile_present": false,
|
|
||||||
"exif_present": true,
|
|
||||||
"xmp_snippet": "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"XMP Core 6.0.0\">\n <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <rdf:Description rdf:about=\"\"\n xmlns:exif=\"http://ns.adobe.com/exif/1.0/\"\n xmlns:photoshop=\"http://ns.adobe.com/photoshop/1.0/\"\n xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\"\n xmlns:tiff=\"http://ns.adobe.com/tiff/1.0/\"\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n <exif:UserComment>Screenshot</exif:User",
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {
|
|
||||||
"ResolutionUnit": 2.0,
|
|
||||||
"ExifOffset": 146.0,
|
|
||||||
"ImageDescription": "Screenshot",
|
|
||||||
"Orientation": 1.0,
|
|
||||||
"DateTime": "2026:05:02 10:04:44",
|
|
||||||
"XResolution": 144.0,
|
|
||||||
"YResolution": 144.0
|
|
||||||
},
|
|
||||||
"exif_exifread": {
|
|
||||||
"Image ImageDescription": "Screenshot",
|
|
||||||
"Image Orientation": "Horizontal (normal)",
|
|
||||||
"Image XResolution": "144",
|
|
||||||
"Image YResolution": "144",
|
|
||||||
"Image ResolutionUnit": "Pixels/Inch",
|
|
||||||
"Image DateTime": "2026:05:02 10:04:44",
|
|
||||||
"Image ExifOffset": "146",
|
|
||||||
"EXIF DateTimeOriginal": "2026:05:02 10:04:44",
|
|
||||||
"EXIF UserComment": "Screenshot",
|
|
||||||
"EXIF ColorSpace": "sRGB",
|
|
||||||
"EXIF ExifImageWidth": "1284",
|
|
||||||
"EXIF ExifImageLength": "2778"
|
|
||||||
},
|
|
||||||
"iptc": {},
|
|
||||||
"xmp": {
|
|
||||||
"description": "Screenshot",
|
|
||||||
"_xmp_length_bytes": 909
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-05-18 06.22.37.jpg",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-05-18 06.22.37.jpg",
|
|
||||||
"file_size_bytes": 9331138,
|
|
||||||
"file_size_mb": 8.9,
|
|
||||||
"mtime": "2026-05-18T06:22:37",
|
|
||||||
"ctime": "2026-05-19T06:21:53.390486",
|
|
||||||
"extension": ".jpg"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "9b9395396fd7893cdcdc69703a9e8e331bd93ce64da53ef9b5b25f3d786036ed",
|
|
||||||
"sha256_pixels": "47d95e29f8972b2d4d8f4f28b42a335bac4a629248486bc2ad1694467d1d4630",
|
|
||||||
"phash": "edcc9e48e832b5a4",
|
|
||||||
"dhash": "a2e2c68383d6d002",
|
|
||||||
"ahash": "f8f8f3f1f0600080",
|
|
||||||
"whash": "f8f8fbf1f06000f0"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "JPEG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 4032,
|
|
||||||
"height": 3024,
|
|
||||||
"megapixels": 12.19,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": [
|
|
||||||
"72.0",
|
|
||||||
"72.0"
|
|
||||||
],
|
|
||||||
"icc_profile_present": true,
|
|
||||||
"exif_present": true,
|
|
||||||
"xmp_snippet": "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?> <x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"XMP Core 6.0.0\"> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> <rdf:Description rdf:about=\"\" xmlns:exif=\"http://ns.adobe.com/exif/1.0/\" xmlns:exifEX=\"http://cipa.jp/exif/1.0/\" xmlns:tiff=\"http://ns.adobe.com/tiff/1.0/\" xmlns:photoshop=\"http://ns.adobe.com/photoshop/1.0/\" xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\" xmlns:mwg-rs=\"http://www.metadataworkinggroup.com/schemas/regions/\" ",
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {
|
|
||||||
"ResolutionUnit": 2.0,
|
|
||||||
"ExifOffset": 220.0,
|
|
||||||
"Make": "Apple",
|
|
||||||
"Model": "iPhone 13 Pro Max",
|
|
||||||
"Software": "26.4.2",
|
|
||||||
"Orientation": 6.0,
|
|
||||||
"DateTime": "2026:05:18 06:22:37",
|
|
||||||
"XResolution": 72.0,
|
|
||||||
"YResolution": 72.0,
|
|
||||||
"HostComputer": "iPhone 13 Pro Max"
|
|
||||||
},
|
|
||||||
"exif_exifread": {
|
|
||||||
"Image Make": "Apple",
|
|
||||||
"Image Model": "iPhone 13 Pro Max",
|
|
||||||
"Image Orientation": "Rotated 90 CW",
|
|
||||||
"Image XResolution": "72",
|
|
||||||
"Image YResolution": "72",
|
|
||||||
"Image ResolutionUnit": "Pixels/Inch",
|
|
||||||
"Image Software": "26.4.2",
|
|
||||||
"Image DateTime": "2026:05:18 06:22:37",
|
|
||||||
"Image HostComputer": "iPhone 13 Pro Max",
|
|
||||||
"Image ExifOffset": "220",
|
|
||||||
"Thumbnail JPEGInterchangeFormat": "2776",
|
|
||||||
"Thumbnail JPEGInterchangeFormatLength": "7602",
|
|
||||||
"EXIF ExposureTime": "1/50",
|
|
||||||
"EXIF FNumber": "3/2",
|
|
||||||
"EXIF ExposureProgram": "Program Normal",
|
|
||||||
"EXIF ISOSpeedRatings": "200",
|
|
||||||
"EXIF ExifVersion": "0232",
|
|
||||||
"EXIF DateTimeOriginal": "2026:05:18 06:22:37",
|
|
||||||
"EXIF DateTimeDigitized": "2026:05:18 06:22:37",
|
|
||||||
"EXIF OffsetTime": "+02:00",
|
|
||||||
"EXIF OffsetTimeOriginal": "+02:00",
|
|
||||||
"EXIF OffsetTimeDigitized": "+02:00",
|
|
||||||
"EXIF ComponentsConfiguration": "YCbCr",
|
|
||||||
"EXIF ShutterSpeedValue": "48307/8559",
|
|
||||||
"EXIF ApertureValue": "27767/23734",
|
|
||||||
"EXIF BrightnessValue": "22485/14578",
|
|
||||||
"EXIF ExposureBiasValue": "0",
|
|
||||||
"EXIF MeteringMode": "Pattern",
|
|
||||||
"EXIF Flash": "Flash did not fire, compulsory flash mode",
|
|
||||||
"EXIF FocalLength": "57/10",
|
|
||||||
"EXIF SubjectArea": "[1000, 1528, 190, 191]",
|
|
||||||
"EXIF MakerNote": "[65, 112, 112, 108, 101, 32, 105, 79, 83, 0, 0, 1, 77, 77, 0, 59, 0, 1, 0, 9, ... ]",
|
|
||||||
"EXIF SubSecTimeOriginal": "375",
|
|
||||||
"EXIF SubSecTimeDigitized": "375",
|
|
||||||
"EXIF FlashPixVersion": "0100",
|
|
||||||
"EXIF ColorSpace": "Uncalibrated",
|
|
||||||
"EXIF ExifImageWidth": "4032",
|
|
||||||
"EXIF ExifImageLength": "3024",
|
|
||||||
"EXIF SensingMethod": "One-chip color area",
|
|
||||||
"EXIF SceneType": "Directly Photographed",
|
|
||||||
"EXIF ExposureMode": "Auto Exposure",
|
|
||||||
"EXIF WhiteBalance": "Auto",
|
|
||||||
"EXIF FocalLengthIn35mmFilm": "26",
|
|
||||||
"EXIF SceneCaptureType": "Standard",
|
|
||||||
"EXIF LensSpecification": "[299253/190607, 9, 3/2, 14/5]",
|
|
||||||
"EXIF LensMake": "Apple",
|
|
||||||
"EXIF LensModel": "iPhone 13 Pro Max back triple camera 5.7mm f/1.5",
|
|
||||||
"EXIF Tag 0xA460": "2",
|
|
||||||
"MakerNote MakerNoteVersion": "16",
|
|
||||||
"MakerNote Tag 0x0002": "[22, 2, 104, 2, 90, 1, 152, 0, 121, 0, 109, 0, 108, 0, 118, 0, 121, 0, 139, 0, ... ]",
|
|
||||||
"MakerNote Tag 0x0003": "[6, 7, 8, 85, 102, 108, 97, 103, 115, 85, 118, 97, 108, 117, 101, 89, 116, 105, 109, 101, ... ]",
|
|
||||||
"MakerNote AEStable": "Yes",
|
|
||||||
"MakerNote AETarget": "192",
|
|
||||||
"MakerNote AEAverage": "184",
|
|
||||||
"MakerNote AFStable": "Yes",
|
|
||||||
"MakerNote Tag 0x0008": "[653568683/78381056, 13267/125, 256/55]",
|
|
||||||
"MakerNote Tag 0x000C": "[2103323/437786648, 314292673/392696335]",
|
|
||||||
"MakerNote Tag 0x000D": "24",
|
|
||||||
"MakerNote Tag 0x000E": "0",
|
|
||||||
"MakerNote Tag 0x0010": "1",
|
|
||||||
"MakerNote Tag 0x0011": "4FAB-8319-C67E13D5DB53",
|
|
||||||
"MakerNote ImageCaptureType": "Scene",
|
|
||||||
"MakerNote Tag 0x0019": "8194",
|
|
||||||
"MakerNote Tag 0x001A": "-BB21-",
|
|
||||||
"MakerNote Tag 0x001F": "0",
|
|
||||||
"MakerNote Tag 0x0020": "497C-BF6F-D6B9ACA3BAEA",
|
|
||||||
"MakerNote Tag 0x0021": "2818048/0",
|
|
||||||
"MakerNote Tag 0x0023": "[344850434, -1100677120]",
|
|
||||||
"MakerNote Tag 0x0026": "3",
|
|
||||||
"MakerNote Tag 0x0027": "910503235/1177825837",
|
|
||||||
"MakerNote Tag 0x002B": "45D3-801F-A154352C61C6",
|
|
||||||
"MakerNote Tag 0x002D": "3476",
|
|
||||||
"MakerNote CameraType": "Back Normal",
|
|
||||||
"MakerNote Tag 0x002F": "50",
|
|
||||||
"MakerNote Tag 0x0030": "808506369/33752069",
|
|
||||||
"MakerNote Tag 0x0033": "12288",
|
|
||||||
"MakerNote Tag 0x0034": "5",
|
|
||||||
"MakerNote Tag 0x0035": "4",
|
|
||||||
"MakerNote Tag 0x0036": "179",
|
|
||||||
"MakerNote Tag 0x0037": "4",
|
|
||||||
"MakerNote Tag 0x0038": "201",
|
|
||||||
"MakerNote Tag 0x0039": "1",
|
|
||||||
"MakerNote Tag 0x003A": "133",
|
|
||||||
"MakerNote Tag 0x003B": "0",
|
|
||||||
"MakerNote Tag 0x003C": "4",
|
|
||||||
"MakerNote Tag 0x003D": "33",
|
|
||||||
"MakerNote Tag 0x0040": "[6, 6, 7, 81, 51, 81, 49, 81, 50, 81, 48, 16, 0, 34, 0, 0, 0, 0, 16, 1, ... ]",
|
|
||||||
"MakerNote Tag 0x0041": "0",
|
|
||||||
"MakerNote Tag 0x0042": "0",
|
|
||||||
"MakerNote Tag 0x0043": "0",
|
|
||||||
"MakerNote Tag 0x0044": "0",
|
|
||||||
"MakerNote Tag 0x0045": "0",
|
|
||||||
"MakerNote Tag 0x0046": "0",
|
|
||||||
"MakerNote Tag 0x0048": "569",
|
|
||||||
"MakerNote Tag 0x0049": "0",
|
|
||||||
"MakerNote Tag 0x004A": "2",
|
|
||||||
"MakerNote Tag 0x004D": "808505857/33752145",
|
|
||||||
"MakerNote Tag 0x004E": "[49, 81, 50, 16, 1, 162, 5, 10, 210, 6, 7, 8, 9, 83, 50, 46, 49, 83, 50, 46, ... ]",
|
|
||||||
"MakerNote Tag 0x004F": "[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 144, 245, 0, 2, 232, 143, 0, 0, 0, 9, 0]",
|
|
||||||
"MakerNote Tag 0x0052": "3",
|
|
||||||
"MakerNote Tag 0x0053": "0",
|
|
||||||
"MakerNote Tag 0x0055": "174",
|
|
||||||
"MakerNote Tag 0x0058": "1795",
|
|
||||||
"MakerNote Tag 0x0060": "6424",
|
|
||||||
"MakerNote Tag 0x0061": "26"
|
|
||||||
},
|
|
||||||
"iptc": {},
|
|
||||||
"xmp": {
|
|
||||||
"creator_tool": "26.4.2",
|
|
||||||
"create_date": "2026-05-18T06:22:37.375",
|
|
||||||
"modify_date": "2026-05-18T06:22:37",
|
|
||||||
"face_regions_count": 1,
|
|
||||||
"_xmp_length_bytes": 5345
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-05-18 06.22.41.jpg",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-05-18 06.22.41.jpg",
|
|
||||||
"file_size_bytes": 8328001,
|
|
||||||
"file_size_mb": 7.94,
|
|
||||||
"mtime": "2026-05-18T06:22:41",
|
|
||||||
"ctime": "2026-05-19T06:21:46.033863",
|
|
||||||
"extension": ".jpg"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "e22b409fecfd997585b8bb16850c8568e876b780d54d091fc086803c5e884c80",
|
|
||||||
"sha256_pixels": "3fb2350a514b8840984fbb8e85e0aad834a670f14d01aef56ce07d1dbb1d6c62",
|
|
||||||
"phash": "e9cc9e496a32b5a4",
|
|
||||||
"dhash": "a2e2c68383d2d002",
|
|
||||||
"ahash": "f8f8f3f1f0600080",
|
|
||||||
"whash": "f8f8fbf1f16000b0"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "JPEG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 4032,
|
|
||||||
"height": 3024,
|
|
||||||
"megapixels": 12.19,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": [
|
|
||||||
"72.0",
|
|
||||||
"72.0"
|
|
||||||
],
|
|
||||||
"icc_profile_present": true,
|
|
||||||
"exif_present": true,
|
|
||||||
"xmp_snippet": "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?> <x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"XMP Core 6.0.0\"> <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> <rdf:Description rdf:about=\"\" xmlns:exif=\"http://ns.adobe.com/exif/1.0/\" xmlns:exifEX=\"http://cipa.jp/exif/1.0/\" xmlns:tiff=\"http://ns.adobe.com/tiff/1.0/\" xmlns:photoshop=\"http://ns.adobe.com/photoshop/1.0/\" xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\" xmlns:mwg-rs=\"http://www.metadataworkinggroup.com/schemas/regions/\" ",
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {
|
|
||||||
"ResolutionUnit": 2.0,
|
|
||||||
"ExifOffset": 220.0,
|
|
||||||
"Make": "Apple",
|
|
||||||
"Model": "iPhone 13 Pro Max",
|
|
||||||
"Software": "26.4.2",
|
|
||||||
"Orientation": 6.0,
|
|
||||||
"DateTime": "2026:05:18 06:22:41",
|
|
||||||
"XResolution": 72.0,
|
|
||||||
"YResolution": 72.0,
|
|
||||||
"HostComputer": "iPhone 13 Pro Max"
|
|
||||||
},
|
|
||||||
"exif_exifread": {
|
|
||||||
"Image Make": "Apple",
|
|
||||||
"Image Model": "iPhone 13 Pro Max",
|
|
||||||
"Image Orientation": "Rotated 90 CW",
|
|
||||||
"Image XResolution": "72",
|
|
||||||
"Image YResolution": "72",
|
|
||||||
"Image ResolutionUnit": "Pixels/Inch",
|
|
||||||
"Image Software": "26.4.2",
|
|
||||||
"Image DateTime": "2026:05:18 06:22:41",
|
|
||||||
"Image HostComputer": "iPhone 13 Pro Max",
|
|
||||||
"Image ExifOffset": "220",
|
|
||||||
"Thumbnail JPEGInterchangeFormat": "2776",
|
|
||||||
"Thumbnail JPEGInterchangeFormatLength": "7639",
|
|
||||||
"EXIF ExposureTime": "1/50",
|
|
||||||
"EXIF FNumber": "3/2",
|
|
||||||
"EXIF ExposureProgram": "Program Normal",
|
|
||||||
"EXIF ISOSpeedRatings": "200",
|
|
||||||
"EXIF ExifVersion": "0232",
|
|
||||||
"EXIF DateTimeOriginal": "2026:05:18 06:22:41",
|
|
||||||
"EXIF DateTimeDigitized": "2026:05:18 06:22:41",
|
|
||||||
"EXIF OffsetTime": "+02:00",
|
|
||||||
"EXIF OffsetTimeOriginal": "+02:00",
|
|
||||||
"EXIF OffsetTimeDigitized": "+02:00",
|
|
||||||
"EXIF ComponentsConfiguration": "YCbCr",
|
|
||||||
"EXIF ShutterSpeedValue": "48307/8559",
|
|
||||||
"EXIF ApertureValue": "27767/23734",
|
|
||||||
"EXIF BrightnessValue": "5765/3682",
|
|
||||||
"EXIF ExposureBiasValue": "0",
|
|
||||||
"EXIF MeteringMode": "Pattern",
|
|
||||||
"EXIF Flash": "Flash did not fire, compulsory flash mode",
|
|
||||||
"EXIF FocalLength": "57/10",
|
|
||||||
"EXIF SubjectArea": "[1025, 1438, 190, 191]",
|
|
||||||
"EXIF MakerNote": "[65, 112, 112, 108, 101, 32, 105, 79, 83, 0, 0, 1, 77, 77, 0, 59, 0, 1, 0, 9, ... ]",
|
|
||||||
"EXIF SubSecTimeOriginal": "023",
|
|
||||||
"EXIF SubSecTimeDigitized": "023",
|
|
||||||
"EXIF FlashPixVersion": "0100",
|
|
||||||
"EXIF ColorSpace": "Uncalibrated",
|
|
||||||
"EXIF ExifImageWidth": "4032",
|
|
||||||
"EXIF ExifImageLength": "3024",
|
|
||||||
"EXIF SensingMethod": "One-chip color area",
|
|
||||||
"EXIF SceneType": "Directly Photographed",
|
|
||||||
"EXIF ExposureMode": "Auto Exposure",
|
|
||||||
"EXIF WhiteBalance": "Auto",
|
|
||||||
"EXIF FocalLengthIn35mmFilm": "26",
|
|
||||||
"EXIF SceneCaptureType": "Standard",
|
|
||||||
"EXIF LensSpecification": "[299253/190607, 9, 3/2, 14/5]",
|
|
||||||
"EXIF LensMake": "Apple",
|
|
||||||
"EXIF LensModel": "iPhone 13 Pro Max back triple camera 5.7mm f/1.5",
|
|
||||||
"EXIF Tag 0xA460": "2",
|
|
||||||
"MakerNote MakerNoteVersion": "16",
|
|
||||||
"MakerNote Tag 0x0002": "[9, 2, 186, 2, 164, 1, 174, 0, 132, 0, 109, 0, 107, 0, 118, 0, 120, 0, 136, 0, ... ]",
|
|
||||||
"MakerNote Tag 0x0003": "[6, 7, 8, 85, 102, 108, 97, 103, 115, 85, 118, 97, 108, 117, 101, 89, 116, 105, 109, 101, ... ]",
|
|
||||||
"MakerNote AEStable": "Yes",
|
|
||||||
"MakerNote AETarget": "192",
|
|
||||||
"MakerNote AEAverage": "187",
|
|
||||||
"MakerNote AFStable": "Yes",
|
|
||||||
"MakerNote Tag 0x0008": "[-1233846271/1143537664, -1825/49, 64/187]",
|
|
||||||
"MakerNote Tag 0x000C": "[16790593/909130039, 1093741891/1127760685]",
|
|
||||||
"MakerNote Tag 0x000D": "24",
|
|
||||||
"MakerNote Tag 0x000E": "0",
|
|
||||||
"MakerNote Tag 0x0010": "1",
|
|
||||||
"MakerNote Tag 0x0011": "4345-8E58-D5B765E42693",
|
|
||||||
"MakerNote ImageCaptureType": "Scene",
|
|
||||||
"MakerNote Tag 0x0019": "8194",
|
|
||||||
"MakerNote Tag 0x001A": "-3ED5-",
|
|
||||||
"MakerNote Tag 0x001F": "0",
|
|
||||||
"MakerNote Tag 0x0020": "42CB-8A14-2D09F1435647",
|
|
||||||
"MakerNote Tag 0x0021": "2228224/0",
|
|
||||||
"MakerNote Tag 0x0023": "[344850436, -1787625472]",
|
|
||||||
"MakerNote Tag 0x0026": "3",
|
|
||||||
"MakerNote Tag 0x0027": "1178873142/875704621",
|
|
||||||
"MakerNote Tag 0x002B": "4B9E-8FE9-F6739C66DC97",
|
|
||||||
"MakerNote Tag 0x002D": "3476",
|
|
||||||
"MakerNote CameraType": "Back Normal",
|
|
||||||
"MakerNote Tag 0x002F": "50",
|
|
||||||
"MakerNote Tag 0x0030": "808506369/33752069",
|
|
||||||
"MakerNote Tag 0x0033": "12288",
|
|
||||||
"MakerNote Tag 0x0034": "5",
|
|
||||||
"MakerNote Tag 0x0035": "4",
|
|
||||||
"MakerNote Tag 0x0036": "180",
|
|
||||||
"MakerNote Tag 0x0037": "4",
|
|
||||||
"MakerNote Tag 0x0038": "203",
|
|
||||||
"MakerNote Tag 0x0039": "1",
|
|
||||||
"MakerNote Tag 0x003A": "133",
|
|
||||||
"MakerNote Tag 0x003B": "0",
|
|
||||||
"MakerNote Tag 0x003C": "4",
|
|
||||||
"MakerNote Tag 0x003D": "66",
|
|
||||||
"MakerNote Tag 0x0040": "[6, 6, 7, 81, 51, 81, 49, 81, 50, 81, 48, 16, 0, 34, 0, 0, 0, 0, 16, 1, ... ]",
|
|
||||||
"MakerNote Tag 0x0041": "0",
|
|
||||||
"MakerNote Tag 0x0042": "0",
|
|
||||||
"MakerNote Tag 0x0043": "0",
|
|
||||||
"MakerNote Tag 0x0044": "0",
|
|
||||||
"MakerNote Tag 0x0045": "0",
|
|
||||||
"MakerNote Tag 0x0046": "0",
|
|
||||||
"MakerNote Tag 0x0048": "569",
|
|
||||||
"MakerNote Tag 0x0049": "0",
|
|
||||||
"MakerNote Tag 0x004A": "2",
|
|
||||||
"MakerNote Tag 0x004D": "808505857/33752145",
|
|
||||||
"MakerNote Tag 0x004E": "[49, 81, 50, 16, 1, 162, 5, 10, 210, 6, 7, 8, 9, 83, 50, 46, 49, 83, 50, 46, ... ]",
|
|
||||||
"MakerNote Tag 0x004F": "[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 144, 245, 0, 2, 232, 143, 0, 0, 0, 9, 0]",
|
|
||||||
"MakerNote Tag 0x0052": "3",
|
|
||||||
"MakerNote Tag 0x0053": "0",
|
|
||||||
"MakerNote Tag 0x0055": "185",
|
|
||||||
"MakerNote Tag 0x0058": "1795",
|
|
||||||
"MakerNote Tag 0x0060": "10127",
|
|
||||||
"MakerNote Tag 0x0061": "26"
|
|
||||||
},
|
|
||||||
"iptc": {},
|
|
||||||
"xmp": {
|
|
||||||
"creator_tool": "26.4.2",
|
|
||||||
"create_date": "2026-05-18T06:22:41.023",
|
|
||||||
"modify_date": "2026-05-18T06:22:41",
|
|
||||||
"face_regions_count": 1,
|
|
||||||
"_xmp_length_bytes": 5345
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-05-18 13.54.47.jpg",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-05-18 13.54.47.jpg",
|
|
||||||
"file_size_bytes": 3149514,
|
|
||||||
"file_size_mb": 3.0,
|
|
||||||
"mtime": "2026-05-18T13:54:47",
|
|
||||||
"ctime": "2026-05-19T06:21:40.360916",
|
|
||||||
"extension": ".jpg"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "be41557d3ef6822c24a00905e65ad9fba5950bf03ed5c2a434d25c893ed0a87d",
|
|
||||||
"sha256_pixels": "417d6fc06052eba388922d61af72674becb044b8650f2ac528a59aa3109d0408",
|
|
||||||
"phash": "f8124da5f87a0e27",
|
|
||||||
"dhash": "0b926d3902230203",
|
|
||||||
"ahash": "000000dcfffffbf8",
|
|
||||||
"whash": "000000dcfffff9f8"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "JPEG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 4032,
|
|
||||||
"height": 3024,
|
|
||||||
"megapixels": 12.19,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": [
|
|
||||||
"72.0",
|
|
||||||
"72.0"
|
|
||||||
],
|
|
||||||
"icc_profile_present": true,
|
|
||||||
"exif_present": true,
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {
|
|
||||||
"ResolutionUnit": 2.0,
|
|
||||||
"ExifOffset": 220.0,
|
|
||||||
"Make": "Apple",
|
|
||||||
"Model": "iPhone 13 Pro Max",
|
|
||||||
"Software": "26.4.2",
|
|
||||||
"Orientation": 6.0,
|
|
||||||
"DateTime": "2026:05:18 13:54:46",
|
|
||||||
"XResolution": 72.0,
|
|
||||||
"YResolution": 72.0,
|
|
||||||
"HostComputer": "iPhone 13 Pro Max"
|
|
||||||
},
|
|
||||||
"exif_exifread": {
|
|
||||||
"Image Make": "Apple",
|
|
||||||
"Image Model": "iPhone 13 Pro Max",
|
|
||||||
"Image Orientation": "Rotated 90 CW",
|
|
||||||
"Image XResolution": "72",
|
|
||||||
"Image YResolution": "72",
|
|
||||||
"Image ResolutionUnit": "Pixels/Inch",
|
|
||||||
"Image Software": "26.4.2",
|
|
||||||
"Image DateTime": "2026:05:18 13:54:46",
|
|
||||||
"Image HostComputer": "iPhone 13 Pro Max",
|
|
||||||
"Image ExifOffset": "220",
|
|
||||||
"EXIF ExposureTime": "1/100",
|
|
||||||
"EXIF FNumber": "3/2",
|
|
||||||
"EXIF ExposureProgram": "Program Normal",
|
|
||||||
"EXIF ISOSpeedRatings": "40",
|
|
||||||
"EXIF DateTimeOriginal": "2026:05:18 13:54:46",
|
|
||||||
"EXIF DateTimeDigitized": "2026:05:18 13:54:46",
|
|
||||||
"EXIF OffsetTime": "+02:00",
|
|
||||||
"EXIF OffsetTimeOriginal": "+02:00",
|
|
||||||
"EXIF OffsetTimeDigitized": "+02:00",
|
|
||||||
"EXIF ShutterSpeedValue": "135889/20452",
|
|
||||||
"EXIF ApertureValue": "27767/23734",
|
|
||||||
"EXIF BrightnessValue": "99413/19450",
|
|
||||||
"EXIF ExposureBiasValue": "0",
|
|
||||||
"EXIF MeteringMode": "Pattern",
|
|
||||||
"EXIF Flash": "Flash did not fire, compulsory flash mode",
|
|
||||||
"EXIF FocalLength": "57/10",
|
|
||||||
"EXIF SubjectArea": "[2014, 1508, 2218, 1328]",
|
|
||||||
"EXIF MakerNote": "[65, 112, 112, 108, 101, 32, 105, 79, 83, 0, 0, 1, 77, 77, 0, 58, 0, 1, 0, 9, ... ]",
|
|
||||||
"EXIF SubSecTimeOriginal": "334",
|
|
||||||
"EXIF SubSecTimeDigitized": "334",
|
|
||||||
"EXIF ColorSpace": "Uncalibrated",
|
|
||||||
"EXIF ExifImageWidth": "4032",
|
|
||||||
"EXIF ExifImageLength": "3024",
|
|
||||||
"EXIF SensingMethod": "One-chip color area",
|
|
||||||
"EXIF SceneType": "Directly Photographed",
|
|
||||||
"EXIF ExposureMode": "Auto Exposure",
|
|
||||||
"EXIF WhiteBalance": "Auto",
|
|
||||||
"EXIF FocalLengthIn35mmFilm": "26",
|
|
||||||
"EXIF LensSpecification": "[299253/190607, 9, 3/2, 14/5]",
|
|
||||||
"EXIF LensMake": "Apple",
|
|
||||||
"EXIF LensModel": "iPhone 13 Pro Max back triple camera 5.7mm f/1.5",
|
|
||||||
"EXIF Tag 0xA460": "2",
|
|
||||||
"MakerNote MakerNoteVersion": "16",
|
|
||||||
"MakerNote Tag 0x0002": "[9, 1, 5, 1, 252, 0, 245, 0, 237, 0, 223, 0, 199, 0, 177, 0, 163, 0, 136, 0, ... ]",
|
|
||||||
"MakerNote Tag 0x0003": "[6, 7, 8, 85, 102, 108, 97, 103, 115, 85, 118, 97, 108, 117, 101, 85, 101, 112, 111, 99, ... ]",
|
|
||||||
"MakerNote AEStable": "Yes",
|
|
||||||
"MakerNote AETarget": "207",
|
|
||||||
"MakerNote AEAverage": "202",
|
|
||||||
"MakerNote AFStable": "Yes",
|
|
||||||
"MakerNote Tag 0x0008": "[-1352269823/1435631616, 22289/49, 128/101]",
|
|
||||||
"MakerNote Tag 0x000C": "[1048576/1061, 536888888/959919927]",
|
|
||||||
"MakerNote Tag 0x000D": "24",
|
|
||||||
"MakerNote Tag 0x000E": "0",
|
|
||||||
"MakerNote Tag 0x0010": "1",
|
|
||||||
"MakerNote ImageCaptureType": "Photo",
|
|
||||||
"MakerNote Tag 0x0019": "2",
|
|
||||||
"MakerNote Tag 0x001F": "0",
|
|
||||||
"MakerNote Tag 0x0020": "4C30-A38C-5D8C18006FEF",
|
|
||||||
"MakerNote Tag 0x0021": "2621440/0",
|
|
||||||
"MakerNote Tag 0x0023": "[9043971, -445775872]",
|
|
||||||
"MakerNote Tag 0x0026": "3",
|
|
||||||
"MakerNote Tag 0x0027": "61983868/46144959",
|
|
||||||
"MakerNote Tag 0x0028": "1",
|
|
||||||
"MakerNote Tag 0x002B": "4C1B-ADDB-46C891A19178",
|
|
||||||
"MakerNote Tag 0x002D": "6004",
|
|
||||||
"MakerNote CameraType": "Back Normal",
|
|
||||||
"MakerNote Tag 0x002F": "143",
|
|
||||||
"MakerNote Tag 0x0030": "17549364/151570847",
|
|
||||||
"MakerNote Tag 0x0033": "4096",
|
|
||||||
"MakerNote Tag 0x0034": "4",
|
|
||||||
"MakerNote Tag 0x0035": "3",
|
|
||||||
"MakerNote Tag 0x0036": "2044",
|
|
||||||
"MakerNote Tag 0x0037": "4",
|
|
||||||
"MakerNote Tag 0x0038": "19",
|
|
||||||
"MakerNote Tag 0x0039": "0",
|
|
||||||
"MakerNote Tag 0x003A": "0",
|
|
||||||
"MakerNote Tag 0x003B": "0",
|
|
||||||
"MakerNote Tag 0x003C": "4",
|
|
||||||
"MakerNote Tag 0x003D": "11",
|
|
||||||
"MakerNote Tag 0x003F": "1",
|
|
||||||
"MakerNote Tag 0x0041": "0",
|
|
||||||
"MakerNote Tag 0x0042": "0",
|
|
||||||
"MakerNote Tag 0x0043": "0",
|
|
||||||
"MakerNote Tag 0x0044": "0",
|
|
||||||
"MakerNote Tag 0x0045": "0",
|
|
||||||
"MakerNote Tag 0x0046": "0",
|
|
||||||
"MakerNote Tag 0x0048": "19",
|
|
||||||
"MakerNote Tag 0x0049": "100",
|
|
||||||
"MakerNote Tag 0x004A": "2",
|
|
||||||
"MakerNote Tag 0x004D": "808505857/33752145",
|
|
||||||
"MakerNote Tag 0x004E": "[49, 81, 50, 16, 1, 162, 5, 10, 210, 6, 7, 8, 9, 83, 50, 46, 49, 83, 50, 46, ... ]",
|
|
||||||
"MakerNote Tag 0x004F": "[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 144, 245, 0, 2, 232, 143, 0, 0, 0, 9, 0, 0]",
|
|
||||||
"MakerNote Tag 0x0052": "3",
|
|
||||||
"MakerNote Tag 0x0053": "1",
|
|
||||||
"MakerNote Tag 0x0055": "0",
|
|
||||||
"MakerNote Tag 0x0058": "1795",
|
|
||||||
"MakerNote Tag 0x0060": "2856",
|
|
||||||
"MakerNote Tag 0x0061": "26"
|
|
||||||
},
|
|
||||||
"iptc": {
|
|
||||||
"IPTC(1, 90)": "\u001b%G",
|
|
||||||
"IPTC(2, 0)": "\u0000\u0002",
|
|
||||||
"IPTC(2, 63)": "135446",
|
|
||||||
"IPTC(2, 62)": "20260518",
|
|
||||||
"DateCreated": "20260518",
|
|
||||||
"TimeCreated": "135446"
|
|
||||||
},
|
|
||||||
"xmp": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filesystem": {
|
|
||||||
"file_name": "2026-05-18 14.10.59.jpg",
|
|
||||||
"file_path": "U:\\PycharmProjects\\FotkyBuzalkovi\\demo_fotky\\2026-05-18 14.10.59.jpg",
|
|
||||||
"file_size_bytes": 304048,
|
|
||||||
"file_size_mb": 0.29,
|
|
||||||
"mtime": "2026-05-18T14:10:59",
|
|
||||||
"ctime": "2026-05-19T06:21:38.476009",
|
|
||||||
"extension": ".jpg"
|
|
||||||
},
|
|
||||||
"hashes": {
|
|
||||||
"sha256_file": "a4b20aa73cbc2fe845f12709ccc7e1d227e8fc1c84605a538e86f4a00b899754",
|
|
||||||
"sha256_pixels": "5b5e19daae775d21822891aef4558ae2c241bf082dfb54ae62cd0be1a045f223",
|
|
||||||
"phash": "c7226934de856937",
|
|
||||||
"dhash": "e74fc3ec6c3fc663",
|
|
||||||
"ahash": "0000217eb683fff9",
|
|
||||||
"whash": "000060feb6c3fff9"
|
|
||||||
},
|
|
||||||
"pillow": {
|
|
||||||
"format": "JPEG",
|
|
||||||
"mode": "RGB",
|
|
||||||
"width": 1153,
|
|
||||||
"height": 2048,
|
|
||||||
"megapixels": 2.36,
|
|
||||||
"has_transparency": false,
|
|
||||||
"dpi": null,
|
|
||||||
"icc_profile_present": false,
|
|
||||||
"exif_present": false,
|
|
||||||
"has_embedded_thumbnail": false
|
|
||||||
},
|
|
||||||
"exif_pillow": {},
|
|
||||||
"exif_exifread": {},
|
|
||||||
"iptc": {},
|
|
||||||
"xmp": {}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
import psycopg2
|
|
||||||
import sys
|
|
||||||
|
|
||||||
try:
|
|
||||||
conn = psycopg2.connect(
|
|
||||||
host="192.168.1.76",
|
|
||||||
port=5432,
|
|
||||||
user="vladimir.buzalka",
|
|
||||||
password="Vlado7309208104++",
|
|
||||||
database="postgres"
|
|
||||||
)
|
|
||||||
cursor = conn.cursor()
|
|
||||||
cursor.execute("SELECT version();")
|
|
||||||
version = cursor.fetchone()
|
|
||||||
print("[OK] PostgreSQL pripojeni uspesne!")
|
|
||||||
print(f"Verze: {version[0][:100]}")
|
|
||||||
|
|
||||||
# Test MongoDB
|
|
||||||
try:
|
|
||||||
from pymongo import MongoClient
|
|
||||||
mongo_conn = MongoClient("mongodb://localhost:27017/", serverSelectionTimeoutMS=2000)
|
|
||||||
mongo_conn.admin.command('ping')
|
|
||||||
print("[OK] MongoDB dostupny")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"[WARN] MongoDB: {str(e)[:50]}")
|
|
||||||
|
|
||||||
# Test Redis
|
|
||||||
try:
|
|
||||||
import redis
|
|
||||||
redis_conn = redis.Redis(host='localhost', port=6379, socket_connect_timeout=2)
|
|
||||||
redis_conn.ping()
|
|
||||||
print("[OK] Redis dostupny")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"[WARN] Redis: {str(e)[:50]}")
|
|
||||||
|
|
||||||
conn.close()
|
|
||||||
except Exception as e:
|
|
||||||
print(f"[ERROR] PostgreSQL: {e}")
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
from pymongo import MongoClient
|
|
||||||
from pymongo.errors import ServerSelectionTimeoutError
|
|
||||||
|
|
||||||
try:
|
|
||||||
client = MongoClient(
|
|
||||||
"mongodb://192.168.1.76:27017/",
|
|
||||||
serverSelectionTimeoutMS=5000,
|
|
||||||
connectTimeoutMS=5000
|
|
||||||
)
|
|
||||||
|
|
||||||
# Test pripojeni
|
|
||||||
client.admin.command('ping')
|
|
||||||
print("[OK] MongoDB pripojeni uspesne!")
|
|
||||||
|
|
||||||
# Zobraz info
|
|
||||||
print(f"Server info: {client.server_info()}")
|
|
||||||
|
|
||||||
# Vytvor databazi
|
|
||||||
db = client['fotky_buzalkovi']
|
|
||||||
print(f"[OK] Databaze 'fotky_buzalkovi' vytvorena/existuje")
|
|
||||||
|
|
||||||
# Vytvor kolekce s validaci
|
|
||||||
db.create_collection(
|
|
||||||
"photos",
|
|
||||||
validator={
|
|
||||||
"$jsonSchema": {
|
|
||||||
"bsonType": "object",
|
|
||||||
"required": ["file_name", "file_path"],
|
|
||||||
"properties": {
|
|
||||||
"file_name": {"bsonType": "string"},
|
|
||||||
"file_path": {"bsonType": "string"},
|
|
||||||
"file_hash": {"bsonType": "string"},
|
|
||||||
"camera": {"bsonType": "string"},
|
|
||||||
"taken_at": {"bsonType": "date"},
|
|
||||||
"width": {"bsonType": "int"},
|
|
||||||
"height": {"bsonType": "int"},
|
|
||||||
"file_size": {"bsonType": "int"},
|
|
||||||
"exif": {"bsonType": "object"},
|
|
||||||
"tags": {"bsonType": "array"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
print("[OK] Kolekce 'photos' vytvorena")
|
|
||||||
|
|
||||||
# Vytvor indexy
|
|
||||||
db.photos.create_index("file_hash", unique=True)
|
|
||||||
db.photos.create_index("taken_at")
|
|
||||||
db.photos.create_index("camera")
|
|
||||||
db.photos.create_index("tags")
|
|
||||||
print("[OK] Indexy vytvoreny")
|
|
||||||
|
|
||||||
client.close()
|
|
||||||
|
|
||||||
except ServerSelectionTimeoutError as e:
|
|
||||||
print(f"[ERROR] Timeout - MongoDB neni dostupny: {e}")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"[ERROR] {e}")
|
|
||||||
Reference in New Issue
Block a user