Skip to content

Repository files navigation

📷 PhotoShutterInspector

Python ExifTool Platform License

Честный анализатор EXIF для проверки пробега затвора камеры и подлинности файлов


📋 Содержание


⚠️ Важное предупреждение

Для многих камер Canon shutter count НЕ записывается в файлы!

Это техническое ограничение камер Canon, а не баг программы.

Модели без записи пробега в файлы: EOS 200D, 250D, 600D, 650D, 700D, 750D, 800D, 77D, 80D, M50, M6 и многие другие.

В таких случаях определить точный пробег по фото/RAW файлу НЕВОЗМОЖНО — ни одна программа в мире не сможет его "вытащить", потому что этих данных просто нет в файле.

Как узнать реальный пробег Canon?

  • 📱 Подключите камеру по USB и используйте EOSInfo (Windows)
  • 🍎 На macOS: ShutterCheck
  • 🔧 Обратитесь в сервисный центр Canon

🎯 Возможности

✅ Основные функции

Функция Описание
Извлечение Shutter Count Из EXIF/MakerNotes, если камера его записывает (Nikon, Sony, Pentax, некоторые Canon)
Честный вердикт Если данных нет — программа прямо скажет: "невозможно определить по файлу"
Детектор подделок Определяет файлы с поддельным расширением (например, WebP переименованный в CR2)
Проверка размера Слишком маленький файл для RAW = подозрение
Детектор обработки Определяет файлы из Lightroom, Photoshop, мессенджеров
Режим сравнения Проверка "от одной ли камеры" два файла (для покупки б/у)

📁 Поддерживаемые форматы

Формат Производитель Расширение
Canon RAW Canon .CR2, .CR3
Nikon RAW Nikon .NEF
Sony RAW Sony .ARW
Olympus RAW Olympus/OM System .ORF
Panasonic RAW Panasonic .RW2
Adobe DNG Universal .DNG
JPEG Все камеры .JPG, .JPEG

📊 Извлекаемые данные

📷 КАМЕРА:
   - Производитель (Make)
   - Модель (Model)
   - Серийный номер (Serial Number)
   - Внутренний серийный номер
   - Версия прошивки (Firmware)
   - Объектив (Lens Model)

🔢 ПРОБЕГ ЗАТВОРА:
   - Shutter Count (если записан)
   - Источник данных (тег)

📊 КОСВЕННЫЕ ДАННЫЕ:
   - Номер файла (FileIndex) — НЕ равен пробегу!
   - Номер директории
   - ImageUniqueID

📅 ДАТА И ВРЕМЯ:
   - DateTimeOriginal
   - DateTimeDigitized
   - Дата модификации файла

⚙️ ПАРАМЕТРЫ СЪЁМКИ:
   - ISO
   - Диафрагма (F-number)
   - Выдержка (Shutter Speed)
   - Фокусное расстояние
   - Размер изображения

🛡️ ЦЕЛОСТНОСТЬ:
   - Реальный тип файла (MIME)
   - Детектор редакторов
   - Проверка XMP метаданных

📦 Установка

Системные требования

  • Python 3.11 или выше
  • ExifTool (обязательно)
  • ОС: Windows, Linux, macOS

Шаг 1: Клонирование репозитория

git clone https://github.com/YOUR_USERNAME/PhotoShutterInspector.git
cd PhotoShutterInspector

Шаг 2: Установка ExifTool

Windows

  1. Скачайте с официального сайта: exiftool.org

  2. Распакуйте архив

  3. Переименуйте exiftool(-k).exe в exiftool.exe

  4. Скопируйте exiftool.exe и папку exiftool_files в директорию проекта

    Или добавьте путь к ExifTool в системную переменную PATH

Linux (Debian/Ubuntu)

sudo apt update
sudo apt install libimage-exiftool-perl

Linux (Fedora/RHEL)

sudo dnf install perl-Image-ExifTool

