Π Π°Π·Π½ΠΎΠ΅

Delphi opencv: ИспользованиС OpenCV в Delphi

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ИспользованиС 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:

  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.

Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ установитС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² спискС Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ):

<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 здСсь. А Ссли Ρ‡Ρ‚ΠΎ Π½Π΅ понятно ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, Ρ‚ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исходники.

ИспользованиС OpenCV Π² Delphi / Π₯Π°Π±Ρ€

Π’Π°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ я Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Delphi Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅, собствСнныС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹) ΠΈ Π²ΠΎΡ‚ ΠΌΠ½Π΅ понадобилось Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния OpenCV. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, вСдь ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ OpenCV ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Delphi Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° C Ρ€Π°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слишком Π΄ΠΎΠ»Π³ΠΎ.

Но Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ нСвозмоТного…

НСмного поискав Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, я нашСл нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ использованию OpenCV Π² Delphi.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ свСТий ΠΈ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ β€” Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈ взял Π·Π° основу.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° github ΠΌΠ½Π΅ показался интСрСсным, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° Delphi, Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°Π±Ρ€ΠΎΡˆΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° свой.

ВсС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я Π²Ρ‹Π»ΠΎΠΆΠΈΠ» Π½Π° code.google.com/p/opencv-delphi-new

Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ сдСлано:

1. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° RAD Studio XE3.

2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: cvFlip, cvClearMemStorage, cvCreateChildMemStorage, cvRectangle, cvRetrieveFrame, cvIntegral, cvGetPerspectiveTransform, cvWarpPerspective, cvCreateMat, cv2DRotationMatrix, cvWarpAffine, cvFindContours, cvHaarDetectObjects.

3. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ 6 Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

FaceDetect β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дСтСктирования Π»ΠΈΡ†Π° Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠ΅ с использованиСм прСобразования Π₯Π°Ρ„Π°.

FindContours β€” НахоТдСниС ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² изобраТСния.

Integral β€” Π˜Π½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

WarpAffine β€” Врансформация изобраТСния β€” Π°Ρ„Ρ„ΠΈΠ½Π½Ρ‹Π΅ прСобразования (ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»).

WrapPrespective β€” Врансформация изобраТСния β€” гомография (ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ трансформация).

MatchShapes β€” Поиск ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΈΡ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²).

Π’ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… я постарался ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Ρ‚ΡŒ всС манипуляции для достяТСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсна Ρ‚Π΅ΠΌΠ° использования OpenCV Π² Delphi, Ρ‚ΠΎ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ Π½Π° email ΠΈΠ»ΠΈ оставляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

Если Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° использования OpenCV Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ интСрСсна, Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько статСй, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ использования OpenCV Вас интСрСсуСт.

1. OpenCV шаг Π·Π° шагом. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. / ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅ / RoboCraft. Π ΠΎΠ±ΠΎΡ‚Ρ‹? Π­Ρ‚ΠΎ просто!

ОглавлСниС
1. OpenCV шаг Π·Π° шагом. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΎ OpenCV (Open Source Computer Vision Library) Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ рассказано здСсь.

Π­Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая Π΄ΠΎ 1-ΠΉ вСрсии Ρ€Π°Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ Π² Π¦Π΅Π½Ρ‚Ρ€Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Intel (ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ, российской ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² НиТнСм НовгородС).

OpenCV написана Π½Π° языкС высокого уровня (C/C++) ΠΈ содСрТит Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для: ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ эталону, устранСниС оптичСских искаТСний, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сходства, Π°Π½Π°Π»ΠΈΠ· пСрСмСщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ слСТСниС Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, 3D-рСконструкция, сСгмСнтация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, распознаваниС ТСстов ΠΈ Ρ‚.Π΄.

Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‡Π΅Π½ΡŒ популярна Π·Π° счёт своСй открытости ΠΈ возмоТности бСсплатно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ коммСрчСских цСлях.

ЀактичСски, OpenCV – это Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

cxcore β€” ядро

* содСрТит Π±Π°Π·ΠΎΠ²Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹:

β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ числовыми массивами

β€” матричная Π°Π»Π³Π΅Π±Ρ€Π°, матСматичСскиС Ρ„-Ρ†ΠΈΠΈ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ случайных чисСл

β€” Π—Π°ΠΏΠΈΡΡŒ/восстановлСниС структур Π΄Π°Π½Π½Ρ‹Ρ… Π²/ΠΈΠ· XML

β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 2D Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

CV β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния

β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ изобраТСниями (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, гСомСтричСскиС прСобразования, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… пространств ΠΈ Ρ‚. Π΄.)

β€” Π°Π½Π°Π»ΠΈΠ· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Π²Ρ‹Π±ΠΎΡ€ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², морфология, поиск ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ², гистограммы)

β€” Π°Π½Π°Π»ΠΈΠ· двиТСния, слСТСниС Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ

β€” ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² частности Π»ΠΈΡ†

β€” ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€, элСмСнты восстановлСния пространствСнной структуры

Highgui β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ, создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса

β€” Π·Π°Ρ…Π²Π°Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ с ΠΊΠ°ΠΌΠ΅Ρ€ ΠΈ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись статичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ простого UI (всС Π΄Π΅ΠΌΠΎ прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ HighGUI)

Cvaux β€” ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

β€” пространств. Π·Ρ€Π΅Π½ΠΈΠ΅: стСрСо калибрация, само калибрация

β€” поиск стСрСо-соотвСтствия, ΠΊΠ»ΠΈΠΊΠΈ Π² Π³Ρ€Π°Ρ„Π°Ρ…

β€” Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ описаниС Ρ‡Π΅Ρ€Ρ‚ Π»ΠΈΡ†Π°

CvCam β€” Π·Π°Ρ…Π²Π°Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ

β€” позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ с Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎ-ΠΊΠ°ΠΌΠ΅Ρ€ ( ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΈ Π² послСдних вСрсиях этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ отсутствуСт )

ВСкущая (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π°Π²ΠΊΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ) ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия 2.4.1.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ здСсь:
http://sourceforge.net/projects/opencvlibrary/

Π’ вСрсии 2.2 структура Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вмСсто Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (cxcore, Cvaux, Highgui, Cvaux) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenCV Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° нСбольшиС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ°Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ использованию:
opencv_core β€” ядро: Π±Π°Π·ΠΎΠ²Ρ‹Π΅ структуры, вычислСния (матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, гСнСрация псСвдослучайных чисСл, DFT, DCT, Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ Π² XML ΠΈ Ρ‚.ΠΏ.)
opencv_imgproc β€” ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, прСобразования ΠΈ Ρ‚. Π΄.).
opencv_highgui β€” простой UI, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°/сохранСниС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ.
opencv_ml β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ машинного обучСния (SVM, Π΄Π΅Ρ€Π΅Π²ΡŒΡ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ Ρ‚. Π΄.).
opencv_features2d β€” Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ дСскрипторы (SURF).
opencv_video β€” Π°Π½Π°Π»ΠΈΠ· двиТСния ΠΈ отслСТиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (оптичСский ΠΏΠΎΡ‚ΠΎΠΊ, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ двиТСния, устранСниС Ρ„ΠΎΠ½Π°).
opencv_objdetect β€” Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ (Π²Π΅ΠΉΠ²Π»Π΅Ρ‚Ρ‹ Π₯Π°Π°Ρ€Π°, HOG ΠΈ Ρ‚. Π΄.).
opencv_calib3d β€” ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, поиск стСрСо-соотвСтстсвия ΠΈ элСмСнты ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….
opencv_flann β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° быстрого поиска Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй (FLANN).
opencv_contrib β€” ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Π΅Ρ‰Π΅ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ для примСнСния.
opencv_legacy β€” ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΠΊΠΎΠ΄, сохранСнный Ρ€Π°Π΄ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.
opencv_gpu β€” ускорСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV Π·Π° счСт CUDA (NVidia).

Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π»Π΅Π΅: 2. OpenCV шаг Π·Π° шагом. Установка.

Книга ΠΏΡ€ΠΎ OpenCV:
Gary Bradski, Adrian Kaehler Β«Learning OpenCV. Computer vision with the OpenCV library.Β»

Бсылки
ru.wikipedia.org/wiki/OpenCV
opencv.org
docs.opencv.org
www.compvision.ru/forum/index.php?showforum=4

Автор: Vladimir (noonv), 2010-2011

Эксклюзивно для www.robocraft.ru

ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы ΠΈ публикация

Π±Π΅Π· Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π°Π²Ρ‚ΠΎΡ€Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.

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

Π’Π°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ я Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Delphi Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅, собствСнныС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹) ΠΈ Π²ΠΎΡ‚ ΠΌΠ½Π΅ понадобилось Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния OpenCV. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, вСдь ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ OpenCV ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Delphi Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° C Ρ€Π°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слишком Π΄ΠΎΠ»Π³ΠΎ.

Но Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ нСвозмоТного…

НСмного поискав Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, я нашСл нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ использованию OpenCV Π² Delphi.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ свСТий ΠΈ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ β€” Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈ взял Π·Π° основу.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° github ΠΌΠ½Π΅ показался интСрСсным, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° Delphi, Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°Π±Ρ€ΠΎΡˆΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° свой.

ВсС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я Π²Ρ‹Π»ΠΎΠΆΠΈΠ» Π½Π° code.google.com/p/opencv-delphi-new/

Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ сдСлано:
1. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° RAD Studio XE3.
2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: cvFlip, cvClearMemStorage, cvCreateChildMemStorage, cvRectangle, cvRetrieveFrame, cvIntegral, cvGetPerspectiveTransform, cvWarpPerspective, cvCreateMat, cv2DRotationMatrix, cvWarpAffine, cvFindContours, cvHaarDetectObjects.
3. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ 6 Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:
FaceDetect β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дСтСктирования Π»ΠΈΡ†Π° Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠ΅ с использованиСм прСобразования Π₯Π°Ρ„Π°.
FindContours β€” НахоТдСниС ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² изобраТСния.
Integral β€” Π˜Π½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
WarpAffine β€” Врансформация изобраТСния β€” Π°Ρ„Ρ„ΠΈΠ½Π½Ρ‹Π΅ прСобразования (ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»).
WrapPrespective β€” Врансформация изобраТСния β€” гомография (ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ трансформация).
MatchShapes β€” Поиск ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΈΡ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²).

Π’ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… я постарался ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Ρ‚ΡŒ всС манипуляции для достяТСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсна Ρ‚Π΅ΠΌΠ° использования OpenCV Π² Delphi, Ρ‚ΠΎ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ Π½Π° email ΠΈΠ»ΠΈ оставляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.
Если Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° использования OpenCV Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ интСрСсна, Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько статСй, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ использования OpenCV Вас интСрСсуСт.

Автор: Sleuthhound

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

НОУ ИНВУИВ | ЛСкция | Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenCV

Аннотация: Π’ Π»Π΅ΠΊΡ†ΠΈΠΈ приводятся: ΠΎΠ±Π·ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV, описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C/C++ ΠΈ Python.

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ Π»Π΅ΠΊΡ†ΠΈΠΈ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ здСсь.

1. Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenCV

ЦСль настоящСго Ρ€Π°Π·Π΄Π΅Π»Π° – ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΎ возмоТностях Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV (http://opencv.org) ΠΈ Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠ»Ρ‡ΠΎΠΊ для дальнСйшСго Π΅Π³ΠΎ изучСния.

1.1. ΠžΠ±Π·ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

OpenCV – de facto самая популярная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния. Она написана Π½Π° C/C++, Π΅Π΅ исходный ΠΊΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚. Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 1000 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Она разрабатываСтся c 1998 Π³., сначала Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π˜Π½Ρ‚Π΅Π», Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² Itseez ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ участии сообщСства. О высокой популярности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ количСство Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ 6000000 Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ (Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° svn/git Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°).

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Halcon. Π•ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ спСциализированныС, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠ΅ Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, libmv. OpenCV – самая большая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎ ΡˆΠΈΡ€ΠΎΡ‚Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° распространяСтся ΠΏΠΎ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ BSD, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ свободно ΠΈ бСсплатно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ…, коммСрчСских ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ куски ΠΊΠΎΠ΄Π°. ЕдинствСнноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ – Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°Ρ… ΠΊΠΎΠΏΠΈΠΈ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ OpenCV.

Из-Π·Π° Π»ΠΈΠ±Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ компаниями, организациями, унивСрситСтами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NVidia, Willow Garage, Intel, Google, Stanford University. Компании NVidia ΠΈ WillowGarage частично ΡΠΏΠΎΠ½ΡΠΈΡ€ΡƒΡŽΡ‚ Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

Π•ΡΡ‚ΡŒ основаниС Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ OpenCV, Π°Ρ„ΠΈΡˆΠΈΡ€ΡƒΡŽΡ‚ это. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСбольшой ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ извСстных Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ OpenCV:

  • БистСма зрСния Ρ€ΠΎΠ±ΠΎΡ‚Π° PR2, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ WillowGarage (www.willowgarage.com). ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ PR2 Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ слоТной Π·Π°Π΄Π°Ρ‡ΠΈ – созданиС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ.
  • Аудио-Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ инсталляция Π² ΠœΡƒΠ·Π΅Π΅ Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π˜ΡΠΊΡƒΡΡΡ‚Π²Π° (Π‘Π°Π½-Ѐранциско).
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ качСства ΠΌΠΎΠ½Π΅Ρ‚, ΠΈΠ·Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π¦Π΅Π½Ρ‚Ρ€ΠΎΠ±Π°Π½ΠΊΠΎΠΌ ΠšΠΈΡ‚Π°Ρ.
  • ΠšΡƒΡ€ΡΡ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния Π² БтэнфордС.
  • ΠŸΠ°Π½ΠΎΡ€Π°ΠΌΡ‹ ΡƒΠ»ΠΈΡ† Π² ΠΊΠ°Ρ€Ρ‚Π°Ρ… Google.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° прСдставлСна Π½Π° рис. 4.1. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° состоит ΠΈΠ· 16 ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΠΊΠΎΠ»ΠΎ 1000 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ доступна Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках: C, C++, Python, CUDA, Java. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы: MS Windows, Linux, Mac, Android, iOS. Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с устройством Kinect (OpenNI), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (TBB) ΠΈ Π΄Ρ€.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСму Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄ΡƒΡŽ Π½ΠΎΡ‡ΡŒ послСдниС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ вСрсии OpenCV ΡΠΊΠ°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠ· рСпозитория ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° 50 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… конфигурациях (Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы, Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Ρ‚. Π΄.), послС Ρ‡Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ рСгрСссионныС тСсты. НапримСр, проводится Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС Π½Π° Android-ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚Π°Ρ….

Рис.
4.1.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΠΊ 4 Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ (Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ):

  • ΠœΠΎΠ΄ΡƒΠ»ΠΈ core, highgui, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ структуры, матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ случайных чисСл, линСйная Π°Π»Π³Π΅Π±Ρ€Π°, быстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅, Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ, Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… XML, YAML ΠΈ Π΄Ρ€.).
  • ΠœΠΎΠ΄ΡƒΠ»ΠΈ imgproc, features2d для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, гСомСтричСскиС прСобразования, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… пространств, сСгмСнтация, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ особых Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ Ρ€Π΅Π±Π΅Ρ€, ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ Π΄Ρ€).
  • ΠœΠΎΠ΄ΡƒΠ»ΠΈ video, objdetect, calib3d (ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Π°Π½Π°Π»ΠΈΠ· двиТСния ΠΈ отслСТиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², вычислСниС полоТСния Π² пространствС, построСниС ΠΊΠ°Ρ€Ρ‚Ρ‹ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹, Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², оптичСский ΠΏΠΎΡ‚ΠΎΠΊ).
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒ ml, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ машинного обучСния (ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй, Π½Π°ΠΈΠ²Π½Ρ‹ΠΉ байСсовский классификатор, Π΄Π΅Ρ€Π΅Π²ΡŒΡ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, бустинг, Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½Ρ‹ΠΉ бустинг Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, случайный лСс, машина ΠΎΠΏΠΎΡ€Π½Ρ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Π΅ сСти ΠΈ Π΄Ρ€.).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с xml-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… вычислСний ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² xml-Ρ„Π°ΠΉΠ»Π°Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡ… ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎ частям, Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Ρ†Π΅Π»ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenCV Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ Π·Ρ€Π΅Π½ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² Ρ†Π΅Π»ΠΎΠΌ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° основС прСдоставлСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ² ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои слоТныС прилоТСния.

На рисункС Π½ΠΈΠΆΠ΅ прСдставлСна общая схСма Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ прилоТСния, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ всС прилоТСния ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ΄ эту схСму).

Рис.
4.2.

ВсС начинаСтся с Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ highgui). Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ с сСтСвой ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Ρ‡Π΅Ρ€Π΅Π· сСтСвой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».

Π”Π°Π»Π΅Π΅ осущСствляСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ imgproc), такая, ΠΊΠ°ΠΊ устранСниС ΡˆΡƒΠΌΠ°, Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ яркости, контраста, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΈΠΊΠΎΠ², Ρ‚Π΅Π½Π΅ΠΉ. НапримСр, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ Ρ€Π°Π·Π½ΠΎΠΌ освСщСнии выглядит ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’ ярком свСтС красная машина, Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ярко-ΠΎΡ€Π°Π½ΠΆΠ΅Π²ΠΎΠΉ. Π’ ΠΏΠ°ΡΠΌΡƒΡ€Π½ΡƒΡŽ ΠΏΠΎΠ³ΠΎΠ΄Ρƒ Ρ‚Π° ΠΆΠ΅ машина Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ красно-Ρ€ΠΎΠ·ΠΎΠ²ΠΎΠΉ. Π’ этом случаС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ². ΠŸΡ€Π΅Π΄ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ простой, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбС Ρ†Π΅Π»ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап – Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ особСнностСй (ΠΌΠΎΠ΄ΡƒΠ»ΠΈ imgproc, features2d). НапримСр, Π² Π·Π°Π΄Π°Ρ‡Π΅ слСТСния Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поиск ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π»Π΅Π³ΠΊΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ; для Π·Π°Π΄Π°Ρ‡ΠΈ дСтСктирования (Ρ‚. Π΅. обнаруТСния Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ) Π»ΠΈΡ†Π° – вычислСния описания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСла.

Π”Π°Π»Π΅Π΅ происходит Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… нас ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… частСй, сСгмСнтация изобраТСния (ΠΌΠΎΠ΄ΡƒΠ»ΠΈ imgproc, objdetect). Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΌΠ΅Ρ€Π° Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π°, Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ вычитания Ρ„ΠΎΠ½Π°.

ПослС этого Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, Ρ‚Π°ΠΊΡƒΡŽ, ΠΊΠ°ΠΊ вычислСниС располоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² 3d, Ρ€Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ 3d структуры, Π°Π½Π°Π»ΠΈΠ· структуры, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Ρ‚. ΠΏ. (ΠΌΠΎΠ΄ΡƒΠ»ΠΈ calib3d, contrib, video, stitching, videostab, ml). НапримСр Π² Π·Π°Π΄Π°Ρ‡Π΅ склСйки ΠΏΠ°Π½ΠΎΡ€Π°ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ – это сопоставлСниС частСй Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ прСобразования. Π’ Π·Π°Π΄Π°Ρ‡Π΅ видСонаблюдСния это восстановлСниС Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚. Π΄.

Π’ ΠΊΠΎΠ½Ρ†Π΅ происходит распознаваниС ΠΈ принятиС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ml). НапримСр, Π² систСмС видСонаблюдСния: появился Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΠ°Π΄Ρ€Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ Π·Π°Π΄Π°Ρ‡Π΅ дСтСктирования тСкста – Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ тСкст, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° тСкст ΠΈ Ρ‚. Π΄.

Π’ΠΎΡ‚ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ описаниС основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² OpenCV ΠΈ схСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenCV

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ понадобится ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹:

OpenCV – cамая популярная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния – Π΅Ρ‘ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для
чтСния ΠΈ записи Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π½Π΅Π΄Π°Π²Π½ΠΎ публиковался Π² Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ программиста. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ OpenCV, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ pip:

        pip3 install opencv-python
    

FFmpeg – кроссплатформСнноС ПО для записи, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ стриминга Π°ΡƒΠ΄ΠΈΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ FFmpeg для объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ². Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ
Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

        import cv2 as cv
import time
import subprocess as sp
import multiprocessing as mp
from os import remove
from xailient import dnn
    

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΎΠ±
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…:

  • cv2: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenCV, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»Ρ‹;
  • time: ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя для расчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΊΠΎΠ΄Π°;
  • subprocess: запускаСм Π½ΠΎΠ²Ρ‹Π΅ процСссы, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ ΠΈΡ… ΠΊΠ°Π½Π°Π»Π°ΠΌ input/output/error ΠΈ Π·Π°Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈΡ… ΠΊΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.
  • multiprocessing: распараллСливаСм Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ распрСдСляСм Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами;
  • xailient: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для распознавания Π»ΠΈΡ†. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для этой Ρ†Π΅Π»ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ face_recognition, Π½ΠΎ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта.

НачнСм с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС. ИмСнно Ρ‚Π°ΠΊ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ
Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ», ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ ΠΈ записываСм Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°Π΄Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π°
диск.

        def process_video():
    # Π§ΠΈΡ‚Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с Π²ΠΈΠ΄Π΅ΠΎ
    cap = cv.VideoCapture(file_name)

    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ высоту, ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ количСство ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ΠΎ
    width, height = (
            int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
            int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
        )
    fps = int(cap.get(cv.CAP_PROP_FPS))

    # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ΠΊ ΠΈ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ VideoWriter
    fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
    out = cv.VideoWriter()
    output_file_name = "output_single.mp4"
    out.open(output_file_name, fourcc, fps, (width, height), True)

    try:
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
            
            im = frame
            # ВыполняСм распознаваниС Π»ΠΈΡ† Π² ΠΊΠ°Π΄Ρ€Π΅
            _, bboxes = detectum.process_frame(im, THRESHOLD)

            # Π¦ΠΈΠΊΠ» ΠΏΠΎ списку (Ссли ΠΎΠ½ пуст, Ρ‚ΠΎ это пропускаСм) ΠΈ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π΅Π»Π΅Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ            for i in bboxes:
                cv.rectangle(im, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
            
            # РисуСм Ρ€Π°ΠΌΠΊΡƒ
            out.write(im)
    except:
        # ВысвобоТдаСм рСсурсы
        cap.release()
        out.release()
        

    # ВысвобоТдаСм рСсурсы
    cap.release()
    out.release()
    

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Π΅Ρ‰Π΅
ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ видСопроцСссор, фиксируСт врСмя Π½Π°Ρ‡Π°Π»Π° ΠΈ
ΠΊΠΎΠ½Ρ†Π°, вычисляСт врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для выполнСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ количСство ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ…
ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду.

        def single_process():
    print("ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ с использованиСм ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса...")
    start_time = time.time()
    process_video()
    end_time = time.time()
    total_processing_time = end_time - start_time
    print("ВрСмя: {}".format(total_processing_time))
    print("FPS : {}".format(frame_count/total_processing_time))
    
file_name = "input_video.mp4"
output_file_name = "output.mp4"
width, height, frame_count = get_video_frame_details(file_name)
print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ°Π΄Ρ€ΠΎΠ² = {}".format(frame_count))
print("Π¨ΠΈΡ€ΠΈΠ½Π° = {}, Π”Π»ΠΈΠ½Π° = {}".format(width, height))
single_process()
    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΡƒΡŽ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ:

        def process_video_multiprocessing(group_number):
    # Π§ΠΈΡ‚Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с Π²ΠΈΠ΄Π΅ΠΎ
    cap = cv.VideoCapture(file_name)

    cap.set(cv.CAP_PROP_POS_FRAMES, frame_jump_unit * group_number)

    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ высоту, ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ количСство ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ΠΎ
    width, height = (
            int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
            int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
        )
    no_of_frames = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
    fps = int(cap.get(cv.CAP_PROP_FPS))
    proc_frames = 0

    # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ΠΊ ΠΈ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ VideoWriter
    fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
    out = cv.VideoWriter()
    output_file_name = "output_multi.mp4"
    out.open("output_{}.mp4".format(group_number), fourcc, fps, (width, height), True)
    try:
        while proc_frames < frame_jump_unit:
            ret, frame = cap.read()
            if not ret:
                break

            im = frame
            # ВыполняСм распознаваниС Π»ΠΈΡ† Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅
            _, bboxes = detectum.process_frame(im, THRESHOLD)

            # Π¦ΠΈΠΊΠ» ΠΏΠΎ списку (Ссли ΠΎΠ½ пуст, Ρ‚ΠΎ это пропускаСм) ΠΈ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π΅Π»Π΅Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ 
            for i in bboxes:
                cv.rectangle(im, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
            
            # РисуСм Ρ€Π°ΠΌΠΊΡƒ
            out.write(im)

            proc_frames += 1
    except:
        # ВысвобоТдаСм рСсурсы
        cap.release()
        out.release()

    # ВысвобоТдаСм рСсурсы
    cap.release()
    out.release()
    

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
описана ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, которая ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ
ΠΎΠ½Π° дСлится ΠΏΠΎΡ€ΠΎΠ²Π½Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ‰ΠΈΠΌ количСством процСссоров, доступных Π½Π°
ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌ устройствС.

Если сущСствуСт 4
процСсса, Π° ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π²Π½ΠΎ 1000, Ρ‚ΠΎ
ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ 250 ΠΊΠ°Π΄Ρ€ΠΎΠ² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.
Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс создаст ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» с Π²ΠΈΠ΄Π΅ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹
ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эти Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ffmpeg.

        def combine_output_files(num_processes):
    # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ список Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ складываСм ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² тСкстовый Ρ„Π°ΠΉΠ»
    list_of_output_files = ["output_{}.mp4".format(i) for i in range(num_processes)]
    with open("list_of_output_files.txt", "w") as f:
        for t in list_of_output_files:
            f.write("file {} \n".format(t))

    # Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ffmpeg для объСдинСния Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²
    ffmpeg_cmd = "ffmpeg -y -loglevel error -f concat -safe 0 -i list_of_output_files.txt -vcodec copy " + output_file_name
    sp.Popen(ffmpeg_cmd, shell=True).wait()

    # УдаляСм Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
    for f in list_of_output_files:
        remove(f)
    remove("list_of_output_files.txt")
    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создаСм ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€
для запуска многопроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ, расчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ
ΠΊΠ°Π΄Ρ€ΠΎΠ², ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² сСкунду.

        def multi_process():
    print("ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ с использованиСм {} процСссов...".format(num_processes))
    start_time = time.time()

    # ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с нСсколькими Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ значСниями
    p = mp.Pool(num_processes)
    p.map(process_video_multiprocessing, range(num_processes))

    combine_output_files(num_processes)

    end_time = time.time()

    total_processing_time = end_time - start_time
    print("ВрСмя: {}".format(total_processing_time))
    print("FPS : {}".format(frame_count/total_processing_time))

file_name = "input.mp4"
output_file_name = "output.mp4"
width, height, frame_count = get_video_frame_details(file_name)
print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ°Π΄Ρ€ΠΎΠ² = {}".format(frame_count))
print("Π¨ΠΈΡ€ΠΈΠ½Π°= {}, Высота = {}".format(width, height))
num_processes = mp.cpu_count()
print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ процСссоров: " + str(num_processes))
frame_jump_unit =  frame_count// num_processes
multi_process()
    

ЭкспСримСнт проводился
Π½Π° Lenovo Yoga 920 с Ubuntu18.04. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ доступных Π½Π° устройствС логичСских процСссоров – 8ΡˆΡ‚.

Из этого экспСримСнта
ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании всСх ядСр обрабатываСтся Π² 2 Ρ€Π°Π·Π°
большС ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду. Π§Π΅ΠΌ большС процСссоров Π½Π° тСстовой машинС, Ρ‚Π΅ΠΌ большС ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСссов, ΠΈ Ρ‚Π΅ΠΌ быстрСС ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ИспользованиС 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:

  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. Для этого Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Ссли ΠΎΠ½ΠΈ Ρƒ вас ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ (ΠΏΡƒΠ½ΠΊΡ‚ мСню Β«Π€Π°ΠΉΠ» -> Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ всС») ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ настроСк (ΠΏΡƒΠ½ΠΊΡ‚ мСню Β«Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ -> ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.. Β»). Π’ Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ открытия Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡƒΡ‚Π΅ΠΉ (Β«ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ срСды -> ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Delphi -> Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° -> ΠŸΡƒΡ‚ΡŒ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅:Β») ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² список ΠΏΡƒΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠ°ΠΏΠΊΠ°ΠΌ:

\ source
\ source \ utils
\ source \ component
\ source \ sdl
\ source \ sdl2
\ openPROJECT_ROOT>
\ источник \ ffmpeg
<ΠšΠžΠ ΠΠ•Π’ΠžΠ™_ΠŸΠ ΠžΠ•ΠšΠ’> \ рСсурс \ facedetectxml

Π³Π΄Π΅ — это ΠΏΠ°ΠΏΠΊΠ°, ΠΊΡƒΠ΄Π° Π²Ρ‹ распаковали Π°Ρ€Ρ…ΠΈΠ².Π’.Π΅. Ρƒ мСня ΠΏΠ°ΠΏΠΊΠ° \ source Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: C: \ Projects \ OpenCV \ source.

Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ установитС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² спискС Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ):

\ source \ component \ DelphiXX \ OpenCVXXX.dpk
\ source \ component \ DelphiXX \ dclCommonOpenCVXXX.dpk
\ source \ component \ DelphiXpen.dkVCLVECT> \ source \ component \ DelphiXXpen \ dclVECT \ DelphiXX \ dclFMXOpenCVXXX.dpk
<ΠšΠžΠ ΠΠ•Π’ΠžΠ™_ΠŸΠ ΠžΠ•ΠšΠ’> \ источник \ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ \ DelphiXX \ dclFFMSourceXXX.dpk

Π³Π΄Π΅ — это ΠΏΠ°ΠΏΠΊΠ°, ΠΊΡƒΠ΄Π° Π²Ρ‹ распаковали Π°Ρ€Ρ…ΠΈΠ², 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 Биэтл \ dclFMXOpenCV230.dpk
C: \ Projects \ OpenCV \ source \ component \ Delphi 10 Seattle \ dclFFMSource230.dpk

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ установки Π½Π΅ мСняйтС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Delphi-OpenCV

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Delphi-OpenCV установлСны ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅.ΠšΡΡ‚Π°Ρ‚ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π½Π° русском языкС. Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ здСсь Π΅ΡΡ‚ΡŒ:

1. LibDemo — Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. ΠŸΡƒΡ‚ΡŒ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² — \ samples \ LibDemo \ LibDemo.groupproj. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚Π° Π²ΠΈΠ΄Π΅ΠΎ с ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, записи Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ» ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ…, поиск ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², поиск ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ², Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ шаблонов Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ (поиск ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблона, см Π½Π° рисункС Π½ΠΈΠΆΠ΅).

2. MultiDemo — Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ. Находится здСсь: \ samples \ MultiDemo \ MultiDemo.groupproj. Π—Π΄Π΅ΡΡŒ я Π½Π°ΡˆΡ‘Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Ρ…Π²Π°Ρ‚Π° Π²ΠΈΠ΄Π΅ΠΎ с IP-ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ (для экспСримСнта ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… IP-ΠΊΠ°ΠΌΠ΅Ρ€, список см. НиТС), распознавания Π½ΠΎΠΌΠ΅Ρ€Π° ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ (см. Рисунок Π½ΠΈΠΆΠ΅), распознавания Π»ΠΈΡ†, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ, отслСТиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

3. FFMPEG — ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² FFMPEG. Π“Ρ€ΡƒΠΏΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² находится здСсь: \ samples \ FFMpeg \ FFMPEG.groupproj. Π—Π΄Π΅ΡΡŒ я Π½Π°ΡˆΡ‘Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ проигрыватСля (см. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ снизу) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ. ΠŸΡ€Π°Π²Π΄Π°, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΈ Ρƒ мСня Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ·-Π·Π° ошибки E2003 ΠΠ΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ‘avcodec_alloc_frame’. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция avcodec_alloc_frame Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° ΠΈ вмСсто Π½Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ av_frame_alloc. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ avcodec_alloc_frame Π½Π° av_frame_alloc.Аналогично Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ avcodec_get_frame_defaults Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° av_frame_unref.

4. ComponentsDemo — Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Находится здСсь: \ 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 здСсь. А Ссли Ρ‡Ρ‚ΠΎ Π½Π΅ понятно ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, Ρ‚ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исходники.

.

ИспользованиС OpenCV Π² Delphi / Π₯Π°Π±Ρ€

Π’Π°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ я Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Delphi Π² Ρ€Π°Π±ΠΎΡ‚Π΅ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅, собствСнной ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹) ΠΈ Π²ΠΎΡ‚ ΠΌΠ½Π΅ понадобилось Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния OpenCV. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, вСдь ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ OpenCV ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Delphi Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° C Ρ€Π°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слишком Π΄ΠΎΠ»Π³ΠΎ.

Но Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ нСвозмоТного…

НСмного поискав Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, я нашСл нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ использованию OpenCV Π² Delphi.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ свСТий ΠΈ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ — Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈ взял Π·Π° основу.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° github мнСался интСрСсным, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° Delphi, Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°Π±Ρ€ΠΎΡˆΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° свой.

ВсС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я Π²Ρ‹Π»ΠΎΠΆΠΈΠ» Π½Π° code.google.com/p/opencv-delphi-new

Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ сдСлано:
1. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° RAD Studio XE3.
2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: cvFlip, cvClearMemStorage, cvCreateChildMemStorage, cvRectangle, cvRetrieveFrame, cvIntegral, cvGetPerspectiveTransform, cvWarpPerspective, cvCreateMat, cv2DRffabjects, cv2DRffabjects, cv2DRffabjects, cv2DRffovers.
3. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ 6 Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:
.
FaceDetect — ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дСтСктирования Π»ΠΈΡ†Π° Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠ΅ с использованиСм прСобразования Π₯Π°Ρ„Π°.
FindContours — НахоТдСниС ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² изобраТСния.
Integral — Π˜Π½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
WarpAffine — Врансформация изобраТСния — Π°Ρ„Ρ„ΠΈΠ½Π½Ρ‹Π΅ прСобразования (ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»).
WrapPrespective — Врансформация изобраТСния — гомография (ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ трансформация).
MatchShapes — Поиск ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΌ ΠΈΡ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²).

Π’ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… я постарался ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Ρ‚ΡŒ всС манипуляции для получСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсна Ρ‚Π΅ΠΌΠ° использования OpenCV Π² Delphi, Ρ‚ΠΎ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ Π½Π° ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈΠ»ΠΈ оставляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.
Если Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° использования OpenCV Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ интСрСсна, Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько статСй, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ использования OpenCV Вас интСрСсуСт.

.

1. OpenCV шаг Π·Π° шагом. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. / ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅ / RoboCraft. Π ΠΎΠ±ΠΎΡ‚Ρ‹? Π­Ρ‚ΠΎ просто!

ОглавлСниС
1. OpenCV шаг Π·Π° шагом. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΎ OpenCV (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ) Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ рассказано здСсь.
Π­Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая Π΄ΠΎ 1-ΠΉ вСрсии Ρ€Π°Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ Π² Π¦Π΅Π½Ρ‚Ρ€Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Intel (ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ, российской ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² НиТнСм НовгородС).
OpenCV написана Π½Π° языкС уровня (C / C ++) ΠΈ содСрТит Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹: ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ эталону, устранСниС оптичСских искаТСний, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹, Π°Π½Π°Π»ΠΈΠ· пСрСмСщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ слСТСниС Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, 3D-рСконструкция, сСгмСнтация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, распознаваниС ТСстов ΠΈ Ρ‚.Π΄.

Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‡Π΅Π½ΡŒ популярна Π·Π° счёт своСй открытости ΠΈ возмоТности бСсплатно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ коммСрчСских цСлях.

ЀактичСски, OpenCV — это Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

cxcore — ядро ​​
* содСрТит Π±Π°Π·ΠΎΠ²Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹:
— Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ числовыми массивами
— матричная Π°Π»Π³Π΅Π±Ρ€Π°, матСматичСскиС Ρ„-Ρ†ΠΈΠΈ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ случайных чисСл
— Π—Π°ΠΏΠΈΡΡŒ / восстановлСниС структур Π΄Π°Π½Π½Ρ‹Ρ… Π² / ΠΈΠ· XML
— Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 2D Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

CV — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния
— Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ изобраТСниями (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, гСомСтричСскиС прСобразования, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… пространств ΠΈ Ρ‚.Π΄.)
— Π°Π½Π°Π»ΠΈΠ· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Π²Ρ‹Π±ΠΎΡ€ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², морфология, поиск ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ², гистограммы)
— Π°Π½Π°Π»ΠΈΠ· двиТСния, слСТСниС Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
— ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² частности Π»ΠΈΡ†
— ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, элСмСнты восстановлСния пространствСнной структуры

Highgui — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Π²Π²ΠΎΠ΄Π° / Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ, создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса
— Π·Π°Ρ…Π²Π°Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ с ΠΊΠ°ΠΌΠ΅Ρ€ ΠΈ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ / запись статичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
— Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для простого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса (всС Π΄Π΅ΠΌΠΎ прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ HighGUI)

Cvaux — ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
— пространств. Π·Ρ€Π΅Π½ΠΈΠ΅: стСрСо калибрация, само калибрация
— поиск стСрСо-соотвСтствия, ΠΊΠ»ΠΈΠΊΠΈ Π² Π³Ρ€Π°Ρ„Π°Ρ…
— Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ описаниС Ρ‡Π΅Ρ€Ρ‚ Π»ΠΈΡ†Π°

CvCam — Π·Π°Ρ…Π²Π°Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ
— позволяСт Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ с Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎ-ΠΊΠ°ΠΌΠ΅Ρ€ ( ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° прСкращСния ΠΈ послСдних вСрсийх этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ отсутствуСт )

ВСкущая (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π°Π²ΠΊΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ) ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия 2.4.1.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ здСсь:
http://sourceforge.net/projects/opencvlibrary/

Π’ структура вСрсии 2.2 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° — Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вмСсто Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (cxcore, Cvaux, Highgui, Cvaux) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° нСбольшиС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ°Π½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ использованию:
opencv_core — ядро: Π±Π°Π·ΠΎΠ²Ρ‹Π΅ структуры, вычислСния (матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, гСнСрация псСвдослучайных чисСл, DFT, DCT, Π²Π²ΠΎΠ΄ / Π²Ρ‹Π²ΠΎΠ΄ Π² XML ΠΈ Ρ‚.ΠΏ.)
opencv_imgproc — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, прСобразования ΠΈ Ρ‚. Π΄.).
opencv_highgui — простой интСрфСйс, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° / сохранСниС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ.
opencv_ml — ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ машинного обучСния (SVM, Π΄Π΅Ρ€Π΅Π²ΡŒΡ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ Ρ‚. Π”.).
opencv_features2d — Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ дСскрипторы (SURF).
opencv_video — Π°Π½Π°Π»ΠΈΠ· двиТСния ΠΈ отслСТиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (оптичСский ΠΏΠΎΡ‚ΠΎΠΊ, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ двиТСния, устранСниС Ρ„ΠΎΠ½Π°).
opencv_objdetect — Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ (Π²Π΅ΠΉΠ²Π»Π΅Ρ‚Ρ‹ Π₯Π°Π°Ρ€Π°, HOG ΠΈ Ρ‚.Π΄.).
opencv_calib3d — ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, поиск стСрСо-соотвСтстсвия ΠΈ элСмСнты ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….
opencv_flann — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° быстрого поиска Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй (FLANN).
opencv_contrib — ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Π΅Ρ‰Π΅ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ для примСнСния.
opencv_legacy — ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΠΊΠΎΠ΄, сохранСнный Ρ€Π°Π΄ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.
opencv_gpu — ускорСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV Π·Π° счСт CUDA (NVidia).

Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π»Π΅Π΅: 2.OpenCV шаг Π·Π° шагом. Установка.

Книга ΠΏΡ€ΠΎ OpenCV:
Гэри Брадски, Адриан ΠšΠ΅Π»Π΅Ρ€ Β«Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ OpenCV. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ OpenCV. Β»

Бсылки
ru.wikipedia.org/wiki/OpenCV
opencv.org
docs.opencv.org
www.compvision.ru/forum/index.php?showforum=4

Автор: Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ ( noonv ), 2010-2011

Эксклюзивно для www.robocraft.ru
ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы ΠΈ публикация
Π±Π΅Π· Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π°Π²Ρ‚ΠΎΡ€Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.

.

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

Π’Π°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ я Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Delphi Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅, собствСнныС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹) Π’Π°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ понадобилось Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния OpenCV. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, вСдь ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ OpenCV ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Delphi Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° C Ρ€Π°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слишком Π΄ΠΎΠ»Π³ΠΎ.

Но Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ нСвозмоТного…

НСмного поискав Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, я нашСл нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ использованию OpenCV Π² Delphi.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ свСТий ΠΈ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ — Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈ взял Π·Π° основу.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° github мнСался интСрСсным, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° Delphi, Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°Π±Ρ€ΠΎΡˆΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° свой.

ВсС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я Π²Ρ‹Π»ΠΎΠΆΠΈΠ» Π½Π° code.google.com/p/opencv-delphi-new/

Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ сдСлано:
1. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° RAD Studio XE3.
2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: cvFlip, cvClearMemStorage, cvCreateChildMemStorage, cvRectangle, cvRetrieveFrame, cvIntegral, cvGetPerspectiveTransform, cvWarpPerspective, cvCreateMat, cvWarpPerspective, cvCreateMat, cv2
3. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ 6 Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:
FaceDetect — ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дСтСктирования Π»ΠΈΡ†Π° Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠ΅ с использованиСм прСобразования Π₯Π°Ρ„Π°.
FindContours — НахоТдСниС ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² изобраТСния.
Integral — Π˜Π½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
WarpAffine — Врансформация изобраТСния — Π°Ρ„Ρ„ΠΈΠ½Π½Ρ‹Π΅ прСобразования (ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»).
WrapPrespective — Врансформация изобраТСния — гомография (ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ трансформация).
MatchShapes — Поиск ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ (Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΌ ΠΈΡ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²).

Π’ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… я постарался ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Ρ‚ΡŒ всС манипуляции для получСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Если ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсна Ρ‚Π΅ΠΌΠ° использования OpenCV Π² Delphi, Ρ‚ΠΎ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ Π½Π° ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈΠ»ΠΈ оставляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.
Если Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° использования OpenCV Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ интСрСсна, Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько статСй, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ использования OpenCV Вас интСрСсуСт.

Автор: Sleuthhound

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *