Рейтинг@Mail.ru

Использование OpenCV в Delphi

Автор: Alex. Опубликовано в Программирование . просмотров: 25348

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Создатели библиотеки компьютерного зрения OpenCV позаботились о разработчиках, которые программируют на C++, C, Python и Java, ведь для этих языков есть официальные интерфейсы. А что же делать Delphi-разработчикам? На помощь приходит неофициальный проект Delphi-OpenCV, созданный и поддерживаемый российскими разработчиками, который предоставляет обёртки для библиотеки OpenCV. Давайте пробовать, насколько просто или сложно, установить, настроить и использовать OpenCV в Delphi.

Использование OpenCV в Delphi

По сути Delphi-OpenCV - это набор заголовочных файлов переведённых на Delphi + компоненты для среды разработки Delphi на их основе. На момент написания статьи, обёртки написаны для OpenCV версии 2.4.11, поддерживаются Delphi 2010 - Delphi 10.1 Berlin. Проект Delphi-OpenCV бесплатный, имеет открытые исходные коды и опубликован на сайтах GitHub и SourceForge. Там же указаны кошельки авторов проекта, и если вы хотите оказать поддержку или выразить благодарность, вы можете это сделать материально.

Установка и настройка Delphi-OpenCV

Прежде всего, скачайте архив с файлами проекта Delphi-OpenCV отсюда. Затем приготовьте следующие файлы необходимые для полноценной работы OpenCV:

  1. Файлы распространяемых пакетов Visual C++ для Visual Studio 2013. Найти их можно в архиве Delphi-OpenCV: в папке redist\VC2013x86 – файлы для 32-битной Windows и в папке redist\VC2013x64 – для 64-битной. Вот какие файлы понадобятся: msvcp120.dll, msvcr120.dll, msvcp120d.dll и msvcr120d.dll.
  2. Библиотеки кодеков FFMPEG для Windows, скачать которые можно здесь. Скачивать нужно версию Shared, т.к. в ней есть нужные .dll файлы. Из скачанного архива нам нужны все .dll файлы и папки bin, такие как avcodec-57.dll, avdevice-57.dll, avfilter-6.dll, avformat-57.dll и т.д.
  3. Библиотека OpenCV, скачать которую можно здесь. После распаковки архива вам понадобятся .dll файлы из папок \build\x64\vc12\bin (здесь 64-битные файлы) и \build\x86\vc12\bin (здесь 32-битные файлы), а если точнее, то файлы с именами, оканчивающимися на 2411.dll или 2411d.dll.
  4. Некоторым примерам (FFMPEG) требуются библиотеки SDL 2.0 и SDL 1.2 (файлы SDL.dll и SDL2.dll), скачать которые можно здесь.

Скопируйте все перечисленные выше файлы в следующие системные папки:

  1. Если у вас 32-битная Windows, то скопируйте 32-битные файлы в папку C:\Windows\System32\.
  2. Если у вас 64-битная Windows, то:
    1. скопируйте 64-битные файлы в папку C:\Windows\System32\, если будете разрабатывать 64-битные приложения;
    2. скопируйте 32-битные файлы в папку C:\Windows\SysWOW64\, если будете разрабатывать 32-битные приложения.

Файлы распространяемых пакетов Visual C++ для Visual Studio 2013 могут быть установлены автоматически с помощью дистрибутива, который можно скачать здесь.

После того как все файлы на местах, распакуйте архив с файлами Delphi-OpenCV в удобное для вас место (у меня это C:\Projects\OpenCV), затем пропишите пути к распакованным папкам в среде Delphi. Для этого закройте все проекты, если они у вас открыты (пункт меню «File -> Close All») и откройте диалог настроек (пункт меню «Tools -> Options..»). В диалоге настроек откройте редактор путей («Environment Options -> Delphi Options -> Library -> Library Path:») и добавьте в список пути к следующим папкам:

<PROJECT_ROOT>\source
<PROJECT_ROOT>\source\utils
<PROJECT_ROOT>\source\component
<PROJECT_ROOT>\source\sdl
<PROJECT_ROOT>\source\sdl2
<PROJECT_ROOT>\source\opengl
<PROJECT_ROOT>\source\ffmpeg
<PROJECT_ROOT>\resource\facedetectxml

где <PROJECT_ROOT> - это папка, куда вы распаковали архив. Т.е. у меня папка <PROJECT_ROOT>\source будет иметь следующий вид: C:\Projects\OpenCV\source.

Прописываем пути к библиотеке OpenCV в Delphi

Затем откройте, откомпилируйте и установите следующие проекты (первый проект в списке нужно только откомпилировать):

<PROJECT_ROOT>\source\component\DelphiXX\OpenCVXXX.dpk
<PROJECT_ROOT>\source\component\DelphiXX\dclCommonOpenCVXXX.dpk
<PROJECT_ROOT>\source\component\DelphiXX\dclVCLOpenCVXXX.dpk
<PROJECT_ROOT>\source\component\DelphiXX\dclFMXOpenCVXXX.dpk
<PROJECT_ROOT>\source\component\DelphiXX\ dclFFMSourceXXX.dpk


где <PROJECT_ROOT> - это папка, куда вы распаковали архив, DelphiXX – это папка для вашей версии Delphi (я использую Embarcadero RAD Studio 10 Seattle, поэтому у меня это будет папка Delphi 10 Seattle), XXX – это номер версии среды разработки (у Delphi 10 Seattle номер версии 23.0, поэтому вместо XXX у меня будет 230). Т.е. для моего случая пути к проектам будут следующими:

C:\Projects\OpenCV\source\component\Delphi 10 Seattle\OpenCV230.dpk
C:\Projects\OpenCV\source\component\Delphi 10 Seattle\dclCommonOpenCV230.dpk
C:\Projects\OpenCV\source\component\Delphi 10 Seattle\dclVCLOpenCV230.dpk
C:\Projects\OpenCV\source\component\Delphi 10 Seattle\dclFMXOpenCV230.dpk
C:\Projects\OpenCV\source\component\Delphi 10 Seattle\dclFFMSource230.dpk

Порядок установки не меняйте.

Примеры Delphi-OpenCV

После того как компоненты Delphi-OpenCV установлены можно ознакомиться с примерами, которые вы можете найти в архиве. Кстати в примерах очень много комментариев на русском языке. Вот какие примеры здесь есть:

1. LibDemo – группа проектов с примерами использования некоторых функций и процедур. Путь к группе проектов - <PROJECT_ROOT>\samples\LibDemo\LibDemo.groupproj. Здесь есть примеры захвата видео с камеры, записи видео и изображений в файл и чтения из них, обработки изображений с помощью фильтров, поиска контуров, фигур и шаблонов на изображении (поиск шаблона, см на рисунке ниже).

Пример поиска шаблона на изображении с помощью OpenCV в Delphi

2. MultiDemo – группа проектов с примерами использования алгоритмов обработки видео. Находится здесь: <PROJECT_ROOT>\samples\MultiDemo\MultiDemo.groupproj. Здесь я нашёл примеры захвата видео с IP-камеры (для эксперимента можете использовать адреса публичных IP-камер, список см. ниже), распознавания номера машины на изображении (см. рисунок ниже), распознавания лиц, обнаружение движений, отслеживание объекта и другие.

Распознавания номера машины на изображении с помощью библиотеки OpenCV в Delphi


3. FFMPEG - примеры использования библиотеки кодеков FFMPEG. Группа проектов находится здесь: <PROJECT_ROOT>\samples\FFMpeg\FFMPEG.groupproj. Здесь я нашёл примеры проигрывателей (см. картинку снизу) и примеры обработки видео. Правда, некоторые примеры не захотели у меня работать из-за ошибки E2003 Undeclared identifier: 'avcodec_alloc_frame'. Дело в том, что функция avcodec_alloc_frame запрещена и вместо неё нужно использовать функцию av_frame_alloc. Чтобы примеры заработали, просто замените avcodec_alloc_frame на av_frame_alloc. Аналогично, функцию avcodec_get_frame_defaults нужно заменить на av_frame_unref.

Пример создания проигрывателя с помощью библиотек FFMPEG в Delphi

4. ComponentsDemo – группа проектов с примерами использования компонентов. Находится здесь: <PROJECT_ROOT>\samples\Components\ComponentsDemo.groupproj. Здесь есть примеры захвата видео с веб-камеры, IP-камеры (см. картинку снизу) или из файла, поиска шаблона на видео, запись видео с веб-камеры в файл и отслеживание объекта.

Пример захвата изображения с IP-камеры с помощью OpenCV в Delphi

А вот список некоторых публичных IP-камер для экспериментов:

Байкал, Листвянка - rtmp://bm.isc.irk.ru/v2/v2
Екатеринбург, Плотинка - rtsp://80.78.116.125:1935/rtplive/plot_hd.stream
Екатеринбург, Зоопарк, слониха Даша - rtmp://80.78.116.125:1935/rtplive/zoo_ek_sd.stream
Екатеринбург, Площадь 1905 г. - rtmp://80.78.116.125:1935/rtplive/5goda_sd.stream
Соликамск, Соборная площадь - rtmp://80.78.116.125:1935/rtplive/solikamsk_hd.stream

Итог

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

Tags: OpenCV Учебники по программированию Delphi

Комментарии   

djakopsen
+1 #11 djakopsen 01.09.2020 12:46
Использую Delphi XE8, все программы успешно работают,может использоваться только на 32- и 64-битных платформах Windows, но не может использоваться на платформах Android или IOS,как сделать так, чтобы opencv можно было использовать на платформе Andrid или IOS
Цитировать

Добавить комментарий