Передмова

Причому отут веб-камера до планшета, скажете ви ? А от і немає – адже планшет-те в нас буде віртуальний!

Якось раз, прочитавши про Eye toy від Sony [1], я думав про незвичайні способи введення даних у комп’ютер. У цей момент прийшла ідея спробувати самостійно зібрати щось подібне – благо веб-камера була під рукою. 

Отже, давайте подумаємо – що можна відслідковувати, маючи одну камеру? По-перше – положення якого-небудь об’єкта, що відрізняється від тла. При цьому він повинен рухатися тільки в якийсь площині – оскільки для відстеження координат у просторі буде потрібно дві камери. По-друге – ми може відслідковувати зміна кольору й форми об’єкта. На жаль, розпізнавання форми зажадає вивчення серйозних алгоритмів розпізнавання образів, і тому від цього краще відмовитися. Але навіть простого відстеження положення в просторі вже досить, щоб зібрати віртуальний планшет, якщо подбати про датчик натискання.

Віртуальний планшет

Отже, принцип роботи. Розташовуємо в поле зору камери білий аркуш паперу. Наклеюємо на кінчик ручки кольоровий маркер. Якщо переміщати ручку по аркушу паперу, те, розпізнаючи колір маркера на картинці, можна одержати координати ручки в площині аркуша. Якщо ці координати перетворювати в рух курсору на екрані, ми одержимо найпростіший віртуальний планшет.

Ручка з кольоровим маркером

Для стабільного розпізнавання необхідно, щоб колір, що відслідковується, значно відрізнявся від тла картинки. Крім того, цей колір повинен бути насиченим. Найкраще, що найшлося під рукою – стікери, використовувані для наклеювання цін на товари. Яскраво зелений колір відмінно контрастує із тлом картинки.

Беремо звичайну кулькову ручку.

Беремо один стікер, і відрізаємо тонку смужку.

Смужку намотуємо на стрижень ручки.

Наш «стайлус» готовий ! На картинці видне, що насичений колір буквально «горить», і тому буде стабільно распознаваться нашою програмою. Наша ручка не має датчика натискання, тому користувач повинен буде використовувати яку-небудь клавішу клавіатури, наприклад – лівий Ctrl.

Програмне забезпечення

Властиво, «апаратна» частина вже закінчена. Ми жорстко закріпили камеру так, щоб аркуш паперу займав як можна більшу частину картинки, і зробили «стилус». За допомогою програмного забезпечення камери ми можемо бачити, що коли ми малюємо на аркуші паперу, то на картинці з камери чітко видний кольоровий маркер. Нам потрібно написати програмне забезпечення, яке буде відслідковувати положення маркера на аркуші паперу, і переводити його рух у рух курсору миші на екрані комп’ютера. Відразу скажу, що читач, незнайомий із програмуванням, може пропустити два наступні роздягнула й відразу перейти до випробувань, тому що готове програмне забезпечення додається до статті.

У якості мови програмування поберемо Delphi, тому що для нього легко знайти готові компоненти для роботи з веб-камерою й кому-портом ( про це далі), і легко робити користувацький інтерфейс. Але, перш ніж запускати редактор, обговоримо алгоритми.

Розпізнавання кольору

З камери ми одержуємо картинку у форматі RGB (червоний, зелений, синій). Маючи ці дані, ми повинні розпізнати положення (координати) маркера на картинці. У мене не було бажання розбиратися зі складними алгоритмами розпізнавання образів, і тому я побрав найпростіший алгоритм: у циклі пройтися по всім пикселам картинки, вибрати з них ті, колір яких схожий на колір маркера, і знайти середні координати цих крапок (X,Y).

Порівнювати кольори краще в просторі YUV (Y – яскравість, UV – колір), ігноруючи яскравість (Y). Це для того, щоб умови висвітлення не впливали на стабільність розпізнавання.

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

На екрані настроювання кольору спостереження необхідно підібрати параметри "Розкид", "Чутливість" і колір спостереження такі, щоб у лівій картинці за кінчиком ручки чітко випливав червоний хрестик.

Потрібно почати з параметра "Чутливість". Установите його таким, щоб у правім вікні чітко виділяться кольором наш маркер. Кликніть курсором миші на зображенні маркера в правом або левом вікні. Програма запам’ятала необхідний колір, і починає збирати схожі крапки. Кількість схожих крапок відображається під міткою "Samples count:". У лівім вікні схожі крапки позначаються рожевим кольором. Необхідно підібрати параметр "Розкид" таким чином, щоб кількість схожих крапок приблизно рівнялася п’ятдесяти. Можливо, прийде відрегулювати розмір кольорового маркера на кінчику ручки й забрати сторонні предмети з поля зору камери.

Сподіваюся, що інші екрани Майстра не викличуть питань. Після завершення Майстра, наш "драйвер" сидить у трее. Включати/виключати планшет також можна клавішею "Scroll lock" клавіатури.

Висновок

Думаю, що якщо у вас коли-небудь виникало бажання купити собі який-небудь дешевенький планшет " для погратися", те для цих цілей вам цілком вистачить віртуального. Адже все, що потрібно – це закріпити камеру, наклеїти маркер на кінчик ручки, установити ПО – і планшет готовий.

Як варіант, можна малювати лазерною вказівкою (або брелоком) на стіні. Веб-камеру також можна замінити цифровим фотоапаратом, підключеним до відеовходу відеокарти. Особисто я пробував з Canon A70 + відеовхід на Geforce 4 TI4200, а також фотоапарат Agfa CL20 у режимі веб-камери.

Я не даремно назвав цей планшет "іграшкою". Йому ніколи не зрівнятися із професійними планшетами типу Wacom через низький дозвіл (а воно приблизно на 50% менше дозволи веб-камери), а також затримки, що виникає через затримку відеосигналу при оцифровке. Для порівняння скажу, що планшет Wacom Intuos працює в дозволі не менше 1024×768, розпізнає 512 ступенів натискання й нахил ручки. Крім того, багато камер міняють баланс білого при зміні умов висвітлення, через що колір спостереження змінюється й викликає проблеми зі стабільністю розпізнавання.

Матеріали по темі

< ![if !supportLists]>·         Програмне забезпечення для віртуального планшета http://www.deep-shadows.com/hax/vtablet.htm

< ![if !supportLists]>·         Sony Eyetoy http://www.us.playstation.com/Content/OGS/SCUS-97319/Site/

< ![if !supportLists]>·         FlighttpffantasyhttpISUALINPUTFORPEN-BASEDCOMPUTERS
gaijin

< ![if !supportLists]>·         YUV at Wiki pedia http://en.wikipedia.org/wiki/YUV

< ![if !supportLists]>·         Com port library for Delphttp

< ![if !supportLists]>·         tscap32fordelphihttpKLangtranslationpackage,DKSoftware,http://www.dk-softscap/

< ![if !supportLists]>·         Hax’s personal page http://www.deep-shadows.com/hax/