Использование OpenCV в Delphi
Создатели библиотеки компьютерного зрения OpenCV позаботились о разработчиках, которые программируют на C++, C, Python и Java, ведь для этих языков есть официальные интерфейсы. А что же делать Delphi-разработчикам? На помощь приходит неофициальный проект Delphi-OpenCV, созданный и поддерживаемый российскими разработчиками, который предоставляет обёртки для библиотеки OpenCV. Давайте пробовать, насколько просто или сложно, установить, настроить и использовать 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:
- Файлы распространяемых пакетов Visual C++ для Visual Studio 2013. Найти их можно в архиве Delphi-OpenCV: в папке redist\VC2013x86 – файлы для 32-битной Windows и в папке redist\VC2013x64 – для 64-битной. Вот какие файлы понадобятся: msvcp120.dll, msvcr120.dll, msvcp120d.dll и msvcr120d.dll.
- Библиотеки кодеков FFMPEG для Windows, скачать которые можно здесь. Скачивать нужно версию Shared, т.к. в ней есть нужные .dll файлы. Из скачанного архива нам нужны все .dll файлы и папки bin, такие как avcodec-57.dll, avdevice-57.dll, avfilter-6.dll, avformat-57.dll и т.д.
- Библиотека OpenCV, скачать которую можно здесь. После распаковки архива вам понадобятся .dll файлы из папок \build\x64\vc12\bin (здесь 64-битные файлы) и \build\x86\vc12\bin (здесь 32-битные файлы), а если точнее, то файлы с именами, оканчивающимися на 2411.dll или 2411d.dll.
- Некоторым примерам (FFMPEG) требуются библиотеки SDL 2.0 и SDL 1.2 (файлы SDL.dll и SDL2.dll), скачать которые можно здесь.
Скопируйте все перечисленные выше файлы в следующие системные папки:
- Если у вас 32-битная Windows, то скопируйте 32-битные файлы в папку C:\Windows\System32\.
- Если у вас 64-битная Windows, то:
- скопируйте 64-битные файлы в папку C:\Windows\System32\, если будете разрабатывать 64-битные приложения;
- скопируйте 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.
Затем откройте, откомпилируйте и установите следующие проекты (первый проект в списке нужно только откомпилировать):
<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. Здесь есть примеры захвата видео с камеры, записи видео и изображений в файл и чтения из них, обработки изображений с помощью фильтров, поиска контуров, фигур и шаблонов на изображении (поиск шаблона, см на рисунке ниже).
2. MultiDemo – группа проектов с примерами использования алгоритмов обработки видео. Находится здесь: <PROJECT_ROOT>\samples\MultiDemo\MultiDemo.groupproj. Здесь я нашёл примеры захвата видео с IP-камеры (для эксперимента можете использовать адреса публичных IP-камер, список см. ниже), распознавания номера машины на изображении (см. рисунок ниже), распознавания лиц, обнаружение движений, отслеживание объекта и другие.
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.
4. ComponentsDemo – группа проектов с примерами использования компонентов. Находится здесь: <PROJECT_ROOT>\samples\Components\ComponentsDemo.groupproj. Здесь есть примеры захвата видео с веб-камеры, IP-камеры (см. картинку снизу) или из файла, поиска шаблона на видео, запись видео с веб-камеры в файл и отслеживание объекта.
А вот список некоторых публичных 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 здесь. А если что не понятно по компонентам, то всегда можно посмотреть исходники.
Комментарии
RSS лента комментариев этой записи