Робимо детектор руху на основі веб-камери

Хочу розповісти вам про те, як без особливих витрат створити програму, яка при належній доопрацюванні може стати ще одним кордоном зашиті вашого житла.
Я говорю про детектор руху, що складається з двох частин - веб-камери (або будь-якого іншого подібного пристрою) і програми, яка візьме на себе функції детектора руху, оповіщувача і ін.

Для затравки пропоную подивитися на кілька більш просунутий варіант, який вийшов у мене - Аніміца GIF.

Для створення програми необхідно мати під рукою Delphi \ C ++ Builder і компоненти VisionLab.
У статті я опишу реалізацію основних функцій, які необхідні для такого роду програми. Само-собою, що для створення детектора, в точності задовольняє вашим потребам, знадобляться навички роботи з розглянутими IDE.

Простіше кажучи, я покажу наскільки легко можна зробити детектор руху, але детальної інструкції з написання повноцінної програми не дам, тому що це виходить далеко за рамки однієї статті.

Отже, поїхали. Запускаємо билдер, створюємо новий проект
File | New | Application

Робимо детектор руху на основі веб-камери

На екрані з'явиться порожня форма, на яку з вкладок VisionLab переносимо компоненти:
VLDSCapture
VLMotionDetect
VLImageDisplay (2 примірника)

Ви можете змінити розмір форми і пересувати компоненти по ній так, як захочете. У мене форма виглядала так:

Робимо детектор руху на основі веб-камери

Тепер нам необхідно налаштувати компоненти. Для цього виділяємо VLDSCapture1 (просто клікнувши на нього) і в віконці "Object Inspector" шукаємо властивість OutputPin.
Кількома на кнопку з трьома крапками.

Ви побачите ось такий діалог:

Робимо детектор руху на основі веб-камери

Розставте чекбокси як показано на зображенні і натисніть OK.

Виділяємо VLMotionDetect1. У віконці "Object Inspector" знову шукаємо властивість OutputPin і натискаємо на кнопку з трьома крапками.

У діалозі розставляємо чекбокси як показано на зображенні і натискаємо OK.

Робимо детектор руху на основі веб-камери

Вітаю, ви тільки що створили детектор руху на основі веб-камери! Тепер додамо йому нових можливостей.

Ви можете змінити розмір поля, що вплине на загальну чутливість детектора, а також задати чутливість кожного осередку, виділивши її, і натиснувши 0-9.

Робимо детектор руху на основі веб-камери

Такий спосіб не підходить для постійного використання, тому додамо можливість управляти чутливістю під час виконання програми, написавши нашу першу (!) Сходинку коду в цій програмі.

Для цього на вкладці Standard палітри компонентів знайдемо і перенесемо на форму компонент Button. Це проста кнопка, яку всі користувачі ПК бачили не один раз. Виділивши кнопку на формі, можна в віконці Object Inspector змінити напис на ній (властивість Caption).

  • Му вже не один раз редагували властивості компонентів за допомогою віконця Object Inspector, тому в подальшому, кажучи "відредагуйте властивість", я буду мати на увазі редагування через Object Inspector. Також нагадую, що редагування властивостей компонентів, має на увазі його обов'язкове виділення кліком, перед початком роботи.

    VLMotionDetect1 -> MotionGrid -> ShowDialog # 40; # 41; ;

    Т.ч. вихідний код повинен виглядати так:

    Робимо детектор руху на основі веб-камери

    Скомпілюйте свою програму (F9) і натисніть кнопку. Ви побачите вже знайомий діалог настройки чутливості детектора.

    лог
    Тепер додамо можливість зберігати дані про квадратах, в яких було помічено рух.

    З вкладки Standard палітри компонентів переносимо на форму компонент Memo.
    Змініть його властивість ScrollBars, встановивши значення в ssVertical

    Відредагувати вміст вікна по-умолчнію можна використовуючи властивість Lines

    Виділіть, клікнувши на нього, компонент VLMotionDetect1 і змініть властивість SynchronizeType, встановивши його в stQueue
    Чи не закривайте Object Inspector, а перейдіть на вкладку Events.

    Т.ч. вихідний код буде виглядати таким чином:

    Робимо детектор руху на основі веб-камери

    Скомпілюйте свою програму (F9). Коли додаток запуститься, ви побачите що тепер програма повідомляє про квадраті, в якому було помічено рух.

    Наприклад, у мене вийшла така програма.

    Ололо, реальне, слід робити програми на машині Тьюринга, виконаної з дерева, рубанком і сокирою.
    Ось це так! Ручна робота, витонченість реалізації, Мистецтво! А перфокарти і всі інші методи, що дозволяють не винаходити велосипед, в топку, це сором і ганьба.

    Ви, мабуть, ще думаєте, що мисливець, який вбиває ведмедя за допомогою рушниці і лайок - НЕ жартування. Справжній мисливець тільки той, хто рве ведмедю пащу голими руками;)

    Гість (гість) - 08.07.11

    Ви просто скачали чужу програму. Навіть якщо ви додали трохи оформлення, вона не стала вашою. Ви тільки скомпонували вже готове, не створивши при цьому нічого свого. Це не програмування, а тільки дизайн.

    ВІНАП теж не можна юзати? Навіть інвокабельний синтаксис МАСМА? Де межа, що можна використовувати, а що ні?

    Правильно написано нижче, дивне у вас поняття про професії.

    tabber (гість) - 19.02.11

    Та не звертайте увагу на тупорезов, ця програма робиться в візуальному середовищі, навіщо писати свій компоненти якщо вони вже зроблені, нахера витрачати час якщо вирішити задачу можна за допомогою компонентів зарание вже зроблених, сдесь робота йде з візуальною мовою, а якщо ви зібралися писати кожну кнопку, кожну форму, компонент, то ви дядько дебіл)

    Костянтин (гість) - 21.02.11

    Дякую за статтю і наводку на компоненти.
    PS. У деяких дійсно дивне уявлення про програмістів, професії і ганьбу.

    Олексій Батькович (гість) - 21.02.11

    Гість (гість) - 16.04.11

    Після запуску скомпільованій двічі з'являється помилка 0xc0000005 і вона завершується - в чому може бути справа, адмін Мій)))?

    Гість (гість) - 21.06.13

    Олександр (гість) - 28.08.13

    А можна через ці компоненти відслідковувати зміну ділянки екрану монітора?

    Схожі статті