АЛГОРИТМ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ ПРИ ПОМОЩИ ЖЕСТОВ - Студенческий научный форум

V Международная студенческая научная конференция Студенческий научный форум - 2013

АЛГОРИТМ УПРАВЛЕНИЯ КОМПЬЮТЕРОМ ПРИ ПОМОЩИ ЖЕСТОВ

Дриленко М.В. 1, Луцко Н.А. 1
1КубГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
В настоящее время получили широкое распространение так называемые «разумные» технологии. Основой таких технологий является «дружелюбный» по отношению к пользователю интерфейс, так можно рассматривать любые технологии связанные с графикой, будь то мониторы или телевизоры, а так же всяческие игровые приставки и консоли. В данном случае возможно увеличить удобство взаимодействия, а в случае с игровым консолями повысить качество самой игры путем добавления нового способа взаимодействия. Таким способом может стать возможность управления цифровым устройством без прикосновения к нему, по средствам использования рук в качестве непосредственного манипулятора. Однако при распознавании жестов необходимо обнаруживать на изображении руки человека и прослеживать изменение их положения или формы с течением времени. Для этого обычно используют либо детектирование движения [1], либо обнаружение областей, имеющих цвет кожи[2], либо оба этих подхода совместно [3]. Как правило, обнаруживаемые жесты имеют достаточно большой масштаб. В таких ситуациях обычно наряду с цветом используется детектирование областей движения. При распознавании мелкомасштабных жестов, в которых задействованы отдельные пальцы, кисть руки занимает существенную часть кадра [1]. Фон в этих случаях однородный и контрастирует по цвету с кожей человека. В ходе исследования было разработано программное обеспечение управления манипулятором в среде Windows XP/7 при помощи движения ладонью, при направленной веб камере, что даёт возможность управления компьютером на расстоянии, что в свою очередь удобно в ходе конференций и презентаций. Также в более специфических сферах, таких как военно-промышленный комплекс или медицина.

Эмуляция клавиш манипулятора

Для удобства управления была разработана модель нажатия клавиши «мыши» с помощью жеста, таким образом, возможно, выбирать и переносить ярлыки, нажимать кнопки и использовать все функции операционной системы. Для нажатия на кнопку необходимо остановить указатель и в течение двух секунд (при стандартный настройках программы), удерживать указатель на месте. Данное действие откроет меню, где будет предложены варианты нажатий (одиночное нажатие, двойное, scroll). При данном подходе имеется возможность использовать все возможности среды операционной системы.

Программный код эмуляции нажатия кнопок манипулятора:

public static class NativeMethods

{

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

static int GetWParamFromButton(MouseButton btn)

{

switch (btn)

{

case MouseButton.Left: return 0x0001;

case MouseButton.Middle: return 0x0010;

case MouseButton.Right: return 0x0002;

default: thrownewWin32Exception("Невозможно преобразовать значение!");

}

}

public static void MouseClick(IntPtr hWnd, MouseButton btn, int x, int y)

{

int xyPoint = NativeMacros.MAKELONG(x, y);

int wParam = GetWParamFromButton(btn);

SendMessage(hWnd, (int)btn, wParam, xyPoint);

SendMessage(hWnd, (int)btn + 1, wParam, xyPoint);

}

public static int MouseDown(IntPtr hWnd, MouseButton btn, int x, int y)

{

int xyPoint = NativeMacros.MAKELONG(x, y);

int wParam = GetWParamFromButton(btn);

return SendMessage(hWnd, (int)btn, wParam, xyPoint);

}

public static int MouseUp(IntPtr hWnd, MouseButton btn, int x, int y)

{

int xyPoint = NativeMacros.MAKELONG(x, y);

int wParam = GetWParamFromButton(btn);

return SendMessage(hWnd, (int)btn + 1, wParam, xyPoint);

}

public static int KeyPress(IntPtr hWnd, Keys keys, bool up)

{

int WM_KEY = up ? 0x0101 /* WM_KEYUP */ : 0x0100 /* WM_KEYDOWN */;

return SendMessage(hWnd, WM_KEY, (int)keys, 0);

}

}

public struct NativeMacros

{

public static int GET_X_LPARAM(int x)

{

return x & 0xffff;

}

///

/// C++ макрос для GET_Y_LPARAM.

///

public static int GET_Y_LPARAM(int x)

{

return (x >> 16) & 0xffff;

}

public static int MAKELONG(int x, int y)

{

return (x & 0xffff) | ((y & 0xffff)

Просмотров работы: 1211