Desktop-приложение для получения плотного облака точек архитектурных объектов по набору изображений с поддержкой автоматической и ручной калибровки камер в моно и стерео режимах.
Warning
Данный репозиторий был заморожен на стадии разработки. Некоторый функционал может не работать или быть реализован неполностью. Буду рад помощи в продолжении разработки!
Для быстрого понимания встроенного функционала был создана диаграмма пользовательского пути:
git clone https://github.com/cloudsucker/archpoint.git
cd archpointpython -m venv .venv-
Windows:
.venv\Scripts\activate
-
Linux/MacOS:
source .venv/bin/activate
pip install -r requirements.txtImportant
Установка требует подключения к интернету для загрузки библиотеки HLOC из GitHub-репозитория для последующей её установки в качестве зависимости. Этот процесс может занять некоторое время.
Запустите файл main.py из корня проекта.
| Название технологии | Описание | Применение |
|---|---|---|
| Python 3.12 | Язык программирования. | Выбран как основной язык программирования. |
| HLOC v1.5 | Модульный набор инструментов (библиотека) с открытым исходным кодом для современной визуальной локализации. | Построение плотного облака точек по изображениям с нейросетевыми дескрипторами. Высокая точность сопоставления (SuperPoint, LightGlue). Основной модуль 3D-восстановления. |
| OpenCV 4.11.0.86 | Библиотека для компьютерного зрения с открытым исходным кодом. | Работа с изображениями, калибровка камер, ректификация изображений. |
| PySide6 v6.8.2.1 (Qt) | Фреймворк для создания графического интерфейса. | Кроссплатформенность, интеграция с Python-кодом. Богатые возможности UI, используется для разработки простого и интуитивного интерфейса. |
- numpy<2.0.0
- opencv-python==4.11.0.86
- PySide6==6.8.2.1
- git+https://github.com/cvg/Hierarchical-Localization.git#egg=hloc
Warning
Проект требует версии numpy<2.0.0 для корректной работы.
Note
В проекте используется библиотека hloc, распространяемая под лицензией Apache License 2.0. Поскольку hloc включается как внешняя зависимость через requirements, её код не распространяется вместе с проектом. Тем не менее, обращаем внимание, что использование hloc подпадает под условия Apache 2.0. Подробнее о лицензии: https://www.apache.org/licenses/LICENSE-2.0
Приложение даёт возможность получения параметров камеры в моно и стерео-режимах, устранения дисторсий на изображениях и ректификации изображений для стерео-режима.
Демонстрация ручного метода калибровки с расстановкой точек:

Пример выходных калибровочных данных:
stereo_mode: False
calibration_method: 'ChessboardCalibrationMethod'
square_size: 50.
board_size: [12, 8]
object_points:
[[ 0., 0., 0.],
[ 50., 0., 0.],
[100., 0., 0.],
[150., 0., 0.],
[200., 0., 0.],
. . .
[500., 350., 0.],
[550., 350., 0.]]
camera_matrix:
[[3.29110280e+03, 0.00000000e+00, 1.93877788e+03],
[0.00000000e+00, 3.28959602e+03, 1.16722206e+03],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00]]
distortion_coeffs:
[[-0.02637782, 0.00547619, 0.00457871, -0.00611969, 0.80216191]]
roi:
[ 53, 69, 3880, 2114]
new_camera_matrix:
[[3.37675783e+03, 0.00000000e+00, 1.93055457e+03],
[0.00000000e+00, 3.27752326e+03, 1.17264956e+03],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00]]
rotation_vectors:
[[[ 0.09819491],
[ 0.10009687],
[-1.56335055]],
. . .
[[-0.06148656],
[-0.28350385],
[ 1.50500545]]]
rotation_matrices:
[[[ 5.07917305e-03, 9.99985923e-01, 1.53472180e-03],
[-9.92016287e-01, 5.23207288e-03, -1.26001239e-01],
[-1.26007495e-01, -8.82486923e-04, 9.92028897e-01]],
. . .
[[ 3.96262989e-02, -9.74075348e-01, -2.22726227e-01],
[ 9.88350790e-01, 7.09890550e-02, -1.34622694e-01],
[ 1.46943772e-01, -2.14797044e-01, 9.65541174e-01]]]
extrinsic_parameters:
[[[ 5.07917305e-03, 9.99985923e-01, 1.53472180e-03, -1.81840331e+02],
[-9.92016287e-01, 5.23207288e-03, -1.26001239e-01, 2.24780149e+02],
. . .
[ 1.46943772e-01, -2.14797044e-01, 9.65541174e-01, 1.21136575e+03],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.00000000e+00]]]
translation_vectors:
[[[-181.84033062],
[ 224.78014927],
[1255.3883402 ]],
. . .
[[ 260.93077341],
[-310.74939287],
[1211.36575003]]]Низкоуровневые модули, определяющие конкретные методы реализации или главный функционал (бизнес-логику) не зависят от высокоуровневых (GUI, контроллеры).
Такой подход соответствует принципу инверсии зависимостей и значительно изолирует ядро разрабатываемого решения.
Направление зависимостей в проекте, от GUI слоя с программной обёрткой в классе MainWindow, до слоя хендлеров (исполнителей), несущих в себе конкретную реализацию поставленных им задач изображено ниже:
Архетиктура проекта была разделена на четыре слоя:
- Слой GUI (графический пользовательский интерфейс).
- Слой бизнес-логики (главные компоненты системы).
- Слой конкретных методов реализации (с абстрагированием связей).
- Слой вспомогательных инструментов для конкретных задач.
Отдельно вынесен внешний слой интеграций (зависимостей). Он содержит в себе все внешние инструменты (зависимости).
По всем вопросам: ferjenkill@gmail.com