macOS

brew install exiftool

Шаг 3: Проверка установки

exiftool -ver
# Должно вывести версию, например: 13.45

Зависимости Python

Внешних зависимостей нет! Используется только стандартная библиотека Python.

Для GUI версии (опционально):

pip install tkinterdnd2  # Для drag&drop

🚀 Быстрый старт

Анализ файла (Windows)

analyze.bat photo.CR2

Анализ файла (Python)

python photoshutterinspector.py photo.CR2 --pretty

Результат

======================================================================
📁 ФАЙЛ: IMG_1234.CR2
   Путь: D:\photos\IMG_1234.CR2
   Расширение: CR2 | Размер: 25.30 MB
   Реальный тип: CR2 (image/x-canon-cr2)
----------------------------------------------------------------------
📷 КАМЕРА:
   Производитель: Canon
   Модель: Canon EOS 200D
   Серийный номер: 123456789012
   Прошивка: Firmware Version 1.0.1
   Объектив: EF-S18-55mm f/4-5.6 IS STM
----------------------------------------------------------------------
🔢 ПРОБЕГ ЗАТВОРА (SHUTTER COUNT):
   ❌ НЕ НАЙДЕН В ФАЙЛЕ
   
   Shutter count в EXIF отсутствует — по этому файлу определить
   точный пробег НЕВОЗМОЖНО.
   
   Для Canon (200D, 600D, 700D и др.) это нормально — данные
   о пробеге не записываются в RAW/JPG.
   
   ➡️  Для определения пробега используйте:
       • Подключение камеры по USB + EOSInfo/ShutterCheck
       • Сервисный центр Canon
----------------------------------------------------------------------
📊 КОСВЕННЫЕ ДАННЫЕ (⚠️ НЕ являются пробегом!):
   Номер файла (FileIndex): 1234
   ⚠️ Номер файла НЕ равен пробегу затвора; может сбрасываться
======================================================================

💻 Использование CLI

Основные команды

# Анализ одного файла
python photoshutterinspector.py photo.CR2 --pretty

# Анализ папки с фотографиями
python photoshutterinspector.py ./photos/ --pretty

# Экспорт в JSON
python photoshutterinspector.py ./photos/ --json results.json

# Экспорт в CSV
python photoshutterinspector.py ./photos/ --csv results.csv

# Сравнение двух файлов (режим проверки продавца)
python photoshutterinspector.py seller_photo.CR2 --compare fresh_shot.CR2

# Указать путь к ExifTool (если не в PATH)
python photoshutterinspector.py photo.CR2 --exiftool ./exiftool.exe --pretty

# Включить сырые данные ExifTool в JSON
python photoshutterinspector.py photo.CR2 --json full.json --raw-exif

Все аргументы

Аргумент Описание
path Путь к файлу или папке для анализа (обязательный)
--pretty Человекочитаемый вывод в консоль
--json FILE Сохранить результат в JSON файл
--csv FILE Сохранить результат в CSV файл
--compare FILE Сравнить с другим файлом (режим проверки продавца)
--exiftool PATH Путь к ExifTool (по умолчанию: exiftool в PATH)
--raw-exif Включить все сырые данные ExifTool в JSON

Batch-скрипты (Windows)

:: Анализ файла
analyze.bat photo.CR2

:: Сравнение двух файлов
analyze.bat photo1.CR2 photo2.CR2

:: Запуск GUI
gui_start.bat

🖥️ GUI версия

Минимальный графический интерфейс для быстрой проверки без командной строки.

Запуск

python gui.py

Или на Windows:

gui_start.bat

Возможности GUI

  • 📁 Выбор файла через диалог
  • 📂 Выбор папки для массового анализа
  • 🔍 Сравнение двух файлов
  • 📋 Копирование результатов

📊 Форматы вывода

JSON

{
  "file_name": "IMG_1234.CR2",
  "file_type": "cr2",
  "real_file_type": "CR2",
  "mime_type": "image/x-canon-cr2",
  "file_type_mismatch": false,
  "camera_make": "Canon",
  "camera_model": "Canon EOS 200D",
  "serial_number": "123456789012",
  "firmware": "Firmware Version 1.0.1",
  "lens_model": "EF-S18-55mm f/4-5.6 IS STM",
  "datetime_original": "2024:01:15 14:30:00",
  "shutter_count": null,
  "shutter_count_present": false,
  "shutter_count_source": "none",
  "file_number_hint": 1234,
  "file_number_warning": "Номер файла НЕ равен пробегу затвора...",
  "not_out_of_camera": false,
  "iso": 400,
  "aperture": "5.6",
  "shutter_speed": "1/250"
}

CSV

Удобен для анализа большого количества файлов в Excel/Google Sheets.

file_name camera_model shutter_count shutter_count_present file_number_hint
IMG_1234.CR2 Canon EOS 200D False 1234
DSC_5678.NEF NIKON D750 45230 True 5678

🔍 Режим сравнения файлов

Предназначен для проверки при покупке б/у камеры на Авито, Юле и т.д.

Использование

python photoshutterinspector.py seller_photo.CR2 --compare fresh_test_shot.CR2

Что сравнивается

  1. Модель камеры — должна совпадать
  2. Серийный номер — самый надёжный идентификатор
  3. Версия прошивки — может отличаться после обновления
  4. Последовательность времени — второй файл должен быть снят позже
  5. Номер файла — должен увеличиваться

Возможные вердикты

Вердикт Значение
LIKELY_SAME_CAMERA Вероятно одна камера (совпадают серийник/модель)
INCONCLUSIVE Недостаточно данных для вывода
🚨 SUSPICIOUS Подозрительно — разные серийники или модели

Пример вывода

======================================================================
🔍 СРАВНЕНИЕ ДВУХ ФАЙЛОВ (режим проверки продавца)
======================================================================
📁 Файл 1: seller_photo.CR2
📁 Файл 2: fresh_test_shot.CR2
----------------------------------------------------------------------

✅ ВЕРДИКТ: ВЕРОЯТНО ОДНА КАМЕРА

----------------------------------------------------------------------
📋 ДЕТАЛИ ПРОВЕРКИ:
   ✓ Одинаковая модель: Canon Canon EOS 200D
   ✓ Одинаковый серийный номер: 123456789012
   ✓ Одинаковая прошивка: Firmware Version 1.0.1
   ✓ Корректная последовательность времени: файл 2 снят позже на 3600 сек
   ✓ Номер файла увеличивается: 1234 → 1235
======================================================================

🛡️ Детектор подделок

Программа автоматически определяет:

1. Несоответствие расширения и содержимого

Если файл photo.CR2 на самом деле является WebP, JPEG или другим форматом:

🚨🚨🚨 ВНИМАНИЕ! ФАЙЛ ПОДДЕЛЬНЫЙ! 🚨🚨🚨
Расширение .cr2 НЕ соответствует содержимому (WEBP)
Это НЕ настоящий RAW файл с камеры!

2. Подозрительно маленький размер

Настоящий RAW файл:

  • Canon CR2: 20-35 MB
  • Nikon NEF: 20-50 MB
  • Sony ARW: 20-60 MB

Если файл весит 100 KB — это не RAW!

3. Файлы из редакторов

Определяет обработку в:

  • Adobe Lightroom / Camera Raw
  • Adobe Photoshop
  • Capture One
  • DxO PhotoLab
  • GIMP, Darktable, RawTherapee
  • Мессенджеры (Telegram, WhatsApp, VK и др.)
⚠️ ПРЕДУПРЕЖДЕНИЯ:
   🔴 Обнаружен редактор/платформа: Lightroom. 
      Метаданные могут быть изменены или удалены.

🛒 Инструкция для покупателей

Подробная инструкция находится в файле: docs/HOW_TO_CHECK_SELLER.md

Краткий алгоритм

  1. Попросите оригинальный RAW файл (не JPG из мессенджера!)
  2. Проверьте размер — должен быть 20-35 MB для CR2
  3. Запустите анализ:
    python photoshutterinspector.py seller_file.CR2 --pretty
  4. Проверьте реальный тип файла — должен соответствовать расширению
  5. При личной встрече — проверьте пробег через USB + EOSInfo

Красные флаги 🚩

Признак Что это значит
Файл < 1 MB при расширении CR2/NEF 100% подделка
Реальный тип ≠ расширению Файл переименован
Нет данных о камере Файл не с камеры или обработан
Продавец присылает только JPG из мессенджера Метаданные потеряны
Отказывается прислать RAW Что-то скрывает

❓ FAQ

Почему для Canon нет пробега?

Canon исторически не записывает shutter count в EXIF/RAW для большинства потребительских моделей. Это решение производителя, а не баг программы или ExifTool.

Модели Canon БЕЗ пробега в файлах:

  • EOS 200D/250D/850D
  • EOS 600D/650D/700D/750D/800D
  • EOS 77D/80D/90D
  • EOS M50/M6/M100
  • и многие другие

Модели Canon С пробегом в файлах:

  • EOS 1D series (профессиональные)
  • Некоторые модели серии 5D

Номер файла (IMG_1234) — это пробег?

НЕТ! Номер файла:

  • ❌ Сбрасывается при форматировании карты
  • ❌ Зависит от настроек (Continuous/Auto Reset)
  • ❌ Может отличаться на разных картах памяти
  • ❌ Легко подделывается переименованием

Для каких камер работает извлечение из файла?

Производитель Поддержка
Nikon ✅ Большинство моделей записывают shutter count
Sony ✅ Многие модели
Pentax ✅ Многие модели
Canon ⚠️ Только профессиональные 1D series
Olympus ❌ Обычно не записывают
Panasonic ❌ Обычно не записывают

Как узнать реальный пробег Canon?

  1. EOSInfo (Windows): http://www.interstice.co.uk/eosinfo/
  2. ShutterCheck (macOS): https://www.direstudio.de/shuttercheck/
  3. gPhoto2 (Linux): http://www.gphoto.org/
  4. Сервисный центр Canon

Можно ли подделать EXIF?

Да, EXIF можно редактировать. Поэтому:

  • Не доверяйте на 100% данным из файлов
  • При покупке б/у всегда проверяйте камеру лично
  • Используйте USB-проверку как дополнительное подтверждение

📁 Структура проекта

PhotoShutterInspector/
├── photoshutterinspector.py   # Основной CLI модуль
├── gui.py                     # GUI версия (tkinter)
├── analyze.bat                # Быстрый запуск (Windows)
├── gui_start.bat              # Запуск GUI (Windows)
├── README.md                  # Документация
├── LICENSE                    # Лицензия MIT
├── .gitignore                 # Git ignore
├── docs/
│   └── HOW_TO_CHECK_SELLER.md # Инструкция для покупателей
└── examples/
    ├── sample_output.json     # Пример JSON вывода
    └── sample_output.csv      # Пример CSV вывода

🤝 Вклад в проект

Приветствуются pull requests! Для крупных изменений сначала откройте issue.

Области для улучшения

  • Поддержка большего количества тегов shutter count
  • Улучшенное определение обработанных файлов
  • Веб-интерфейс
  • Поддержка других форматов RAW

📜 Лицензия

Этот проект распространяется под лицензией MIT — см. файл LICENSE для деталей.


🙏 Благодарности

  • Phil Harvey — создатель ExifTool
  • Сообщество фотографов за feedback и тестирование

⭐ Если проект полезен — поставьте звезду! ⭐

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages