Skip to content

Leastick/code_examples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

"Фотоальбом":

ПОСТАНОВКА ЗАДАЧИ:
Реализовать утилиту для поиска, просмотра и кластеризации фотографий, а также организации фотоальбомов.
Кластеризация должна выделять и различать дубли, серии, схожие фотографии.



ДОПЫ:
0. GUI-only
    0.1. режим обзора ФС
    0.2. режим обзора альбомов
1. Управление альбомами:
    1.1 создать
    1.2 удалить
    1.3 переименовать
    1.4 добавить/удалить файлы в альбом
2. Переход по фото стрелочками (внутри альбома и внутри каталога ФС)
3. Режимы просмотра: вписано в экран, 100%
4. Кластеризация: внутри альбома
5. Кластеризация: на ФС по метаданным изображения с последующим формированием альбомов
6. Кластеризация: на ФС по похожести (выделение серий)



ТРЕБОВАНИЯ:
* Python версии не ниже 3.6 (возможно, что подойдет и более старая версия, но работоспособность на более старых версиях
не проверялась)
* PyQT 5.0
* Pillow 4.3
* ExifRead 2.1.2



ВОЗМОЖНОСТИ ПРОГРАММЫ:
Режим обзора ФС:
0) Возможность менять текущую директорию (кнопка 'Change directory')
1) Возможность переходить из текущей директории в родительскую (кнопка 'Go upper')
2) Возможность перехода в дочернюю директорию (кнопка с изображением папки левее имени директории)
3) Возможность открывать файлы, если их умеет открывать ОС (кнопка левее имени файла, файл открывается в приложении,
которое было выбрано для открытия файлов такого же расширения)
4) Возможность просмотреть все изображения, что находятся в текущей директории (уже средствами данного приложения)
5) Кнопка clustering menu на данный момент не работает и это так задумано (не реализован до конца нужный функционал,
видимо, пункт 5 раздела 'ДОПЫ')


Режим обзора альбомов:
0) Возможность создать/удалить/переименовать альбом (у каждого альбома должно быть уникальное имя, попытка создать
альбом с не уникальным именем или попытка переименовать альбом в имя уже существующего альбома будет проигнорирована)
1) Возможность добавить изображения в альбом, при этом одно и то же изображение повторно в альбом не добавляется
('одно и то же' с точки зрения ОС, то есть изображение не будет добавлено если путь до него совпадает с путем до
какого-нибудь уже добавленного в альбом изображения)
2) Возможность удалять изображения из альбома(как все сразу, так и выборочно)
3) Возможность кластеризовать альбом, что дает доступ к дополнительным функциям, о которых ниже.
4) Возможность просмотреть все изображения в альбоме средствами программы (про режимы просмотра см. ниже)
Все описанные выше функции ( '0) - 4)') доступны по нажатию кнопки с изображением папки, слева от имени альбома.
Кластеризация производится единожды. Все изображения добавленные после построения кластеризации, будут автоматически
в нее добавляться, все изображения удаляемые из альбома будут из нее исключаться.

Функции доступные после того, как альбом был кластеризован (доступны по кнопоке с буквой 'S' левее имени альбома):
5) Удалить дубликаты изображений, при этом задается коэфициент от 0 до 1, который влияет на точность определения
дубликатов, чем он больше, тем точнее выявляются дубликаты (при 1 удаляются изображения совпадающие попиксельно),
с другой стороны, чем больше коэффицент, тем дольше будет выполняться этот запрос. Коэффициент меняется по нажатию
кнопки с изображением шестеренки.
6) Найти все изображения похожие на выбранное (можно выбрать любое изображение из ФС, к которому есть доступ). Точность
так же задается коэффицентом от 0 до 1. Меньшие значения коэффицента подходят для поиска серий изображений,
большие для выявления изображений, схожих визуально, но не являющихся сериями (возможно, что данный эффект не
достигается в полной мере, для этого уже нужно будет аккуратнее подобрать внутренние константы программы). Изменение
коэффицента не влияет на скорость выполнения запроса.

ч
Режимы просмотра:
0) Для просмотра изображений в приложении существует два режима:
    0.1 Вписанный в экран. Изображение гарантированно размещается не выходя "за границы" монитора, для этого в некоторых
    случаях (когда разрешение экрана меньше разрешения изображения) изображение сжимается
    0.2 Изображение отображается "как есть", возможно внутри окна с полосами прокрутки в некоторых случаях (когда
    разрешение экрана меньше разрешения изображения)
Переключение между режимами происходит с помощью клавиши C в английской раскладке
1) Переключение между изображениями в альбоме/директории происходит с помощью клавиш "стрелочек": влево - предыдущее
изображение, вправо - следущее. Список изображений зациклен. Закрыть окно, можно так же с помощью клавиши ESC.


Остальные возможности:
0) Сохранение по кнопке Save. Сохраняет текущую конфигурацию альбомов и указанное разрешение экрана. Повторное нажатие
повлечет перезапись уже существующего сохранения. Если при запуске программы будут найдены сохранения, которые программа
сможет распознать, то будет произведена загрузка из этих файлов.
При загрузке альбомов из сохранения, все изображения, что были удалены из файловой системы будут удалены из альбомов.



СОСТАВ
0) GUI - модули, отвечающие за графический интерфейс
1) algorithm - модуль, содержащий в себе реализации алгоритмов для сравнения фотографий на идентичность и похожесть
2) func - вспомогательные функции, которые используются повсеместно в приложении
3) pics - содержит изображения
4) docs - содержит текстовые файлы, которые не участвует в работе приложения (например, README)
5) data - папка, которая содержит (при наличии) в себе сереализованные объекты данного приложения (то есть файлы
необходимые для загрузки сохраннненого ранее состояния приложения)
6) test.py - тесты логики приложения
7) album.py - класс "альбома"

Подробнее:
* album.py - модуль предоставляющий функционал альбома
* main.py - открыват главное окно приложения, предоставляет функционал для загрузки и сохранения
GUI:
    * main_window.py - главное окно приложения, которое содержит на себе все другие виджеты
    * album_mode.py - виджет, отвечающий за режим обзора фотоальбомов
    * file_system.py - виджет, отвечающий за режим обзора ФС
    * events.py - здесь собраны все "кастомные" сигналы, которые могут "испустить" виджеты, предназначение для
    того, чтобы обеспечить взаимодействие пользователя и приложения
    * image_show_window.py - окно просмотра изображений, обеспечивающее описанный ранее фунцкионал
algorithm:
    * average_hash.py - модуль реализующий алгоритм хэширования изображений
    * bruteforce_check.py - модуль реализующий сравнение изображений на идетичность путем сравнения каждого пикселя
func:
    * func.py - функции общего назначения
    * image_func.py - функции для работы с изображениями

pics:
* %имя файла%.png - изображения используемые в приложении
* testing_pictures - изображения (и не изображения), используемые при тестировании приложения


TODO:
0) Реализовать кластеризацию по EXIF (пункт 5 раздела ДОПЫ)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages