Перейти к содержимому
Compvision.ru
ProgRoman

Библиотека CCV

Recommended Posts

Добрый день, вот пытаюсь разобраться прочитал, что в библиотеке CCV есть более современные(по сравнению с OpenCV) методы классификации с помощью глубокого обучения свёрточных нейронных сетей вот нашёл пример у них в папке /bin называется cnnclassify.c, но ни как не могу запустить его, возможно кто-то пробовал работать с этой библиотекой, как её надо настроить?.. под windows она вроде бы не работает.. работает только под линукс.. поэтому я пробовал запускать её на ubuntu в netbeans 8.0, но запустить так и не удалось, ошибки сразу при построении причём ругается на функции библиотеки ccv...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я под Убунтой запустил нормально. Всё для консоли:

cd lib

./configure

# Смотри, чтобы не было ошибок. Если чего-то не хватает, то доустанови, всё необходимое в репах есть.

make

cd ..

cd bin

make

А дальше уже запускаешь примеры по инструкциям с сайта или свои варианты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

для сборки проектов под linux на windows рекомендую использовать cygwin.

команды вроде те же самые, только через консоль cygwin.

+ в том что очень легко устанавливать доп. библиотеки типа boost в cygwin.

- в том что получается доп. зависимость от .dll cygwin

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

после команды ./configure

получаю следующее


.....

checking for libavcodec/avcodec.h... no

checking libavformat/avformat.h usability... no

checking libavformat/avformat.h presence... no

checking for libavformat/avformat.h... no

checking libswscale/swscale.h usability... no

checking libswscale/swscale.h presence... no

checking for libswscale/swscale.h... no

checking for cos in -lm... yes

checking for cblas_dgemm in -lgslcblas... no

checking for gsl_blas_dgemm in -lgsl... no

checking cuda... no

правильно я понимаю везде где no надо установить эти библиотеки, где их брать откуда устанавливать поясните пожалуйста) в линуксе я новичок)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Покажу на первом примере - libavcodec.

Набираешь в консоли: apt-cache search libavcodec

В результатах находишь необходимое: libavcodec-dev - Development files for libavcodec

Его и ставим: sudo apt-get install libavcodec-dev

Установилось, снова запускаем ./configure

Пишет, что всё нормально? Отлично! Переходим к следующему пункту.

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

Когда ты будешь распространять свою программу в бинарном виде в виде пакета, тебе надо будет указать в зависимостях всё необходимое. apt-get это доставит. Если не пакетом будешь распространять, то напиши установочный скрипт, в котором всё прописано и само поставится. В общем, действуй по аналогии с другим софтом.

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообще как создаётся файл configure? руками?

попробовал собрать используя cygwin, видимо либы не все есть, т.е. не полностью.

в итоге я получил кучу .o файлов и 1 .a файл (это вроде как раз главная статическая либа которая нам нужна).

что лежит в папке bin?

попробовал скомпилировать siftmatch.c из bin

$ gcc siftmatch.c -o sift -static -I"../lib" -L"../lib" -lccv -O3

но при попытке запустить не работает

$ ./sift "../samples/basmati.png" "../samples/book.png"

Segmentation fault (core dumped)

процесс сборки:

$ ./configure

checking for clang... no

checking for nvcc... nvcc

checking for gcc... gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.exe

checking for suffix of executables... .exe

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

checking how to run the C preprocessor... gcc -E

checking for grep that handles long lines and -e... /usr/bin/grep

checking for egrep... /usr/bin/grep -E

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking xmmintrin.h usability... no

checking xmmintrin.h presence... no

checking for xmmintrin.h... no

checking png.h usability... no

checking png.h presence... no

checking for png.h... no

checking jpeglib.h usability... no

checking jpeglib.h presence... no

checking for jpeglib.h... no

checking fftw3.h usability... no

checking fftw3.h presence... no

checking for fftw3.h... no

checking linear.h usability... no

checking linear.h presence... no

checking for linear.h... no

checking cblas.h usability... no

checking cblas.h presence... no

checking for cblas.h... no

checking tesseract/capi.h usability... no

checking tesseract/capi.h presence... no

checking for tesseract/capi.h... no

checking Accelerate/Accelerate.h usability... no

checking Accelerate/Accelerate.h presence... no

checking for Accelerate/Accelerate.h... no

checking libavcodec/avcodec.h usability... no

checking libavcodec/avcodec.h presence... no

checking for libavcodec/avcodec.h... no

checking libavformat/avformat.h usability... no

checking libavformat/avformat.h presence... no

checking for libavformat/avformat.h... no

checking libswscale/swscale.h usability... no

checking libswscale/swscale.h presence... no

checking for libswscale/swscale.h... no

checking for cos in -lm... yes

checking for cblas_dgemm in -lgslcblas... no

checking for gsl_blas_dgemm in -lgsl... no

checking cuda... no

USE: gcc

COMPILE FLAGS:

LINK FLAGS: -lm

configure: creating ./config.status

config.status: creating config.mk

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

configure создаётся разработчиками. Это аналог CMakeLists.txt, но для другой сиистемы сборки - Automake.

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

В папке bin лежат примеры использования всех возможностей ccv. Сама ccv компилироваться должна раньше, это делает make файл в папке lib. Я описал этот процесс несколькими постами выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

что-то у меня какой-то косяк с установкой, так после когфигурации получаю такое сообщение

roman@roman-VirtualBox:~/ccv/lib$ ./configure

checking for clang... no

checking for nvcc... nvcc

checking for gcc... gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

checking how to run the C preprocessor... gcc -E

checking for grep that handles long lines and -e... /bin/grep

checking for egrep... /bin/grep -E

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking xmmintrin.h usability... yes

checking xmmintrin.h presence... yes

checking for xmmintrin.h... yes

checking png.h usability... no

checking png.h presence... no

checking for png.h... no

checking jpeglib.h usability... no

checking jpeglib.h presence... no

checking for jpeglib.h... no

checking fftw3.h usability... no

checking fftw3.h presence... no

checking for fftw3.h... no

checking linear.h usability... no

checking linear.h presence... no

checking for linear.h... no

checking cblas.h usability... yes

checking cblas.h presence... yes

checking for cblas.h... yes

checking tesseract/capi.h usability... no

checking tesseract/capi.h presence... no

checking for tesseract/capi.h... no

checking Accelerate/Accelerate.h usability... no

checking Accelerate/Accelerate.h presence... no

checking for Accelerate/Accelerate.h... no

checking libavcodec/avcodec.h usability... yes

checking libavcodec/avcodec.h presence... yes

checking for libavcodec/avcodec.h... yes

checking libavformat/avformat.h usability... yes

checking libavformat/avformat.h presence... yes

checking for libavformat/avformat.h... yes

checking libswscale/swscale.h usability... yes

checking libswscale/swscale.h presence... yes

checking for libswscale/swscale.h... yes

checking for cos in -lm... yes

checking for cblas_dgemm in -lgslcblas... no

checking for gsl_blas_dgemm in -lgsl... no

checking cuda... no

USE: gcc

COMPILE FLAGS: -msse2 -D HAVE_SSE2 -D HAVE_CBLAS -D HAVE_AVCODEC -D HAVE_AVFORMAT -D HAVE_SWSCALE

LINK FLAGS: -lm -lblas -lavcodec -lavformat -lswscale

configure: creating ./config.status

config.status: creating config.mk

далее делаю make и получаю следующее

roman@roman-VirtualBox:~/ccv/lib$ make

gcc ccv_resample.c -o ccv_resample.o -c -O3 -ffast-math -Wall -msse2 -D HAVE_SSE2 -D HAVE_CBLAS -D HAVE_AVCODEC -D HAVE_AVFORMAT -D HAVE_SWSCALE

gcc: внутренняя ошибка компилятора: Убито (program cc1)

Отправьте подробное сообщение об ошибке

с препроцессированным исходным кодом.

Смотрите инструкции в <file:///usr/share/doc/gcc-4.6/README.Bugs>.

make: *** [ccv_resample.o] Ошибка 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Трудно сказать. У меня на рабочей машине с карточкой NVidia:

checking for clang... clang

checking for nvcc... nvcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether clang accepts -g... yes

checking for clang option to accept ISO C89... none needed

checking how to run the C preprocessor... clang -E

checking for grep that handles long lines and -e... /bin/grep

checking for egrep... /bin/grep -E

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking xmmintrin.h usability... yes

checking xmmintrin.h presence... yes

checking for xmmintrin.h... yes

checking png.h usability... yes

checking png.h presence... yes

checking for png.h... yes

checking jpeglib.h usability... yes

checking jpeglib.h presence... yes

checking for jpeglib.h... yes

checking fftw3.h usability... no

checking fftw3.h presence... no

checking for fftw3.h... no

checking linear.h usability... no

checking linear.h presence... no

checking for linear.h... no

checking cblas.h usability... yes

checking cblas.h presence... yes

checking for cblas.h... yes

checking tesseract/capi.h usability... no

checking tesseract/capi.h presence... no

checking for tesseract/capi.h... no

checking Accelerate/Accelerate.h usability... no

checking Accelerate/Accelerate.h presence... no

checking for Accelerate/Accelerate.h... no

checking libavcodec/avcodec.h usability... yes

checking libavcodec/avcodec.h presence... yes

checking for libavcodec/avcodec.h... yes

checking libavformat/avformat.h usability... yes

checking libavformat/avformat.h presence... yes

checking for libavformat/avformat.h... yes

checking libswscale/swscale.h usability... yes

checking libswscale/swscale.h presence... yes

checking for libswscale/swscale.h... yes

checking dispatch/dispatch.h usability... yes

checking dispatch/dispatch.h presence... yes

checking for dispatch/dispatch.h... yes

checking for dispatch_apply in -ldispatch... yes

checking for cos in -lm... yes

checking for cblas_dgemm in -lgslcblas... no

checking for gsl_blas_dgemm in -lgsl... no

checking cuda... no

[1mUSE[m: [4mclang[m

[1mCOMPILE FLAGS[m: [4m-msse2 -fblocks -D HAVE_SSE2 -D HAVE_LIBPNG -D HAVE_LIBJPEG -D HAVE_CBLAS -D HAVE_AVCODEC -D HAVE_AVFORMAT -D HAVE_SWSCALE -D USE_DISPATCH[m

[1mLINK FLAGS[m: [4m-lm -lpng -ljpeg -lblas -lavcodec -lavformat -lswscale -ldispatch -lBlocksRuntime[m

configure: creating ./config.status

config.status: creating config.mk

Убунта 12.04 с ядром 3.11 и gcc 4.6

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На ноуте с Убунтой 14.04 (Intel CPU + AMD GPU) тоже всё норрмально компилируется и работает. Компилируется всё clang'ом при этом. Попробуй его пооставить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отлично! make выполнился без ошибок, создалась библиотека libccv.a теперь пробую примеры запускать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня почему-то не всё компилируется (пробую код из примера ./bin/cnnclassify.c)

к примеру код компилируется вроде бы всё нормально...


    assert(argc >= 3);

    ccv_enable_default_cache();

    ccv_dense_matrix_t* image = 0;

    ccv_read(argv[1], &image, CCV_IO_ANY_FILE | CCV_IO_RGB_COLOR);

    if (image != 0)

    {

        //ccv_convnet_t* convnet = ccv_convnet_read(0, argv[2]);

        ccv_dense_matrix_t* input = 0;

        //ccv_convnet_input_formation(convnet, image, &input);

        ccv_matrix_free(image);

        uint elapsed_time = get_current_time();


        ccv_array_t* rank = 0;

    } 

    ccv_drain_cache();

но если же раскомментировать строчку

ccv_convnet_t* convnet = ccv_convnet_read(0, argv[2]);

то идёт ошибка..

gcc -o dist/Debug/GNU-Linux-x86/test_proj build/Debug/GNU-Linux-x86/main.o -L../../ccv/lib -lccv

../../ccv/lib/libccv.a(ccv_convnet.o): In function `_ccv_convnet_layer_forward_propagate':

ccv_convnet.c:(.text+0x1db1): undefined reference to `powf'

ccv_convnet.c:(.text+0x2165): undefined reference to `powf'

../../ccv/lib/libccv.a(ccv_convnet.o): In function `ccv_convnet_classify':

ccv_convnet.c:(.text+0x2dff): undefined reference to `__expf_finite'

ccv_convnet.c:(.text+0x2e5d): undefined reference to `__expf_finite'

../../ccv/lib/libccv.a(ccv_basic.o): In function `ccv_sobel':

ccv_basic.c:(.text+0xb28): undefined reference to `__exp_finite'

../../ccv/lib/libccv.a(ccv_basic.o): In function `ccv_blur':

ccv_basic.c:(.text+0x3badc): undefined reference to `__exp_finite'

collect2: выполнение ld завершилось с кодом возврата 1

make[2]: *** [dist/Debug/GNU-Linux-x86/test_proj] Ошибка 1

make[2]: Выход из каталога `/home/roman/samples/test_proj'

make[1]: *** [.build-conf] Ошибка 2

make[1]: Выход из каталога `/home/roman/samples/test_proj'

make: *** [.build-impl] Ошибка 2

что-то не понятно, вроде бы ccv_convnet_t есть в библиотеке ccv не знаю что и думать...

в компоновщике в дополнительные каталоги библиотек добавил libccv.a

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как-то странно проверил файл ccv_convnet.c как-то не нашёл там действительно функции powf.. хотя в самом коде она используется.. что-то непонятно..

На самом деле пробовал и другие примеры, что-то пока без результатно...

к прмеру при выполнении siftmatch.c появляется следуещее

ccv_sift.c:(.text+0x205): undefined reference to `exp2'

ccv_sift.c:(.text+0x22c): undefined reference to `__sqrt_finite'

ccv_sift.c:(.text+0x28f): undefined reference to `__sqrt_finite'

ccv_sift.c:(.text+0x2f1): undefined reference to `pow'

ccv_sift.c:(.text+0x3c8): undefined reference to `__sqrt_finite'

ccv_sift.c:(.text+0x441): undefined reference to `pow'

ccv_sift.c:(.text+0x61d): undefined reference to `pow'

ccv_sift.c:(.text+0x129f): undefined reference to `exp2'

ccv_sift.c:(.text+0x13c0): undefined reference to `__exp_finite'

ccv_sift.c:(.text+0x1d21): undefined reference to `__sqrt_finite'

ccv_sift.c:(.text+0x1dd6): undefined reference to `sincos'

../lib/libccv.a(ccv_basic.o): In function `ccv_sobel':

ccv_basic.c:(.text+0xb28): undefined reference to `__exp_finite'

../lib/libccv.a(ccv_basic.o): In function `ccv_blur':

ccv_basic.c:(.text+0x3badc): undefined reference to `__exp_finite'

collect2: выполнение ld завершилось с кодом возврата 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Математические функции в C имеют вариации в названиях в зависимости от аргумента (я частенько пользуюсь). Например pow - будет смотреть на тип аргумента (float/double), а powf приведет аргумент к типу float (может f это сокращение от float, а может от fast (быстрая реализация без дополнительных проверок, не вникал)). Для многих функций это правило работает.

Сейчас посмотрел вот: http://all-ht.ru/inf/prog/c/func/pow,powf,powl.html все-таки это сокращение от float.

UPD: Прототипы, (ошибался я по поводу pow) :

double pow (double x, double y);

float powf (float x, float y);

long double powl (long double x, long double y);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как-то странно проверил файл ccv_convnet.c как-то не нашёл там действительно функции powf.. хотя в самом коде она используется.. что-то непонятно..

На самом деле пробовал и другие примеры, что-то пока без результатно...

к прмеру при выполнении siftmatch.c появляется следуещее

Это всё системные функции из glibc (в Ubuntu используется её форк eglibc). Почему-то у тебя не подключилась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а как её подключить я сейчас установил этот пакет eglibc как ты писал выше... попробовал заново откомпилировать ошибки теже удалил либу libccv.a и пересобрал.. но почему-то ошибки всё теже странно... как-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пробовал ещё и под Debian собирать.. всё собралось, получил libccv.a, а примеры выполнить так и не получилось, почему-то ошибки одни и теже.. как-то очень странно.. не понятно почему eglibc не подключилась.. (пакет eglibc-source устанавливал)... может быть в настройках netbeans надо что-то прописывать..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А, так ты из-под netbeans это делаешь. Может быть.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а как проверить что всё попало(все функции) в libccv.a ? и имя либы в линуксе всегда должны начинаться с lib? а при включении их пишется -lccv ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. libccv.a не влинковывает в себя стандартную библиотеку, потому что ей это не нужно. Приложение само влинкует необходимое.

2. Начинать имя либы с префикса lib - это удобная традиция, а не обязательное требование. (Для стандартных пакетов - обязательное, мейнтейнер не пропустит.)

3. Ага, так и пишется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так вопрос если я назову либу blablaccv.a, то как мне её потом включать? используя полное имя?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

-lblablaccv

Вообще, можешь ориентироваться по аналогии с OpenCV: смотри, как они называют либы, как оно устанавливается в систему, как потом подключается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробовал в командной строке. make собрал все файлы из ./bin без ошибок, появились объектные файлы и исполняемые ну а далее я как в примере в doc вызвал исполняемый файл


./siftmatch ../samples/book.png ../samples/scene.png

выдало следующий ответ
Ошибка сегментирования (сделан дамп памяти)
попробовал cnnclassify

./cnnclassify ../samples/dex.png ../samples/image-net.sqlite3 output.png

ответ такой

cnnclassify: cnnclassify.c:63: int main(int, char **): Assertion `image != 0' failed.

Аварийный останов (сделан дамп памяти)

сами исполняемые файлы собраны без ошибок..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У тебя configure что на libpng говорит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да вроде бы стоит у меня libpng

вот полный список, что говорит при конфигурации

roman@roman-VirtualBox:~/ccv/lib$ ./configure

checking for clang... clang

checking for nvcc... nvcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether clang accepts -g... yes

checking for clang option to accept ISO C89... none needed

checking how to run the C preprocessor... clang -E

checking for grep that handles long lines and -e... /bin/grep

checking for egrep... /bin/grep -E

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking xmmintrin.h usability... yes

checking xmmintrin.h presence... yes

checking for xmmintrin.h... yes

checking png.h usability... yes

checking png.h presence... yes

checking for png.h... yes

checking jpeglib.h usability... yes

checking jpeglib.h presence... yes

checking for jpeglib.h... yes

checking fftw3.h usability... yes

checking fftw3.h presence... yes

checking for fftw3.h... yes

checking linear.h usability... no

checking linear.h presence... no

checking for linear.h... no

checking cblas.h usability... yes

checking cblas.h presence... yes

checking for cblas.h... yes

checking tesseract/capi.h usability... no

checking tesseract/capi.h presence... no

checking for tesseract/capi.h... no

checking Accelerate/Accelerate.h usability... no

checking Accelerate/Accelerate.h presence... no

checking for Accelerate/Accelerate.h... no

checking libavcodec/avcodec.h usability... yes

checking libavcodec/avcodec.h presence... yes

checking for libavcodec/avcodec.h... yes

checking libavformat/avformat.h usability... yes

checking libavformat/avformat.h presence... yes

checking for libavformat/avformat.h... yes

checking libswscale/swscale.h usability... yes

checking libswscale/swscale.h presence... yes

checking for libswscale/swscale.h... yes

checking dispatch/dispatch.h usability... no

checking dispatch/dispatch.h presence... no

checking for dispatch/dispatch.h... no

checking for dispatch_apply in -ldispatch... no

checking for cos in -lm... yes

checking for cblas_dgemm in -lgslcblas... yes

checking for gsl_blas_dgemm in -lgsl... yes

checking cuda... no

USE: clang

COMPILE FLAGS: -msse2 -D HAVE_SSE2 -D HAVE_LIBPNG -D HAVE_LIBJPEG -D HAVE_FFTW3 -D HAVE_CBLAS -D HAVE_AVCODEC -D HAVE_AVFORMAT -D HAVE_SWSCALE -D HAVE_GSL

LINK FLAGS: -lm -lpng -ljpeg -lfftw3 -lfftw3f -lpthread -lblas -lavcodec -lavformat -lswscale -lgsl

configure: creating ./config.status

config.status: creating config.mk

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×