ЛКЛ 2019 Вступительная Android

Что надо сделать?

В качестве вступительной работы будет необходимо написать андроид приложение, которое по указанному локальному пути к папке с изображениями, находит дублирующиеся изображения(очень простым методом перцептивных хешей) и отображает их в список 

Примеры дублирующихся изображений

Примеры дублирующихся изображений приведены ниже. Какого-то точного критерия оценки похожести нет, но примерную точность, которая требуется, можно увидеть ниже. Можно считать, что точности метода перцептивных хешей достаточно.

Пример 1 (Одинаковое изображение)
Пример 2 (Одинаковое изображение разного качества)
Пример 3 (Одинаковое изображение с небольшими искажениями)

Примеры изображений, которые НЕ являются дублирующимися

Пример 1 (Слишком сильное искажение)
Пример 2 (Отражение, повороты изображения)
Пример 3 (Кадрирование)

Стек

Приложение можно писать на Kotlin или Java. Разрешается использовать любые библиотеки. Для написания необходимо использовать Android Studio. НЕ Eclipse (если вы не знаете что это, то оно и к лучшему).

Задание разбито на несколько частей

  1. Загрузка картинок из внутренней памяти по указанному пути (10 баллов)
  1. Поиск дублирующихся изображений. Результатом может являться текстовый файл в котором названия картинок распределены по группам одной группе все похожие изображения) (15 баллов)
  1. Отображение списка картинок в список по группам (12 баллов)

Не обязательно делать все части задания, но баллы, соответственно, будут меньше. 

Откуда брать данные для теста?

Ссылка на тестовый датасет (Не гарантирутся, что тестирование итогового решения будет только на нем 🙂

Как считаются баллы?

Максимальное количество баллов 37 (за все выполненные задания без бонусов). Баллы могу сниматься за недоработки (падение приложения, возможность ввода некорректных данных и т.д) или за плохую внутреннюю реализацию (много шаблонного кода, неоптимальное решение, отсутствие масшабируемости решения). В случае каких-то дополнительных фич баллы могут добавляться (тут уже все рассматривается индивидуально)

Некоторый “проходной порог” по баллам будет смотреться по факту работ которые мы получим. Скорее всего попасть смогут все желающие 🙂 

Большим плюсом будет (То, за что точно будут доп баллы)

  1. Красивые анимации, плавность
  1. Хорошая структура кода, комментарии

На что обратить внимание?

  1. Не стоит забывать что пользователь МОЖЕТ повернуть телефон со всеми вытекающими. Блокировка поворота не приветствуется
  1. Операции которые выполняются долго (или потенциально выполняются долго) стоит выделить в отдельный поток

Типичный сценарий использования программы