Ela.kpi.ua



НАЦ?ОНАЛЬНИЙ ТЕХН?ЧНИЙ УН?ВЕРСИТЕТ УКРА?НИ?КИ?ВСЬКИЙ ПОЛ?ТЕХН?ЧНИЙ ?НСТИТУТ?мен? ?ГОРЯ С?КОРСЬКОГО??нститут прикладного системного анал?зуКафедра математичних метод?в системного анал?зу?До захисту допущено?В. о. зав?дувача кафедри__________ О.Л. Тимощук?___?_____________20__ р.Дипломна роботана здобуття ступеня бакалавраз напряму п?дготовки 6.040303 ?Системний анал?з?на тему: ?Система вводу в в?ртуальн?й реальност??Виконав:студент IV курсу, групи КА-51Головко Андр?й В?кторович __________Кер?вник:доцент, к.т.н. Д?дковська М.В.__________Консультант з економ?чного розд?лу:доцент, к.е.н. Шевчук О.А.__________Консультант з нормоконтролю:доцент, к.т.н. Коваленко А.?. __________Рецензент:доцент, к.т.н. Заболотня Т.М.__________ Засв?дчую, що у ц?й дипломн?й робот? нема? запозичень з праць ?нших автор?в без в?дпов?дних посилань. Студент _____________Ки?в – 2019 рокуНац?ональний техн?чний ун?верситет Укра?ни?Ки?вський пол?техн?чний ?нститут ?мен? ?горя С?корського??нститут прикладного системного анал?зуКафедра математичних метод?в системного анал?зуР?вень вищо? осв?ти – перший (бакалаврський)Напрям п?дготовки (програма профес?йного спрямування) – 6.040303?Системний анал?з? (?Системний анал?з ? управл?ння?)ЗАТВЕРДЖУЮВ.о.зав?дувача кафедри__________ О.Л. Тимощук?___?_____________20__ р.ЗАВДАННЯна дипломну роботу студентуГоловку Андр?ю В?кторовичу1. Тема роботи ?Система вводу в в?ртуальн?й реальност??, кер?вник роботи к.т.н, доцент Д?дковська Марина В?тал??вна, затверджен? наказом по ун?верситету в?д ?25?травня 2019 р. №1353с.2. Терм?н подання студентом роботи 3. Вих?дн? дан? до роботи ___________________________________________________________________________________________________4. Зм?ст роботи _______________________________________________________________________________________________________________________________________________________________________ 5. Перел?к ?люстративного матер?алу (?з зазначенням плакат?в, презентац?й тощо) _____________________________________________________________________________________________________________________________________________________________________6. Консультанти розд?л?в роботиРозд?лПр?звище, ?н?ц?али та посада консультантаП?дпис, датазавдання видавзавданняприйнявЕконом?чнийШевчук О.А., доцент7. Дата видач? завдання Календарний план№ з/пНазва етап?в виконання дипломно? роботиТерм?н виконання етап?в роботиПрим?ткаСтудент ________________________________ (п?дпис)(?н?ц?али, пр?звище)Кер?вник роботи ________________________________ (п?дпис)(?н?ц?али, пр?звище)РЕФЕРАТДипломна робота м?стить: 77 с., 10 табл., 19 рис., 2 дод., 15 джерел.В?РТУАЛЬНА РЕАЛЬН?СТЬ, ДОПОВНЕНА РЕАЛЬН?СТЬ, КОМП'ЮТЕРНИЙ З?Р, ЦИФРОВА ОБРОБКА ЗОБРАЖЕНЬ, РОЗП?ЗНАВАННЯ ОБРАЗ?ВОб’?кт – в?деодан?, що надходять з пристрою граф?чного введення ?нформац?? користувача ? зображують жестов? команди, дан? користувачем.Мета роботи – створити систему клав?атурного вводу у в?ртуальн?й (доповнен?й) реальност? з використанням одного пристрою вводу граф?чно? ?нформац??.У робот? застосовано методи обробки цифрових зображення, розп?знавання образ?в та в?дстеження об'?кт?в.Результатом роботи ? створення системи, що дозволя? зд?йснювати введення у комп'ютер ?нформац?? жестами кист? рук з використанням в?деокамери. Для реал?зац?? клав?атурного введення в умовах обмеженого доступу до апаратних засоб?в було запропоновано власний метод жестового вводу користувачем. Актуальн?сть досл?дження поляга? у широкому застосуванн? в?ртуально? та доповнено? реальн?сть у галузях навчання, науки, дизайну та цифрових розваг. Створення та впровадження системи, що дозволя? виконувати введення з використанням лише одн??? в?деокамери, робить використання технолог?й в?ртуально? реальност? б?льш доступними.ABSTRACTThe theme: ?Virtual reality input system?Diploma work: 77 p., 10 tabl., 19 fig., 2 app., 15 references.VIRTUAL REALITY, AUGMENTED REALITY, COMPUTER VISION, DIGITAL IMAGE PROCESSING, OBJECT DETECTIONThe object of the study is video data from users’ graphical data input device, which shows users’ gesture commands.The purpose of the study is to create virtual (augmented) reality keyboard input system using single graphical data input device.The study uses digital image processing, object detection and object tracking methods. The results of the study is the creation of a system that allows you to enter the information into computer with hands gestures using the camcorder. In order to implement the keyboard input in conditions of limited access to hardware, an own method of user's manual input was proposed.The relevance of the study is a widespread use of virtual and augmented reality in the fields of education, science, design and digital entertainment. Developing and implementing the system that allow input using only one video camera, makes the use of virtual reality technologies more accessible. ЗМ?СТ TOC \o "1-3" \h \z \u СКОРОЧЕННЯ ТА УМОВН? ПОЗНАЧЕННЯ PAGEREF _Toc11364322 \h 8ВСТУП PAGEREF _Toc11364323 \h 9ПОСТАНОВКА ЗАДАЧ? PAGEREF _Toc11364324 \h 11РОЗД?Л 1 АНАЛ?З ЗАДАЧ? ПОБУДОВИ СИСТЕМИ ВВОДУ В В?РТУАЛЬН?Й РЕАЛЬНОСТ? PAGEREF _Toc11364325 \h 121.1Основн? поняття PAGEREF _Toc11364326 \h 121.2Анал?з актуальност? задач? побудови системи вводу в в?ртуальн?й реальност? PAGEREF _Toc11364327 \h 121.3 Анал?з ?снуючих п?дход?в до вир?шення задач? побудови системи вводу в в?ртуальн?й реальност? PAGEREF _Toc11364328 \h 151.4 Анал?з ?снуючих р?шень PAGEREF _Toc11364329 \h 161.5 Висновки PAGEREF _Toc11364330 \h 20РОЗД?Л 2 ОСНОВИ ПОБУДОВИ СИСТЕМИ ВВОДУ В В?РТУАЛЬН?Й РЕАЛЬНОСТ? PAGEREF _Toc11364331 \h 212.1Анал?з основ задач? побудови системи вводу в в?ртуальн?й реальност? PAGEREF _Toc11364332 \h 212.1.1Первинна обробка в?деосигналу PAGEREF _Toc11364333 \h 222.1.2Вид?лення образу руки PAGEREF _Toc11364334 \h 242.1.3Знаходження опукло? оболонки множини PAGEREF _Toc11364335 \h 252.2Методи побудови системи вводу в в?ртуальн?й реальност? PAGEREF _Toc11364336 \h 292.3Критер?? якост? роботи системи PAGEREF _Toc11364337 \h 312.4Пор?вняльний анал?з ?снуючих п?дход?в до вводу в в?ртуальн?й реальност? PAGEREF _Toc11364338 \h 322.5Алгоритм роботи системи вводу в в?ртуальн?й реальност? PAGEREF _Toc11364339 \h 362.6Висновки PAGEREF _Toc11364340 \h 40РОЗД?Л 3 АНАЛ?З АРХ?ТЕКТУРИ ПРОГРАМНОГО ПРОДУКТУ PAGEREF _Toc11364341 \h 413.1 Об?рунтування вибору платформи та мови програмування PAGEREF _Toc11364342 \h 413.2 Опис вх?дних даних PAGEREF _Toc11364343 \h 423.3 Основн? техн?чн? вимоги до системи PAGEREF _Toc11364344 \h 433.4 Анал?з арх?тектури програмного продукту PAGEREF _Toc11364345 \h 443.5 Анал?з якост? роботи системи вводу в в?ртуальн?й реальност? PAGEREF _Toc11364346 \h 473.5.1 Анал?з та пор?вняння метод?в вводу за введеними критер?ями PAGEREF _Toc11364347 \h 473.5.2 Анал?з та пор?вняння метод?в у задач? розп?знавання руки PAGEREF _Toc11364348 \h 503.6 Висновки PAGEREF _Toc11364349 \h 52РОЗД?Л 4 ФУНКЦ?ОНАЛЬНО-ВАРТ?СНИЙ АНАЛ?З ПРОГРАМНОГО ПРОДУКТУ PAGEREF _Toc11364350 \h 544.1 Постановка задач? техн?ко-економ?чного анал?зу PAGEREF _Toc11364351 \h 544.1.1Об?рунтування функц?й програмного продукту PAGEREF _Toc11364352 \h 554.1.2Вар?анти реал?зац?? основних функц?й PAGEREF _Toc11364353 \h 564.2 Об?рунтування системи параметр?в ПП PAGEREF _Toc11364354 \h 584.1.3Опис параметр?в PAGEREF _Toc11364355 \h 584.1.4К?льк?сна оц?нка параметр?в PAGEREF _Toc11364356 \h 594.1.5Анал?з експертного оц?нювання параметр?в PAGEREF _Toc11364357 \h 614.3 Анал?з р?вня якост? вар?ант?в реал?зац?? функц?й PAGEREF _Toc11364358 \h 664.4 Економ?чний анал?з вар?ант?в розробки ПП PAGEREF _Toc11364359 \h 684.5 Виб?р кращого вар?анта ПП техн?ко-економ?чного р?вня PAGEREF _Toc11364360 \h 734.6 Висновки PAGEREF _Toc11364361 \h 74ВИСНОВКИ PAGEREF _Toc11364362 \h 75ПЕРЕЛ?К ДЖЕРЕЛ ПОСИЛАННЯ PAGEREF _Toc11364363 \h 76ДОДАТОК А Л?СТИНГ ПРОГРАМИ PAGEREF _Toc11364364 \h 78ДОДАТОК Б ?ЛЮСТРАТИВН? МАТЕР?АЛИ ДЛЯ ДОПОВ?Д? PAGEREF _Toc11364365 \h 86СКОРОЧЕННЯ ТА УМОВН? ПОЗНАЧЕННЯAR – augmented reality CV – сomputer visionFOV – field of view FPS – frames per second HD – high-definitionHMD – рead-mounted display HSV –hue, saturation, value HTC – High Tech Computer Corporation IPython – interactive pythonOpenCV – Open Source Computer Vision Library RGB – red, green, blue UX – user experience VR – virtual reality ВР – в?ртуальна реальн?сть ВЧП – виправлена частота помилокДР – доповнена реальн?сть МРВ – м?н?мальна рядкова в?дстань ОС – операц?йна системаПК – персональний комп'ютерПП – програмний продуктСК – середньоквадратичне в?дхилення СНХ – к?льк?сть сл?в на хвилину ФВА – функц?онально-варт?сний анал?зЧВДПН – час в?дгуку до першого правильного натискання клав?ш? ЧП – частота помилокВСТУПЗ розвитком цифрових технолог?й розробники апаратного та програмного забезпечення виявляють все б?льший ?нтерес до технолог?й в?ртуально? та доповнено? реальн?сть, вбачаючи в них нов? можливост?, заснован? на прост?й користувацьк?й зац?кавленост? або д?йсно нових вражень в?д користування цифровими пристроями. Нараз? вже створено багато пристро?в та програмних продукт?в, призначених для р?шення велико? к?лькост? р?зноман?тних задач. Це призвело до розповсюдження VR технолог?й у багатьох сферах. Вже зараз ц? технолог?? усп?шно використовуються у галузях навчання, науки, дизайну та електронних розваг. Проте ?снуюч? просунут? системи, що працюють з в?ртуальною реальн?стю, ? дуже складними, як у програмному, так ? в апаратному план?. Останн?, призводить до зростання ц?ни пристро?в VR та ?х використанн? обмежують область застосування. Так? пристро? використовують дек?лька камер та ?нших датчик?в, а ?нод? й св?тлов?дбиваюч? м?тки на об'?ктах, для реал?зац?? вза?мод?? м?ж ф?зичними об'?ктами та в?ртуальною реальн?стю. Все це породжу? складност? користуванн? такими пристроями.Створення та впровадження системи, що дозволя? виконувати введення з використанням лише одн??? в?деокамери, дозволя? зробити використання технолог?й в?ртуально? реальност? б?льш доступними. Зменшення к?лькост? датчик?в також п?двищу? моб?льн?сть пристрою, що позитивно вплива? на його моб?льн?сть. Це дозволя? ще б?льше розширити область застосування в?ртуально? реальност?.Отже, мета дано? роботи – створити систему клав?атурного вводу у в?ртуальн?й (доповнен?й) реальност? з використанням одного пристрою вводу граф?чно? ?нформац??.Робота склада?ться з чотирьох розд?л?в. У першому розд?л? проводиться анал?з задач? побудови системи вводу в в?ртуальн?й реальност?, а саме: досл?джу?ться предметна область ц??? задач?, проводиться анал?з актуальност? задач? та анал?з ?снуючих п?дход?в до ?? вир?шення.Другий розд?л присвячено розгляду математичних основ поставлено? задач? та методам ?? вир?шення. Також у цьому розд?л? присутн?й анал?з метод?в побудови систем вводу в в?ртуальн?й реальност?, пропонуються показники для оц?нки систем вводу та проводиться ?х пор?вняння за запропонованими показниками.Трет?й розд?л м?стить анал?з арх?тектури розроблено? системи вводу. Також, у цьому розд?л? наводиться анал?з якост? роботи системи та ?? пор?вняння з ?ншими системами за введеними показниками якост?.Останн?й розд?л м?стить ф?нансово-економ?чний анал?з програмного продукту.ПОСТАНОВКА ЗАДАЧ?Побудувати систему для розп?знавання кист? користувача та в?дсл?дковування ?? м?сцезнаходження на зображенн? з використанням р?зних п?дход?в. Створити зображення в?ртуально? клав?атури на зображенн? з в?деокамери для подальшо? вза?мод?? користувача з нею.Реал?зувати алгоритм жестово? вза?мод?? користувача з в?ртуальною клав?атурою. З?брати статистичн? дан? для анал?зу якост? роботи системи при р?зних п?дходах. Провести пор?вняння реал?зовано? систему з ?ншими методами вводу.РОЗД?Л 1 АНАЛ?З ЗАДАЧ? ПОБУДОВИ СИСТЕМИ ВВОДУ В В?РТУАЛЬН?Й РЕАЛЬНОСТ?Основн? поняття Вв?д (введення) – зовн?шня в?дносно системи под?я, що будь-яким чином модиф?ку? систему. Пристр?й вводу (введення) – пристр?й, що використову?ться для введення даних до комп'ютера п?д час його роботи. В?ртуальна реальн?сть?(англ.?Virtual reality, VR) – р?зновид?реальност??в форм? тотожност??матер?ального?й??деального, що створю?ться та ?сну? завдяки ?нш?й реальност?. У вужчому розум?нн??–??люз?я?д?йсност?, створювана за допомогою?комп'ютерних систем, як? забезпечують зоров?, звуков? та ?нш? в?дчуття.Досв?д користування?(англ.?User Experience, UX) – це те, що людина в?дчува? при?користуванн? продуктом, системою чи серв?сом (послугою). Основними об'?ктами досл?дження ? враження, емоц?? та користь, отриман? в?д вза?мод?? з продуктом. Також досв?д користування включа? практичн?сть, простоту використання та швидкод?ю системи. Досв?д користування ма? суб'?ктивний характер (бо пов'язаний з ?ндив?дуальними в?дчуттями ? думкою) ? може зм?нюватись з часом при зм?н? обставин.Аватар – граф?чне представлення користувача, двовим?рне зображення або тривим?рна модель.Анал?з актуальност? задач? побудови системи вводу в в?ртуальн?й реальност?З розвитком цифрових технолог?й розробники апаратного та програмного забезпечення виявляють все б?льший ?нтерес до технолог?й в?ртуально? та доповнено? реальн?сть, вбачаючи в них нов? можливост?, заснован? на прост?й користувацьк?й зац?кавленост? або д?йсно нових вражень в?д користування цифровими пристроями. Нараз? вже створено багато пристро?в та програмних продукт?в, призначених для р?шення велико? к?лькост? р?зноман?тних задач. Це призвело до розповсюдження VR технолог?й у багатьох сферах. Вже зараз ц? технолог?? усп?шно використовуються у галузях навчання, науки, дизайну та електронних розваг (таблиця 1.1). Таблиця 1.1СфераЗастосуванняНавчанняМоделювання складно? чи небезпечно? д?яльност?, наприклад, керування транспортом, х?рург?чних операц?й, збройних сутичок.НаукаВ?зуал?зац?я внутр?шньо? будови об'?кт?в, молекулярних ? атомних структур. Зокрема в медицин? в?ртуальна реальн?сть забезпечу? дистанц?йне ? точне керування ?нструментами.ДизайнПобудова й редагування тривим?рних моделей механ?зм?в, споруд тощо; симуляц?я та досл?дження р?зних вплив?в на них.РозвагиВ?ртуальн? тури, екскурс??, в?део?гри з?ефектом занурення?в ?гровий св?т.Безпека данихРобота з персональними та корпоративними даними, що мають обмежений доступ, може в?дбуватися в в?ртуальн?й реальност? для забезпечення захисту в?д сторонн?х очей.Проте ?снуюч? просунут? системи, що працюють з в?ртуальною реальн?стю, ? дуже складними, як у програмному, так ? в апаратному план?. Останн?, призводить до зростання ц?ни пристро?в VR та ?х використанн? обмежують область застосування. Так? пристро? використовують дек?лька камер та ?нших датчик?в, а ?нод? й св?тлов?дбиваюч? м?тки на об'?ктах, для реал?зац?? вза?мод?? м?ж ф?зичними об'?ктами та в?ртуальною реальн?стю. Все це породжу? складност? та перепони для користування такого роду пристроями.Створення та впровадження системи, що дозволя? виконувати введення з використанням лише одн??? в?деокамери, дозволя? зробити використання технолог?й в?ртуально? реальност? б?льш доступними. Зменшення к?лькост? датчик?в також п?двищу? моб?льн?сть пристрою, що позитивно вплива? на його моб?льн?сть. Це дозволя? ще б?льше розширити область застосування в?ртуально? реальност?.Головн? диспле? (HMD) для в?ртуально? реальност? давно стали доступними для споживчого ринку. Сьогодн? споживач? в основному використовують VR для розважальних програм, включаючи 3D-ф?льми та ?гри. Велике поле зору (FOV), висока в?зуальна достов?рн?сть, а також в?зуальна та слухова ?нкапсуляц?я може приносити д?йсно захоплююч? враження з майже безмежними можливостями. Геймпади та нов? пристро? для в?дстеження вх?дних даних використовуються для вза?мод?? з програмами та ?грами.Хоча споживач? в даний час використовують VR для розваг, був запропонований широкий ряд серйозних проект?в, як? в даний час досл?джуються промисловими та науковими колами.Системи VR також мають великий потенц?ал для створення комфортних робочих або навчальних умов для оф?сних прац?вник?в або студент?в. Пасажири в по?здах ? автомоб?лях або люди, що працюють з дому, можуть використовувати HMD, щоб сид?ти практично в ?х звичному робочому середовищ? або дистанц?йно в?дв?дувати д?лов? зустр?ч?.Зовн?шн? в?зуальн? та слухов? збудники можуть повн?стю блокуватися, що сприя? продуктивн?й та ц?леспрямован?й робот?. Кр?м того, VR дозволя? створювати абсолютно нов? середовища з величезним простором тривим?рного в?дображення в будь-якому напрямку. ?нтерфейси користувача VR б?льше не пов'язан? з прямокутними двовим?рними дисплеями, обмеженими розм?рами наших стол?в. А майбутн? системи VR можуть повн?стю зам?нити ?снуюч? парадигми вза?мод?? ? дозволяють п?двищити продуктивн?сть роботи.Нин?шн? HMD забезпечують глибоке занурення завдяки нов?тн?м технолог?ям. Вони св?домо обмежують зв'язок з реальним св?том, створюючи високий р?вень занурення ? сильне в?дчуття присутност?. На жаль, в?зуальне занурення не т?льки зам?ню? збудники реального св?ту, а й робить неможливим побачити ф?зичну клав?атуру ? мишу, як? необх?дн? для вза?мод?? з великою пропускною здатн?стю. Наб?р на клав?атур? – найб?льш часто застосовуваний текстовий метод вводу для наст?льних комп'ютер?в. Щоб дозволити користувачам працювати ефективно як у в?ртуальному середовищ?, так ? у реальному оф?с?, вони вимагають високопродуктивних пристро?в введення. Для введення тексту було запропоновано р?зн? р?шення занурення у VR. Вони охоплюють р?шення вказування та натискання з в?дстежуваними контролерами, ручним письмом на планшет? або мови. ?нш? р?шення накладають в?ртуальне середовище на в?деопот?к з реального св?ту. Жодне з цих р?шень не може полегшити задачу високопродуктивного введення тексту, аналог?чного введення тексту у реальному св?т?. Звичайно, користувач може зн?мати HMD щоразу при необх?дност? ввести текст, однак це швидко ста? незручним ? руйну? ефект занурення.1.3 Анал?з ?снуючих п?дход?в до вир?шення задач? побудови системи вводу в в?ртуальн?й реальност?Розглянемо найб?льш поширен? технолог?? створення в?ртуально? реальност?.Окуляри й шоломи в?ртуально? реальност? переважно складаються з двох невеликих екран?в, розташованих перед кожним оком. Екрани показують дещо зм?щен? одне в?дносно ?ншого зображення того самого об'?кта, створюючи ?люз?ю тривим?рного простору. В шоломах можуть також м?ститися навушники, акселерометри, датчики положення. Так? пристро? можуть бути самост?йними (наприклад AuraVisor), або ж додатковими до персональних комп'ютер?в чи смартфон?в (Oculus Rift, HTC Vive, Playstation VR, Google Cardboard). У раз? п?дключення до комп'ютера сл?д звернути увагу на потужн?сть в?деокарти: для комфортного перебування у в?ртуальн?й реальност? необх?дно п?дтримувати FPS (к?льк?сть кадр?в в секунду) не нижче 60. Як правило, для програм та ?гор з сучасною граф?кою необх?дн? в?деокарти останн?х моделей, варт?сть яких нер?дко перевищу? варт?сть шолома (цей факт ?стотно спов?льню? поширення технолог??).К?мнати в?ртуально? реальност??– спец?ально обладнаний прост?р, де створене комп'ютером зображення ц?лком транслю?ться на його ст?ни завдяки дисплеями чи проекторам.Рукавиц? в?ртуально? реальност? – дозволяють в?дсл?дковувати положення рук ? пальц?в, щоб симулювати ман?пуляц?? з в?ртуальними об'?ктами, н?би вони справжн?.Контролери з? зворотн?м зв'язком?– пристро?, що за допомогою кнопок, ст?к?в, датчик?в положення тощо, дозволяють симулювати ман?пуляц?? з в?ртуальними об'?ктами. Завдяки в?брац?? можуть передавати тактильн? в?дчуття.1.4 Анал?з ?снуючих р?шеньОстанн?м часом все б?льше доводиться з?штовхуватися з задачами, що в?дносяться до вза?мод?? з в?ртуальною реальн?стю. З появою першо? верс?? окуляр?в Oculus Rift DK1 (рисунок 1.1) на нов?й хвил? ц?кавост? до VR в?дразу ж п?днялися й питання систем введення – клав?атури й миша виявилися фактично не корисними ?нструментами, а управл?ння через наведення погляду – недостатн?м способом вза?мод?? з елементами оточення й ?нтерфейсу. Рисунок 1.1 – Зображення в?ртуальних рук у додатку Oculus PassthroughУ моб?льному VR в?дм?нно прижився тачпад, який можна побачити в моделях гарн?тур Samsung Gear VR, а також бездротов? джойстики. Але в стац?онарному VR, кр?м використання класичних джойстик?в (без цих пристро?в не об?йтися, так як в ц?лому ряд? ?грових жанр?в вони ? оптимальним р?шенням ? в VR), ?сну? набагато б?льше можливостей для систем введення. Зараз вс? з трьох найб?льших розробник?в VR: Oculus VR, HTC Valve та Sony, – використовують разом з? сво?ми окулярами контролери, чутлив? до руху. Положення самих окуляр?в ? контролер?в при цьому можуть визначатися в простор?.Oculus та Sony сконцентрувалися на реал?зац?? трек?нгу шолома ? контролер?в б?льше розрахованому на користувача, що знаходиться в сидячому або стоячому положенн?, а система трек?нгу Vive (рисунок 1.2) працю? на площ? до 4.5 на 4.5 метра, дозволяючи користувачев? перем?щатися в межах позначеного простору.Рисунок 1.2 – система HTC ViveТепер розглянемо ?снуюч? альтернативи та те, наск?льки вони гарн? з точки зору природност? ? синхрон?зац?? саме для к?нцевого широкого кола споживач?в.1.4.1 Оптичн? датчики захоплення др?бно? моторики.В даному випадку ? к?лька проблем використання под?бного р?шення, ось одн? з найб?льш критичних:Для вза?мод?? з в?ртуальним середовищем руки потр?бно тримати завжди перед датчиком - перед обличчям користувача в досить обмежен?й област?. Це вкрай неприродньо, а також ф?зично важко протягом тривалого пер?оду роботи.Поточн? алгоритми визначення кистей рук далек? в?д ?деалу, п?д деякими кутами руки взагал? фактично перестають визначатися, пост?йн? проблеми з в?дстеженням руки сильно пог?ршують досв?д використання р?шення в ц?лому.1.4.2 РукавичкиВ практичному план? рукавички хоч ? можуть вир?шити багато питань з датчиками вище, проте тут ? ?нш? проблеми з UX та щоденним використанням – р?зн? розм?ри рук у р?зних людей, питання г?г??ни, додатковий час на п?дготовку перед використанням, саме в?дчуття пост?йного знаходження в рукавичках при тепл?й погод? ? нав?ть просто наявн?сть провод?в, як? обвивають руки.1.4.3 Платформи перем?щення? р?зн? техн?чн? р?шення, що дозволяють ?м?тувати природне перем?щення. Наприклад, Virtuix Omni. Свою аудитор?ю ц? пристро? знайти ц?лком можуть, але в поточному вигляд? вс? ?снуюч? платформи погано придатн? саме для широкого кола споживач?в, щоб бути частиною продуктово? верс?? самих очок. Гром?здка установка, вимоги зн?мати взуття або мати спец?альне взуття для використання на платформ?, час на налаштування перед використанням, досить вузька сфера застосування пристрою – це лише найочевидн?ш? причини, чому широке поширення ц? платформи в наявному вигляд? навряд отримають.1.4.4 ПерспективиВ?домим альтернативним вар?антам введення в VR ще потр?бно вир?шити безл?ч питань, щоб вони були так само одночасно ун?версальн? ? зручн? для к?нцевого користувача, як ? контролери, що будуть поставлятися разом з продуктовими верс?ями VR окуляр?в. Ймов?рн?сть того, що проблеми будуть вир?шен? ? ? для деяких аналог?в вона досить висока (особливо це стосу?ться оптичних датчик?в для трек?нгу кистей рук). Але ? поточн? можливост? окуляр?в ? супутнього устаткування далеко не ?деальн?.1.5 ВисновкиУ першому розд?л? було виконано анал?з задач? побудови системи вводу в в?ртуальн?й реальност?. Зокрема було роз?брано основн? поняття предметно? област?, досл?джено питання актуальност? задач? побудови системи вводу в в?ртуальн?й реальност?, проведено огляд ?снуючих п?дход?в до вир?шення задач? побудови системи вводу в в?ртуальн?й реальност? та анал?з ?снуючих р?шень здач? побудови системи вводу в в?ртуальн?й реальност?.Не зважаючи на високу та весь час зростаючу популярн?сть технолог?й в?ртуально? реальност?, актуальн?сть досл?джень у ц?й сфер? лише зроста?, оск?льки знаходяться усе нов? галуз? та п?дходи для застосування р?шень з використанням в?ртуально? реальност?.Проте б?льш?сть р?шень проблеми вводу у в?ртуальн?й реальност? ? дуже дорогими, незручними або неефективними. Перспективним ? розробка систем, що здатн? в?дстежувати об'?кти реального св?ту за допомогою оптичних датчик?в для реал?зац?? вза?мод?? користувача з ВР, оск?льки б?льш?сть персональних комп'ютер?в та ?нших пристро?в мають вбудовану камеру. ?снуюч? оптичн? системи зазвичай використовують в?д к?лькох до к?лькох десятк?в камер ? датчик?в, що знову ж таки ускладню? розповсюдження та використання таких пристро?в. РОЗД?Л 2 ОСНОВИ ПОБУДОВИ СИСТЕМИ ВВОДУ В В?РТУАЛЬН?Й РЕАЛЬНОСТ? Анал?з основ задач? побудови системи вводу в в?ртуальн?й реальност?Загалом задача поляга? в обробц? в?деосигналу, який представля? собою посл?довн?сть зображень сталого розм?ру й типу. Кожне зображення склада?ться з к?лькох канал?в, в?дпов?дно до кол?рно? схеми, при чому кожен канал ? матрицею розм?рн?стю, що дор?вню? розм?ру зображення, Елементами матриц? у загальному випадку ? д?йсн? числа, а у випадку цифрового зображення зазвичай використовуються ц?л? числа в?д 0 до 255.П?д обробкою зображення будемо розум?ти застосування до даного зображення певно? посл?довност? перетворень, що в результат? ма? привести до вид?лення з в?деосигналу команди, посл?довност? команд або ?х в?дсутност?, що користувач да? за допомогою жест?в через пристр?й вводу граф?чно? ?нформац??. Для подальшого розгляду задач?, роз?б'?мо ?? на наступн? етапи: первинна обробка сигналу з пристрою вводу граф?чно? ?нформац??, вид?лення та обробка образу руки, обробка жесту користувача.На етап? первинно? обробки сигналу застосовуються методи ф?льтрац?? зображення, роботи з кольором тощо. На етап? вид?лення образу руки до попередньо обробленого в?деопотоку застосовуються морфолог?чн? перетворення зображення, зокрема дилац?я та ероз?я для вид?лення на зображенн? областей, що в?дпов?дають людському т?лу та кистей рук зокрема. На останньому етап? обробки жесту буду?ться модель геометрична модель руки, що врахову? положення пальц?в в?дносно одне одного та кист?, а також ?нш? особливост? форми рук. Первинна обробка в?деосигналуРозмиття Гауса – метод ф?льтрац?? зображення за допомогою функц?? Гауса, який призводить до розмивання зображення. Для перетворення зображення, до нього застосову?ться ф?льтр Гауса, який пот?м використову?ться у якост? ядра для виконання операц?? згортки. В одновим?рному випадку ф?льтр Гауса представля? собою матрицю коеф?ц??нт?в:Gi=α*e-i-k-1222*σ2,де i=0..k-1,k – розм?рн?сть ядра,α – коеф?ц??нт, що задовольня? р?вняння:iGi=1.Для застосування розмиття Гаусса у багатовим?рному випадку доц?льно застосовувати одночасно в?дпов?дну к?льк?сть одновим?рних ф?льтр?в, оск?льки в такому раз? сумарна к?льк?сть коеф?ц??нт?в у вс?х ф?льтрах менша, н?ж у випадку одного багатовим?рного ядра.Кол?рна модель?– модель представлення?кольор?в?набором кол?рних компонент, тобто кортежем з к?лькох чисел (найчаст?ше трьох-чотирьох).RGB?(англ.?Red, Green, Blue)?—?кол?рна модель, що використову? три канали, що в?дпов?дають червоному, зеленому та синьому кольорам.HSV?(англ. Hue, Saturation, Value) –?кол?рна модель, заснована на таких характеристиках кольору: кол?рному тон?, насиченост? ? значенн? кольору, або яскравост?.Здеб?льшого робота з кольоровими граф?чними зображеннями викону?ться з використанням кол?рно? модел? RGB. Проте у задачах розп?знавання образ?в, зокрема при розп?знаванн? людських частин т?ла, широко використову?ться кол?рна модель HSV. Тому для подальшо? обробки цифрового зображення викону?ться перех?д кол?рно? модел? в?д RGB до HSV.Нехай R, G та B – в?дпов?дн? компоненти кол?рно? модел? RGB. Аналог?чно, H, S та V – в?дпов?дн? компонети кол?рно? модел? HSV.У випадку 8-б?тного зображення, R, G та B приводяться до формату з плаваючою комою ? нормуються для належност? до пром?жку в?д 0 до 1.V←maxR,G,B,S←V-minR,G,BV, V≠0 0, V=0,H←60G-BV-minR,G,B, V=R,120+60B-RV-minR,G,B,V=G,240+60(R-G)V-min?(R,G,B),V=B,Якщо H<0, тод? H←H+360. На виход? отриму?ться 0≤V≤1, 0≤S≤1,0≤H≤360.Дал? значення конвертуються в?дпов?дно до використовуваного типу даних. У випадку 8-б?тного зображення застосову?ться перетворення:V←255V,S←255S,H←H2.Вид?лення образу рукиНалежн?сть зображення src до д?апазону, заданому нижньою межею lowerb та верхньою межею upperb перев?ря?ться за наступною формулою:dstI=jlowerbIj≤srcIj≤upperbIj,де j – канал зображення,I – координати точки зображення.В результат? отриму?ться зображення dst, що склада?ться з? значень 0 або 255, що визначають належн?сть ?лемент?в вх?дного зображення src до паралелеп?педа ?з заданими межами. Дал?, для в?дф?льтровування фонових шум?в, застосовуються морфолог?чн? перетворення: розширення та розмиття.Морфолог?чне перетворення – деяка проста операц?я над формою зображення. Зазвичай викону?ться над б?нарним зображенням. Для виконання морфолог?чного перетворення необх?дно саме зображення та структурний елемент, або ядро, що визнача? природу перетворення. Двома базовими морфолог?чними перетвореннями ? розширення (дилац?я) та звуження (ероз?я). Дилац?я зб?льшу? област? на зображенн?. Перетворення дилац?? використову? заданий структурний елемент, що визнача? форму област?, на яку в?дбуватиметься розширення. Операц?я дилац?? викону?ться за наступною формулою:dstx,y=maxx',y': kernel x',y'≠0src(x+x',y+y'),де src – вх?дне зображення,kernel – структурний елемент, який явля? собою матрицю задано? розм?рност?,dst – вих?дне зображення, отримане внасл?док застосування дилац??,x,y та x',y' – координати деяких точки на в?дпов?дних зображеннях.Ероз?я зменшу? област? зображення. Перетворення ероз?? використову? заданий структурний елемент, що визнача? форму област?, на яку в?дбуватиметься звуження. Операц?я ероз?? викону?ться за наступною формулою:dstx,y=minx',y':kernel x',y'≠0srcx+x',y+y',де src – вх?дне зображення,kernel – структурний елемент, який явля? собою матрицю задано? розм?рност?,dstx,y – результат перетворення п?кселя, заданого координатами (x,y).Знаходження опукло? оболонки множиниАбсолютною р?зницею dst м?ж двома зображеннями src1 та src2 одн??? розм?рност? та типу ма?ться на уваз? зображення т??? ж розм?рност? й типу, отримане наступним чином:dstI=src1I-src2(I) ,де I – вектор, що зада? координати точки на зображенн?. Розглянемо алгоритм Скланського 1982 року, що призначений для знаходження опукло? оболонки множини. Цей алгоритм ? модиф?кац??ю алгоритму, запропонованого цим же автором у 1972 роц?.Алгоритм склада?ться з двох частин. Перша частина призначена для побудови максимального багатокутника (монотонного у вертикальному ? горизонтальному напрямках) (рисунок 2.1) за простим багатокутником. Рисунок 2.1Друга частина поляга? у застосуванн? алгоритму Скланського 1972 року, який гарантовано працю? для результату першо? частини алгоритму, оск?льки доведено, що цей алгоритм працю? для максимальних багатокутник?в.Ф?гура u, що м?ститься у багатокутнику P, назива?ться максимальною, якщо вона не м?ститься у жодн?й ?нш?й ф?гур? множини P. При пошуку покриття багатокутника доц?льно розглядати максимальн? ф?гури, оск?льки кожна не максимальна ф?гура може бути зам?нена максимальною ф?гурою, що м?стить ??, не впливаючи при цьому на розм?р покриття.Покриття багатокутника – це множина прим?тивних ф?гур (наприклад квдрат?в), об'?днання яких дор?вню? багатокутнику. Задача покриття багатокутника – це задача пошуку покриття з найменшою к?льк?стю ф?гур для даного багатокутника.Простий багатокутник – ф?гура, що склада?ться з неперетинаючихся в?др?зк?в, з'?днаних попарно з утворенням замкненого шляху. В?дпов?дно, багатокутник, в якого ? сторони, що перетинаються, не ? простим.Видимим багатокутником або областю видимост? точки p на площин?, на як?й м?стяться перешкоди, називають необмежену багатокутну область ус?х точок площини, що видим? з p.Варто зазначити, було доведено, що даний алгоритм не ? точним. Проте в?н ? достатньо зрозум?лим та простим, що ? його перевагою у пор?внянн? з точними алгоритмами.?дея першо? частини наступна. Першим кроком алгоритму ? пошук крайн?х вершин у горизонтальному та вертикальному напрямках. Дал?, площина розд?ля?ться наступним чином, зображеним на рисунку 2.2.Рисунок 2.2T, B, L, R позначають, в?дпов?дно, верхню, нижню, л?ву та праву крайн? вершини. Ус? точки простого багатокутника знаходяться у прямокутнику. ?дея поляга? у створенн? монотонних ламаних всередин? областей Ri.Розглянемо на приклад? R1. Нехай дв? вершини i та i+1 вже додан? до монотонно? ламано? з початком у L. Розд?лимо площину на три област?, як показано на рисунку 2.3. Рисунок 2.3Наступною розгляда?ться вершина i+2 за наступною схемою:якщо i+2 не належить R1, i+2 в?дкида?ться, ?накше, якщо i+2 належить A3, i+2 залиша?ться у ламан?й ? процедура алгоритму продовжу?ться,?накше, якщо:{i+2 ∈A2} ? ({i+2 ∈ A1} ? {i+2 знаходиться над i+1} ∧∧{було в?дкинуто вершину на кроц? в) на безпосередньо попередн?й ?терац??),то i+2 в?дхиля?ться,?накше, якщо i+2 належить A1, то i+1 в?дкида?ться.Нарешт?, якщо на кроц? в) виявля?ться, що i+2 на наступну ?терац?ю потрапля? у рол? i+1, та пункт г) викону?ться, то вершина i береться у якост? i+1.Не зважаючи на те, що деяк? вершини у процес? виконання алгоритму можуть бути в?дкинут?, вони використовуються при подальших обчисленнях. Методи побудови системи вводу в в?ртуальн?й реальност?Для будь яко? ф?зично? клав?атури засновано? на текстовому ввод?, що викону?ться користувачем, в першу чергу йому необх?дно локал?зувати й д?статися до клав?атури. Локал?зац?я може в?дбуватися або в?зуально, або на дотик з використанням властивостей поверхн? клав?атури. Пристро? в?ртуально? реальност?, що розташовуються на голов? користувача, не дають змогу користувачу локал?зувати будь-як? ф?зичн? перифер?йн? пристро?, оск?льки повн?стю в?дгороджують користувача в?д реального св?ту. Система, що дозволя? друкувати без зусиль у в?ртуальн?й реальност? ма? допомагати користувачу легко розум?ти, де знаходиться клав?атура по в?дношенню до пальц?в рук. Тому зусилля по розробц? оптичних систем для вза?мод?? з ВР в основному направлен? в цьому напрямку. Проте, з ?ншо? сторони, така система потребу? б?льшо? к?лькост? перифер?йних пристро?в, що обмежу? область застосування та призводить до удорожчання пристро?в, сум?сних з використанням под?бних систем. В?дпов?дно до [10], погляд людей, що друкують без дотику, до 1.2 раз впродовж речення м?ж зображенням та клав?атурою. Вони витрачають до 41% ?х уваги на погляди на клав?атуру. Таким чином, ? необх?дним точне представлення клав?атури та рук у в?ртуальн?й реальност?.Для досл?дження р?зних аспект?в набору тексту у в?ртуальному середовищ? розглянемо пристр?й в?ртуально? реальност?, побудований на баз? Oculus Rift Consumer Version 1 (CV 1). Камера Oculus в?дстежу? положення гарн?тури з комплекту. Також до пристрою входить система в?дстеження рух?в OptiTrack 13W, яка склада?ться з восьми камер та програмне забезпечення для виявлення рух?в Motive 1.10 для надточного розп?знавання пальц?в та клав?атури. До кожно? руки при?днуються св?тлов?дбиваюч? м?тки розм?ром 4 мм, що розм?щуються в анатом?чних ор??нтирах рух. Це дозволя? точно в?дстежувати вс? суглоби та к?стки рук. П?д час запуску програми, м?тки плавно анал?зуються та автоматично в?дображаються на в?ртуальному скелет?. У випадку втрати тра?ктор?? м?тки впродовж набору тексту внасл?док загородження ?? ?ншим предметом, використовуване програмне забезпечення автоматично п?дхоплю? ?? при перш?й же появ? на зображенн? знову. У той час, поки м?тка не видна, вона в?дстежу?ться в?дпов?дно з наближення, заснованим на в?дстеженн? найближчих суглоб?в. Вид м?ток та системи камер зображено на рисунку 2.4.Рисунок 2.4Дня введення тексту в даному випадку використову?ться бездротова клав?атура Apple. Чотири св?тлов?дбиваюч? м?тки при?днано до верхньо? частини клав?атури, щоб дозволити зм?нювати положення клав?атури в процес? роботи програми та комфортно набирати текст. В?дпов?дно до ф?зичного м?сцезнаходження та натискань у в?ртуальному середовищ? вимальову?ться точна та ?нтерактивна в?ртуальна коп?я клав?атури.Даний пристр?й використову? програмне забезпечення OptiTrack NetNat SDK для потоково? передач? даних про м?сцезнаходження к?сток, суглоб?в ? клав?атури в режим? реального часу. Додаток ? в?ртуальне середовище реал?зовано за допомогою ?грового двигуна Unity 5.4.0.Пристр?й дозволя? користувачам бачити в?ртуальне представленняф?зично? клав?атури та власних рук. Критер?? якост? роботи системиК?льк?сть сл?в на хвилину (СНХ)Середня продуктивн?сть друку раху?ться у словах на хвилину, де кожне слово ма? довжину р?вно у п'ять символ?в. Учаснику тестування пропону?ться ввести фразу. Спочатку раху?ться к?льк?сть заре?строваних натискань, п?сля чого к?льк?сть введених символ?в д?литься на час, що учасник тестування вводив запропоновану фразу. Час раху?ться з моменту першого натискання клав?ш? до останнього.Частота помилок?ншим показником ефективност? набору тексту користувачем разом з СНХ ? к?льк?сть помилок в друку?мому рядку, назива?мому транскрибованим. Частота помилок зада?ться м?н?мальною рядковою в?дстанню (МРВ) м?ж транскрибованим рядком (T) ? заданою фразою (P). Частота помилок у в?дсотках зада?ться виразом:Частота помилок = МРВР,Tmax(P,T)×100%. М?н?мальна рядкова в?дстань в?дпов?да? м?н?мальн?й к?лькост? вставок, видалень та зам?н символ?в, яку треба виконати для перетворення одн??? фрази на ?ншу.ВиправленняН? СНХ, н? частота помилок не ф?ксують к?льк?сть виправлень та редагувань, що були виконан? п?д час введення тексту. Виправлена частота помилок оц?ню? зусилля, вкладен? у виправлення помилок. Для п?драхунку виправлено? частоти помилок анал?зу?ться посл?довн?сть символ?, введених за допомогою клав?атури, ? п?драхову?ться к?льк?сть символ?в, що з'являються в посл?довност? символ?в набраних з клав?атури, але не присутн? в остаточному текст?.Час в?дгуку до першого правильного натискання клав?ш?снують додатки, для яких час реагування на конкретну под?ю за допомогою вводу з клав?атури ? критичним показником продуктивност? друку. Для вим?ру часу в?дгуку до першого правильного натискання клав?ш? запису?ться час у секундах, який пройде п?сля зак?нчення в?дл?ку часу до першого правильного введення з клав?атури.Пор?вняльний анал?з ?снуючих п?дход?в до вводу в в?ртуальн?й реальност?Для пор?вняння р?зних п?дход?в, що використовуються при побудов? систем вводу в в?ртуальн?й реальност?, використа?мо дан? досл?дження [10]. У першому тестуванн? брали участь 80 учасник?в, над якими було проведено онлайн-тест набору тексту. В?дпов?дно до отриманих результат?в учасник?в першого тестування (μ= 53.3 СНХ, σ = 18.8 СНХ) було запрошено випадкову виб?рку з 16 учасник?в з показником СНХ б?льшим за середн?й та 16 учасник?в з показником СНХ меншим за середн?й для формування тестових груп досв?дчених та недосв?дчених друкувальник?в. Мета цього досл?дження поляга? в оц?нц? вплив в?ртуального ручного подання ? прозорост? рук на продуктивн?сть досв?дчених ? недосв?дчен? друкувальник?в у в?ртуальн?й реальност?. Результати досл?дження продемонстрован? у таблиц? 2.1.Таблиця 2.1В?ртуальна реальн?стьСправжн?й св?тРукаБез рукиПрозор?сть100%0%Недосв?дчений друкувальникμσμσСНХ31.84811.33845.398 4.909Частота помилок (у в?дсотках)0.7400.5380.713 0.635Виправлена частота помилок (у в?дсотках)14.0157.5494.904 3.388Час в?дгуку до першого правильного натискання клав?ш (у секундах)4.3862.8131.769 1.054Досв?дчений друкувальникμσμσСНХ61.83017.04767.223 14.837Частота помилок (у в?дсотках)0.5400.5050.597 0.528Виправлена частота помилок (у в?дсотках)7.3836.1165.467 2.899Час в?дгуку до першого правильного натискання клав?ш (у секундах)3.6382.0261.370 0.423Продовження таблиц? 2.1В?ртуальна реальн?стьРукаРеал?стичнаПрозор?сть0%50%Недосв?дчений друкувальникμσμσСНХ37.581 5.61138.4305.839Частота помилок (у в?дсотках)1.140 1.0411.0011.097Виправлена частота помилок (у в?дсотках)7.6815.0317.7124.313Час в?дгуку до першого правильного натискання клав?ш (у секундах)2.4561.2901.8640.528Досв?дчений друкувальникμσμσСНХ66.566 16.56967.16516.589Частота помилок (у в?дсотках)0.449 0.4150.3620.316Виправлена частота помилок (у в?дсотках)5.034 3.3615.0252.578Час в?дгуку до першого правильного натискання клав?ш (у секундах)1.953 0.7541.9800.692 Алгоритм роботи системи вводу в в?ртуальн?й реальност?Виходячи з досл?дження проблеми побудови систем, що працюють з в?ртуальною реальн?стю, систем введення текстових даних та математичного п?д?рунтя задач розп?знавання образ?в на в?деозображенн?, а також обмежень, що накладаються у в?дпов?дност? з постановкою задач? щодо апаратних засоб?в, пропону?ться наступний алгоритм.Його можна умовно под?лити на так? частини:- кал?брування кол?рного д?апазону, до якого належить зображення руки користувача,- прийом зображення з пристрою введення граф?чно? ?нформац?? та первинна його обробка,- розп?знавання силуету руки у в?дпов?дност? до визначених кол?рних д?апазон?в,- побудова математично? модел? кист? руки з подальшим визначенням жесту.Кал?брування кол?рного д?апазону поляга? в в?докремленн? на зображенн? д?апазон?в, яким в?дпов?да? зображення руки користувача. Це кал?брування проводиться один раз при першому використанн? системи введення в наявних умовах прийому в?деосигналу, зокрема осв?тлення, наявност? яскравих предмет?в, дзеркальних поверхонь та в?дт?нк?в, близьких до тон?в людсько? шк?ри.Кал?брування викону?ться користувачем за допомогою ?нтерактивного граф?чного користувацького ?нтерфейсу, де в?н може в режим? реального часу спостер?гати, яким буде результат обробки системою зображення за даних налаштувань.Прийом отриманого зображення з в?деокамери та первинна його обробка, в?дбува?ться в к?лька крок?в. Процедура виконання цього кроку наступна:- отриму?ться поточний кадр з в?деопотоку,- зображення обр?за?ться, в?дпов?дно заданих налаштувань (для в?докремлення областей, що потрапляють на в?деозображення з камери, але не використовуються безпосередньо п?д час введення для демонстрац?? жест?в та вза?мод?? з в?ртуальною клав?атурою),- до зображення застосову?ться гаус?вський ф?льтр для розмиття зображення ? приховання деяких незначних шум?в на отриманому в?део,- в?дбува?ться перех?д в?д кол?рно? схеми RGB, в як?й до програми потрапля? зображення з камери, до HSV, яка б?льше п?дходить для роботи з нею системи розп?знавання образу руки,Розп?знавання силуету руки поляга? у посл?довному застосуванн? ряду морфолог?чних перетворень та ?нших операц?й над зображенням. Цей етап склада?ться з таких крок?в:- перев?ря?ться належн?сть областей зображення до д?апазон?в, визначених п?д час кал?брування системи, що дозволя? розд?лити зображення на дв? област?: зображення руки та фонове зображення,- до зображення, на якому вид?лено область, що в?дпов?да? руц? користувача, застосовують дилац?ю, з метою уточнення та згладження меж силуету руки,- з т??ю ж метою, що ? на попередньому кроц?, до зображення застосову?ться ероз?я,- до зображення застосову?ться гаус?вський ф?льтр для згладжування меж? област? руки на зображенн? ? приховання деяких залишкових шум?в на отриманому зображенн?,- викону?ться б?наризац?я зображення шляхом розд?лення точок зображення за певними граничними значеннями,- визначаються меж? отримано? област? зображення руки, а саме буду?ться багатокутник, що огина? область руки та ? наближенням границ? област? руки, що необх?дна для побудови геометрично? модел? кист? руки на наступному етап? алгоритму.Етап побудови математично? модел? кист? руки з подальшим визначенням жесту, для вза?мод?? користувача з в?ртуальною клав?атурою, в?дбува?ться за наступною процедурою:- за побудованим на попередньому кроц? простим багатокутником, що опису? меж? руки, буду?ться опукла оболонка руки за алгоритмом Скланського,- п?драхову?ться к?льк?сть дефект?в, де кожен дефект явля? собою точку, що знаходиться на границ? руки м?ж двома сус?дн?ми вершинами опукло? оболонки руки ? кут м?ж цими двома вершинами опукло? оболонки руки з вершиною у ц?й точц? ? гострим,- раху?ться к?льк?сть пальц?в руки, як к?льк?сть знайдених на попередньому кроц? дефект?в,- на руц? знаходиться вказ?вник, як точка, що ? вершиною опукло? оболонки руки, яка знаходиться на зображенн? найдал? в?д користувача (зверху),- ф?ксу?ться натискання клав?ш?, на як?й знаходиться вказ?вник, у раз?, якщо к?льк?сть пальц?в дор?вню? в точност? одному.Таким чином, для контролю м?сцезнаходження вказ?вника, користувачу достатньо показувати жест, що склада?ться з двох або б?льше пальц?в (рисунок 2.5).Рисунок 2.5 – Жест вказування Натискання на клав?шу буде заф?ксовано, якщо користувач складе пальц? разом (рисунок 2.9). Рисунок 2.6 – Жест натисканняТаким чином система буде вважати, що демонстру?ться один палець, що ? ?ндикатором натискання на клав?шу. У випадку, якщо на зображенн? не буде знайдено пальц?, введення не в?дбуватиметься. ВисновкиВ даному розд?л? було проведено анал?з основ задач? побудови системи вводу в в?ртуальн?й реальност? та розглянуто ?снуюч? методи побудови систем вводу в в?ртуальн?й реальност?. Також було запропоновано ? розглянуто критер?? оц?нки якост? роботи системи вводу та проведено пор?вняльний анал?з ?снуючих п?дход?в до вводу в в?ртуальн?й реальност?.Прогнозовано, найкращ? показники критер??в оц?нки якост? роботи системи вводу було отримано ф?зичною клав?атурою, проте р?шення, засноване на використанн? системи з восьми камер, дисплею в?ртуально? реальност? та св?тлов?дбиваючих м?ток на руках друкувальника, який вза?мод?? з ф?зичною клав?атурою, виявилося також досить як?сним, хоча к?льк?сть СНХ для недосв?дчених друкувальник?в виявилася в середньому у п?втора рази нижчою, пор?внюючи з ?х результатами з використанням ф?зично? клав?атури.На основ? анал?зу розглянутих метод?в та п?дход?в, а також ?х пор?вняння, було виявлено ?х переваги та недол?ки й запропоновано власний алгоритм роботи системи вводу в в?ртуальн?й реальност?.Запропонований алгоритм ? простим в обчислювальому план?, тому дозволя? використовувати його на р?зних машинах, у тому числ? моб?льних пристроях. Обчислювальна простота також дозволя? отримувати високу частоту кадр?в, що важливо для отримання плавност? зображення для зручност? користування системою для користувача.РОЗД?Л 3 АНАЛ?З АРХ?ТЕКТУРИ ПРОГРАМНОГО ПРОДУКТУДаний розд?л присвячено опису програмно? реал?зац?? системи, розроблено? в рамках бакалаврсько? дипломно? роботи, описано арх?тектуру, техн?чн? вимоги до системи, показан? результати ?? роботи. Також описуються функц?? та можливост? програмних б?бл?отек, використаних при розробц? даного програмного продукту.Програма представля? дозволя? зд?йснювати введення тексту за допомогою жест?в на зображенн? з веб-камери. Програмний продукт склада?ться з к?лькох модул?в, що в?дпов?дають р?зним складовим системи вводу. ?нтерерфейс програми доволя? зд?йснювати деяк? налаштування системи для б?льш коректно? роботи системи вводу, в?дсл?ковувати текст, що був введений користувачем та розп?знаний. ?нтерфейс демонсту? деяк? внутр?шн? зм?нн? та параметри системи, а також ? ?нту?тивно зрозум?лим для користувача. Для розробки було використано мову програмування Python та деяк? додатков? пакети б?бл?отек, зокрема б?бл?отеку алгоритм?в комп'ютерного зору, обробки зображень та чисельних алгоритм?в з в?дкритим початковим кодом OpenCV.Оц?нка та пор?вняння якост? роботи системи проводилася за допомогою тестового введення задано? фрази к?лькома користувачами. У якост? критер??в якост? було використано показники, введен? у пункт? 3 розд?лу 2.3.1 Об?рунтування вибору платформи та мови програмуванняОсновною мовою програмування була обрана Python, оск?льки ця мова характеризу?ться високою швидк?стю розробки програмних продукт?в, зокрема завдяки простот? синтаксису, велико? к?лькост? сторонн?х та стандартних пакет?в б?бл?отек, в яких вже реал?зовано величезну к?льк?сть прикладних функц?й та тому, що ця мова ? ?нтерпрету?мою, тобто дозволя? не витрачати час на комп?ляц?ю програмного коду перед кожним тестовим запуском. Також, деяк? б?бл?отеки використовують предкомп?льований код, написаний мовою програмування C або C++, що дозволя? ?стотно пришвидшити швидк?сть виконання складних математичних операц?й у процес? роботи програми.У якост? середовища розробки було використано ?нтерактивну оболонку IPython з веб-оболонкою Jupyter Notebook. Код програми збер?га?ться у формат? IPython Notebook з розширенням “.ipynb”. У такому формат? текст програми розбива?ться користувачем на ком?рки, що можуть бути виконан? у дов?льному порядку, заданому користувачем, що дозволя? полегшити та пришвидшити процес створення програми та тестування роботи програми, особливо в рамках розробки п?д час досл?дницько? роботи.Серед основних використаних додаткових б?бл?отек були стандартн? б?бл?отеки мови програмування Python: math, re, itertools, time, - б?бл?отека двовим?рних засоб?в в?зуал?зац?? Matplotlib, пакет IPython, в?дкрита б?бл?отека машинного навчання TensorFlow та б?бл?отеку алгоритм?в комп'ютерного зору, обробки зображень та чисельних алгоритм?в OpenCV.Завдяки кросплатформност? мови програмування Python та використаних б?бл?отек, розроблена система може працювати на пристроях п?д управл?нням р?зних операц?йних систем, зокрема Windows та Unix-под?бних операц?йних системах.3.2 Опис вх?дних данихВх?дними даними для системи ? в?деозображення з веб-камери, що явля? собою посл?довн?сть зображень, знятих з певною пер?одичн?стю, в залежност? в?д ресурсо?мкост? обчислень, що виконуються комп'ютером при обробц? цих зображень. У процес? розробки системи вводу використовувалася HD веб-камери Logitech C270, що ма? максимальну розд?льну здатн?сть 1280 на 720 точок, максимальну частоту 30 кадр?в та кут огляду 60°. Система отриму? зображення з камери за допомогою засоб?в б?бл?отеки OpenCV у формат? з розд?льною здатн?стю 640 на 480 точок у кол?рному д?апазон? RGB.3.3 Основн? техн?чн? вимоги до системиДля коректно? роботи реал?зованого програмного продукту рекоменду?ться ?? використання на пристро? з наступними техн?чними характеристиками: операц?йна система Windows 10 або Ubuntu 16.04.2;встановлений Python 3, IPython Notebook, Jupyter з б?бл?отеками Numpy, Matplotlib, OpenCV 3.4.1 та TensorFlow 1.12.2 (при використанн? ?ншо? верс?? TensorFlow можливо модуль розп?знавання кист? руки не зможе завантажити збережен? параметри);у раз? використання ОС Windows рекоменду?ться використовувати вказан? в пункт? 2 програмн? засоби у склад? дистрибутиву Anaconda; наявн?сть вбудовано? кольорово? веб-камери з розпод?льною здатн?стю не менше 640 на 480 точок та частотою кадр?в не менше 30 кадр?в на секунду або USB-порту з при?днаною зовн?шьою веб-камерою з аналог?чними характеристиками;мон?тор, сум?сний з використову?мою ОС, але з розпод?льною здатн?стю не менше 640 на 480 та частотою кадр?в не менше 30 кадр?в на секунду;сум?сна комп'ютерна миша;100 Мбайт в?льного дискового простору.3.4 Анал?з арх?тектури програмного продуктуСхема вза?мод?? м?ж основними структурними елементами програми, зовн?шн?ми пристроями та користувачем зображено на рисунку 3.1.КористувачВеб-камераПервинна обробка зображенняВид?лення кист?Розп?знавання жестуОбробка черги введенняПристр?й виведення (мон?тор)Лог введених символ?вПристро? введення (миша, клав?атура)Модуль кал?бруванняМодуль введенняФайл налаштуваньКористувачВеб-камераПервинна обробка зображенняВид?лення кист?Розп?знавання жестуОбробка черги введенняПристр?й виведення (мон?тор)Лог введених символ?вПристро? введення (миша, клав?атура)Модуль кал?бруванняМодуль введенняФайл налаштуваньРисунок 3.1 – Арх?тектура програмного продуктуРозглянемо ?нтерфейси програми, з якими вза?мод?? коритувач. На рисунку 3.2 зображено в?кно ?Trackbars? модулю кал?брування, за допомогою якого в?дбува?ться кал?брування системи. Використовуючи б?гунки, що в?дпов?дають м?н?мальним та максимальним значенням тону, насиченост? та яскравост? в?дпов?дно, користувач може налаштувати кольоровий д?апазон, який в?дпов?да? кист? користувача.Рисунок 3.2 – В?кно ?Trackbars?В?кно ?Gesture? ? основним в?кном програми, оск?льки саме з ним пов'язаний головний функц?онал системи. На цьому в?кн? виводиться зображення в?ртуально? клав?атури. Верхн?й л?вий кут в?кна призначений для виведення поточно? к?лькост? кадр?в на секунду, що обробля?ться системою, та к?лькост? пальц?в, пораховано? системою. Прав?ше в?добража?ться введений користувачем текст. На фон? знаходиться зображення, що надходить з в?деокамери. В?кно також м?стить ?нформац?ю, пов'язану з розп?знаванням руки. Система вид?ля? червоним контуром прямокутник, в якому було знайдено руку, а зеленим контуром – багатокутник, що в?дпов?да? опукл?й оболонц? силуету руки. Великим червоним колом познача?ться курсор, який ставиться у найвищ?й на зображенн? точц? силуету руки. Маленьк? червон? точки в?дпов?дають пром?жкам м?ж пальцями кист?. В?кно ?Gesture? зображено на рисунку 3.3.Рисунок 3.3 – В?кно ?Gesture?Рисунок 3.4 демонстру? частину в?кна ?Threshold?. На цьому в?кн? виводиться чорно-б?ле зображення на якому чорн? точки в?дпов?дають фону, а б?л? – руц? користувача. За допомогою цього в?кна зручно налаштовувати кол?рн? д?апазони при кал?бруванн? системи.Рисунок 3.4 – Частина в?кна ?Threshold?3.5 Анал?з якост? роботи системи вводу в в?ртуальн?й реальност?3.5.1 Анал?з та пор?вняння метод?в вводу за введеними критер?ямиДля анал?зу якост? роботи системи було проведено тест з набору фрази з 10 дов?льних не пов'язаних м?ж собою а зм?стом англ?йських сл?в довжиною у п'ять символ?в кожен. Для пор?вняння було використано наступн? методи вводу:- введення тексту на ф?зичн?й клав?атур? з використанням обох рух;- введення тексту на ф?зичн?й клав?атур? з використанням лише право? руки;- введення тексту на ф?зичн?й клав?атур? з використанням лише вказ?вного пальця право? руки;- введення тексту на в?ртуальн?й клав?атур? з використанням класичного жесту натискання клав?ш?; - введення тексту на в?ртуальн?й клав?атур? з використанням спец?ального жесту.П?д класичним ма?ться на уваз? жест згинання пальця. Розп?знавання жесту було реал?зовано за допомогою перев?рки градусно? м?ри кута при вершин? трикутника, утвореного крайн?ми правою та л?вою точками руки на зображенн? та вказ?вником. Натисканням вважа?ться под?я, при як?й кут ста? б?льшим 60 градус?в.П?д спец?альним ма?ться на уваз? жест, описаний у пункт? 5 розд?лу 2.П?д час експерименту було пораховано наступн? показники:- к?льк?сть набраних сл?в за хвилину сл?в (СНХ);- частота помилок (ЧП);- виправлена частота помилок (ВЧП);- час в?дгуку до першого правильного натискання (ЧВДПН).Отриман? числов? значення цих показник?в наведено у таблиц? 3.1.Таблиця 3.1 – пор?вняння якост? метод?в вводуПоказникМетод вводуСНХЧП, %ВЧП, %ЧВДПН, сВ?ртуальна клав?атураСпец?альний жест8,113,577,141,44Класичний жест4,3555,5688,91,99Ф?зична клав?атураОбома руками46,122,136,380,4Одн??ю рукою24,074,238,510,44Одним пальцем21,752,132,131,2З таблиц?, а саме за СНХ та ЧВДПН видно, що швидк?сть набору на в?ртуальн?й клав?атур? в рази нижча, ан?ж швидк?сть набору на ф?зичн?й клав?атур?. Частково це можна пояснити тим, що при набор? на в?ртуальн?й клав?атури використову?ться лише один палець. При цьому швидк?сн? показники на ф?зичн?й клав?атур? також пог?ршуються в рази при використанн? одного пальця зам?сть ус?х пальц?в обох рук.Проте за показниками, що характеризують к?льк?сть помилок, тобто ЧП та ВЧП, введення на в?ртуальн?й клав?атур? за допомогою спец?ального жесту не поступа?ться введенню на ф?зичн?й клав?атур?. Окр?м цього, спец?альний жест б?льше н?ж у десять раз?в переважа? класичний за цими двома критер?ями, що доводить доц?льн?сть введення спец?ального жесту для використання в розроблен?й систем?.3.5.2 Анал?з та пор?вняння метод?в у задач? розп?знавання рукиСеред введених критер??в, що характеризують як?сть роботи систем вводу, деяк? залежать в?д часу введення. Оск?льки користувач п?д час введення тексту вза?мод?? з комп'ютером, у тому числ? й через пристро? виведення, швидк?сть набору за допомогою пристрою введення, а отже, й значення в?дпов?дних числових показник?в, залежать в?д швидкост? в?дгуку комп'ютера на д?? користувача, то доц?льно пор?внювати методи також за швидкод??ю, наприклад з використанням показника к?лькост? кадр?в на секунду (англ. frames per second, FPS).Мета цього пункту, пор?вняти р?зн? методи, що можуть бути застосованими для розв'язання задач? розп?знавання руки. Для цього було реал?зовано комп'ютерн? програми, що реал?зовували пор?внюван? методи та демонстрували FPS, що досяга?ться. Задача трек?нгу об'?кт?в поляга? в в?дстеженн? об'?кта на в?деозображенн?, тобто вид?лити, де на даний момент на зображенн? знаходиться об'?кт. При цьому об'?кт не ? в?домим заздалег?дь, але для вид?лення цього об'?кта на поточному зображенн? використовуються також зображення в попередн? моменти часу. Загалом, ця задача ? окремою в?д задач? розп?знавання, але методи трек?нгу можна використовувати ? в задач? розп?знавання.Для пор?вняння було взято програмн? реал?зац?? р?зних метод?в трек?нгу, що входять до складу вбудованих алгоритм?в б?бл?отеки OpenCV. А саме було взято методи KCF, CSRT, Boosting, MIL, TLD.Нараз?, найрозповсюдженим на найб?льш передовим п?дходом до р?шення задач? розп?знавання ? використання алгоритм?в машинного навчання, а саме глибинного навчання з використанням згорткових нейронних мереж (CNN). Ц? методи ? методами навчання з вчителем, тобто вони потребують навчально? виб?рки з розм?ченими даними.Для пор?вняння було використано нейронну мережу на баз? мереж? MobileNet, реал?зовану за допомогою б?бл?отеки машинного навчання TensorFlow. Схема арх?тектури дано? нейромереж? зображено на рисунку 3.5.Рисунок 3.5 – Арх?тектура згортково? нейронно? мереж?Дана мережа була навчена на набор? даних EgoHands, що м?стить розм?чен? зображення рук людей у р?зних сценах, умовах осв?тлення, ракурсах тощо. Вище вказан? методи пор?внювалися з методом морфолог?чних перетворень, що був використаний у алгоритм? розроблено? в дан?й робот? системи вводу.Для ус?х метод?в бралося значення FPS через 60 секунд п?сля запуску програми. У випадку метод?в трек?нгу, в?дл?к часу починався з моменту обрання зони для в?дстежування. Отриман? значення FPS наведено в таблиц? 3.2.Таблиця 3.2 – пор?вняння швидкод?? метод?в розп?знаванняМетоди розп?знаванняЗначення FPSМетод морфолог?чних перетворень30,3Глибинне навчання MobileNet13,43Методи трек?нгуCSRT20,7KSF21,14Boosting24,91MIL17,45TLD25,42Серед ус?х метод?в, що обули обран? для пор?вняння, метод морфолог?чних перетворень виявився найб?льш швидкод?ючим. Тому можна говорити про доц?льн?сть р?шення використати цей п?дх?д для створення розроблено? системи вводу в в?ртуальн?й реальност?.3.6 ВисновкиУ цьому розд?л? було описано арх?тектуру розроблено? системи введення в в?ртуальн?й реальност?, описано процес вза?мод?? програмного продукту з апаратно? складовою системи. Також було описано ?нтерфейси програми, елементи ?нтерфейсу, на як? користувачу сл?д звернути увагу аби розум?ти порядок вза?мод?? з системою вводу та в?ртуальною клав?атурою.Внасл?док проведення пари експеримент?в, було отримано показники якост? роботи систем вводу, ?х р?зних конф?гурац?й, метод?в, що можуть використовуватися в систем? вводу. Завдяки цим показникам вдалося провести пор?вняння й анал?з метод?в та п?дход?в та виявити, як? з них найб?льше п?дходять для використання в розв'язу?м?й задач?.Варто зазначити, що не зважаючи на низьку швидкод?ю, яку продемонстрував метод глибинного навчання для розв'зку задач? розп?знавання руки, варто проводити подальш? досл?дження, щодо впровадження використання цього п?дходу в систем? вводу в в?ртуальн?й реальност?. Цей алгоритм дозволя? з високою точн?стю розв'язувати задачу розп?знавання, що може покращити як?сть роботи розроблено? системи вводу за умови, що вдасться виявити арх?тектуру, яка дозволить отримати швидк?сть роботи системи, яка буде сп?вм?рною з? швидк?стю розроблено? системи. РОЗД?Л 4 ФУНКЦ?ОНАЛЬНО-ВАРТ?СНИЙ АНАЛ?З ПРОГРАМНОГО ПРОДУКТУУ даному розд?л? проводиться оц?нка основних характеристик програмного продукту системи введення в в?ртуальн?й реальност?. Нижче наведено анал?з р?зних вар?ант?в реал?зац?? продукту з метою вибору оптимального, з огляду при цьому як на економ?чн? фактори, так ? на техн?чн? характеристики продукту, що впливають на продуктивн?сть роботи ? на його сум?сн?сть з апаратним забезпеченням. Для цього було використано апарат функц?онально-варт?сного анал?зу. Функц?онально-варт?сний анал?з (ФВА) дозволя? оц?нити реальну варт?сть продукту або послуги незалежно в?д орган?зац?йно? структури компан??, розпод?л прямих ? поб?чних витрат по продуктам та послугам у залежност? в?д потр?бних на кожному етап? виробництва обсяг?в ресурс?в. Д??, що виконуються на цих етапах, у контекст? метода ФВА називаються функц?ями. В основ? ФВА лежить функц?ональний п?дх?д, зг?дно з яким об’?ктом анал?зу ? не сам вир?б (програмний продукт, система), а функц??, як? в?н викону?. Функц?онально-варт?сний анал?з проводиться в два етапи: функц?ональний анал?з, варт?сний анал?зМета ФВА поляга? у забезпеченн? правильного розпод?лу ресурс?в, вид?лених на виробництво продукц?? або надання послуг, на прям? та непрям? витрати, а у даному випадку – анал?зу функц?й програмного продукту й виявлення ус?х витрат на реал?зац?ю цих функц?й. 4.1 Постановка задач? техн?ко-економ?чного анал?зуУ робот? застосову?ться метод ФВА для проведення техн?ко-економ?чного анал?зу розробки.В?дпов?дно цьому варто обирати ? систему показник?в якост? програмного продукту. Техн?чн? вимоги до продукту наступн?:програмний продукт повинен функц?онувати на сучасних пристроях на баз? актуально? верс?? ОС Windows або Unix-под?бних ОС;функц?онувати з сучасними вбудованими та зовн?шн?ми USB веб-камерами;забезпечувати високу показники висунутих у розд?л? 3 критер??в;забезпечувати зручн?сть ? простоту вза?мод?? з користувачем програмного забезпечення;передбачати м?н?мальн? витрати на впровадження програмного продукту.Об?рунтування функц?й програмного продуктуГоловна функц?я F0 – розробка програмного продукту, який, приймаючи зображення з пристрою граф?чного введення ?нформац?? та анал?зуючи жести користувача на отриманих зображеннях, реал?зу? текстовий вв?д даних до комп'ютера. Виходячи з конкретно? мети, можна вид?лити наступн? основн? функц?? ПП:F1 – виб?р мови програмування;F2 – виб?р програмних пакет?в, б?бл?отек;F3 – джерело надходження в?деоданих.Кожна з основних функц?й може мати дек?лька вар?ант?в реал?зац??.Функц?я F1:а) мова програмування C++;б) мова програмування Python;Функц?я F2:а) TensorFlow;б) OpenCV.Функц?я F3:а) вбудована веб-камера;б) зовн?шня веб-камера.Вар?анти реал?зац?? основних функц?йВар?анти реал?зац?? основних функц?й наведен? у морфолог?чн?й карт? системи (рисунок 4.1). Б?бл?отека OpenCVМова програмування PythonБ?бл?отека TensorFlowМова програмування С++Зовн?шня веб-камераВбудована веб-камераБ?бл?отека OpenCVМова програмування PythonБ?бл?отека TensorFlowМова програмування С++Зовн?шня веб-камераВбудована веб-камераРисунок 4.1 – Морфолог?чна картаМорфолог?чна карта в?дображу? вс? можлив? комб?нац?? вар?ант?в реал?зац?? функц?й, як? складають повну множину вар?ант?в ПП. На основ? ц??? карти побудовано позитивно-негативну матрицю вар?ант?в основних функц?й (таблиця 4.1). Таблиця 4.1 – Позитивно-негативна матрицяОсновн? функц??Вар?анти реал?зац??ПеревагиНедол?киF1АВисока швидк?сть виконання за рахунок оптим?зац?? п?д р?зн? платформиВисока варт?сть розробки, пор?вняна складн?сть розробкиБВища ефективн?сть та нижча варт?сть розробкиНизька швидкод?яF2АКросплатформн?сть, полегшений процес завантаження нових данихСкладн?сть розробки та тестуванняБНижча варт?сть та вища швидк?сть розробки, велика к?льк?сть готових алгоритм?вОбмежений функц?онал, F3АПростота використанняНаявн?сть не на вс?х пристоях, менш гнучка область застосуванняБУн?версальн?сть для вс?х пристро?в, простота зам?ни Додаткова варт?сть, зб?льшення розм?р?в системиНа основ? анал?зу позитивно-негативно? матриц? робимо висновок, що при розробц? програмного продукту деяк? вар?анти реал?зац?? функц?й варто в?дкинути, тому, що вони не в?дпов?дають поставленим перед програмним продуктом задачам. Ц? вар?анти в?дзначен? у морфолог?чн?й карт?.Функц?я F1: оск?льки обидв? мови можуть бути використан? для розробки ? пропонують р?зн? переваги, то сл?д розглянути обидва вар?анти.Функц?я F2: оск?льки для даного продукту важливою ? швидк?сть роботи, в?дкида?мо вар?ант а).Функц?я F3: оск?льки для даного продукту важливою ? ун?версальн?сть застосування, використа?мо вар?ант б) як ?диний можливий.Таким чином, будемо розглядати такий вар?ант реал?зац?? ПП:F1б – F2б – F3б,F1а – F2б – F3б.Для оц?нювання якост? розглянутих функц?й обрана система параметр?в, описана нижче.4.2 Об?рунтування системи параметр?в ППОпис параметр?вНа п?дстав? даних про основн? функц??, що повинен реал?зувати програмний продукт, вимог до нього, визначаються основн? параметри виробу, що будуть використан? для розрахунку коеф?ц??нта техн?чного р?вня.Для того, щоб охарактеризувати програмний продукт, будемо використовувати наступн? параметри:X1 – швидкод?я мови програмування;X2 – об’?м пам’ят? для коректно? роботи програми;X3 – час виконання;X4 – потенц?йний об’?м програмного коду.X1 в?добража? швидкод?ю операц?й залежно в?д обрано? мови програмування.X2 в?добража? необх?дний для збереження та обробки даних об’?м оперативно? пам’ят? пристрою.X3 в?добража? час, який витрача?ться на виконання конкретного обраного алгоритму.X4 показу? обсяг програмного коду, який необх?дно створити розробнику.К?льк?сна оц?нка параметр?вГоловна функц?я F0 – розробка програмного продукту, який, приймаючи зображення з пристрою граф?чного введення ?нформац?? та анал?зуючи жести користувача на отриманих зображеннях, реал?зу? текстовий вв?д даних до комп'ютера. На п?дстав? даних про основн? функц??, що повинен реал?зувати програмний продукт, вимог до нього, визначаються основн? параметри виробу, що будуть використан? для розрахунку коеф?ц??нта техн?чного р?вня. На основ? анал?зу позитивно-негативно? матриц? робимо висновок, що при розробц? програмного продукту деяк? вар?анти реал?зац?? функц?й варто в?дкинути, тому, що вони не в?дпов?дають поставленим перед програмним продуктом задачам. Г?рш?, середн? ? кращ? значення параметр?в вибираються на основ? вимог замовника й умов, що характеризують експлуатац?ю ПП як показано у табл. 4.2. Таблиця 4.2 – Основн? параметри ППНазваПараметраУмовн? позначенняОдиниц? вим?руЗначення параметраг?рш?середн?кращ?Швидкод?я мови програмуванняX1КНС202530Необх?дний об’?м пам’ят? для стаб?льно? роботиX2Мбайт16012896Час виконання алгоритму програмоюX3мс300025001000Об’?м програмного кодуX4к?льк?сть рядк?в коду1000500300За даними таблиц? 4.2 будуються граф?чн? характеристики параметр?в, що продемонстрован? на рисунках 4.2-4.5. Рисунок 4.2 – Х1, швидкод?я мови програмуванняРисунок 4.3 – Х2, об’?м пам’ят? для коректно? роботиРисунок 4.4 – Х3, час виконання алгоритмуРисунок 4.5 – Х4, потенц?йний об’?м програмного кодуАнал?з експертного оц?нювання параметр?вП?сля детального обговорення й анал?зу кожний експерт оц?ню? ступ?нь важливост? кожного параметру для конкретно поставлено? ц?л? – розробка програмного продукту, який да? найб?льш точн? результати при знаходженн? параметр?в моделей адаптивного прогнозування ? обчислення прогнозних значень. Значим?сть кожного параметра визнача?ться методом попарного пор?вняння. Оц?нку проводить експертна ком?с?я ?з 7 людей. Визначення коеф?ц??нт?в значимост? передбача?:визначення р?вня значимост? параметра шляхом присво?ння р?зних ранг?в;перев?рку придатност? експертних оц?нок для подальшого використання;визначення оц?нки попарного пр?оритету параметр?в;обробку результат?в та визначення коеф?ц??нту значимост?.Результати експертного ранжування наведен? у таблиц? 4.3.Таблиця 4.3 – Результати ранжування параметр?вПараметрНазва параметраОдиниц? вим?руРанг параметра за оц?нкою експертаСума ранг?в RiВ?дхи-лення ΔiΔi21234567X1Швидкод?я мови програмуванняКНС213111110-7,556,25X2Об’?м пам’ят? для коректно? роботиМбайт132222214-3,512,25X3Час виконання мс3213333180,50,25X4Потенц?йний об’?м програмного кодук?льк?сть рядк?в коду44444442810,5110,25Разом10101010101010700179Для перев?рки ступеня достов?рност? експертних оц?нок, визначимо наступн? параметри:а) сума ранг?в кожного з параметр?в ? загальна сума ранг?в:Ri=i=1NrijRij=Nnn+12=70,де N – число експерт?в,n – к?льк?сть параметр?в,б) середня сума ранг?в:T=Rijn=17,5.в) в?дхилення суми ранг?в кожного параметра в?д середньо? суми ранг?в:?i=Ri-T,сума в?дхилень по вс?м параметрам повинна дор?вню? 0,г)загальна сума квадрат?в в?дхилення:S=i=1N?i2=179.Пораху?мо коеф?ц??нт узгодженост?:W=12SN2n3-n=12?1797243-4=0,731>Wk=0,67.Ранжування можна вважати достов?рним, тому що знайдений коеф?ц??нт узгодженост? перевищу? нормативний, який дор?вню? 0,67.Скориставшись результатами ранжування, проведемо попарне пор?вняння вс?х параметр?в ? результати занесемо у таблицю 4.4.Таблиця 4.4 – Попарне пор?вняння параметр?вПараметриЕкспертиК?нцева оц?нкаЧислове значення1234567X1 ? X2> <<<<<<<1,5 X1 ? X3<<><<<<<1,5X1 ? X4<<<<<<<<1,5X2 ? X3<>><<<<<1,5X2 ? X4<<<<<<<<1,5X3 ? X4<<<<<<<<1,5Числове значення, що визнача? ступ?нь переваги i–го параметра над j–тим, aij визнача?ться по формул?:aij=1,5 при Х?>Xj,1.0 при Х?= Xj,0.5 при Х?< Xj.З отриманих числових оц?нок переваги складемо матрицю:A=║aij║.Для кожного параметра зробимо розрахунок вагомост? Kв? за наступними формулами:Kв?=bii=1nbi,де bi=i=1Naij.В?дносн? оц?нки розраховуються дек?лька раз?в доти, поки наступн? значення не будуть незначно в?др?знятися в?д попередн?х (менше 2%). На другому ? наступних кроках в?дносн? оц?нки розраховуються за наступними формулами:Kв?=bi'i=1nbi',де bi'=i=1Naijbj.Як видно з таблиц? 4.5, в даному випадку знадобилося 3 ?терац??.Таблиця 4.5 – Розрахунок вагомост? параметр?вXiXjПерша ?терац?яДруга ?терац?яТретя ?терац?яX1X2X3X4biKв?bi1Kв?1bi2Kв?2X11,00,50,50,52,50,1560,7450,1582,50,159X21,51,00,50,53,50,2191,0880,2313,630,23X31,51,51,00,54,50,2811,3420,2844,4620,283X41,51,51,51,05,50,3441,5440,3275,1590,328Всього:1614,718115,74914.3 Анал?з р?вня якост? вар?ант?в реал?зац?? функц?йВизнача?мо р?вень якост? кожного вар?анту виконання основних функц?й окремо.Коеф?ц??нт техн?чного р?вня для кожного вар?анта реал?зац?? ПП розрахову?ться так (таблиця 4.6): KKj=i=1nKвi,jBi,j,де n – к?льк?сть параметр?в,Kвi,j – коеф?ц??нт вагомост? i–го параметра,Вi – оц?нка i–го параметра в балах.Розрахунок показник?в р?вня якост? вар?ант?в реал?зац?? основних функц?й ПП наведено у таблиц? 4.6.Таблиця 4.6 – Розрахунок показник?в р?вня якост? вар?ант?в реал?зац?? основних функц?й ППОсновн? функц??Вар?ант реал?зац?? функц??ПараметриАбсолютне значення параметраБальна оц?нка параметраКоеф?ц??нт вагомост? параметраКоеф?ц??нт р?вня якост?F1АX12550,1590,795F2АX210090,232,07F3АX3120090,2832,547Х450050,3271,635БX3250050,2831,415Х480020,3270,654За даними з таблиц? 4.6 за формулою:KK=KТУF1k+KТУF2k+...+KТУFzk,визнача?мо р?вень якост? кожного з вар?ант?в:КК1 = 0,795+2,07+2,547+1,415=6,827,КК2 = 0,795+2,07+1,635+0,654=5,154.Як видно з розрахунк?в, кращим ? перший вар?ант, для якого коеф?ц??нт техн?чного р?вня ма? найб?льше значення.4.4 Економ?чний анал?з вар?ант?в розробки ППДля визначення вартост? розробки ПП спочатку проведемо розрахунок трудом?сткост?.Вс? вар?анти включають в себе два окремих завдання:1) Розробка проекту програмного продукту;2) Розробка програмно? оболонки;Завдання 1 за ступенем новизни в?дноситься до групи А, завдання 2 – до групи Б. За складн?стю алгоритми, як? використовуються в завданн? 1 належать до групи 1; а в завданн? 2 – до групи 3.Для реал?зац?? завдання 1 використову?ться дов?дкова ?нформац?я, а завдання 2 використову? ?нформац?ю у вигляд? даних.Проведемо розрахунок норм часу на розробку та програмування для кожного з завдань.Проведемо розрахунок норм часу на розробку та програмування для кожного з завдань. Загальна трудом?стк?сть обчислю?ться як ТО = ТР ? КП? КСК? КМ? КСТ? КСТ.М,де ТР – трудом?стк?сть розробки ПП,КП – поправочний коеф?ц??нт,КСК – коеф?ц??нт на складн?сть вх?дно? ?нформац??,КМ – коеф?ц??нт р?вня мови програмування,КСТ – коеф?ц??нт використання стандартних модул?в ? прикладних програм,КСТ.М – коеф?ц??нт стандартного математичного забезпечення.Для першого завдання, виходячи ?з норм часу для завдань розрахункового характеру степеню новизни А та групи складност? алгоритму 1, трудом?стк?сть дор?вню?: ТР = 90 людино-дн?в. Поправочний коеф?ц??нт, який врахову? вид нормативно-дов?дково? ?нформац?? для першого завдання: КП = 1.6. Поправочний коеф?ц??нт, який врахову? складн?сть контролю вх?дно? та вих?дно? ?нформац?? для вс?х семи завдань р?вний 1: КСК = 1. Оск?льки при розробц? першого завдання використовуються стандартн? модул?, враху?мо це за допомогою коеф?ц??нта КСТ = 0.8. Тод?, за формулою 5.1, загальна трудом?стк?сть програмування першого завдання дор?вню?:Т1 = 90?1.6?0.8 = 112,2 людино-дн?в.Проведемо аналог?чн? розрахунки для подальших завдань.Для другого завдання (використову?ться алгоритм третьо? групи складност?, степ?нь новизни Б), тобто ТР = 28 людино-дн?в, КП = 0.7, КСК = 1, КСТ =0,8:Т2 = 28 ? 0,7 ? 0,8 = 15,68 людино-дн?в.Склада?мо трудом?стк?сть в?дпов?дних завдань для кожного з обраних вар?ант?в реал?зац?? програми, щоб отримати ?х трудом?стк?сть:ТI= (112,2 + 15,68 + 4,8 + 15,68) ? 8 = 1186,88 людино-годин,ТII=(112,2+15,68 +6,91+15,68)?8=1203,76 людино-годин.Найб?льш високу трудом?стк?сть ма? вар?ант II.В розробц? бере участь один ?нженер з комп'ютерного зору з окладом 18000 грн. Визначимо зарплату за годину за формулою:СЧ=МTm?tгрн.,де М – м?сячний оклад прац?вник?в,Tm – к?льк?сть робочих дн?в тиждень,t – к?льк?сть робочих годин в день.СЧ=180001*21*8=107,143.Тод?, розраху?мо зароб?тну плату за формулою:СЗП=Сч?Тi?КДде СЧ – величина погодинно? оплати прац? роб?тника,Тi – трудом?стк?сть в?дпов?дного завдання,КД – норматив, який врахову? додаткову зароб?тну плату.Зарплата розробник?в становить:СЗП1=107,143?1186,88?1,2=152599,06,СЗП2=107,143?1203,76?1,2=154769,35.В?драхування на соц?альний внесок становить 22,0%:СВ?Д1=СЗП1?0,22=152599,06?0,22=33571.8,СВ?Д2=СЗП2?0,22=154769,35?0,22=34049.26.Тепер визначимо витрати на оплату одн??? машино-години (СМ). Так як одна ЕОМ обслугову? одного ?нженера з окладом 18000 грн., з коеф?ц??нтом зайнятост? 0,2 то для одн??? машини отрима?мо:СГ = 12?M?KЗ = 12 ? 18000? 0,2 = 43200 грн.З урахуванням додатково? зароб?тно? плати:СЗП =СГ? (1+ KЗ) = 43200 ? (1 + 0.2) = 51840 грн.В?драхування на соц?альний внесок:СВ?Д= СЗП ? 0.22 = 51840 ? 0,22 = 11404,8 грн.Амортизац?йн? в?драхування розрахову?мо при амортизац?? 25% та вартост? ЕОМ – 25000 грн:СА = КТМ? KА?ЦПР = 1.15 ? 0.25 ? 25000 = 7187,5 грн.,де КТМ– коеф?ц??нт, який врахову? витрати на транспортування та монтаж приладу у користувача,KА– р?чна норма амортизац??,ЦПР – догов?рна ц?на приладу.Витрати на ремонт та проф?лактику розрахову?мо як:СР = КТМ?ЦПР ? КР = 1.15 ? 25000 ? 0.05 = 1437,5 грн.,де КР– в?дсоток витрат на поточн? ремонти.Ефективний годинний фонд часу ПК за р?к розрахову?мо за формулою:ТЕФ =ДК–ДВ–ДС–ДР?tЗ?КВ==(365–104–8–16)?8?0.9=1706,4 годин,де ДК – календарна к?льк?сть дн?в у роц?,ДВ, ДС – в?дпов?дно к?льк?сть вих?дних та святкових дн?в,ДР – к?льк?сть дн?в планових ремонт?в устаткування,t – к?льк?сть робочих годин в день,КВ – коеф?ц??нт використання приладу у час? протягом зм?ни.Витрати на оплату електроенерг?? розрахову?мо за формулою:СЕЛ = ТЕФ? NС? KЗ? ЦЕН == 1706,4 ? 0,22 ? 0,78 ? 2,7515= 805,69 грн.,де NС – середньо-споживча потужн?сть приладу,KЗ– коеф?ц??нтом зайнятост? приладу,ЦЕН – тариф за 1 КВт-годин електроенерг??.Накладн? витрати розрахову?мо за формулою:СН = ЦПР?0.67 = 25000 ? 0,67 = 16750 грн.Тод?, р?чн? експлуатац?йн? витрати будуть:СЕКС =СЗП+ СВ?Д+ СА + СР+ СЕЛ + СН==51840+11404,8+7187,5+1437,5+805,69 +16750= = 89425,49 грн.Соб?варт?сть одн??? машино-години ЕОМ дор?внюватиме:СМ-Г = СЕКС/ ТЕФ = 89425,49 / 1706,4 = 52,41 грн/год.Оск?льки в даному випадку вс? роботи, як? пов‘язан? з розробкою програмного продукту ведуться на ЕОМ, витрати на оплату машинного часу складають:СМ = СМ-Г ?T,CM1=52,41 ?1186,88=62204,38 грн. ,CM2=52,41 ?1203,76=63089,06 грн.Накладн? витрати складають 67% в?д зароб?тно? плати:СН = СЗП ? 0,67,СН1=62204,38?0,67=41676,93 грн.,CH2=63089,06?0,67=42269,67 грн.Отже, варт?сть розробки ПП становить:СПП = СЗП+ СВ?Д+ СМ +СН,СПП1=152599,06+33571,8+62105,87+41676,93==289953,67 грн.,СПП2=154769,35+34049,26+62989,15+42269,67==294077,43 грн.4.5 Виб?р кращого вар?анта ПП техн?ко-економ?чного р?вняРозраху?мо коеф?ц??нт техн?ко-економ?чного р?вня за формулою:КТЕРj =ККj?СФj ,КТЕР1 =6,827289953,67 =23,55?10-6,КТЕР2 =5,154294077,43 =17,53 ?10-6.Як бачимо, найб?льш ефективним ? перший вар?ант реал?зац?? програми з коеф?ц??нтом техн?ко-економ?чного р?вня КТЕР1=23,55?10-6.4.6 ВисновкиВ даному розд?л? проведено повний функц?онально-варт?сний анал?з ПП, який було розроблено в рамках дипломного проекту. Процес анал?зу можна умовно розд?лити на дв? частини.В перш?й з них проведено досл?дження ПП з техн?чно? точки зору: було визначено основн? функц?? ПП та сформовано множину вар?ант?в ?х реал?зац??; на основ? обчислених значень параметр?в, а також експертних оц?нок ?х важливост? було обчислено коеф?ц??нт техн?чного р?вня, який ? дав змогу визначити оптимальну з техн?чно? точки зору альтернативу реал?зац?? функц?й ПП.Другу частину ФВА присвячено вибору ?з альтернативних вар?ант?в реал?зац?? найб?льш економ?чно об?рунтованого. Пор?вняння запропонованих вар?ант?в реал?зац?? в рамках дано? частини виконувалось за коеф?ц??нтом ефективност?, для обчислення якого були обчислен? так? допом?жн? параметри, як трудом?стк?сть, витрати на зароб?тну плату, накладн? витрати.П?сля виконання функц?онально-варт?сного анал?зу програмного комплексу що розроблю?ться, можна зробити висновок, що з альтернатив, що залишились п?сля першого в?дбору двох вар?ант?в виконання програмного комплексу оптимальним ? перший вар?ант реал?зац?? програмного продукту. У нього виявився найкращий показник техн?ко-економ?чного р?вня якост? КТЕР = 23,55?10-6.Даний вар?ант виконання програмного комплексу да? користувачу можлив?сть використовувати алгоритм з достатньою точн?стю та швидкод??ю ? уможливлю? велику к?льк?сть експеримент?в п?д час розробки.ВИСНОВКИ У дан?й дипломн?й робот? було побудовано систему для розп?знавання кист? користувача та в?дсл?дковування ?? м?сцезнаходження у простор? за зображенням з використанням р?зних п?дход?в з реал?зац??ю алгоритму жестово? вза?мод?? користувача з в?ртуальною клав?атурою. Також було з?брано статистичн? дан? для анал?зу якост? роботи системи при р?зних п?дходах та проведено пор?вняння реал?зовано? системи з ?ншими методами вводу.Для розв’язку ц??? задач? у робот? було реал?зовано методи обробки цифрових зображення, розп?знавання образ?в та трек?нгу об'?кт?в. Для реал?зац?? клав?атурного введення в умовах обмеженого доступу до апаратних засоб?в було запропоновано власний метод жестового вводу користувачем.У подальших досл?дженнях можна додати до системи модуль автоматично? кал?бровки. Його можна реал?зувати, наприклад, на основ? метод?в видалення фону на в?деозображенн?, таких як MOG та KNN. Також, для б?льшо? точност? в?дстеження положення руки на зображенн? можна застосувати розп?знавання образ?в з використанням згорткових нейромереж або метод?в в?дсл?дковування об'?кт?в на зображенн?. Перепоною для ?х використання ? пор?вняно низька швидкод?я, яко? не достатньо для використання в ц?й задач?.ПЕРЕЛ?К ДЖЕРЕЛ ПОСИЛАННЯPrincipia Cybernetica Web. URL : (Last accessed: 19.05.2019).A Hands on Look at the State of Input in VR. URL: (Last accessed: 19.05.2019)Эффективные устройства управления в VR. URL: (Last accessed: 19.05.2019)Suzuki S., Abe, K. Topological Structural Analysis of Digitized Binary Images by Border Following. Computer Vision, Graphics, and Image Processing. 1985. No. 30. Р. 32-46.Sklansky J. Finding the Convex Hull of a Simple Polygon. Pattern Recognition Letters. 1982. Vol. 1. Р. 79-83.Graham R. L., Francesyao А. Finding the Convex Hull of a Simple Polygon. Journal Of Algorithms. 1983. No. 4. Р. 324-331. History of Linear-time Convex Hull Algorithms. URL: (Last accessed: 19.05.2019)Mathematical Morphology. URL: (Last accessed: 19.05.2019).OpenCV documentation . URL: (Last accessed: 19.05.2019). Knierim P., Schwind V., Feit A. M., Nieuwenhuizen F., Henze N. Physical Keyboards in Virtual Reality: Analysis of Typing Performance and Effects of Avatar. СHI 2018: The 2018 CHI Conference. Montreal, Quebec, Canada, 2018. P. 9.Soukoreff R. W., MacKenzie I. S. Metrics for Text Entry Research: An Evaluation of MSD and KSPC, and a New Unified Error Metric. CHI 2003: Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, Ft. Lauderdale, Florida, USA, 5-10 April, 2003. New York, NY, USA: ACM, 2003. P. 113-120.Zivkovic Z. Improved adaptive gaussian mixture model for background subtraction. Pattern Recognition 2004: Proceedings of the 17th International Conference on Pattern Recognition. Cambridge, UK, September, 2004. Vol. 2. P. 28-31.Zivkovic Z., van der Heijden F. Efficient adaptive density estimation per image pixel for the task of background subtraction. Pattern recognition letters. 2006. No. 27.MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications. URL: (Last accessed: 19.05.2019)Економ?ка та орган?зац?я виробництва ?Рекомендац?? до виконання економ?ко-орган?зац?йного розд?лу дипломних роб?т для студент?в вс?х техн?чних спец?альностей?: навч. пос?б. для студ. вс?х техн?чних спец?альностей. – ?.М. Крейдич. Н.В. Семенченко, Н.В. Рощина, Л.С. Борданова, Н.Ю. Ренська-Скребньова. –Ки?в : КП? ?м. ?горя С?корського, 2018. – 81 с.ДОДАТОК А Л?СТИНГ ПРОГРАМИ# In[24]:# Importsimport numpy as npimport cv2import mathfrom IPython import displayimport reimport itertoolsimport timeimport matplotlib.pyplot as pltget_ipython().run_line_magic('matplotlib', 'inline')def imshow(image, scale=10, cmap='gray'): imshape=np.array(image.shape)[:2] plt.figure(figsize=imshape/max(imshape) * scale) plt.imshow(image, cmap) plt.show()# Open Cameracapture = cv2.VideoCapture(0)capture.isOpened()# In[25]:def get_keys(width, height): """ this function is used to design the keyboard. it returns the 4 parameter that are needed to design the keys. they are key label, top right corner coordinate, bottom left corner coordinate, and center coordinate """ max_keys_in_a_row = 11 # max number of keys in any row is 10 i.e the first row which contains 1234567890'backspace' width = int(width / (max_keys_in_a_row + 2) * max_keys_in_a_row) key_width = int(width/max_keys_in_a_row) # width of one key. width is divided by 10 as the max number of keys in a single row is 11. row0_key_width = key_width * 11 # width of zeroth or numeric row of keys row1_key_width = key_width * 10 # width of first row row2_key_width = key_width * 9 # width of second row row3_key_width = key_width * 7 # width of third row row4_key_width = key_width * 5 # width of space row_keys = [] # stores the keys along with its 2 corner coordinates and the center coordinate # for the zeroth row x1, y1 = key_width, int((height - key_width * 5) / 2) # 5 is due to the fact that we will have 5 rows. y1 is set such that the whole keyboard has equal margin on both top and bottom x2, y2 = key_width + x1, key_width + y1 c1, c2 = x1, y1 # copying x1, x2, y1 and y2 keys = "1 2 3 4 5 6 7 8 9 0 <" keys = keys.split(" ") for key in keys: if key == "<": row_keys.append([key, (x1, y1), (x2, y2), (int((x2+x1)/2) - 25, int((y2+y1)/2) + 10)]) else: row_keys.append([key, (x1, y1), (x2, y2), (int((x2+x1)/2) - 5, int((y2+y1)/2) + 10)]) x1 += key_width x2 += key_width x1, y1 = c1, c2 # copying back from c1, c2, c3 and c4 # for the first row x1, y1 = int((row0_key_width - row1_key_width) / 2) + x1, y1 + key_width x2, y2 = key_width + x1, key_width + y1 c1, c2 = x1, y1 # copying x1, x2, y1 and y2 keys = "qwertyuiop" for key in keys: row_keys.append([key, (x1, y1), (x2, y2), (int((x2+x1)/2) - 5, int((y2+y1)/2) + 10)]) x1 += key_width x2 += key_width x1, y1 = c1, c2 # copying back from c1, c2, c3 and c4 # for second row x1, y1 = int((row1_key_width - row2_key_width) / 2) + x1, y1 + key_width # x1 is set such that it leaves equal margin on both left and right side x2, y2 = key_width + x1, key_width + y1 c1, c2 = x1, y1 keys = "asdfghjkl" for key in keys: row_keys.append([key, (x1, y1), (x2, y2), (int((x2+x1)/2) - 5, int((y2+y1)/2) + 10)]) x1 += key_width x2 += key_width x1, y1 = c1, c2 # for third row x1, y1 = int((row2_key_width - row3_key_width) / 2) + x1, y1 + key_width x2, y2 = key_width + x1, key_width + y1 c1, c2 = x1, y1 keys = "zxcvbnm" for key in keys: row_keys.append([key, (x1, y1), (x2, y2), (int((x2+x1)/2) - 5, int((y2+y1)/2) + 10)]) x1 += key_width x2 += key_width x1, y1 = c1, c2 # for the space bar x1, y1 = int((row3_key_width - row4_key_width) / 2) + x1, y1 + key_width x2, y2 = 5 * key_width + x1, key_width + y1 c1, c2 = x1, y1 keys = " " for key in keys: row_keys.append([key, (x1, y1), (x2, y2), (int((x2+x1)/2) - 5, int((y2+y1)/2) + 10)]) x1 += key_width x2 += key_width x1, y1 = c1, c2 return row_keysdef do_keypress(img, center, row_keys_points): # this fuction presses a key and marks the pressed key with blue color for row in row_keys_points: arr1 = list(np.int0(np.array(center) >= np.array(row[1]))) # center of the contour has greater value than the top left corner point of a key arr2 = list(np.int0(np.array(center) <= np.array(row[2]))) # center of the contour has less value than the bottom right corner point of a key if arr1 == [1, 1] and arr2 == [1, 1]: cv2.fillConvexPoly(img, np.array([np.array(row[1]), np.array([row[1][0], row[2][1]]), np.array(row[2]), np.array([row[2][0], row[1][1]])]), (255, 0, 0)) return row[0]# return img return Noneangle = lambda a, b, c: (math.acos((b ** 2 + c ** 2 - a ** 2) / (2 * b * c)) * 180) / 3.14def get_angle(x1, x2, x3): x1,x2,x3 = np.array(x1),np.array(x2),np.array(x3) v1 = x1 - x2 v2 = x3 - x2 cosine = np.dot(v1, v2) / np.linalg.norm(v1) / np.linalg.norm(v2) return (math.acos(cosine) * 180) / 3.14# In[69]:import picklehsv_range = pickle.load(open("range.pickle", "rb"))hsv_range# In[28]:def inRange_modified(src, lowerb, upperb): lowerb, upperb = np.array(lowerb), np.array(upperb) include = (lowerb <= upperb) l1, u1 = np.where(include, lowerb, 0), upperb.copy() l2, u2 = lowerb.copy(), np.where(include, upperb, 255) dst1 = cv2.inRange(src, l1, u1) dst2 = cv2.inRange(src, l2, u2) dst = np.clip(dst1 + dst2, 0, 255) return dstdef clear_input(input_text): cleared = '' for key, group in itertools.groupby(input_text): # for thing in group: l = len(list(group)) if l > 2: if key is None: key = '?' print(key, l) cleared += key cleared = ''.join(re.findall('[0-9a-z< ]+', cleared)) while '<' in cleared: cleared = re.sub('[a-z0-9 ]<', '', cleared) cleared = re.sub('^<', '', cleared) return cleared# In[83]:replay = []time0 = time.time()fps_list = []# CLICK_ON_ANGLE = FalseCLICK_ON_ANGLE = True# Open Cameracapture = cv2.VideoCapture(1)if not capture.read()[0]: print('No camera #1') capture = cv2.VideoCapture(0) count_defects_history = []angle_history = []width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # width of video captured by the webcamheight = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # height of the video captured by the webcamrow_keys_points = get_keys(width, height)input_keys = []while capture.isOpened(): # Capture frames from the camera ret, frame = capture.read() time1 = time.time() fps_list.append(1/(time1 - time0)) fps_list = fps_list[-1000:] cv2.putText(frame,str(round(np.mean(fps_list[-100:]), 1)),(10,30), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) time0 = time1 # Get hand data from the rectangle sub window rec_coords = np.array(((100, 0), (frame.shape[0], frame.shape[1]))) cv2.rectangle(frame, tuple(rec_coords[:,0]), tuple(rec_coords[:,1]), (0, 255, 0), 0) crop_image = frame[rec_coords[0][0]:rec_coords[1][0], rec_coords[0][1]:rec_coords[1][1]] # Apply Gaussian blur blur = cv2.GaussianBlur(crop_image, (5, 5), 0) # Change color-space from BGR -> HSV hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV) hsv = cv2.GaussianBlur(hsv, (5, 5), 0) ### blur # Create a binary image with where white will be skin colors and rest is black mask2 = inRange_modified(hsv, hsv_range[:3], hsv_range[3:]) # Kernel for morphological transformation kernel = np.ones((5, 5)) # Apply morphological transformations to filter out the background noise iterations = 1 dilation = cv2.dilate(mask2, kernel, iterations=iterations) erosion = cv2.erode(dilation, kernel, iterations=iterations) # Apply Gaussian Blur and Threshold filtered = cv2.GaussianBlur(erosion, (5, 5), 0) ret, thresh = cv2.threshold(filtered, 127, 255, 0) # Show threshold image cv2.imshow("Thresholded", thresh) # Find contours image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) try: # Find contour with maximum area contour = max(contours, key=lambda x: cv2.contourArea(x)) # Create bounding rectangle around the contour x, y, w, h = cv2.boundingRect(contour) cv2.rectangle(crop_image, (x, y), (x + w, y + h), (0, 0, 255), 0) # Find convex hull hull = cv2.convexHull(contour) # Draw contour drawing = np.zeros(crop_image.shape, np.uint8) cv2.drawContours(drawing, [contour], -1, (0, 255, 0), 0) cv2.drawContours(drawing, [hull], -1, (0, 0, 255), 0) # Find convexity defects hull = cv2.convexHull(contour, returnPoints=False) defects = cv2.convexityDefects(contour, hull) # Use cosine rule to find angle of the far point from the start and end point i.e. the convex points (the finger # tips) for all defects count_defects = 0 finger_top = None hand_left = None hand_right = None for i in range(defects.shape[0]): s, e, f, d = defects[i, 0] start = tuple(contour[s][0]) end = tuple(contour[e][0]) far = tuple(contour[f][0]) a = math.sqrt((end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2) b = math.sqrt((far[0] - start[0]) ** 2 + (far[1] - start[1]) ** 2) c = math.sqrt((end[0] - far[0]) ** 2 + (end[1] - far[1]) ** 2)# angle = (math.acos((b ** 2 + c ** 2 - a ** 2) / (2 * b * c)) * 180) / 3.14 # if angle > 90 draw a circle at the far point if angle(a,b,c) <= 90: count_defects += 1 cv2.circle(crop_image, far, 1, [0, 0, 255], -1) cv2.line(crop_image, start, end, [0, 255, 0], 2) # cv2.circle(crop_image, end, 5, (0, 255, 0)) if finger_top is None: finger_top = end if CLICK_ON_ANGLE: hand_left = end hand_right = end else: if finger_top[1] > end[1]: finger_top = end if CLICK_ON_ANGLE: if hand_left[0] > end[0]: hand_left = end if hand_right[0] < end[0]: hand_right = end cv2.circle(crop_image, finger_top, 5, (0, 0, 255), 5) if CLICK_ON_ANGLE: cv2.circle(crop_image, hand_left, 5, (255, 0, 0), 5) cv2.circle(crop_image, hand_right, 5, (0, 255, 0), 5) cv2.line(crop_image, finger_top, hand_left, (255, 0, 0), 2) cv2.line(crop_image, finger_top, hand_right, (0, 255, 0), 2) if CLICK_ON_ANGLE:# print('Angle = ', get_angle(finger_top, hand_left, hand_right)) deg = get_angle(hand_left, finger_top, hand_right) if not deg is None: angle_history.append(deg) if len(angle_history) > 1000: angle_history = angle_history[:100] angle_ma = np.mean(angle_history[-5:]) cv2.putText(frame, str(round(angle_ma, 1)), (10, 60), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) count_defects_history.append(count_defects) if len(count_defects_history) > 1000: count_defects_history = count_defects_history[:100] # displaying the keyboard for key in row_keys_points: cv2.putText(frame, key[0], key[3], cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0)) cv2.rectangle(frame, key[1], key[2], (0, 255, 0), thickness = 2) # Print number of fingers bc = np.bincount(count_defects_history[-8:]) key_pressed = None if CLICK_ON_ANGLE: if angle_ma > 60: key_pressed = do_keypress(frame, (finger_top[0]+rec_coords[0][1], finger_top[1]+rec_coords[0][0]), row_keys_points) elif bc.max() > 3: log = ''#str(bc.max()) if bc.argmax() == 0: cv2.putText(frame, "ONE" + log, (10, 60), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) key_pressed = do_keypress(frame, (finger_top[0]+rec_coords[0][1], finger_top[1]+rec_coords[0][0]), row_keys_points) elif bc.argmax() == 1: cv2.putText(frame, "TWO" + log, (10, 60), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) elif bc.argmax() == 2: cv2.putText(frame, "THREE" + log, (10, 60), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) elif bc.argmax() == 3: cv2.putText(frame, "FOUR" + log, (10, 60), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) elif bc.argmax() == 4: cv2.putText(frame, "FIVE" + log, (10, 60), cv2.FONT_HERSHEY_DUPLEX, 1,(120,120,255)) else: pass input_keys.append(key_pressed) if len(input_keys) % 10 == 0: display.clear_output(1) print(clear_input(input_keys)) cv2.putText(frame, clear_input(input_keys)[-9:]+'|', (120,50), cv2.FONT_HERSHEY_SIMPLEX, 2, (120,120,255), 2) except: print('Exception 001') get_ipython().run_line_magic('tb', '') # Show required images cv2.imshow("Gesture", frame)# all_image = np.hstack((drawing, crop_image))# cv2.imshow('Contours', all_image) # Close the camera if 'q' is pressed if cv2.waitKey(1) == ord('q'): break capture.release()cv2.destroyAllWindows()ДОДАТОК Б ?ЛЮСТРАТИВН? МАТЕР?АЛИ ДЛЯ ДОПОВ?Д? ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download