Честный анализатор EXIF для проверки пробега затвора камеры и подлинности файлов
⚠️ Важное предупреждение- 🎯 Возможности
- 📦 Установка
- 🚀 Быстрый старт
- 💻 Использование CLI
- 🖥️ GUI версия
- 📊 Форматы вывода
- 🔍 Режим сравнения файлов
- 🛡️ Детектор подделок
- 🛒 Инструкция для покупателей
- ❓ FAQ
- 📜 Лицензия
Это техническое ограничение камер Canon, а не баг программы.
Модели без записи пробега в файлы: EOS 200D, 250D, 600D, 650D, 700D, 750D, 800D, 77D, 80D, M50, M6 и многие другие.
В таких случаях определить точный пробег по фото/RAW файлу НЕВОЗМОЖНО — ни одна программа в мире не сможет его "вытащить", потому что этих данных просто нет в файле.
- 📱 Подключите камеру по 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
git clone https://github.com/YOUR_USERNAME/PhotoShutterInspector.git
cd PhotoShutterInspector-
Скачайте с официального сайта: exiftool.org
-
Распакуйте архив
-
Переименуйте
exiftool(-k).exeвexiftool.exe -
Скопируйте
exiftool.exeи папкуexiftool_filesв директорию проектаИли добавьте путь к ExifTool в системную переменную PATH
sudo apt update
sudo apt install libimage-exiftool-perlsudo dnf install perl-Image-ExifToolbrew install exiftoolexiftool -ver
# Должно вывести версию, например: 13.45Внешних зависимостей нет! Используется только стандартная библиотека Python.
Для GUI версии (опционально):
pip install tkinterdnd2 # Для drag&dropanalyze.bat photo.CR2python 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
⚠️ Номер файла НЕ равен пробегу затвора; может сбрасываться
======================================================================
# Анализ одного файла
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 |
:: Анализ файла
analyze.bat photo.CR2
:: Сравнение двух файлов
analyze.bat photo1.CR2 photo2.CR2
:: Запуск GUI
gui_start.batМинимальный графический интерфейс для быстрой проверки без командной строки.
python gui.pyИли на Windows:
gui_start.bat- 📁 Выбор файла через диалог
- 📂 Выбор папки для массового анализа
- 🔍 Сравнение двух файлов
- 📋 Копирование результатов
{
"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"
}Удобен для анализа большого количества файлов в 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- Модель камеры — должна совпадать
- Серийный номер — самый надёжный идентификатор
- Версия прошивки — может отличаться после обновления
- Последовательность времени — второй файл должен быть снят позже
- Номер файла — должен увеличиваться
| Вердикт | Значение |
|---|---|
| ✅ 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
======================================================================
Программа автоматически определяет:
Если файл photo.CR2 на самом деле является WebP, JPEG или другим форматом:
🚨🚨🚨 ВНИМАНИЕ! ФАЙЛ ПОДДЕЛЬНЫЙ! 🚨🚨🚨
Расширение .cr2 НЕ соответствует содержимому (WEBP)
Это НЕ настоящий RAW файл с камеры!
Настоящий RAW файл:
- Canon CR2: 20-35 MB
- Nikon NEF: 20-50 MB
- Sony ARW: 20-60 MB
Если файл весит 100 KB — это не RAW!
Определяет обработку в:
- Adobe Lightroom / Camera Raw
- Adobe Photoshop
- Capture One
- DxO PhotoLab
- GIMP, Darktable, RawTherapee
- Мессенджеры (Telegram, WhatsApp, VK и др.)
⚠️ ПРЕДУПРЕЖДЕНИЯ:
🔴 Обнаружен редактор/платформа: Lightroom.
Метаданные могут быть изменены или удалены.
Подробная инструкция находится в файле: docs/HOW_TO_CHECK_SELLER.md
- Попросите оригинальный RAW файл (не JPG из мессенджера!)
- Проверьте размер — должен быть 20-35 MB для CR2
- Запустите анализ:
python photoshutterinspector.py seller_file.CR2 --pretty
- Проверьте реальный тип файла — должен соответствовать расширению
- При личной встрече — проверьте пробег через USB + EOSInfo
| Признак | Что это значит |
|---|---|
| Файл < 1 MB при расширении CR2/NEF | 100% подделка |
| Реальный тип ≠ расширению | Файл переименован |
| Нет данных о камере | Файл не с камеры или обработан |
| Продавец присылает только JPG из мессенджера | Метаданные потеряны |
| Отказывается прислать RAW | Что-то скрывает |
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
НЕТ! Номер файла:
- ❌ Сбрасывается при форматировании карты
- ❌ Зависит от настроек (Continuous/Auto Reset)
- ❌ Может отличаться на разных картах памяти
- ❌ Легко подделывается переименованием
| Производитель | Поддержка |
|---|---|
| Nikon | ✅ Большинство моделей записывают shutter count |
| Sony | ✅ Многие модели |
| Pentax | ✅ Многие модели |
| Canon | |
| Olympus | ❌ Обычно не записывают |
| Panasonic | ❌ Обычно не записывают |
- EOSInfo (Windows): http://www.interstice.co.uk/eosinfo/
- ShutterCheck (macOS): https://www.direstudio.de/shuttercheck/
- gPhoto2 (Linux): http://www.gphoto.org/
- Сервисный центр Canon
Да, 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 и тестирование
⭐ Если проект полезен — поставьте звезду! ⭐