понедельник, 14 февраля 2011 г.

Настройка проекта для компиляциями под разными операционными системами

Файл .pro, создаваемый программой QtCreator содержит инструкции как собирать проект основные команды
SOURCES - исходники
HEADERS - заголовки
TEMPLATE - шаблон проекта например app или lib
INCLUDEPATH - путь к используемым заголовкам
LIBS- используемые библиотеки

Так-же имеется куча дополнительных полезныхкомманд
CONFIG - это самое общая и полезная команда для автоматической конфигурации проекта в переменную конфиг можно записать все что угодно и дальше проверять что храниться в конфиге
Например CONFIG += plugin opencv qwt
MOC_DIR - директория куда будем складывать moc файлы, созданные qmake
OBJECTS_DIR - директория куда будут сохранены объекты
DEFINES - добавляет инструкцию препроцессора
Пример  DEFINES+= USEOPENCV
далее в коде:
#ifdef USEOPENCV
 //DO SMTH
#endif

ключевые слова
win32 - сборка происходит для Windows
unix - сборка проекта для Linux
debug - сборка проекта в режиме отладки
release - сборка проекта в релиз режиме

Рассмотрим пример подключение OpenCV для Linux и Windows
OPENCVDIR = "C:/Develop/opencv-1.0.x/opencv" #Директория в которой лежит OpenCV
win32:{ #Если сборка под windows
    opencv{ #если в CONFIG мы добавили CONFIG+=opencv
    exists($$OPENCVDIR) {#Проверка существует ли директория 
            DEFINES += USEOPENCV #Добавляем define
            INCLUDEPATH += $${OPENCVDIR}/cv/include \ #Путь к заголовкам
                $${OPENCVDIR}/cxcore/include \
                $${OPENCVDIR}/otherlibs/highgui
            LIBS += -L$${OPENCVDIR}/lib \ #Путь к библиотекам
                -lcv \
                -lcxcore \
                -lhighgui      
         }
    }
}
unix:{ #В случае Linux все проще т.к. все библиотеки и заголовки обычно лежат в системных папках
opencv{
        LIBS += -lcv \
            -lcxcore \
            -lhighgui
        message("OpenCV libraries connected")  #Сообщение о том что все подключено
    }
}

Естественно такой громоздкий код не охота включать в каждый проект (особенно если проект состоит из множества частей например с плагинами)

Для этого придуманы файлы .pri
Создаете файл .pri, копируете в него настройку сборки и подключаете к pro файлу коммандой
include
Пример:
include(EthoStudioSDK/ethostudioconfig.pri )

Вроде все. Удачи!

четверг, 10 февраля 2011 г.

Kinect Player

 A Cross Platform Application for recording/viewing 3d data from kinect sencor.


Source are avalable at http://code.google.com/p/kinect-player

Binaries form Win32 http://kinect-player.googlecode.com/files/kinect-player.zip


Чтобы собрать проект потребуется Qt 4.7.1, Qt Creator, OpenCV2.2 и Libfreenect (Все должны быть собраны одной версией MinGW)  сборка под Linux не должна вызвать проблем.
Программа позволяет записывать и просматривать 3д данные с сенсора Кинект. Вращать камеру вокруг сцены и т.д.
Рабочее окно программы

Тоже окно под другой перспективой



Иконка кинекта взята у
http://www.michaelcritz.com/2011/01/28/kinect-icon/

вторник, 8 февраля 2011 г.

Преобразование картинки из Libfreenect в cv::Mat

Решил написать маленькую заметку по поводу использования libfreenect и ее варпера для c freenect_sync

Mat frame;
frame.create(cv::Size(640,480),CV_8UC3);
Mat depth;
depth.create(cv::Size(640,480),CV_16UC1);
uint32_t ts;
char *rgb = 0;
short *depths=0;
freenect_sync_get_video((void**)&rgb,&ts,0,FREENECT_VIDEO_RGB);
freenect_sync_get_depth((void**)&depths, &ts, 0, FREENECT_DEPTH_11BIT);
memcpy(frame.data,rgb,FREENECT_VIDEO_RGB_SIZE);
memcpy(depth.data,depths,FREENECT_DEPTH_11BIT_SIZE);

понедельник, 7 февраля 2011 г.

Компрессор для Kinect данных

Задача: сохранить цветное изображение RGB (24 бита на пиксель) + глубинное изображение 16 бит на пиксель. Изображения сохраняются в файл (глубинное изображение - без потерь PNG компрессором), цветное с потерями JPEG компрессором.

Для решения использовались функции из библиотеки OpenCV 2.2.

Полный исходный код проекта доступен по ссылке.

воскресенье, 23 января 2011 г.

Текущие работы

Решил написать о том какие проекты сейчас идут в лаборатории цифровой обработки изображений ИАиЭ СО РАН.

EthoStudio - система для автоматизации этологических экспериментов. Применяется для изучения эффектов различных препаратов на животных. Интерфейс разработан на Qt, содержание использует OpenCVи другие бесплатные открытые библиотеки.
Сайт проекта временно находится в разработке www.ethostudio.com
Применяется в: ИЦиГ СО РАН, ЛИН СО РАН, институте физиологии им. Павлова РАН.
Скриншот программы EthoStudio




XScan - программное обеспечение для системы для досмотра пассажиров в аэропорта. Позволяет захватывать изображения с аппарата СибСкан (разработанном в ИЯФе), обрабатывать их, представлять оператору и сохранять в БД или жесткий диск.
Применяется в: Толмачева, Домодедово, Ханты-Мансийском аэропорту, саудовской аравии и т.д.
Скриншот программы XScan

 Есть еще несколько проектов в стадии зачатков... Но по всем проектам есть интересная работа.

вторник, 11 января 2011 г.

Сборка libfreenect с помощью MinGW под Windows Vista

1. Релиз библиотеки libfreenect с git репозитория

2. Загружаем зависимости
2.1. Библиотеку работы с USB (libusb) [прямая ссыла]
2.2. Библиотеку для работы с потоками (pthreads) [прямая ссыла]
2.3. Библиотеку для отображения 3Д glut32 (расширение OpenGL) [прямая ссылка]

Распаковываем файлы

Glut32 распаковываем и добавляем в MinGW
glut.h в директорию {MinGW}/include/GL
glut32.lib и glut32.dll в директорию {MinGW}/lib

{MinGW}  - директория где установлена MinGW (Например C:/MinGW)

Запускаем CMake
Выбираем директорию в которую распаковали libfreenect и директорию куда будем собирать проект.

Нажимаем Configure (вбираем MinGW, компиляторы gcc и g++) - он выдаст много ошибок.
Поставьте галочку Andvanced в верхней части настроек MinGW.
Устанавливаем значение переменных
GLUT_INCLUDE_DIR - {MinGW}/include/GL
GLUT_glut_LIBRARY - {MinGW}/lib/glut32.dll
LIBUSB_1_INCLUDE_DIR - {libusb-win32-bin-1.2.2.0}\include
LIBUSB_1_LIBRARY - {libusb-win32-bin-1.2.2.0}\lib\gcc\libusb.a
THREAD _PTHREAD_INCLUDE_DIR - {PThreads}/Pre-built.2/include
THREAD_PTHREAD_WIN32_LIBRARY - {PThreads}/Pre-built.2/lib/libpthreadGC2.a

отключаем опцию BUILD_FAKENECT (с ней проект почему-то не собирается)

Далее жмем Configure. Если все хорошо жмем Generate.

Перед компиляцией надо устранить одни глюк: в MinGW/include/sys/types.h есть строка
typedef _ssize_t ssize_t; - ее надо закоментить.
Заходим с командной строки в директорию которую выбрали в CMake и запускаем mingw32-make
Ждем...
Ура все получилось.
Чтобы запустить пример из bin необходимо скопировать в эту папку целый букет dll.

glut32.dll
libfreenect.dll
libusb0.dll   (примечание исходное название библиотеки libusb0_x86.dll)
pthreadGC2.dll

Наслаждайтесь!
3D изображение сцены

Глубинное изображение и цветное

воскресенье, 9 января 2011 г.

Джентельменский набор библиотек и технологий

Библиотеки для систем основанных на техническом зрении
OpenCV - библиотека алгоритмов компьютерного зрения
Qt - библиотека пользовательского интерфейса
MRPT - программный набор компонент для робототехники
ROS - надстройка над операционной системой для робототехники
Itk  - инструменты для работы с медицинскими изображениями
FreeImage - загрузка и выгрузка изображений

Полезные библиотеки
Boost - Библиотека шаблонов для C++
IrrLicht - библиотека для 3Д рисования
OpenCL - ускорение и распараллеливание вычислений на GPU