Files
administrator 662c890257 notebookVb
2026-05-24 07:45:59 +02:00

165 lines
6.2 KiB
Python

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
import psycopg2
conn = psycopg2.connect(host='192.168.1.76', port=5432, dbname='fotky_buzalkovi',
user='vladimir.buzalka', password='Vlado7309208104++')
cur = conn.cursor()
# 1. Duplikáty sha256_pixels
print('=== DUPLIKÁTY sha256_pixels ===')
cur.execute('''SELECT sha256_pixels, COUNT(*) as cnt FROM photos
WHERE sha256_pixels IS NOT NULL GROUP BY sha256_pixels HAVING COUNT(*) > 1
ORDER BY cnt DESC LIMIT 10''')
for r in cur.fetchall():
print(f' {r[0][:16]}... : {r[1]}x')
cur.execute('''SELECT COUNT(*), SUM(cnt) FROM (
SELECT COUNT(*) as cnt FROM photos WHERE sha256_pixels IS NOT NULL
GROUP BY sha256_pixels HAVING COUNT(*) > 1) x''')
r = cur.fetchone()
print(f'Celkem skupin duplikátů: {r[0]}, fotek v duplikátech: {r[1]}')
# 2. Identické phash
print('\n=== IDENTICKÉ phash ===')
cur.execute('''SELECT phash, COUNT(*) as cnt FROM photos
WHERE phash IS NOT NULL GROUP BY phash HAVING COUNT(*) > 1
ORDER BY cnt DESC LIMIT 10''')
for r in cur.fetchall():
print(f' phash={r[0]}: {r[1]}x')
cur.execute('''SELECT COUNT(*), SUM(cnt) FROM (
SELECT COUNT(*) as cnt FROM photos WHERE phash IS NOT NULL
GROUP BY phash HAVING COUNT(*) > 1) x''')
r = cur.fetchone()
print(f'Celkem skupin: {r[0]}, fotek: {r[1]}')
# 3. Screenshoty
print('\n=== SCREENSHOTY ===')
cur.execute('SELECT COUNT(*) FROM photos WHERE is_screenshot = true')
print(f'is_screenshot=true: {cur.fetchone()[0]}')
# 4. Objektivy
print('\n=== TOP OBJEKTIVY ===')
cur.execute('''SELECT COALESCE(lens_model, '(neuvedeno)') as lens, COUNT(*) as cnt
FROM photos GROUP BY lens ORDER BY cnt DESC LIMIT 15''')
for r in cur.fetchall():
print(f' {r[1]:>6} {r[0]}')
# 5. ISO distribuce
print('\n=== ISO DISTRIBUCE ===')
cur.execute('''SELECT iso, COUNT(*) as cnt FROM photos WHERE iso IS NOT NULL
GROUP BY iso ORDER BY cnt DESC LIMIT 15''')
for r in cur.fetchall():
print(f' ISO {r[0]:>6}: {r[1]}')
# 6. Clona
print('\n=== CLONA (aperture) TOP ===')
cur.execute('''SELECT aperture, COUNT(*) as cnt FROM photos WHERE aperture IS NOT NULL
GROUP BY aperture ORDER BY cnt DESC LIMIT 15''')
for r in cur.fetchall():
print(f' f/{r[0]}: {r[1]}')
# 7. Expoziční čas
print('\n=== EXPOZIČNÍ ČAS TOP ===')
cur.execute('''SELECT exposure_time, COUNT(*) as cnt FROM photos WHERE exposure_time IS NOT NULL
GROUP BY exposure_time ORDER BY cnt DESC LIMIT 15''')
for r in cur.fetchall():
print(f' {r[0]}: {r[1]}')
# 8. GPS top lokace
print('\n=== GPS TOP LOKACE (zaokrouhleno na 0.1 stupne) ===')
cur.execute('''SELECT ROUND(gps_lat::numeric, 1) as lat, ROUND(gps_lon::numeric, 1) as lon, COUNT(*) as cnt
FROM photos WHERE gps_lat IS NOT NULL AND gps_lon IS NOT NULL
GROUP BY lat, lon ORDER BY cnt DESC LIMIT 20''')
for r in cur.fetchall():
print(f' [{r[0]}, {r[1]}]: {r[2]} fotek')
cur.execute('''SELECT MIN(gps_lat), MAX(gps_lat), MIN(gps_lon), MAX(gps_lon)
FROM photos WHERE gps_lat IS NOT NULL''')
r = cur.fetchone()
print(f' Rozsah Lat: {r[0]} .. {r[1]}')
print(f' Rozsah Lon: {r[2]} .. {r[3]}')
# 9. Megapixely po letech
print('\n=== PRUMERNE MEGAPIXELY PO LETECH ===')
cur.execute('''SELECT EXTRACT(YEAR FROM taken_at)::INT as rok,
ROUND(AVG(megapixels)::numeric, 1) as avg_mp,
ROUND(MAX(megapixels)::numeric, 1) as max_mp, COUNT(*) as cnt
FROM photos WHERE taken_at IS NOT NULL AND megapixels IS NOT NULL
GROUP BY rok ORDER BY rok''')
for r in cur.fetchall():
print(f' {r[0]}: avg={r[1]} MP, max={r[2]} MP ({r[3]} fotek)')
# 10. Formáty
print('\n=== FORMATY ===')
cur.execute('''SELECT COALESCE(file_ext, '(none)') as ext, COUNT(*) as cnt
FROM photos GROUP BY ext ORDER BY cnt DESC''')
for r in cur.fetchall():
print(f' {r[0]}: {r[1]}')
# 11. Průhlednost
print('\n=== PRUHLEDNOST ===')
cur.execute('SELECT COUNT(*) FROM photos WHERE has_transparency = true')
print(f' S pruhlednosti: {cur.fetchone()[0]}')
# 12. Barevné módy
print('\n=== BAREVNE MODY ===')
cur.execute('''SELECT COALESCE(mode, '(none)') as m, COUNT(*) as cnt
FROM photos GROUP BY m ORDER BY cnt DESC''')
for r in cur.fetchall():
print(f' {r[0]}: {r[1]}')
# 13. Neznámé fotky - vzory názvů
print('\n=== NEZNAME FOTKY 2015-2016 (bez kamery) - vzory nazvu ===')
cur.execute('''SELECT file_name FROM photos
WHERE camera_model IS NULL AND EXTRACT(YEAR FROM taken_at) BETWEEN 2015 AND 2016
LIMIT 30''')
for r in cur.fetchall():
print(f' {r[0]}')
print('\n=== NEZNAME FOTKY 2022 - vzory nazvu ===')
cur.execute('''SELECT file_name FROM photos
WHERE camera_model IS NULL AND EXTRACT(YEAR FROM taken_at) = 2022
LIMIT 30''')
for r in cur.fetchall():
print(f' {r[0]}')
print('\n=== 2022 PREFIXES ===')
cur.execute('''SELECT LEFT(file_name, 10) as prefix, COUNT(*) as cnt FROM photos
WHERE camera_model IS NULL AND EXTRACT(YEAR FROM taken_at) = 2022
GROUP BY prefix ORDER BY cnt DESC LIMIT 15''')
for r in cur.fetchall():
print(f' {r[0]}: {r[1]}')
# 14. Měsíce
print('\n=== FOTKY PO MESICICH ===')
nazvy = ['','Leden','Unor','Brezen','Duben','Kveten','Cerven','Cervenec','Srpen','Zari','Rijen','Listopad','Prosinec']
cur.execute('''SELECT EXTRACT(MONTH FROM taken_at)::INT as mesic, COUNT(*) as cnt
FROM photos WHERE taken_at IS NOT NULL GROUP BY mesic ORDER BY mesic''')
for r in cur.fetchall():
print(f' {nazvy[r[0]]}: {r[1]}')
# 15. Dny v týdnu
print('\n=== FOTKY PO DNECH V TYDNU ===')
dny = ['Nedele','Pondeli','Utery','Streda','Ctvrtek','Patek','Sobota']
cur.execute('''SELECT EXTRACT(DOW FROM taken_at)::INT as den, COUNT(*) as cnt
FROM photos WHERE taken_at IS NOT NULL GROUP BY den ORDER BY den''')
for r in cur.fetchall():
print(f' {dny[r[0]]}: {r[1]}')
# 16. Hodiny
print('\n=== FOTKY PO HODINACH ===')
cur.execute('''SELECT EXTRACT(HOUR FROM taken_at)::INT as hod, COUNT(*) as cnt
FROM photos WHERE taken_at IS NOT NULL GROUP BY hod ORDER BY hod''')
for r in cur.fetchall():
print(f' {r[0]:02d}:00 - {r[1]}')
# 17. Top dny (události)
print('\n=== TOP 20 DNU (nejvic fotek = udalosti) ===')
cur.execute('''SELECT taken_at::date as den, COUNT(*) as cnt
FROM photos WHERE taken_at IS NOT NULL GROUP BY den ORDER BY cnt DESC LIMIT 20''')
for r in cur.fetchall():
print(f' {r[0]}: {r[1]} fotek')
conn.close()