Skip to content

irsural/test_clock_detection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

Проект для тестирования алгоритма распознавания времени на аналоговых часах по фотографии

Установка зависимостей

python3 -m pip install '.'

Запуск

Из консоли:

python3 -m test_clock_detection

Из среды разработки запускать файл test_clock_detection/__main__.py

Структура

Вход

В папке files/Изображения находятся фото часов, которые подаются в программу тестирования.

Имена входных фото должны быть в формате "ЧЧ:ММ:СС.мс.bmp". Пример: 02:01:56.432.bmp

Выход

Программа сохраняет выходные файлы в папки files/Результаты/По шагам и files/Результаты/Окончательные.

Статистику по успешным обнаружениям выводится в stdout.

Папка "По шагам"

В папку По шагам сохраняются фото в промежуточных состояниях работы алгоритма. Например, если алгоритм 3 раза фильтрует изображение, а потом находит контуры стрелок, то в папку По шагам можно сохранить 4 фотографии: 3 на разных стадиях фильтрации и одну с обведенными контурами.

На каждую входную фото, в папке По шагам создается отдельная папка с промежуточными результатами. Имя папки совпадает с именем входного фото.

Папка "Окончательные"

В папке Окончательные сохраняются фото после всех обработок алгоритма. Это удобно для быстрого сравнения результата работы алгоритмы на разных входных фото.

Имена фото в папке Окончательные имеют формат success-delta-detected_time-real_time, где

success - 1, если время успешно детектировано, иначе 1 delta - разница между реальным временем на часах, и детектированным detected_time - детектированное время real_time - реальное время

Параметр success намеренно расположен в начале имени. При таком формате, все фото с неудачными определениями времени будут находиться в начале папки с окончательными результатами.

Статистика успешных обнаружений

Программа рассчитывает статистику успешных обнаружений для заданных отклонений.

Статистика выводится в виде таблицы:

Размер выборки: 10

| Погрешность   | Уложилось в погрешность   |   Количество ошибок |
|---------------|---------------------------|---------------------|
| 0.1 c.        |  60 %                     |                   4 |
| 0.2 c.        |  80 %                     |                   2 |
| 0.3 c.        |  90 %                     |                   1 |
| 0.4 c.        | 0.0 %                     |                   0 |
| 0.5 c.        | 0.0 %                     |                   0 |
| 0.6 c.        | 0.0 %                     |                   0 |
| 0.7 c.        | 0.0 %                     |                   0 |
| 0.8 c.        | 0.0 %                     |                   0 |
| 0.9 c.        | 0.0 %                     |                   0 |
| 1 c.          | 0.0 %                     |                   0 |

В данном случае по таблице видно, что из 10 фото, обнаруженное время отличается

  • более чем на 0.1 секунду в 4 случаях
  • более чем на 0.2 секунду в 2 случаях
  • более чем на 0.3 секунду в 1 случаях
  • все остальные случаи входят в погрешность 0.4 секунды

Как использовать скрипт

В скрипте уже написано все для запуска тестов.

В папке files/Изображения есть примеры входных фотографий с правильными именами. Скрипт уже работает из коробки для демонстрации работы, сохраняет результаты и выводит статистику.

Исходный код находится в папке test_clock_detection. Туда можно добавлять свои файлы, можно модифицировать существующие.

Входные изображения

Входные изображения можно скачать отсюда.

В архиве находятся 5 ГБ размеченных фотографий. Их нужно распаковать в папку files/Изображения.

Файлы проекта

  • __main__.py - точка входа в программу, скорее всего править будет не нужно

  • data_types - кастомные типы данных (классы). Можно дополнять, но не обязательно. Ключевой класс, который потребуется использовать - ClockTime, он должен возвращаться из функции обнаружения времени

  • detect_time.py - модуль, в котором должна находиться функция обнаружения времени. Функция должна иметь следующую сигнатуру:

    def detect_time(
        root_folder: Path, image_path: Path, debug_mode: None | Debugger = None
    ) -> ClockTime:

    Совпадать должно все, включая имени функции и переменных.

    Аргументы:

    • root_folder - папка корня проекта, может быть полезна для загрузки каких-либо ресурсов, например, шаблонов стрелок. Использовать необязательно

    • image_path - путь к фото с часами из папки Изображения. По этому фото определяется время на часах.

    • debug_mode - класс из модуля **algorithm_debugger.py``. Используется для сохранения промежуточных результатов обработки изображения в папку По шагам. Использовать обязательно. Все промежуточные шаги должны сохраниться

    Возвращаемое значение:

    • Определенное на фото время, тип ClockTime

    В файле уже приведен пример простого алгоритма с использованием аргументов, возвратом значения, сохранением промежуточных результатов.

    Из файла можно удалять все функции, кроме detect_time. Тело detect_time можно полностью заменить на свое.

  • const.py - параметры скрипта тестирования, значения можно изменять, пояснения к параметрам написано в самом модуле.

  • algorithm_debugger.py - модуль для сохранения промежуточных результатов. В модуле находятся классы Debugger, AlgorithmDebugger, DummyDebugger.

    • Debugger - класс-интерфейс для остальных debugger-ов
    • DummyDebugger - затычка для debugger-а, все методы пустые. Используется когда нужно замерить время работы алгоритма, чтобы сохранение промежуточных результатов не добавляло дополнительные временные затраты.
    • AlgorithmDebugger - основной класс debugger-а. Содержит реализации всех методов для сохранения промежуточных результатов.

    Методы классов обычно принимают картинку и некоторые дополнительные элементы, которые нужно добавить на картинку.

    Если среди методов класса нет такого, который подходит для сохранения нужного промежуточного результата, то нужно добавить новый.

    Метод нужно добавлять во все 3 класса, по образу и подобию.

  • Модули draw_image.py, results_analysis.py и utils.py содержат вспомогательные функции. Их можно не трогать, если это не нужно.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages