KR101821418B1 - 데이터의 표현, 조작 및 교환을 포함하는 제스처-기반 시스템 - Google Patents
데이터의 표현, 조작 및 교환을 포함하는 제스처-기반 시스템 Download PDFInfo
- Publication number
- KR101821418B1 KR101821418B1 KR1020117029041A KR20117029041A KR101821418B1 KR 101821418 B1 KR101821418 B1 KR 101821418B1 KR 1020117029041 A KR1020117029041 A KR 1020117029041A KR 20117029041 A KR20117029041 A KR 20117029041A KR 101821418 B1 KR101821418 B1 KR 101821418B1
- Authority
- KR
- South Korea
- Prior art keywords
- data
- gesture
- event
- space
- offset
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 245
- 230000002452 interceptive effect Effects 0.000 claims abstract description 41
- 230000033001 locomotion Effects 0.000 claims description 63
- 239000002775 capsule Substances 0.000 claims description 18
- 230000003287 optical effect Effects 0.000 claims description 15
- 230000005684 electric field Effects 0.000 claims description 12
- 230000004913 activation Effects 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 10
- 230000002123 temporal effect Effects 0.000 claims description 10
- 230000002776 aggregation Effects 0.000 claims description 9
- 238000004220 aggregation Methods 0.000 claims description 9
- 239000002131 composite material Substances 0.000 claims description 9
- 230000001360 synchronised effect Effects 0.000 claims description 9
- 238000012423 maintenance Methods 0.000 claims description 8
- 230000014759 maintenance of location Effects 0.000 claims description 5
- 238000000151 deposition Methods 0.000 claims description 2
- 238000004826 seaming Methods 0.000 claims 1
- 230000001131 transforming effect Effects 0.000 claims 1
- 238000012545 processing Methods 0.000 abstract description 43
- 238000009826 distribution Methods 0.000 abstract description 15
- 108090000623 proteins and genes Proteins 0.000 description 254
- 102000004169 proteins and genes Human genes 0.000 description 254
- 235000018102 proteins Nutrition 0.000 description 251
- 210000003811 finger Anatomy 0.000 description 120
- 239000010410 layer Substances 0.000 description 87
- 230000008569 process Effects 0.000 description 70
- 238000010586 diagram Methods 0.000 description 48
- 230000006870 function Effects 0.000 description 39
- 239000010454 slate Substances 0.000 description 33
- 210000004247 hand Anatomy 0.000 description 32
- 210000003813 thumb Anatomy 0.000 description 31
- 230000007246 mechanism Effects 0.000 description 30
- 239000003550 marker Substances 0.000 description 22
- 239000002002 slurry Substances 0.000 description 20
- 230000000875 corresponding effect Effects 0.000 description 19
- 230000003993 interaction Effects 0.000 description 19
- 230000008859 change Effects 0.000 description 16
- 230000005540 biological transmission Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 15
- 230000003068 static effect Effects 0.000 description 14
- 230000000007 visual effect Effects 0.000 description 14
- 230000009471 action Effects 0.000 description 13
- 238000006073 displacement reaction Methods 0.000 description 12
- 238000013507 mapping Methods 0.000 description 12
- 230000009466 transformation Effects 0.000 description 12
- 238000004422 calculation algorithm Methods 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 10
- 239000000284 extract Substances 0.000 description 10
- 238000009877 rendering Methods 0.000 description 10
- 125000002066 L-histidyl group Chemical group [H]N1C([H])=NC(C([H])([H])[C@](C(=O)[*])([H])N([H])[H])=C1[H] 0.000 description 9
- 239000000203 mixture Substances 0.000 description 9
- 239000000758 substrate Substances 0.000 description 9
- 101800001072 Protein 1A Proteins 0.000 description 8
- 238000001514 detection method Methods 0.000 description 8
- 230000014509 gene expression Effects 0.000 description 8
- 230000007935 neutral effect Effects 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 6
- 238000001914 filtration Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 241000699666 Mus <mouse, genus> Species 0.000 description 5
- 101800001065 Protein 2B Proteins 0.000 description 5
- 239000000470 constituent Substances 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000003860 storage Methods 0.000 description 5
- 238000012800 visualization Methods 0.000 description 5
- 102000004506 Blood Proteins Human genes 0.000 description 4
- 108010017384 Blood Proteins Proteins 0.000 description 4
- 230000001276 controlling effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 4
- 238000012886 linear function Methods 0.000 description 4
- 230000008447 perception Effects 0.000 description 4
- 238000000751 protein extraction Methods 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 239000000872 buffer Substances 0.000 description 3
- 230000001149 cognitive effect Effects 0.000 description 3
- 238000004883 computer application Methods 0.000 description 3
- 230000004907 flux Effects 0.000 description 3
- 210000002414 leg Anatomy 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000002085 persistent effect Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 239000010979 ruby Substances 0.000 description 3
- 229910001750 ruby Inorganic materials 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 2
- 240000007643 Phytolacca americana Species 0.000 description 2
- 235000009074 Phytolacca americana Nutrition 0.000 description 2
- 101800000442 Protein X2 Proteins 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 2
- 230000027455 binding Effects 0.000 description 2
- 238000009739 binding Methods 0.000 description 2
- 230000001364 causal effect Effects 0.000 description 2
- QBWCMBCROVPCKQ-UHFFFAOYSA-N chlorous acid Chemical compound OCl=O QBWCMBCROVPCKQ-UHFFFAOYSA-N 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 210000004932 little finger Anatomy 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 230000003362 replicative effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000010079 rubber tapping Methods 0.000 description 2
- 239000000523 sample Substances 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 238000001308 synthesis method Methods 0.000 description 2
- 241000237858 Gastropoda Species 0.000 description 1
- 101000663392 Hordeum vulgare Serpin-Z4 Proteins 0.000 description 1
- 241000288904 Lemur Species 0.000 description 1
- 101710159910 Movement protein Proteins 0.000 description 1
- 241000699670 Mus sp. Species 0.000 description 1
- 206010028980 Neoplasm Diseases 0.000 description 1
- 101710193592 ORF3a protein Proteins 0.000 description 1
- 101710087110 ORF6 protein Proteins 0.000 description 1
- 101710128341 ORF7a protein Proteins 0.000 description 1
- 241000369592 Platycephalus richardsoni Species 0.000 description 1
- 101800001064 Protein 2C Proteins 0.000 description 1
- 101800001092 Protein 3B Proteins 0.000 description 1
- 101710100170 Unknown protein Proteins 0.000 description 1
- 101800003106 VPg Proteins 0.000 description 1
- 101800001133 Viral protein genome-linked Proteins 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 239000000853 adhesive Substances 0.000 description 1
- 230000001070 adhesive effect Effects 0.000 description 1
- 239000002390 adhesive tape Substances 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000011449 brick Substances 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 201000011510 cancer Diseases 0.000 description 1
- 230000005465 channeling Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 230000009850 completed effect Effects 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000005672 electromagnetic field Effects 0.000 description 1
- 230000003631 expected effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 239000003292 glue Substances 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 239000012464 large buffer Substances 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000001404 mediated effect Effects 0.000 description 1
- 239000012528 membrane Substances 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000003973 paint Substances 0.000 description 1
- 238000004091 panning Methods 0.000 description 1
- 230000003071 parasitic effect Effects 0.000 description 1
- 230000000704 physical effect Effects 0.000 description 1
- 230000010399 physical interaction Effects 0.000 description 1
- 239000004033 plastic Substances 0.000 description 1
- 229920003023 plastic Polymers 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 235000004252 protein component Nutrition 0.000 description 1
- 238000004080 punching Methods 0.000 description 1
- 230000004043 responsiveness Effects 0.000 description 1
- 230000035807 sensation Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 229920006300 shrink film Polymers 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 125000006850 spacer group Chemical group 0.000 description 1
- 230000003595 spectral effect Effects 0.000 description 1
- 238000009987 spinning Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G16—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
- G16H—HEALTHCARE INFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR THE HANDLING OR PROCESSING OF MEDICAL OR HEALTHCARE DATA
- G16H10/00—ICT specially adapted for the handling or processing of patient-related medical or healthcare data
- G16H10/20—ICT specially adapted for the handling or processing of patient-related medical or healthcare data for electronic clinical trials or questionnaires
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/017—Gesture based interaction, e.g. based on a set of recognized hand gestures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/16—Constructional details or arrangements
- G06F1/1613—Constructional details or arrangements for portable computers
- G06F1/1633—Constructional details or arrangements of portable computers not specific to the type of enclosures covered by groups G06F1/1615 - G06F1/1626
- G06F1/1684—Constructional details or arrangements related to integrated I/O peripherals not covered by groups G06F1/1635 - G06F1/1675
- G06F1/1694—Constructional details or arrangements related to integrated I/O peripherals not covered by groups G06F1/1635 - G06F1/1675 the I/O peripheral being a single or a set of motion sensors for pointer control or gesture input obtained by sensing movements of the portable computer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/03—Arrangements for converting the position or the displacement of a member into a coded form
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0487—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
- G06F3/0488—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
- G06F3/04883—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures for inputting data by handwriting, e.g. gesture or text
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/10—Image acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/20—Movements or behaviour, e.g. gesture recognition
- G06V40/28—Recognition of hand or arm movements, e.g. recognition of deaf sign language
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2203/00—Indexing scheme relating to G06F3/00 - G06F3/048
- G06F2203/038—Indexing scheme relating to G06F3/038
- G06F2203/0381—Multimodal input, i.e. interface arrangements enabling the user to issue commands by simultaneous use of input devices of different nature, e.g. voice plus gesture on digitizer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2203/00—Indexing scheme relating to G06F3/00 - G06F3/048
- G06F2203/048—Indexing scheme relating to G06F3/048
- G06F2203/04808—Several contacts: gestures triggering a specific function, e.g. scrolling, zooming, right-click, when the user establishes several contacts with the surface simultaneously; e.g. using several fingers or a combination of fingers and pen
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Social Psychology (AREA)
- Psychiatry (AREA)
- Epidemiology (AREA)
- Primary Health Care (AREA)
- Public Health (AREA)
- Medical Informatics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- User Interface Of Digital Computer (AREA)
- Position Input By Displaying (AREA)
- Image Analysis (AREA)
Abstract
3-공간 입력을 검출, 표현 및 해석하기 위한 시스템 및 방법이 기재된다. 상기 시스템의 실시예는, SOE의 맥락에서, 공간 추적 데이터의 복수의 소스로부터 저-레벨 데이터를 프로세싱하고, 이들 의미적으로 비상관적인 시공간 데이터를 분석하며, 동적으로 설정 가능한 암시적 및 명시적 제스처 기술어에 따라, 고-레벨 제스처 이벤트를 생성한다. 생성된 이벤트는 상호대화형 시스템에 의해 소비되기에 적합하며, 실시예는 이들 소비자에게 이벤트 배포를 제어 및 발효하기 위한 하나 이상의 수단을 제공한다. 실시예는 자신의 이벤트의 소비자에게, 임의의 공간적 및 의미적 기준계 간에 제스처 이벤트를 변환하기 위한 기능을 제공한다.
Description
관련 출원들
이 출원은 2009년05월04일에 미국(US) 특허 출원 제61/175,374호를 기초로 우선권을 주장한다.
이 출원은 2009년10월02일자 미국(US) 특허 출원 제12/572,689호의 일부계속출원이다.
이 출원은 2008년04월24일자 미국(US) 특허 출원 제12/109,263호의 일부계속 출원이다.
이 출원은 2009년09월03일자 미국(US) 특허 출원 제12/553,845호의 일부계속출원이다.
기술 분야
연산 프로세스 내에서 이뤄지는, 또는 연산 프로세스들 간에 이뤄지는 데이터의 표현, 조작 및 교환을 포함하는 제스처(gesture) 기반 제어 시스템과 관련된 실시예들이 기재된다.
종래의 프로그래밍 환경은 네트워크 간 실행(cross-network execution) 및/또는 복수의 연산 프로세스들 간 유연한 데이터 공유를 완전히 지원하지 않는다. 예를 들어, 종래의 사용자측 연산 플랫폼은 프로세스들 간에 이벤트 데이터를 전송하기 위한 기능을 제공한다. 그러나 이들 종래의 수단은 모두, 다중-프로세스와 다중-머신 적용예를 구축하기 어렵게 한다는 단점을 지닌다. 예를 들어, 종래의 이벤트 프레임워크는 강력하게 유형화되어(typed) 있으며, 이러한 강력한 유형화는 이벤트 프레임워크를 유연하지 못하게 하며, 점점 대중화되고 있는 동적 애플리케이션의 기능과 어울리지 않는다. 또한, 종래의 프레임워크는 1대1(point-to-point) 데이터 전송만 지원하도록 설정되어 있으며, 이 때문에, 적잖은 개별 프로세스들의 활동들을 조화시키는 것이 어렵거나 불가능하다. 종래의 프레임워크는 또한 특정 로컬, 즉, 인-메모리 데이터 구조에 크게 좌우되며, 이로 인해, 상기 프레임워크가 온-디스크 저장 또는 네트워크를 통한 전송에 적합하지 않다.
참조로서의 포함
이 명세서에서 언급되는 각각의 특허, 특허 출원 및/또는 공개문은 본원에 참조로서 포함된다고 개별적으로 특정하게 나타나는 경우와 동일한 범위까지 전체 내용이 참조로서 본원에 포함된다.
도 1은 하나의 실시예에 따르는 3-공간 입력을 검출, 표현, 및 해석하기 위한 시스템의 블록도이다.
도 2는 하나의 실시예에 따르는 3-공간 입력을 검출, 표현, 및 해석하기 위한 프로세싱-중심의 블록도이다.
도 3은 하나의 실시예에 따르는 3-공간 입력을 검출, 표현, 및 해석하기 위한 시스템의 대안적 블록도이다.
도 4는 하나의 실시예에 따르는 제스처 I/O의 블록도이다.
도 5는 하나의 실시예에 따르는 제스처 I/O의 데이터 펀넬이다.
도 6은 하나의 실시예에 따르는 제스처 I/O의 제스처 엔진이다.
도 7은 하나의 실시예에 따르는 배포자의 익명의, 비동기식 레포지토리 배포 메커니즘의 블록도이다.
도 8은 하나의 실시예에 따르는 배포자의 직행 수신자 배포 패커니즘의 블록도이다.
도 9는 하나의 실시예에 따르는 공간-연속체 입력 시스템의 블록도이다.
도 10은 하나의 실시예에 따르는, 제스처 제어 시스템의 블록도이다.
도 11은 하나의 실시예에 따르는 마킹 태그의 다이어그램이다.
도 12는 하나의 실시예에 따르는 제스처 어휘에서의 포즈의 다이어그램이다.
도 13은 하나의 실시예에 따르는 제스처 어휘에서의 배향의 다이어그램이다.
도 14는 하나의 실시예에 따르는 제스처 어휘에서의 양손 조합의 다이어그램이다.
도 15는 하나의 실시예에 따르는 제스처 어휘에서의 배향 혼합의 다이어그램이다.
도 16은 하나의 실시예에 따르는 시스템 동작의 순서도이다.
도 17은 하나의 실시예에 따르는 명령어의 일례이다.
도 18은 하나의 실시예에 따르는 슬럭스, 프로틴 및 풀을 이용한 데이터 표현을 포함하는 프로세싱 환경의 블록도이다.
도 19는 하나의 실시예에 따르는 프로틴의 블록도이다.
도 20은 하나의 실시예에 따르는 descrip의 블록도이다.
도 21은 하나의 실시예에 따르는 ingest의 블록도이다.
도 22는 하나의 실시예에 따르는 슬럭스의 블록도이다.
도 23A은 하나의 실시예에 따르는 풀에서의 프로틴의 블록도이다.
도 23B는 하나의 실시예에 따르는 슬러 헤드 포맷을 도시한다.
도 23C는 하나의 실시예에 따르는 프로틴을 이용하는 순서도이다.
도 23D는 하나의 실시예에 따르는 프로틴을 구성 또는 생성하기 위한 순서도이다.
도 24는 하나의 실시예에 따르는 슬럭스, 프로틴, 및 풀을 이용하는 데이터 교환을 포함하는 프로세싱 환경의 블록도이다.
도 25는 하나의 실시예에 따르는 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 이벤트에 다 함께 응답할 수 있다.
도 26은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 이벤트에 다 함께 응답할 수 있다.
도 27은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 이벤트에 다 함께 응답할 수 있다.
도 28은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 그래픽 이벤트에 다 함께 응답할 수 있다.
도 29는 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 실행 중인 프로그램의 상태 기반 검사, 시각화, 및 디버깅이 가능해진다.
도 30은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 프로세스 풀에서 생성되고, 그 곳에 위치하는 상태 정보의 특성에 영향을 미치거나 제어하는 것이 가능해진다.
도 2는 하나의 실시예에 따르는 3-공간 입력을 검출, 표현, 및 해석하기 위한 프로세싱-중심의 블록도이다.
도 3은 하나의 실시예에 따르는 3-공간 입력을 검출, 표현, 및 해석하기 위한 시스템의 대안적 블록도이다.
도 4는 하나의 실시예에 따르는 제스처 I/O의 블록도이다.
도 5는 하나의 실시예에 따르는 제스처 I/O의 데이터 펀넬이다.
도 6은 하나의 실시예에 따르는 제스처 I/O의 제스처 엔진이다.
도 7은 하나의 실시예에 따르는 배포자의 익명의, 비동기식 레포지토리 배포 메커니즘의 블록도이다.
도 8은 하나의 실시예에 따르는 배포자의 직행 수신자 배포 패커니즘의 블록도이다.
도 9는 하나의 실시예에 따르는 공간-연속체 입력 시스템의 블록도이다.
도 10은 하나의 실시예에 따르는, 제스처 제어 시스템의 블록도이다.
도 11은 하나의 실시예에 따르는 마킹 태그의 다이어그램이다.
도 12는 하나의 실시예에 따르는 제스처 어휘에서의 포즈의 다이어그램이다.
도 13은 하나의 실시예에 따르는 제스처 어휘에서의 배향의 다이어그램이다.
도 14는 하나의 실시예에 따르는 제스처 어휘에서의 양손 조합의 다이어그램이다.
도 15는 하나의 실시예에 따르는 제스처 어휘에서의 배향 혼합의 다이어그램이다.
도 16은 하나의 실시예에 따르는 시스템 동작의 순서도이다.
도 17은 하나의 실시예에 따르는 명령어의 일례이다.
도 18은 하나의 실시예에 따르는 슬럭스, 프로틴 및 풀을 이용한 데이터 표현을 포함하는 프로세싱 환경의 블록도이다.
도 19는 하나의 실시예에 따르는 프로틴의 블록도이다.
도 20은 하나의 실시예에 따르는 descrip의 블록도이다.
도 21은 하나의 실시예에 따르는 ingest의 블록도이다.
도 22는 하나의 실시예에 따르는 슬럭스의 블록도이다.
도 23A은 하나의 실시예에 따르는 풀에서의 프로틴의 블록도이다.
도 23B는 하나의 실시예에 따르는 슬러 헤드 포맷을 도시한다.
도 23C는 하나의 실시예에 따르는 프로틴을 이용하는 순서도이다.
도 23D는 하나의 실시예에 따르는 프로틴을 구성 또는 생성하기 위한 순서도이다.
도 24는 하나의 실시예에 따르는 슬럭스, 프로틴, 및 풀을 이용하는 데이터 교환을 포함하는 프로세싱 환경의 블록도이다.
도 25는 하나의 실시예에 따르는 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 이벤트에 다 함께 응답할 수 있다.
도 26은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 이벤트에 다 함께 응답할 수 있다.
도 27은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 이벤트에 다 함께 응답할 수 있다.
도 28은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 복수의 실행 중인 프로그램이 공유되고, 장치에 의해 발생된 그래픽 이벤트에 다 함께 응답할 수 있다.
도 29는 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 실행 중인 프로그램의 상태 기반 검사, 시각화, 및 디버깅이 가능해진다.
도 30은 또 다른 대안적 실시예에 따르는, 복수의 장치 및 상기 복수의 장치 상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마(Plasma) 구조체(즉, 풀, 프로틴, 및 슬러)가 사용됨으로써, 프로세스 풀에서 생성되고, 그 곳에 위치하는 상태 정보의 특성에 영향을 미치거나 제어하는 것이 가능해진다.
공간 추적 데이터의 복수의 소스로부터의 저-레벨 데이터를 처리하기 위한 시스템 및 방법이 기재된다. 상기 시스템 및 방법의 실시예는, 공간 운영 환경(SOE: Spatial Operating Environment)의 맥락에서 제공되며, 이하에서 상세히 설명된다. 제스처 제어 시스템, 즉 제스처 기반 제어 시스템을 포함하는 SOE는 공간 사용자 인터페이스(SUI) 또는 공간 인터페이스(SI)라고도 지칭될 수 있다.
도 1은, 3-공간 입력(three-space input)을 검출, 표현 및 해석(interpret)하기 위한 일 실시예에 따르는 시스템(10)의 블록도이다. 시스템(10)의 실시예는, SOE(5)의 맥락에서, 공간 추적 데이터의 복수의 소스로부터 온 저-레벨 데이터(1)를 처리하고, 이들, 즉 의미적으로 상관되지 않은 시공간 데이터를 분석하여, 동적으로 설정 가능한 암시적(implicit) 및 명시적(explicit) 제스처 기술어의 세트(2)에 따라, 고-레벨 제스처 이벤트(3)를 생성한다. 생성된 이벤트(3)는 상호대화형 시스템(도면 상 도시되지 않음)에 의해 소비되기에 적합하며, 본 실시예에서, 이들 소비자에게로의 이벤트 배포를 제어하고 수행하기 위한 하나 이상의 수단(4)이 제공된다. 본 실시예에서, 이벤트(3)의 소비자에게, 제스처 이벤트를 임의의 공간적 및 의미적 기준 프레임들 중에서 변환하기 위한 기능이 더 제공된다.
본원의 실시예들에서 중요한 것은 제스처의 개념적 도메인은 공간-의미 연속체(spatial and semantic continuum)(6)라는 것이다. 한 손 또는 양손이 협업하여, 3차원 공간에서 곡선 궤적을 그리며, 동시에, 전체 손가락 포즈들이 시간의 흐름에 따라 전개되는 완전히 무제약적인 자유공간 제스처 입력(6A)이 상기 연속체(6)의 한쪽 끝에 있다. 다른 한 끝에는, 하나 이상의 손가락이 1차원 또는 2차원 다기관 상에 놓이도록 “제약”되는 표면-접촉 입력(6D)(문헌에서는 종종 이러한 형태를 “터치-기반 입력(touch-based input)”이라고 일컬음)이 있다. 이러한 끝과 끝 사이에, “호버 입력(hover input)”(6C)이라고 명명될 수 있는, 손가락이 다기관에 가까이 유지되지만 다기관과 접촉하지는 않는 정밀화된 터치가 존재하는데, 이러한 접촉 요건의 완화에 의해, 추가적인 자유도가 활용될 수 있다. 더 일반적으로, 제스처가 하나 이상의 표면에 대한 지정된 근접 범위에서 발생하거나, 특정 공간으로 제한되는 “근접 입력(proximal input)”(6B)에 대해 말하는 것이 유익하다. 각각의 제스처 “카테고리”가 다음 카테고리로 서서히 바뀌는 것(즉, 자유공간(6A)에서 근접(6B)으로, 호버(6C)로, 터치(6D)로 서서히 바뀜)이 명확하고, 덧붙여, 이러한 카테고리 각각은 다음 카테고리를 적절하게, 형식적으로, 그리고 기하학적으로 포함하는 것이 명확하다. “제스처 입력”의 이러한 연속체(6)는 인간의 손에 의해 만들어진 것으로 국한되지 않음이 이해될 것이다: 태깅(tagging)된, 또는 그 밖의 다른 방식으로 추적 가능해진 물체가 입력 연속체(6)를 유효하게 구성한다.
본원의 실시예들에 의해, 입력 연속체(6)를 따르는 포인트가 고려될 수 있는 두 가지 방식이 명확하게 구별된다. 감지(sensing)의 관점에서, 서로 다른 입력 수단이 연속체(6)의 서로 다른 영역을 지원하는 것처럼 보인다. 예를 들어, 고충실도(high fidelity) 동작-캡처 리그(motion capture rig)가 6 자유도 자유공간 입력(6A)을 제공하는 것처럼 보이며, 반면에 전기장 감지 장치는 호버-스타일 입력(6C)을 생성하고, 일반적인 용량성 감지 유닛은 터치 입력(6D)을 보고하는 것으로 보인다. 이벤트 소비의 관점에서, 따라서 의미적(semantic) 관점에서, 이벤트의 저-레벨 근원은 거의 중요치 않으며, 실제로, 하나의 이벤트를 서로 다른 표현(가령, 자유공간 제스처, 또는 호버 제스처)으로 렌더링함을 이해할 수 있는 것이 크게 유용하다. 그러나 기존에는, 두 가지 관점이 융합되는 경향이 있었다. 즉, 다른 시스템은 예를 들어 터치스크린 표면이 2차원 터치 이벤트를 필수적으로 그리고 단독으로 생성한다고 간주하는 것이 일반적이다.
본원에 기재된 실시예의 한 가지 이점은, 이와 반대로, 두 관점들 간 구별을 유지한다는 것이다. 도 2는 일 실시예에 따르는, 3-공간 입력을 검출, 표현 및 해석하기 위한 시스템(10)의 프로세싱-중심 블록도이다. 일 실시예의 제 1 단계(11)는 소스들의 이종 집합으로부터의 저-레벨 입력을 대조(collate)하고, 다양하게 발생된 저-레벨 이벤트들을 균일하게 표현되는 시공간 데이터의 하나의 단일 스트림으로 순응시킨다. 제 2 단계(12)는 순응된 저-레벨 데이터를 의미적으로 유의미한 제스처 이벤트들로 파싱(parsing)하고, 이들을, 중립의, 그러나 완전히 명료화된(fully articulated) 형태로 표현한다. 제 3 단계(13)는 최종 중립 이벤트를 소비자에게 배포하고, 소비자가 임의의 이벤트를 로컬하게 최적화된 의미적 형태로 변환할 수 있도록 하는 기능을 제공한다. 따라서 예를 들자면 일 실시예에서 테이블 표면과 관련하여 터치 이벤트를 발생시키기 위해 퍼-핑거(per-finger) 고충실도 6 자유도 입력이 사용되며, 이 경우, 테이블 표면 자체는 비-계장화된 것(uninstrumented)이지만, 대신, 기하학적 구조로서 수학적으로 표현된다. 그래서, 특수 터치-감지식 하드웨어 없이도, 기하학적 교점(geometric intersection)을 통해 계산적으로 터치가 추론될 수 있다. 간단히 말하면, 실시예의 형식화에 의해, 다양한 공간 입력의 완전히 일반화된 수행이 가능해진다.
다음의 기재는 실시예에 대한 것이며, 이러한 기재는 (1) 실시예에 대한 더 넓은 상황: 시스템이 중요한 역할을 하는 시스템의 통상적인 환경, (2) 실시예를 포함하는 3 파이프라인형 구성요소에 대한 요약, (3) 3개의 구성요소에 대한 상세한 설명(각각에는 이따금 설명적 예시가 제공됨), (4) 파이프라인의 두 번째 구성요소의 완전한 구현, (5) 실시예에 의해 가능해 지는 여러 다른 상호대화형 시스템을 설명하는 네 가지 시나리오를 포함한다.
이하의 기재에서, 많은 특정 세부사항이 본원에 기재된 실시예에 대한 기재와, 실시예의 완전한 이해를 제공하기 위해 도입된다. 그러나 해당 업계 종사자라면 이들 실시예가 특정 세부사항들 중 하나 이상 없이도, 또는 그 밖의 다른 구성요소나 시스템 등을 포함해서 실시될 수 있음을 알 것이다. 다른 예를 들자면, 본원의 실시예의 양태를 흐리는 것을 피하기 위해, 공지된 구조 또는 동작은 상세히 도시되거나 설명되지 않는다.
다음의 용어들은 본원에서 사용될 때 다음의 일반적인 의미를 갖는 것으로 의도된다. 용어 “프로세스(process)”는, 본원에서 사용될 때, 분리될 수 있는 프로그램 실행 맥락을 의미한다. 프로세스 구현의 기술적 세부사항에 따라 컴퓨터 아키텍처 및 운영 체제가 달라진다. 본원에 기재된 메커니즘은 많은 프로세스 구현예에 걸쳐 동작하여, 하이브리드 애플리케이션 설계 또는 설정을 촉진시키며, 이로써, 가능한 많은 이용 가능한 컴퓨팅 자원이 이용된다.
본원에서 사용될 때 용어 “장치(device)”는 하나 이상의 프로그램 또는 알고리즘을 실행하는 임의의 프로세서-기반 장치, 하나 이상의 프로그램 또는 알고리즘 하에서 구동되는 임의의 프로세서-기반 장치, 및/또는 이러한 장치에 연결되어 있는 임의의 장치를 의미한다. 용어 “이벤트(event)”는, 본원에서 사용될 때, 실행 중인 프로그램 또는 알고리즘, 프로세서-기반 장치, 및/또는 프로세서-기반 장치와 연결된 장치와 연계된 임의의 이벤트를 의미하며, 가령, 이벤트는 입력, 출력, 제어, 상태, 상태 변화, 액션, 데이터(데이터의 포맷이나 데이터와 연계된 프로세싱 단계와 관계없이) 등을 포함할 수 있다(그러나 이에 국한되지 않음).
앞서 기재된 바와 같이, 공간 운영 환경(SOE: Spatial Operating Environment)의 맥락에서 시스템 및 방법의 실시예가 제공된다. SOE는 완전한 애플리케이션 개발 및 실행 플랫폼이며, 많은 면에서 운영체제와 유사하다. 그러나 SOE는 실세계 3차원 기하학적 형태와, 컴퓨터와 인간 조작자 간의 효율적인 고 대역폭 상호대화 모두 보장하며, 따라서 정교한 인터페이스 방식을 구현한다. 결국, SOE는, 새로운 저-레벨( 및 미디엄-레벨) 시스템 인프라구조를 이용해, 이러한 고도의 늬앙스 인터페이스(nuanced interface)의 요건에 부적합한 많은 전통적인 OS 서비스 및 아키텍처를 대체한다.
도 3은 일 실시예에 따라, 3-공간 입력을 검출, 표현 및 해석하기 위한 시스템(20)의 대안적 블록도이다. 상기 시스템(20)은 SOE(5)의 맥락에서 동작 중이다. SOE(5)의 주요 구성요소는 제스처 I/O(14), 네트워크-기반 데이터 표현, 전송 및 교환(15), 및 공간적으로 순응된 디스플레이 메쉬(display mesh)(16)이다. SOE(5)의 구성요소 각각은 이하에서 상세히 설명된다.
일 실시예의 제스처 I/O(14)를 설명할 때, 인간의 손의 조합적 연쇄(손가락들의 굽힘(flexion)의 집합에 의해 형성되는 “포즈”와 함께 손의 전체 위치와 배향)와 대부분의 사람들이 하는 미세 운동 제어가 함께, 손-기반 제스처를 SOE 입력 시스템의 중요한 외부 구성요소로 만든다. 따라서 SOE(5)는 3-공간 전체에 걸쳐 높은 충실도로 손을 추적한다. 그 밖의 다른 부수적 물체(가령, 채널링 또는 디지털 콘텐츠 조작을 위한 물리적이며, 종종 쥘 수 있는 “도구”)가 또한 추적될 수 있다. 제스처 상호대화는, 시각적, 청각적, 및 촉각적 영역에서 동작하는 2차원 및 3차원 디스플레이 상에서 나타나는 동적 개체(dynamic entity)와 관련하여 가장 빈번하게 수행된다. (a) 시스템에 의한 제스처 입력의 순간적인 해석과 지속적인 해석이 가능하고, (b) 시스템 상태와 로컬 제스처 히스토리를 바탕으로, 가능한 제스처 "다음 단계"를 나열하며, (c) 제스처 시퀀스의 임박한 조작 결과의 밑그림 같은 "미리보기"를 제공하기 위해, 능동 피드백 “글리프(glyphs)"가 SOE의 디스플레이들을 동시에 사용한다.
구조적으로, SOE의 제스처 I/O(14)의 입력부가 거의 선형의 파이프라인의 형태를 취한다. 가장 이른 스테이지에서, 파이프라인은, 임의의 개수, 임의의 유형의, 및/또는 임의의 조합의 데이터 스트림/소스 SY(여기서 Y는 임의의 숫자 1, 2, ...)를 포함하는 복수의 가능한 소스로부터의 공간 추적 정보들을 처리하고, 상관하며(correlate), 잇는(seam) 기능을 하고, 뒤 이어, 개별 요소들을 구성과 희망도(desirability)가 알려진 집합으로 모으는 기능을 한다(가령, 처음에는 따로 따로 고려되던 손가락들이 하나의 전체 손 표현으로 모인다). 파이프라인의 두 번째 스테이지는, 첫 번째 스테이지의 결과를 해석하고, 제스처 발생을 검출하고 명확화하려는 제스처 엔진이다. 세 번째 스테이지에서, 미디엄-레벨 표현의 “이벤트”가 이벤트 소비자에게 전달되고, 이벤트 소비자는 이들 속성 이벤트(generic event)를, 로컬 환경과 기하학적으로 관련된 형태로 변환하기 위한 SOE 기능을 이용할 수 있다.
일 실시예의 네트워크-기반 데이터 표현, 전송 및 교환(15)은 “플라스마(Plasma)”라고 일컬어지는 시스템을 포함하며, 상기 플라스마는 이하에서 상세히 설명될 서브시스템 "슬럭스(slawx)", "프로틴(protein)", 및 "풀(pool)"을 포함한다. 슬럭스(“슬러(slaw)”의 복수형)는, 원자적 형태(문자열(string)과 숫자형(numeric type)의 확장 집합)를 감싸는 자기-기술형(self-describing) 데이터 구조이다. 여기서 숫자형의 확장 집합은 가령, 복소수, 벡터, 클리포드(즉, “다중벡터”), 및 배열 개체뿐 아니라 불규칙 네스터블 집합체적 형태(arbitrary nestable aggregate form), 즉, "cons" 다이애드, 이종 리스트, 및 고유-유형화된(unique-keyed) 연계 리스트에 대한 기본 지원을 포함한다. 프로틴은 복수의 슬럭스를 규정된 구조로 캡슐화하는 것이다: “디스크립(descrip)”이라고 지칭되는 임의 길이로 접합(concatenation)된 슬럭스들(보통 문자열)은 편리하게 검색될 수 있는 프로틴에 대한 기술(description)을 제공하며, 키-값(key-value) cons 다이애드들의 임의 길이 접합(“인제스트(ingest)”라고 지칭됨)은 프로틴의 데이터 페이로드를 형성한다. 일 실시예에서, 프로틴 자체가 특정 종류의 슬럭스이다. 풀(pool)은 프로틴(protein)들의 영속적(persistent)인 선형-순차 집합(linear-sequential collection)이며, 복수의 프로세스가 특정한 하나의 풀로 임의로 병렬 연결될 수 있다. 각각 연결된 프로세스는 프로틴을 풀에 예치(deposit)하거나, 상기 풀에서 프로틴을 불러오거나(retrieve), 둘 모두 할 수 있다. 저-레벨 풀 메커니즘이, 로컬 머신 상에서의 풀 트랜잭션(pool transaction)과 (네트워크를 통해) 원격으로 수행되는 풀 트랜잭션이, 프로그래머와 실행 코드의 관점에서, 구별되지 않음을 보장한다. 원거리 프로세스에 의해 예치된 프로틴을 불러오는 것이 자동으로 모든 캡슐화된 슬럭스들을 순응시켜서, 프로세스는 언제라도 풀의 히스토리를 통해 뒤로 되돌아가서(rewind) 더 이전 프로틴을 액세스할 수 있다. 플라스마의 구현예는 최적화되며, 따라서 풀에 의해 중개되는 프로틴이, 인터페이스 이벤트, 시스템 이벤트, 프로세스간 메시징(interprocess messaging), 고밀도 미디어의 스트리밍, 구조화된 데이터의 교환 등을 위한 매우 바람직한 표현-메커니즘을 형성한다. 덧붙여, 플라스마 시스템의 제공에 의해, 복합 “애플리케이션”의 구성이, 프로틴 교환을 통해 조화(coordinate)되는 독립적인 모듈식 프로세스들의 환경으로서, 가능해지고 촉진된다.
앞서 설명한 바와 같이, 일 실시예의 SOE(5)는 공간적으로 순응된 디스플레이 메쉬(16)를 포함한다. SOE(5)의 핵심적인 전제는, 연산 프로세스의 표출되는 발현(프로세스가 자신의 상태를 표현하고 정보를 나타낼 때 이용하는 시각적, 청각적, 및 촉각적 디스플레이)은 물리적으로 속해 있는 실세계 공간에 논리적으로 순응되어야 한다는 것이다. 따라서 SOE(5)는 모든 프로그래밍 레벨에서, 3차원 기하학적 형태의 기술어(description)와 조작을 위한 기본 구조의 시스템을 제공한다.
기하학적 형태는 항상 “실세계” 좌표계로 기술되며, 이러한 좌표는, SOE(5)가 있는 방 또는 공간에 대한 기술에 적합하도록 계획된 것이다. 따라서 예를 들자면, SOE(5)에 의해 제어되는 임의의 2차원 시각적 디스플레이(말하자면, 모니터)는 자신의 픽셀 해상도뿐 아니라 물리적 크기, 방에서의 위치 및 배향에 대한 기술어까지 유지 관리한다. 이는 디스플레이 상의 개별 픽셀이 실세계 위치와 면적을 가짐을 의미하고, 마찬가지로 장치에 디스플레이되는 그래픽 구조물이 진짜에 충실한(authentic) 물리적(방에 순응된) 기하학적 형태를 가진다. 이러한 기하학적 형태 기반의 표현 방식은, 동일한 기하학적 형태와 좌표계가 SOE의 입력 시스템에 의해 사용되기 때문에, 즉각적이고 실질적으로 중요하다. 따라서 SOE(5)는 공존하는(co-located) 입력과 출력을 제공할 수 있다. 조작자가 원거리에서 스크린에 디스플레이되는 그래픽 객체를 포인팅할 때, 시스템은 인식할 수 있는 기하학적 관계를 이용하여 사용자와 그래픽이 동일한 3-공간 연속체 내에 존재한다고 논리적으로 고려할 수 있다. 포인팅되는 것이 무엇인지를 판단하는 교차점 계산은 수학적으로 자명하며, 그렇다면, 그래픽 객체는 조작자의 조작에 즉각적으로 반응하거나, 상기 조작의 대상이 될 수 있다. 그 후 최종적인 공간적 인과관계가, 그래픽이 조작자와 함께 방 안에 있다는 조작자의 지각적 및 인지적 확신을 이끌며, 모든 측면에서 이러한 확신은 정확하다. 현재 지배적인 인간/기계 인터페이스에 의해 유도되는 예상과 양식이 가치 있는 반전을 겪고, “직접 공간 조작(direct spatial manipulation)”의 패러다임이 획득된다.
SOE(5)는 비공유 공간을 기하학적으로 관련시키기 위한 추가적인 기능(예를 들면, 특권 시각적 디스플레이를 통해 둘 이상의 개별적인 상호대화 장소(site)들을 “잇는(seam)" 원격협동 시스템(telecollaboration system))과, 기하학적 구조를 여러 다른 로컬 기준 프레임으로 해석 가능하도록 변환하기 위한 추가 기능을 제공한다. 마지막으로, SOE(5)는 "축소된 기하학적 형태"에 대한 판독 가능한 표현, 즉, 연결-공간(즉, 유클리드, 민코프스키(Minkowski), 반 드 지터(anti de Sitter) 공간 등) 형태를 통해 의미적으로 이해될 수 없는 데이터들 간 논리적 관계를 제공하며, 여기서 SOE는 기본적인 토폴로지 표현을 제공한다.
본원에서 기재되는 실시예들은 SOE(5)의 제스처 I/O 시스템(14)의 입력 측의 주요 부분을 형성한다. 실시예들은, 저-레벨(의미상: “신호 레벨”) 입력을, 상위 레벨 SOE 구성요소에 의해 소비되기 위한, 훨씬 더 구조화되고, 부호화되며, 맥락-특정적(context-specific) 입력으로 변환하는 파이프라인과 유사하게 보일 수 있다. 그러나 실시예가 비구조화된 순수 문자, 또는 맥락-결핍 모드에서 동작한다는 것은 아니며, 파이프라인의 많은 중요한 효능이, 파이프라인이 SOE의 다른 구성요소 시스템에 속하는 고-레벨 기하학적 형태와 연산적 맥락을 방해 없이 자유롭게 액세스하는 것으로부터 기인한다.
도 4는 일 실시예에 따르는 제스처 I/O(14)의 블록도이다. 요컨대, 제스처 I/O(14)의 가장 첫 스테이지(20)(개념적 “데이터 펀넬(data funnel)”(20))가 가능한 복수의 소스로부터의 공간 추적 정보들을 처리하고, 상관하며, 잇도록 기능한다. 예를 들어, SOE(5)(일 실시예의 파이프라인이 SOE(5)의 일부분)는, (a) 개별 공간을 서비스하는 복수의 동작-추적 장치, (b) 개별 워크스테이션 근방에서 비전 추적(vision tracking)을 하는 제한된 권한을 갖는 기계, (c) 큰 투영 테이블과 연계된 전기장 분석 근접도(proximity) 및 터치 감지 기능을 동시에 조화롭게(coordinated) 이용할 수 있다. 펀넬(20)은, 임의의 개수, 임의의 유형의, 및/또는 임의의 조합의 데이터 스트림/소스 SY(여기서 Y는 임의의 숫자 1, 2, ...)로부터의 저-레벨 공간 이벤트를, (전체 방 공간에 대한) 순응된 좌표 표현으로 렌더링한다. 그 후 바로 펀넬(20)은 문자 도형과 의미적 특성을 모두 표현하는 논리적 집합체(logical aggregate)를 생성한다(개별적으로 태깅된 손가락들을 갖는 손이 이 스테이지에서, 높은 정확도로, 댁틸릭 포즈(dactylic pose)의 압축 표기법과 함께 전체 위치와 배향에 대한 기술어를 발생시킨다).
이러한 기본적 이벤트가 입력 시스템의 제 2 스테이지, 즉 “제스처 엔진”(21)으로 전달되며, 상기 제 2 스테이지는, 개별 프로세스, 액티브 연산 객체, 전 시스템 통지(system-wide notification) 구조 등에 대한 관심을 가질 수 있는 특정 시공간 환경(“제스처”)을 검출하고 명확화(disambiguate)하는 일을 한다. 통계적으로 또는 동적으로 구성될 수 있는 시공간적 규칙(spatiotemporal rule)들(특정 제스처의 기술어 또는 제스처의 류)의 세트로 제스처 엔진(21)의 활동이 안내된다. 엔진이, 검출된 제스처 환경을 명료화(articulate)하는 자세하지만 중립적인 기술적(descriptive) 데이터 번들("프로토이벤트(protoevent)")을 생성한다.
마지막으로, 제스처 I/O(14)의 제 3 스테이지(22)가, 제스처 엔진에 의해 전송된 프로토이벤트를, 이벤트-소비 수단(예를 들어, 제 3 스테이지(22)와 프로그램 방식으로 연결될 수 있는 것)으로 배포한다. 각각의 이벤트 소비자는, 프로토이벤트 번들을 “로컬 용어(local terms)로” 다시 렌더링할 수 있는, 즉, 이벤트를 특정 로컬 기하학적 형태에 대한 공간-의미 형태(spatial-semantic form)로 재-표현할 수 있는, 제 3 스테이지에 의해 제공되는 기능부를 액세스한다. 예를 들어, 검지와 약지로 “승리의 상징”인 V자를 만들면서 스크린 쪽으로 손을 미는 것은, 정밀한 3-공간 방 위치에서 특이한 포즈 구성으로서 렌더링되거나, 스크린에 대한 전체 손-근접도 상태로서 렌더링되거나, 각각의 손가락이 따로 따로 고려되는 준-터치 이벤트(near-touch event)의 성상도(constellation)로서 렌더링될 수 있다.
도 5는 일 실시예에 따르는 제스처 I/O(14)의 데이터 펀넬(data funnel)(20)이다. 본원에서 데이터 펀넬(20)은 입력 펀넬(20)이라고도 지칭되며, 저-레벨(의미 관점에서, “신호 레벨”) 공간 입력 데이터(1)를, 파이프라인의 제 2 스테이지, 즉 제스처 엔진(21)으로 제공될 제스처-엔진-대기(GER: gesture-engine-ready) 데이터(27)의 시간-분해되는(time-resolved) 스트림으로 변환한다. 데이터 펀넬(20)에 의해 실행되는 변환은, 저-레벨 입력 데이터를 수집하고, 시간적으로 정렬하고(23), 공간적으로 이어서(24), 단일 합성 데이터 스트림("순응된(conformed)" 데이터 스트림)을 형성하는 과정을 포함한다. 그 후, 펀넬은 순응된 데이터의 특권 서브셋을 식별하고, 각각의 서브셋을 하나의 감소된 엔트로피의 의미 집합체(semantic aggregate)로 어셈블(25)한다.
펀넬은 하나 이상의 시공간 데이터 스트림(SY)(여기서, Y는 임의의 숫자 1, 2, ...)을 입력으로서 수신한다. 데이터 스트림(SY)은 본질적으로 상이한 자유도 카운트를 나타낼 수 있다: 광학 동작-추적 시스템은 모든 6가지 자유도를 통해 높은 충실도로, 적절하게 태깅된 손가락을 분석할 수 있으며, 타임-오브-플라이트(time-of-flight) 기반 카메라가, 사용되는 분석 방법을 기초로, 손의 손가락에 대한 3, 5, 또는 6 자유도 데이터를 공급하며, 전기장 감지 리그(rig)가 위치에 따라 달라지는 분해능을 갖고 전체 손 덩어리의 위치를 기술하는 3 DOF 정보를 제공할 수 있으며, 터치 스크린이 물리적 접촉 제약에 종속적인 2차원 추적 정보를 발신한다. 데이터 스트림(SY)은 차이나는 속도(rate)로 개별 시공간 이벤트를 제공할 수 있다. 데이터 스트림(SY)은, 예를 들어, 추적되는 손이나 그 밖의 다른 물체가 감지 수단에 의해 취급되는 공간으로 들어오고 나갈 때 간헐적으로 존재할 수 있다.
데이터 스트림(SY)은, 이용 가능한 경우, 표현되는 공간 및 시간의 수량(quantity)의 정확도 추정치 및 에러 가능 범위(likely range)를 포함한다. 예를 들어, 전기장 감지 리그로부터의 데이터 스트림은, 공간 에러의 평가를 갖고 각각의 이벤트에 주석을 달 수 있는데, 이러한 장치에 있어서, 공간 에러는 로컬 z("거리") 축을 따르는 공간 에러와 로컬 x와 y(“평면”) 축을 따르는 공간 에러가 다를 뿐 아니라, 실제 공간 위치에 따라 전체 크기도 달라진다. 이러한 정확도 주석은 (장치 자체 또는 장치 드라이버가 정확도 주석을 제공할 수 있는 경우) 데이터 스트림의 “수신된” 요소이거나, (기원 장치(originating device)의 동작의 모델을 유지하는 경우) 펀넬의 초기 프로세싱에 의해 추론될 수 있다.
펀넬(20)의 구성요소는 복수의 데이터 스트림(SY)을 시간적으로 정렬한다(23). 펀넬(20)은 이러한 정렬을 다양한 몇 가지 방식으로 이루도록 구성될 수 있다. 정렬 체계(23)는 다음의 사항을 포함한다: (1) 모든 “실제(real)” 시간 이벤트 인스턴스에서 보간이 하나 이상의 데이터 스트림으로부터 그 밖의 다른 나머지 데이터 스트림으로부터의 “가상” 시공간 이벤트를 제공하며, (2) 데이터 전송 속도가 가장 높은 스트림에서의 각각의 시간 이벤트 인스턴스에서 보간이 나머지 각각의 스트림으로부터 가상 이벤트를 제공하며, 나머지 스트림의 “실제” 이벤트는 폐기되고, (3) 앞서 언급한 대로, 그러나 명시적으로 지정된 스트림이, 그 밖의 다른 나머지 스트림이 정렬될 기준인 “똑딱이는 메트로놈(ticking metronome)”으로서 사용되며, (4) 앞서 언급한 대로, 그러나 외부에서 부가되는 메트로놈 똑딱음이 어느 스트림과도 일치하지 않아서, 모든 스트림이 보간된다. 시간적 정렬(23)의 결과가 데이터 스트림이며, 이러한 데이터 스트림에 대해, 각각의 시간격(timestep)에서 복수의 가능한 이벤트 표현이 발신된다. 시간격마다의 집합체(aggregate)가 동일한 “실재적(objective)”(실세계) 이벤트의 가능한 대안적 해석을 제공한다. 최종적인 후-정렬 이벤트(post-alignment event) 각각이, 가능하다면, 자신 고유의 신원의 표현(가령, 적정하게 태깅되거나 신뢰할만하게 추론될 때 특정 손가락이나 물체)을 포함한다. 동일한 실세계 이벤트의 대안적 표현으로부터 단일 공간 이벤트가 합성되어야 할 때 이러한 신원 정보는 다음 번 프로세싱에 유용하다. 시간 정렬(23)의 동작이 성분 자유도의 추정된 에러 또는 정확도 범위를 변경하는 경우, 이에 따라 이벤트가 태깅된다.
일 실시예의 펀넬(20)은 복수의 데이터 스트림으로부터의 이벤트들을 공간적으로 잇는다(24). 공간 잇기(24)는 항상 그런 것은 아니지만 빈번하게, 신원-태깅(identity-tagging)된 이벤트의 사전 시간 정렬을 전제로 한다. 일반적으로, 공간 잇기(24)는 각각의 기여 이벤트를 기술어(description)의 가능한 가장 높은 레벨까지 증진(promotion)시킬 것을 필요로 한다. 이러한 기술어 증진이 성분 자유도의 추정된 에러 또는 정확도 범위를 변경시키는 경우, 이에 따라 이벤트가 태깅된다. 이러한 증진이 불가능한 자유도가 명시적으로 태깅된다. 일부 경우에서, 이러한 환경은 무한 에러 범위에 기능적으로 또는 명시적으로 대응한다. (초기에 로컬 프레임에서 데이터 스트림이 공간 이벤트를 표현하는 경우 필요에 따라) 기술어 증진이 단순히, 구성 이벤트가 순응된 공간 기준 프레임으로 재-렌더링되는 것을 일으킬 수 있다. 이는 펀넬이 전체(“방”) 프레임에 대한 각각의 로컬 프레임의 관계의 개념을 유지하거나 접근할 것을 요구한다. 따라서 예를 들어, 처음에 표면의 로컬(x', y') 프레임으로 표현되는, 접촉 감지 표면에서의 터치 이벤트가, 표면의 알려진 물리적 기하학적 형태를 이용하여, 방(room)의 (x, y, z) 프레임으로 변환되며, 이 경우, 3가지 회전 자유도가 장치의 데이터 스트림으로부터 추론될 수 없기 때문에, 미지수(unknownable)라고 태깅된다. 또는, 추론과 연역적 기법을 이용하는 등의, 더 복합적인 기술어 증진 방법이 사용될 수도 있다.
결과적으로, 공간 잇기(24)는, 동일한 실세계 이벤트의 대안적 기술어로 구성된 집합체 각각에 대해, (실세계 이벤트의 가장 정확한 표현으로 여겨질) 하나의 단일 “합성(synthetic)” 이벤트를 발생시킨다. 합성 방법은, 예를 들면, (1) 복수의 이력 데이터 스트림 중에서 하나의 기술어를 선택하고, 나머지를 폐기하는 과정(즉, 합성 이벤트는 “승자 독식형(winner take all)”), (2) 각각의 증진된 기술어 자유도에 대해, 단일 기술어에서 대응하는 성분을 선택하고, 나머지를 폐기하는 과정(즉 합성 이벤트는 성분별로 “승자 독식형”), (3) 모든 기술어에 대해 각각의 자유도 성분의 가중 평균을 구하는 과정(가중치는 설정 가능하고 맥락에 민감한(contextually sensitive) 함수에 의해 결정됨), (4) 과정 (2) 및 (3)의 순열(permutation)을 포함한다(그러나 이에 제한되지 않음). 합성 방법이 선택되는 기준은 암시적으로나 명시적으로 정해져 있거나, 맥락에 반응하기 위해 정적으로 또는 동적으로 설정될 수 있다.
일례에서, 동일한 센서들의 집합에 의해, 볼륨이 “처리”되는데, 상기 센서들 각각은 유한 범위를 가지며, 상기 센서 각각의 정확도는 자신의 감지 범위의 끝단에 다가갈수록 저하되고, 상기 센서들은, 그들의 감지 범위가 서로 겹치도록 배열된다. 관심 이벤트가 하나의 단일 센서의 고정밀도 범위 내에 잘 있을 때 공간 잇기는 하나의 단일 기술어를 선택할 수 있지만, 첫 번째 센서의 범위 한계 근처에서 이벤트가 발생할 때 인접 센서의 스트림들 간 가중 평균을 구할 수 있다. 가중치는 각각의 감지 경계부에 대한 추정되는 이벤트 근접도(proximity)에 따라, 공간적으로 변화한다.
두 번째 예에서, 이벤트 스트림이 고충실도 광학 동작 추적기 및 터치 표면을 표현한다. 공간 잇기는 일반적으로 동작 추적기를 선호하지만, 추적이 터치 표면에 가까워질수록, 조정 기능이 광학 위치 데이터에 적용되어, 터치 표면으로부터의 거리가 점근적으로 감소된다. 터치 표면이 명확한 접촉을 감지할 때에만, 이어진 이벤트의 위치가 터치 표면과 기하학적 및 의미적으로 일치하는 것이 가능해진다.
마지막 예에서, 디스플레이 뒤쪽 표면에 고정밀도 전기장 장치가 장착되고, 스테레오 심도 처리 기능을 갖는 한 쌍의 카메라가 표면을 비춘다. 장(field) 감지 리그가 디스플레이 근방의 손가락에 대해 (비전 시스템이 제공하는 것보다) 더 우수한 분해능의 위치 데이터를 제공하지만, 장 감지는 배향(orientation)을 거의 검출할 수 없기 때문에, 공간 잇기가, 하나의 센서로부터의 3개의 위치 성분과, 다른 센서로부터의 3개의 배향 성분을 융합하여, 6가지 자유도 모두에서 바람직한 분해능을 보여주는 합성 이벤트를 도출한다.
공간 잇기(24)가 시간 정렬(23)에 선행하도록 하는 것은, 명시적으로 설정될 수 있거나 맥락적으로 트리거될 수 있는 펀넬 양태이며, 이는 지속적으로, 또는 간헐적으로 발생할 수 있다. 예를 들어, 보통의 경우 입력 스트림(SY)이 가장 높은 데이터 전송속도에 대해 정렬되지만, 비상한 이벤트가 검출되면(가령, 손가락이 근접도 임계치를 넘어갈 때), 검출 시점에 그 밖의 다른 모든 스트림을 보간함으로써, “단축된(syncopated)” 집합체 이벤트가 생성되도록 펀넬(20)이 설정될 수 있다.
또한 일 실시예의 펀넬(20)은 의미적 집합체(semantic aggregation)(25)를 수행하며, 선행하는 펀넬 동작으로부터 관련 이벤트들을 의미적 집합체로 수집하는 것을 포함한다. 이러한 집합체 수집(25)이 발생하는 방식이나 패턴은 정적으로 또는 동적으로 설정될 수 있다. 이 스테이지에서 펀넬이 생성하도록 설정될 수 있는 집합체는, 항상 그런 것은 아니지만 통상적으로, (1) 명시적으로 특정되어서, 집합체의 식별과 조합(assembly)이 어떠한 복잡한 추론의 대상이 되지 않는 직접적이고 간단한 것이며, (2) 전역적인 “다운스트림” 유틸리티를 가진다. 매우 일반적인 예가 사람 손 집합체의 식별에 관한 것인데: 6-DOF 자유도 지오메트리와 각각의 손가락의 신원이 신뢰할만하게 보고되는 개별 손가락이 태깅되는 입력 인프라구조에 있어서, 손의 성분 요소들이 선험적으로 지정될 수 있다. 상위 레벨의 의미적 손 집합체를 형성하는 동작은 간단히, 순응된 입력 스트림 중에서, 손을 포함하는 것으로 알려진 정적 신원과 일치하는 신원을 갖는 태그를 선택하는 문제가 된다.
입력 스트림에서 성분 태그가 보고되는 한, 집합체를 모으는 가능성이 보장되는 이 예시에서조차, 출력 스트림이 최종 고-레벨 표현뿐 아니라, 집합체가 모아질 저 레벨 태그 정보까지 포함할 가능성이 높을 것이다. 따라서 이벤트 정보의 다음 번 소비자가 필요할 때 하위 레벨 데이터를 액세스할 수 있다(바로 이하를 참조할 것).
덧붙이자면, 펀넬(20)은, 앞서 설명된 하나 이상의 동작 동안 메타정보 태깅(26)을 수행할 수 있다. 메타정보 태깅(26)이 앞서 설명된 임의의 동작의 일부로서 사용될 때, 최종 이벤트는 그들의 구성과 관련된 정보, 예컨대, 원래의 이벤트의 완전한 또는 약식 리스트, 구체적 합성 방법으로 도달하는 결정 경로(decision path) 등을 내포한다. 그 후, 다음 번 소비자가 이들 합성 이벤트를 재해석하거나 추가로 분석하기 위해, 이 메타정보를 자세히 검토할 것을 선택할 수 있다.
도 6은 일 실시예에 따르는 제스처 I/O(14)의 제스처 엔진(21)이다. 제스처 엔진(21)은, 공간적 및 기하학적 발생을 나타내는 저-레벨의 의미적 원시 데이터(“gesture-engine-ready data" 즉 GER 데이터(27))의 바디(body)를, 하나 이상의 표현적으로 유형화된 제스처 프로토이벤트(3)로 변환한다. 일 실시예의 GER 데이터(27)는, (1) 단일 손가락의 3-공간 위치와, 아마도, 배향, (2) 손의 포즈, 즉, 손가락의 집합적 구부림의 의미 다이제스트(semantic digest)와 함께, 손 전체의 전체 "벌크(bulk)" 3-공간 위치 및 배향, (3) 불활성인 비-생물체의 3-공간 위치 및 배향, (4) 그 밖의 다른 이와 유사한 구조물(가령 조작자의 머리 등)의 3-공간 위치 및 배향을 포함한다(그러나 이에 제한되지 않음).
제스처 엔진(21)은 가능한 복수의 개별 제스처-기술 기준(gesture-describing criteria)을 참고하고, 이들 기준에 대하여 다양한 공간 GER 데이터(27)를 매칭하도록 시도한다. 매칭의 결과로서, 일부 또는 모든 기준이 충족될 것이며, 각각의 매칭에 대해, 0개 이상의 GER 데이터(27)가 관련될 것이다. 제스처 엔진(21)은 GER 데이터(27)를 “독점적으로” 취급하도록 설정될 수 있어서, 하나의 매칭과 관련된 데이터가 두 번째 매칭을 만족시키는 데 참여할 수 없거나, 대신, 제스처 엔진(21)이 데이터가 복수의 매칭에 참여할 수 있도록 할 수 있다. 각각의 양의 매칭에 응답하여, 제스처 엔진921)은 0개 이상의 “프로토이벤트”(3)를 준비하고, 이들은 매칭된 제스처 기준의 의미적 맥락으로 해석된, 매칭된 저-레벨 데이터의 다이제스트(digest)를 제공한다. 이하에서 설명될 바와 같이, 프로토이벤트(3)는 파이프라인의 3개의 스테이지를 따라 통과된다.
제스처 엔진(21)은, 제스처 인식 기준의 고정적이고 불변인 세트, 또는 선택가능하며 설정 가능한 제스처 인식 기준의 유한 세트(이 선택 및 설정은 엔진의 논리 경계 밖으로부터 실행될 것임)가 있는 논리적으로 밀봉된 실행 경로를 포함할 수 있다. 그러나 일 실시예에서, 각각의 인식 기준은 논리적으로 독립된 유닛, 이른바 “인식자(recognizer)”로서 존재하며, 인식자는 라이브러리(도면상 도시되지 않음)로부터 선택될 수 있고, 제스처 엔진(21)으로부터 독립적으로 창조될 수 있다. 이 실시예에서, 외부 에이전시가 하나 이상의 인식자들을 선택 및 설정하고, 이들 각각을, 제스처 엔진(21)과 데이터-구조적으로 연계시킨다. 이는, 제스처 엔진의 체결 전에 한 번 이뤄지거나, 외부 에이전시가, 제스처 엔진의 액티브 실행 동안, 인식자를 동적으로 추가(28), 제거(29) 및/또는 수정 즉 재설정(도면상 도시되지 않음)할 수 있다. 또한 실시예에서, 특정 조건에 따라, 제스처 엔진(21)이 스스로, 자신과 연계된 인식자를 추가(28), 제거(29) 및/또는 수정 또는 재설정(도면상 도시되지 않음)할 수 있다. 인식자가 스스로 제거(29) 및/또는 재설정하거나, 동일한 제스처 엔진(21)과 연계된 다른 인식자를 추가(28), 제거(29) 및/또는 재설정하는 것도 가능하다.
GER 데이터 바디(27)는, 드물게, 일시적으로 고립되어서, 제스처 엔진의 동작이 단 한 번 수행되지만, 대부분의 경우, 시간에 따라 변하고 주기적으로 제스처 엔진(21)으로 제공된다. 후자의 경우, 입력 데이터(27)가 “유지(maintenance)” 기준들로 구성된 제 2 세트를 만족시키는 한 인식기는 활성을 유지한다(상기 유지 기준들은 활성화 기준(activation criteria)과 동일할 수도 있고 동일하지 않을 수도 있음). 입력 데이터(27)가 상기 제 2 기준 세트를 만족시키지 못할 때 인식자는 비활성화가 된다.
인식자에 대한 자연적 카테고리와, 따라서 인식 가능한 제스처(recognizable gesture)에 대한 자연적 카테고리는, (1) 활성화 기준과 유지 기준이 취할 수 있는 상이한 형태, 및 (2) 프로토이벤트가 제스처 엔진으로부터 발산되는 환경을 고려함으로써, 도출된다.
제스처 엔진(21)이 GER 데이터(27)를 독점적으로 처리하도록 설정될 때, 성공적인 초기 매칭에서 하나의 인식자가 데이터를 포함하는 것에 의해, 그 밖의 다른 인식자는 상기 데이터를 이용할 수 없다. 이러한 방식으로, 인식자는 하나 이상의 GER 데이터(27)를 “캡처(capture)”할 수 있으며, 인식자가 활성인 구간 전체에 걸쳐, 상기 캡처된 데이터는 지속적으로 다른 인식자에 의해 이용 불가능한 상태를 유지한다.
일 실시예에서, 제스처 엔진(21)은 “프리머시 계측치(primacy metric)”에 따라 자신의 연계된 인식자의 등급을 정할 수 있다. 이러한 계측치는, 제스처 엔진(21)의 존재 하에서 정적(static)이거나; 이산 구간에서 제스처 엔진(21) 외부에 있는 에이전시에 의해 원하는 대로 수정되거나 대체되며; 또는 제스처 엔진(21)이 실행될 때, 이산 또는 연속으로, 자동으로 그리고 동적으로 전개될 수 있다. 이러한 모든 경우에서, 제스처 엔진(21)은, 프리머시 계측치의 등급에 의해 제시된 순서로, 복수의 인식자를 고려하며; 제스처 엔진(21)이 그렇게 설정되고, 이에 추가로, 입력 데이터를 독점적으로 처리하도록 배열된 경우, 따라서 상위 등급의 인식자가, 하위 등급 인식자에 의해 이미 캡처된 입력 데이터를 “강탈”하는 것이 가능하다. 이 이벤트에서, 데이터가 강탈된 인식자는 비활성 상태로 복귀할 기회를 통지 및 제공받아서, 강제 상태 변경을 기술하기에 필요할 수 있는 임의의 프로토이벤트를 발산한다.
설명을 목적으로, 본원에서 제스처 엔진 및 그 인식자의 구현은 세세하게 명료화된다.
도 7 및 8은 상이한 실시예 하에서의 제스처 I/O(14)의 배포자(22)를 도시한다. 일 실시예의 “배포자(distributor)”(22)는, 이전 파이프라인 활동에 의해 생성된 프로토이벤트(3)를 하나 이상의 다음 스테이지 수신자에게로 송신한다. 따라서 송신된 프로토이벤트(3)의 주요 클래스는 제스처 엔진에 의해 검출된 제스처 이벤트를 포함하지만, 배포자(22)는, 이에 추가로, “잘 형성된 제스처(well-formed gesture)”의 검출 및 합성에 참여하지 않은 하위 레벨 이벤트를 송신하도록 구성될 수 있다. 이벤트 수신자 및 그 밖의 다른 다운스트림 시스템에 의해 이용 가능할 수 있는 배포자(22)의 추가 기능에 의해, 송신된 프로토이벤트(3)가 특정 기하학적 및 의미적 형태로 재해석(변환)될 수 있다.
이벤트 배포의 메커니즘은 다양하고, 배포자는 이들의 임의적 집합과 정적으로 또는 동적으로 연계되도록 관련될 수 있다. 일 실시예의 배포 메커니즘은, 익명(anonymous)의 비동기 레포지토리(repository)와, 직행(directed) 비동기 수신자, 직행 동기 수신자를 포함한다(그러나 이로 국한되는 것은 아님). 배포 메커니즘에 대한 설명이 이어진다.
도 7은 일 실시예에 따르는, 배포자(22)의 익명의 비동기 레포지토리 배포 메커니즘의 블록도이다. 익명의 비동기 레포지토리 배포 메커니즘 하에서, 배포자(22)는 하나 이상의 레포지토리(30)로 연결을 하며, 상기 레포지토리(30)는 임의의 개수의 청강자(auditor, 31)로 연결될 수 있다. 배포자(22)는 프로토이벤트(3)를 이들 레포지토리(30)에 예치하고, 추후에 상기 프로토이벤트(3)는 관심 청강자(31)에 의해 리트리빙(retrieve)된다. 이러한 레포지토리(30)는, 배포자(22)와 동일한 실행 공간에 위치할 수 있으며, 청강자(31)로부터 중앙으로의, 또는 비-교차 연결(disjoint connection)을 지원하거나 동일한 하드웨어 상에서 개별 프로세스로서 존재하며, 인터프로세스 통신 프로토콜을 통한 배포자(22) 및 청강자(31)로부터의 연결을 네트워크를 통해 지원할 수 있거나, 앞의 내용과 변경된 속성을 갖고 존재할 수 있다. 이러한 배포 패턴에 있어서 공통점은, 배포자(22)가 청강자(31)의 개수와 속성을 알 수 없다는 것이다. 일 실시예에서, 이하에서 상세히 기재될 바와 같이, 프로틴(protein), 풀(pool)의 제공을 통해 이러한 레포지토리가 구현된다.
도 8은 일 실시예 하에서의 배포자(22)의 직행 수신자 배포 메커니즘의 블록도이다. 배포자(22)가 직행 비동기 수신자 배포 메커니즘을 포함 또는 실행할 때, 배포자(22)는 비동기 청강자(33)의 리스트를 포함하는 청강자 리스트(32)를 유지하고, 청강자 리스트(32)의 개체수(population)가 정적 또는 동적으로 제어된다. 배포자(22)가 각각의 비동기 청강자(33)에게 모든 생성되는 프로토이벤트(3)의 복사본을 송신하며, 이러한 송신은 비동기 방식으로 수행되어서, 비동기 청강자(33)로부터의 수신자의 수신확인(acknowledgment)이 불필요할 수 있다. 개념상, 비동기 소비의 이 모델은 Erlang 프로그래밍 언어로 제공되는 메시지-전달 “메일박스(mailbox)” 통신과 유사하다. 일 실시예가 뮤텍스(mutex)-보호되는 공유 메모리 방법의 제공을 통해 이러한 비동기 소비를 구현한다.
배포자(22)가 직행 동기 수신자 배포 메커니즘을 포함 또는 실행할 때(도 8을 계속 참조), 배포자(22)는 동기 청강자(33)의 리스트를 포함하는 청강자 리스트(32)하며, 청강자 리스트(32)의 개체수는 정적 또는 동적으로 제어된다. 배포자(22)는 각각의 동기 청강자(33)에게 모든 생성되는 프로토이벤트(3)의 복제본을 송신하며, 이러한 송신은 동기 방식으로 발생하여, 배포자의 동기 청강자(33)에 의한 이벤트의 수신자는, 지정 프로그래밍된 시간 내에 명시적으로 또는 암시적으로 수신확인을 받는다. 소비자가 배포자(22)와 동일한 실행 공간에 있을 때 이러한 동기 소비의 가장 간단한 구현예가 얻어질 수 있으며, 직접 함수 호출을 이용해 프로토이벤트(3)의 송신이 이뤄질 수 있다. 소비자가 배포자 프로세스와 분리되어 있는 환경에서, 동기 송신을 구현하기 위해 인터프로세스 통신의 기법이 채용될 수 있다.
이벤트 송신 또는 배포 활동과 무관하게, 도 7과 8을 참조하여, 배포자(22)는 이벤트 변환(event transformation, 34)을 위해 이용 가능한 기능을 포함하고 만든다. 앞서 명료화된 동기 및 비동기식 수단 중 임의의 것에 의해, 임의의 개수의 의뢰자 개체(SE: supplicant entity)가 이러한 이벤트 변환 요청을 배포자(22)에게 전달할 수 있으며, 의뢰자 개체(SE) 자체가 청강자(33)이기도 한 경우, 이러한 이벤트 변환 요청은, 청강(audition)과 동일한 통신 수단을 이용하도록 요구되지 않는다. 변환에 대해 제출되는 이벤트는 배포자(22)(가령, 프로토이벤트(3))로부터 기원하거나, 합성되거나 배포자의 활동 밖에서 획득된 시공간 데이터를 나타낼 수 있다. 전자의 경우, 의뢰자 개체(SE)는 이벤트를 배포자(22)에게 “재송신”하기를 선택하여 이벤트를 완전히 상세하게 전달하거나, 대신 이벤트 참조(이벤트와 연계된 고유 식별자)를 전달할 수 있으며, 이로 인해서, 배포자(22)에 의해 이벤트가 리트리빙될 수 있다.
의뢰자 개체(SE)는 단순한 기하학적 이벤트 변환을 요청할 수 있으며, 여기서 이벤트의 토대가 되는 좌표계가 아핀 변환(affine transformation)의 대상이 된다. 이러한 변환은 일반적으로, 이벤트의 기하학적 형태의 수치적 표현의 변화(즉, 좌표 기반 요소의 변화)를 초래할 뿐 아니라, 이벤트의 의미적 내용(semantic content)의 특정 부분의 변화도 초래할 것이다.
따라서 예를 들자면,
와 같이 표현되는 프로토이벤트(E)가 y축을 중심으로 하는 90도 회전운동과, 하향 직선이동의 대상이 되어(-90도만큼 y-회전되고, 본래의 좌표계로부터 상향 직선이동된 좌표계에서의 기하학적 형태의 표현과 동등함),
를 산출할 수 있다.
이 경우, 손의 전체 손가락-포즈 구성 및 배향 집합체의 의미적 다이제스트(semantic digest)인 GRIPE 문자열(여기서 기재됨)도 역시 변경되었다: 기본 배향을 지정하는 최종 2개의 문자(character)가 ("-x"에서) ".-"으로 변경되었다.
배포자(22)에 의해 실행되는 더 복잡한 이벤트 변형은, 새로운 맥락에서 이뤄지는, 프로토이벤트의 기하학적 및 의미적 콘텐츠의 임의의 조합의 재해석을 포함한다. 앞서 언급한 동일한 프로토이벤트(E)(손의 검지 및 중지가 펴져 있고, 엄지는 수직방향으로 놓이며, 약지와 새끼 손가락은 굽혀 있는 명백한 "가리키는(pointing)" 제스처의 일례)가, 손 바로 앞에 위치하는 근접 디스플레이 스크린의 로컬 기하학적 맥락에서, 다음과 같이 재해석될 수 있다:
이하에서, 앞서 기재된 실시예를 참조하여, 제스처 엔진 구현의 많은 예시가 제공된다. 도 9는, 일 실시예 하에서의 제스처 엔진 구현예(900)의 블록도이다. 다음의 제스처 엔진 구현예는 많은 주요 요소를 가정하며, 이들 주요 요소 각각에 대한 설명은 제스처 엔진 구현예(900)를 참조하여 이뤄진다.
다음의 제스처 엔진 구현예의 제 1 주요 요소는 임의의 개수의 추적되는 개체의 존재이며, 각각의 표현은, (a) 고충실도의 전체 3-공간 위치(bulk threespace position); (b) 고충실도의 전체 3-공간 배향; (c) 개체의 "포즈(pose)"의 표현적 설명(expressive description), 즉, 개체의 추가 자유도의 의미적 다이제스트를 포함한다. 이러한 개체를 "GripeEnt"라고 부른다. (GripeEnt는 앞서 언급된 일반적인 "GER 데이터"에 대응한다.) 특히 중요한 종류의 GripeEnt는 인간의 손이며, 이 경우, "포즈"가 손가락의 다양한 굽힘을 기술하며, 아마도, US 특허 출원 제11/35069호에 명료하게 나타난 표현적 스키마를 이용하여 표현된다.
다음의 제스처 엔진 구현예의 제 2 주요 요소는, 하나 이상의 소스로부터의 저-레벨 공간 입력 데이터를 상관처리하고, 상기 데이터를 분석하여, GripeEnt의 집합을 주기적으로 업데이트할 수 있는 시스템이다. 이 시스템은, 본원에서, "GripeRefinery"라고 지칭되며, GripeRefinery는 앞서 설명된 "데이터 펀넬(data funnel)"에 대응할 수 있다. 지각적으로 만족할만한 상호대화(interaction)를 제공하기 위해, GripeRefinery는, 30헤르츠(Hertz)보다 더 우수한 속도로 완전한 출력 세트를 생성해야만 한다.
다음의 제스처 엔진 구현예의 제 3 주요 요소는 제스처-매칭 모듈(gesture-matching module)의 집합의 포함이며 "GestatorTot" 또는 "GTot"라고 지칭된다(GTot는 앞서 언급된 일반적인 “인식자(recognizer)”에 대응하지만, 실시예가 이에 국한되는 것은 아니다). 각각의 GTot는, 임의의 때에, "다중도(multiplicity)" S를 가지며, S개의 개별 GripeEnt의 좌표가 GTot가 나타내는 제스처의 성공적인 인식을 위해 요구된다. 각각의 GTot는 임의의 순간에 "대기(waiting)" 또는 "활성(active)" 상태이다. 이들 상태는 GTot의 두 가지 주요한 실행 경로, "EntranceAttempt"와 "ContinuationAttempt"와 각각 연계되며, 이들 실행 경로 중 어느 하나, 또는 둘 모두가, 중간-레벨(mid-level) 상호대화 이벤트 데이터를 발산할 수 있다. 선택사항인 제 3의 경로는, GTot의 "업데이트(Update)" 루틴이며, 자신의 내부 상태를 유지하기 위해 필요한 추가적인 연산을 GTot가 수행할 수 있도록 하기 위한 퍼-루프(per-loop) 기회를 제공한다. EntranceAttempt의 실행이, 세 가지 가능한 결과 코드: COPACETIC, PROMOTE, 및 EXCLUSIVE 중 하나를 생성할 것이다. ContinuationAttempt의 실행은 세 가지 가능한 결과 코드: COPACETIC, DEMOTE, 및 EXCLUSIVE 중 하나를 생성할 것이다.
EntranceAttempt는, 대기 상태의 GTot에 대해, 이용 가능한 GripeEnt를 GTot의 특정 입장(entrance) 기준에 대해 테스트하며, 이들 기준이 충족되는 때, GTot가 활성 상태가 되고, 기준을 충족시키는 데 참여한 (하나 이상의) GripeEnt가 캡처되고 GTot와 연계되는 것으로 마킹된다. 활성 상태의 GTot에 대해, ContinuationAttempt는 우선, 이전 캡처된 GripeEnt가 (1) 여전히 이용 가능하고(즉, 더 높은 프리머시(primacy)의 GTot에 의해 "강탈" 당하지 않은 경우), (2) 여전히 공간적, 의미적, 그리고 맥락적으로 GTot의 기준을 만족시킴을 검증한다. (1) 또는 (2)의 경우가 아니면, 앞서 캡처된 GripeEnt가 GTot와의 연계에서 해방되고, 그렇지 않은 경우, 캡처된 상태를 유지한다.
이러한 논리적 관계 및 인과성은, 이하의 상태 변이(state transition)에서 상세하고 명확히 나타난다.
다음의 제스처 엔진 구현예의 제 4 주요 요소는, 지정된 순서로 GTot로 구성된 전체 세트를 순회(traverse)하며, 각각의 GTot가 각자의 EntranceAttempt 또는 ContinuationAttempt 루틴을 실행하도록 하는 중재 엔진(engine of arbitration)의 포함이다. 이러한 중재 엔진은, 본원에서, "Gestator"라고 지칭된다(Gestator는 앞서 언급된 일반적인 "제스처 엔진"에 대응하지만, 실시예가 이에 국한되는 것은 아니다). Gestator는 활성 상태인 모든 GTot의 동적 리스트를 유지관리하고, 대기 상태인 모든 GTot의 이러한 리스트를 별도로 유지관리한다. 이들 리스트는 반드시 비교차(disjoint)한다. Gestator는 하나의 주요 실행 경로, 즉, "ProcessTot"를 가진다.
다음의 제스처 엔진 구현예의 제 5 주요 요소는, Gestator의 액션을 통해 생성된 "이벤트"의 즉각적인 수신자의 존재이다. 이 수신자는 단순한 레포지토리(repository)일 수 있으며, 가령, 누적된 이벤트를 적정 최종 소비자에게 주기적으로 배포하는 일을 하는 디스패치 메커니즘(dispatch mechanism)의 FIFO 버퍼일 수 있다. 이를 대체하여, 또는 이에 추가로, 수신자는 Gestator에 의해 제공되는 중간-레벨 이벤트를 정제(refine), 조합, 또는 그 밖의 다른 방식으로 조절하여, 맥락 특정적 정보를 갖고 구축되는 예비 서브시스템을 위해 더 상위 레벨 이벤트를 생성하는 기능을 수행하는 더 복잡한 파이프라인일 수 있다.
그 후, 시스템의 입력을 처리하는 루프의 1회 통과가, GripeRefinery가 각각의 GripeEnt의 상태를 업데이트하도록 하는 과정과, 그 후, Gestator의 ProcessTot을 실행하는 과정을 포함하며, 이 과정은 모든 등록된 GTot의 EntranceAttempt 또는 ContinuationAttempt를 실행하는 과정 등을 수반한다.
일 실시예에 따르는 Gestator의 ProcessTot 루틴은 다음과 같다:
PT1. GTot들로 구성된 전체 집합을 메타-세트(meta-set) MS[1..n]으로 정렬(sorting)한다. 정렬 기준은 정적 또는 동적일 수 있다. 일반적인 정적 기준은 "GTot에 의해 기술되는 제스처를 형성하기 위해 필요한 조화되는(coordinated) GripeEnt의 개수"(앞서 언급된 다중도 S)이며, 따라서 이러한 경우, 메타-세트 MS[n]는, n개의 GripeEnt를 필요로 하는 제스처를 기술하는 이러한 GTot를 포함한다.
PT2. MS[i][j]가 j번째 GTot이도록, 각각의 메타-세트MS[i]에서 GTot에 대한 순서(ordering)를 선택하며, 그 후, 메타-세트는 MS[i][1..m]을 포함한다. 다시 한번 말하자면, 정렬 기준은 정적이거나 동적일 수 있다. 특정 상황에서, 순서는 단순히, GTot가 본래 인스턴스화되고 Gestator에 추가된 순서에 대응할 수 있다.
PT3a. 활성 GTot의 Gestator의 리스트를 순회(traverse)하고, 각각의 GTot의 업데이트를 실행한다.
PT3b. 대기 중인 GTot의 Gestator의 리스트를 순회하고, 각각의 GTot의 업데이트를 실행한다.
PT4. 모든 GripeEnt의 리스트를 구축하고, 이를 avail_ents라고 부른다.
PT5. MS[n]에서 MS[1]까지의 메타-세트를 순회하기.
PT6a. 각각의 메타-세트 MS[i]에 대해, 각각의 GTot MS[i][j]를 차례로 고려하면서, MS[i][m]에서 MS[i][1]까지 구성요소 GTot를 순회한다.
PT6b. MS[i][j]가 활성 상태인 경우, ContinuationAttempt 알고리즘을 실행하여, 리스트 avail_ents를 이용 가능하게 만들거나, (PT6a)에서의 순회를 계속한다.
PT6c. (PT6b)로부터의 결과 코드가 COPACETIC인 경우, (PT6a)에서의 순회를 계속한다. 리스트 avail_ents가 수정되었다.
PT6d. 또는 결과 코드가 EXCLUSIVE인 경우, (PT6a)에서의 순회를 포기하고, (PT7a)로 진행한다. 리스트 avail_ents가 수정되었다.
PT6e. 그렇지 않은 경우(결과 코드가 DEMOTE인 경우), 활성 GTot로 구성된 Gestator의 리스트로부터 MS[i][j]를 제거하고, 이를 대기 중인 GTot의 리스트에 추가하며, (PT6a)에서의 순회를 계속한다.
PT7a. 각각의 메타-세트 MS[i]에 대해, 각각의 GTot MS[i][j]를 차례로 고려하면서, MS[i][m]에서 MS[i][l]까지의 구성요소 GTot를 순회한다.
PT7b. MS[i][j]가 대기 상태인 경우, EntranceAttempt 알고리즘을 실행하여, 리스트 avail_ents를 이용 가능하게 만들고, 그렇지 않은 경우, (PT7a)에서의 순회를 계속한다.
PT7c. (PT7b)로부터의 최종 코드가 COPACETIC인 경우, (PT6a)에서의 순회를 계속한다.
PT7d. 최종 코드가 PROMOTE 또는 PROMOTE_EXCLUSIVE이라고 알려져 있으며, Gestator의 대기 중인 GTot의 리스트로부터 MS[i][j]를 제거하고, 이를 활성 GTot의 리스트에 추가한다. 리스트 avail_ents는 수정되었다.
PT7e. (PT7b)의 최종 코드가 PROMOTE_EXCLUSIVE인 경우, (PT7a)에서의 순회를 포기하고, (PT8)로 진행하여, ProcessTots 실행이 완전하다고(outright) 결론 내린다.
PT7f. 그렇지 않은 경우(최종 코드가 PROMOTE인 경우), (PT7a)의 순회를 계속한다.
PT8. Conclude the ProcessTots execution.
일 실시예에 따르는 GTot의 EntranceAttempt 루틴은 다음과 같다:
EAl. 리스트 avail_ents를 순회한다.
EA2. 한 번에 S개씩 취해서 avail_ents의 요소들을 특정 입장 기준(entrance criteria)에 비교한다(여기서, S는 GTot의 다중도(multiplicity)임).
EA3. 리스트의 모든 적정한 조합이, 어떠한 매칭도 없이, 고갈되는 경우, 응답 코드 COPACETIC을 리턴(return)한다.
EA4. 그렇지 않은 경우, 임의의 s-튜플의 GripeEnt(GE[1...s]라고 지칭됨)가 입장 기준을 만족시켰다.
EA5. 리스트 avail_ents에서 GE[1...S]의 각각의 GE[k]를 제거한다.
EA6. GTot가 지니는 영속 상태(persistent state)의 일부로서, 매칭 GE[1...S]의 각각의 GE[k]를 기록(record)하며, 이제 이들 GripeEnt는 '캡처'된 것이다.
EA7. 제스처의 GTot의 초기 "인식(recognition)"에 대한 기술에 적정할 수 있는 이러한 임의의 이벤트를 생성하고 이벤트 큐(queue)로 삽입한다.
EA8. 최종 코드 PROMOTE를 리턴하거나, GTot의 맥락과 조건이 적정하게 배치되는 경우, PROMOTE EXCLUSIVE를 리턴한다.
일 실시예에 따르는 GTot의 ContinuationAttempt 루틴은 다음과 같다:
CAl. 캡처된 GripeEnts GE[1...S] 각각이 리스트 avail_ents에 존재함을 확인한다.
CA2. (CAl)이 해당되지 않는 경우(현재의 GTot보다 더 높은 프리머시(primacy)의 GTot가, 현재 GTot에 의해 앞서 캡처된 구성요소 GripeEnt 중 하나 이상을 강탈당한 경우를 의미함), (CA5)로 건너뛴다.
CA3. 각각이 캡처된 GripeEnts GE[1...S]가 의미적 및 기하학적으로 현재의 GTot의 유지 기준을 만족시킴을 확인한다.
CA4. (CA3)이 해당되는 경우, (CA8)로 건너뛰고, (CA3)이 해당되지 않는 경우(GE[1...S]를 포함하는 제스처 입력이, 현재 GTot에 의해 기술되는 제스처를 "벗어나" 있는 경우를 의미함), (CA5)로 진행한다.
CA5. 이러한 임의의 이벤트를 생성하고 이벤트 큐로 삽입하는 것이 현재 GTot에 의해 기술되는 제스처의 종료를 기술하기에 적정할 수 있다.
CA6. 현재 GTot가 지니는 영속 상태로부터 이전에 캡처된 GE[1...S]에 대한 참조를 제거한다.
CA7. 최종 코드 DEMOTE를 리턴한다.
CA8. 리스트 avail_ents에서, 캡처된 GripeEnt 세트 GE[1...S]의 각각의 GE[k]를 제거한다.
CA9. 최근에 업데이트된 것으로 추정되는 GE[k]로부터, 전개 중인 제스처의 상태에 대한 기술에 적합할 수 있는 임의의 이벤트를 생성하고, 이벤트 큐로 삽입한다.
CAlO. 최종 코드 COPACETIC를 리턴하거나, GTot의 맥락과 조건이 적정하게 배치된 경우, EXCLUSIVE를 리턴한다.
앞서 소개된 공간-연속체(spatial-continuum) 입력 시스템의 일 실시예를 이용하는 3개의 예시적 적용예에 대한 상세한 설명이 이어진다. 각각의 예들은, 한 명 이상의 조작자(operator)의 손은, 조작자의 손가락(아마도 전체 손 덩어리도)의 위치 및 배향을, 높은 시간 변화율(temporal rate)로 높은 정확도까지로 분해하는 센서에 의해 추적되며, 시스템은 각각의 손의 '포즈(pose)'(즉, 손가락들의 서로에 대한, 그리고 전체 손 덩어리에 대한 기하학적 기질)를 특징화하기 위해 최종 공간 데이터를 추가로 분석함을 가정으로 가진다.
센서, 조작자의 손을 추적 및 분석하는 방법과, 손의 포즈, 위치 및 전체 배향를 나타내기 위한 방식이 이하에서 상세히 설명될 수 있으며, 다음의 기재 전체에서 기호적 포즈 표현(symbolic pose representation)이, 설명을 목적으로, 표기 방식(notational scheme)에 따라 나타날 것이다. 그러나 동등한 기호 및 표현적 효과를 갖는 한, 예시적 실시예는 그 밖의 다른 유사한 시스템을 이용할 수 있음을 알아야 한다.
마찬가지로, 예시들은 설명을 목적으로, 앞서 대략적으로 언급된 샘플 구현예-아키텍처의 요소들을 참조하지만, 이와 동일하게 대안적인 유사한 아키텍처 및 구현예도 적용될 수 있다.
유용한 경우, 제스처 상호대화 동안 파생될 통상의 상위 레벨 이벤트-구조 중 일부도, 이하에서와 같이 재생된다. 이들 이벤트는 그들의 선호되는 표현 체계에 부합하는 표기로 렌더링되며, 원시 "슬럭스(slawx)"로부터 구축된 "프로틴(protein)"으로서 존재한다(이하에서 상세히 설명됨). 이러한 이벤트 프로틴은 "풀(pool)"(플랫폼-독립적이며, 히스토리-보존적(history-retaining) 인터프로세스 데이터 제어 및 교환 메커니즘)(이하에서 상세히 설명됨)에 예치되는 것이 일반적이며, 적절한 풀로부터의 리트리빙 후, 그리고 추가적인 맥락-특정적 조건설정 후에, 관심 프로그램된 객체로 배포된다. 풀은, 상기 풀을 호스팅하는 기계의 로컬 프로세스에 대해 투명하고, 원격 기계 상에서 실행되는 프로세스에 대해 네트워크를 통해 투명하다. 이들 이벤트 프로틴은 이하의 산문 기재에 산재되어 있으며, 각각의 경우, 바로 선행하는 문단에서 기재된 상호대화를 일컫는다. 또한, 명료화된 프로틴은 "완성형(complete)"일 필요가 없으며, 명료성, 관련성 및 간결함을 위해,완전 실행 시스템(full running system)에게 필수일 수 있는 특정 필드(field)는 생략된다.
제 1 예시는 입체 기하학적 설명서이다. 이 제 1 예시에서, 조작자는, 대략 1평방 미터이며, 허리 높이의 수평 테이블형의 표면 옆에 선다. 디스플레이 시스템은 스테레오 이미지를 표면으로 투영하며, 조작자가 테이블 주위를 이동할 때, 왼쪽 눈과 오른쪽 눈 뷰(view)가 올바르게 생성되어, 그의 순간적인 위치에 대응하도록, 조작자의 머리를 추가로 추적한다. 조작자는 스테레오 안경을 착용하고 있다.
테이블은 기하학적 설명서를 제공하며, 다양한 다면체가 차원적으로(즉, 물리적이 아닌, 스테레오그래픽으로) 디스플레이된다. 각각의 다면체는 자신의 면들 중 하나로 안정적으로 놓이도록 위치되고 배향된다. 각각의 높이는 약 15 센티미터이다.
조작자가 자신의 오른손을 들고, 검지와 중지로 테이블을 '포인팅'하며(약지와 새끼 손가락은 구부리고, 엄지는 좌측을 가리킴(즉, 검지에 수직)), 손바닥이 실질적으로 아래쪽을 향하도록 손이 배향된다. 이 포즈는 로 기술될 수 있다. 조작자의 손이 이러한 포즈를 취하자마자, 테이블이 동적 커서(dynamic cursor)를 디스플레이한다. 정교한 기하학적 계산에 의해, 커서가 최근접 교차되는 다면체의 표면 상에(최근접 교차되는 다면체가 존재할 경우), 또는 테이블의 표면 상에(어떠한 다면체도 교차되지 않는 경우) 나타날 수 있다. 조작자가 유사한 포즈로 자신의 왼손을 들고, 역시 포인팅하기 시작한다. 추가적인 신호(cue)로서, 색상을 변경함으로써, 다면체가 이러한 '포인팅 상호대화'에 응답하며, 조작자가 자신의 오른손으로 포인팅할 때, 최근접 다면체가 회색에서 청색으로 변경되고, 왼손을 이용할 때, 회색에서 녹색으로 변경된다. 다면체는 더 이상 교차하지 않을 때, 본래 자신의 회색으로 돌아온다.
12면체를 포인팅하는 동안, 간단히 엄지가 검지와 평행하도록 가져가서 접촉하도록 조작자는 자신의 엄지 관절을 설정하고, 그 후, 자신의 본래의 수직적 배향으로 복귀한다() 12면체는 그래픽 태그, 즉 테이블의 표면에 차원적으로 놓이고 인쇄 기술어 "{5,3}"(12면체에 대한 Schlaefli 심볼)를 포함하는 사각 프레임을 발신함으로써, 반응한다. 상기 태그는 12면체의 바닥에 가까운 자신의 내부 위치에서부터, 테이블의 최근접 에지까지로 매끄럽게 슬라이딩되며, 상기 테이블의 최근접 에지에서 멈춘다. 조작자는 테이블 주변을 계속 포인팅하고, 엄지로 '클릭킹(clicking)'함으로써, 이러한 태그를 추가적으로 생성하며, 최종 태그는 모두 테이블의 에지 주변에 배열된다.
그 후, 조작자는 앞으로 약간 기울이고, 손바닥은 여전히 아래쪽을 향하게 하면서, 중지와 엄지는 가볍게 구부린 채() 적절하게 테이블 표면 아래와 위로 자신의 외손을 가져온다. 조작자의 손이 테이블 위의 20센티미터 위에 위치하는 임계-면(threshold-plane)을 교차할 때, 시스템의 그래픽 피드백이 변하고, (커서의 위치를 통해) 조작자의 포인팅하는 손가락의 조준 벡터(aim vector)와 시뮬레이션의 다양한 표면 및 기하학적 요소들의 교차점이 이전에 지시된 경우, 피드백 시스템은 손가락의 순간적인 위치에 대한 표면 상의 최근접 점을 보여주는 복수의 "다림줄(plumb line)" 커서를 전개한다. 따라서 예를 들어, 커서는 손가락 바로 "아래"에서 나타나며, 손가락과 함께 테이블의 표면 상을 추적한다. 다면체 면의 평면 상으로의 손가락의 위치의 직교 투영물(orthogonal projection)이 상기 면의 다각형 내에 놓이고, 커서도 역시 나타난다. 덧붙이자면, 희미한 옆면 "수평선"이 근거리(proximal)의 다면체의 면 상에 나타나서, 테이블에 평행이고 손가락의 위치를 포함하는 평면을 제시할 수 있다. 이들 그래픽 마크는, 시스템의 자연스러운 프레임 레이트(약 90헤르츠)로 계속 업데이트되며, 손가락의 움직임을 인지적으로(cognitively) '추적'한다.
조작자가 자신의 손가락을 다면체들 중 하나로 3센티미터 내로 가져갈 때, 접근하는 손가락에 최근접한 면의 색상이 변하기 시작하여, 준-접촉 근접도(near-contact proximity)를 나타낼 수 있다. 마침내, 손가락이 기하학적으로 다면체의 표면을 통과하여 접촉하게 될 때, 전체 모양이 깜박이고, 동시 오디오 신호(audio cue)가 접촉이 발생했음을 두드러지게 하고, 더 원거리에서 포인팅하는 손이 정다면체(Platonic form)를 "클릭"하자마자, 상기 정다면체의 바닥에서 그래픽 태그가 생성되어, 테이블의 최근접 에지까지로 슬라이딩된다. 따라서 조작자는 원거리에서 포인팅하거나 직접 접촉을 하거나, 시스템의 기하학적 콘텐츠에 동일하게 액세스할 수 있다.
이제, 조작자가 자신의 활동 중인 손(active hand)의 중지를, 검지와 평행하도록 뻗는다(). 이 모드에서, 시스템의 다면체와의 기하학적 접촉이 시뮬레이트된 물리적 상태와 연계되어서, 조작자가 8면체의 면을 찌를 때(poke), 상기 8면체가, 찌름 벡터(poke vector)와 방사 벡터(radial vector)의 외적 값에 비례하여 접촉점을 중심으로 회전하게 된다. 이러한 방식으로, 조작자는 자신의 검지와 중지를 이용한 찌르기(poking) 또는 살짝 치기(flicking) 동작에 의해, 8면체가 바닥면의 중심을 통과하는 수직축(중력-정렬된 축)을 중심으로 회전할 수 있게 한다. 그 후, 조작자는 자신의 손가락으로 8면체의 최상위 부분을 수직으로 통과하도록 찌름으로써, 회전을 중단시킨다.
마찬가지로, 조작자가 시뮬에이션의 객체를 재위치(reposition)시킬 수 있다. 조작자가 자신의 검지와 중지의 끝 부분을 4면체의 바닥에 가까이 가져갈 때, 손가락의 테이블 표면에 대한 근접도와 반비례하는 밝기를 갖는 황색의 "하부 광륜(underhalo)"이 형성된다. 조작자의 손가락이 물리적 표면과 직접 접촉할 때(일반적으로, 중지는 이를 하도록 해부학적으로 미리 배치된다), 상기 하부 광륜이 황색에서 적색으로 변하고, 손가락의 오프셋에 비례하는 직선적 오프셋(translational offset)이, 초기 접촉점에서부터, 지속적으로 상기 4면체에게 적용된다. 따라서 조작자는 임의의 디스플레이된 객체를 테이블 표면을 중심으로 슬라이딩되게 할 수 있으며, 간단하게, 테이블과 접촉함으로써, 슬라이딩 상호대화(sliding interaction)를 종료시킨다.
마지막으로, 조작자는 테이블의 에지에 축적된 태그를 원거리 포인팅 및 근거리 찌르기 상호대화를 통해, 조작할 수 있다. 조작자는 자신의 왼손을 태그 그룹이 위치하는 테이블의 왼 측면 쪽으로 하강시킨다. 손이 임의의 태그에 접근함에 따라, 태그에서 최근접 손가락까지의 거리에 반비례하여, 태그의 휘도(luminance)가 상승하기 시작한다. 덧붙이자면, 임의의 손가락의 근접도가 5센티미터의 외부 임계치를 넘자마자, 태그로부터, 연계된 다면체까지의 (테이블 표면의 평면에 위치하는) 라인이 휘어진다.
손가락이 하나의 태그와 명확한 접촉을 할 때, 즉, 투영된 태그의 기하학적 바운드(geometric bound) 내 포인트에서 테이블 표면과 접촉할 때, 태그의 경계부가 적색으로 변하며, 태그와 손가락이 논리적으로 바운딩되고, 조작자의 손가락이 테이블과 접촉을 유지하는 한, 태그는 이를 따라다녀서, 조작자가 테이블의 표면에서 태그를 슬라이딩시킬 수 있도록 할 것이다.
개별 태그로의 퍼-핑거 바인딩(per-finger binding)은, 이 모드에서, 조작자가 자신의 손의 손가락들을 독립적으로 이용할 수 있으며, 복수의 코인을 가볍게 터치하고 슬라이딩시키는 것처럼, 손가락 각각이 개별 태그를 개별적으로 터치하고 제어할 수 있음을 의미한다. 각각의 슬라이딩되는 태그의 위치가 나타남에 따라, 태그와 상기 태그의 다면체 사이의 구부러진 라인이 적절하게 업데이트되어서, 두 구조물들이 그래픽적으로 연결될 수 있다.
조작자가 태그로부터 자신의 손가락을 들어올릴 때, 태그는 자신의 가장 최근 위치가 여전히 실질적으로 시뮬레이션 표면의 에지 상에 있는 한 자신의 가장 최근 위치를 유지하고, 조작자가 태그를 에지로부터 너무 멀리 "안쪽에" 놓은 경우, 태그는 방사방향으로 바깥쪽으로 슬라이딩되어서, 에지 근방에서 다시 멈춘다. 또는 조작자가 임의의 태그를 테이블의 에지로부터 떨어지도록 슬라이딩시키는 경우, 즉, 태그를 바닥에 "버리는" 경우, 상기 태그는 폐기되고 사라진다.
제 2 예시는 필름 조작 시스템이다. 이 제 2 예시에서, 필름 제작 작업공간의 '신속한 프로토타입화'는, 교차하는 벽에 서로 90도 각을 이루며 장착된 2개의 큰 투영 스크린과, 전방 스크린으로부터 2미터 떨어져 위치하는 알맞게 기울어진 하나의 투영 테이블을 포함한다. 조작자는 전방 스크린을 바라보며 투영 테이블 바로 뒤에 서 있는다. 최근 촬영된 필름 풋티지(footage)의 시퀀스로부터의 정지 프레임(still-frame)이 전방 스크린 상에 디스플레이되고 전방 스크린을 채운다.
손바닥은 전방을 향하고, 손가락들은 평행하며, 엄지는 수평을 이룬 채 조작자의 손을 어깨 높이까지 올림으로써(), 조작자는 모든 포즈는 유지하면서 자신의 손을 전방으로 직선 이동시킴으로써, 풋티지 시퀀스의 더 큰 집합(본원에서, "푸시백" 제어 시스템이라고 지칭되며, 이하에서 상세히 설명될 것임)을 액세스하며, 현재의 프레임이 마치 멀리서 보는 것처럼 후퇴한다. 스크린 상의 프레임의 크기가 감소함에 따라, 또 다른 횡방향으로 배치된 프레임과 만나며, 본래 프레임이 프레임의 수평 스트립 중 하나였음이 밝혀진다. 조작자는, 자신의 손을 전방으로 더 밀거나, 자신의 손을 다시 당겨옴으로써, 더 많은, 또는 더 적은 프레임을 볼 수 있으며, 따라서 인터페이스 방식은 스프링이 내장된 구조물을 미는 물리적 상호동작을 흉내낸 것이다. 마찬가지로, 조작자가 자신의 손을 좌우로 움직임에 따라 프레임들의 수평방향 집합이 좌우로 당겨진다. 일 실시예의 푸시백 시스템(pushback system)은, 손의 수직방향 변위를 무시함으로써, 네비게이션(navigation)을 의도적으로 제한하지만, 이에 한정되지는 않는다.
조작자가 푸시백 시스템과 연결되자마자, 스크린에서 그래픽적으로 중앙에 위치하는 레티클(reticle)은 푸시백 상호대화가 종료될 때 어느 프레임이 '선택'될 것인지를 가리킨다. 조작자의 손을 오른쪽으로 움직이면, 조작자는 새로운 프레임을 레티클 바로 아래에 위치시키고, 양손으로 주먹을 쥐어(), 푸시백 세션을 종료시킨다. 선택된 프레임이 앞으로 나오고, 스스로 중앙에 위치하며, 빠르게 투영 스크린을 채우면, 레티클이 차츰 희미해진다.
시스템은 풋티지 재생(palyback)에 대한 기본 제어를 제공하는데, 조작자는 어느 한 손을 바닥(floor)과 평행한 평평한 포즈(flat pose)로 유지하고(), 그 후, 손가락들이 대략적으로 오른쪽을 포인팅하도록 손을 시계방향으로 회전시킴()으로써, 풋티지를 단위 속도(unit rate)로 순방향 재생할 수 있다. 이와 유사하게, 평평한 손을 반시계방향으로 회전시킴으로써(), 풋티지가 역방향으로 재생될 수 있다. 조작자는 손바닥을 전방을 향하게 한 채 어느 한 손을 들어올림으로써(경찰관의 멈춤 포즈: ), 재생을 정지시킨다(즉, 일시멈춤(pause)).
조작자는 어느 한 손을, 손가락들이 전방을 포인팅하는 수직-평면 포즈(vertical-plane pose)가 되게 함으로써(), 재생 위치와 속도에 대해 추가로 제어한다. 이러한 동작은, 스크린 상에서 스크린 하단에 위치하는 수평방향 바(bar)의 스택으로서 나타나는 "지수적 타임라인(logarithmic timeline)"과 연계된다. 타임라인 스택에서의 가장 높은 바는 풋티지 시퀀스의 전체 시간 길이를 나타내고, 바의 왼쪽 끝단은 최초 프레임에 대응하며, 오른쪽 끝단은 최종 프레임에 대응한다. 연속적인 하위 바 각각이, R배 더 작은(따라서 더 미세하게 '분해(resolve)'되는) 풋티지의 부분간격(subinterval)을 나타내고, N개의 바의 가장 낮은 점은 전체 지속시간보다 작은 풋티지의 간격 R^^(N-1)을 나타낸다.
조작자는 자신의 손을 실질적으로 수직인 축을 따라(바닥(floor) 쪽으로, 또는 바닥에서 멀어지는 방향으로) 직선 운동시킴으로써, 여러 다른 바(따라서 여러 다른 시간 분해능)를 액세스한다. 자신의 손을 양쪽으로 스윙하는 것은, 풋티지의 가변 속도 재생과 관련되며: 손의 오른 방향 회전(에서, 오른 손인 경우 약간 로; 왼 손인 경우 로)이 풋티지를 순방향 고속재생(shuttle forward)시키기 시작하고, 추가적인 회전이 고속전진의 속도를 증가시킨다. 손을 스크린을 직접 포인팅하는 포즈로 복귀시킴으로써 재생이 멈추고(멈춘 재생을 안정적으로 유지하는 데 보조하기 위해, 선택사항으로서, 작은 각도 멈춤 영역이 이러한 중앙 각도 위치를 중심으로 제공될 수 있다), 반면에, 계속되는 손의 왼 방향 회전은 풋티지를 역방향 고속재생(shuttle backward)시키기 시작한다. 이해되다시피, 전체 고속재생 속도는 현재 활성 상태인 바에 의해 결정된다, 즉, 조작자의 제어 손의 특정 각도 자세(angular attitude)에 대해 풋티지는, "최상위 바(top bar)에서"에서보다 R^^n배 더 느리게 재생된다(이때, n은 범위 0...n-1 중, 바의 순서이며, 0은 최상위 바(top bar)를 나타냄).
각각의 바의 횡방향 극값에, 그렇게 나타나는 순간적인 풋티지 타임스탬프가 어노테이트(annotate)되며, 바의 스택 아래에서, 현재 액세스 및 디스플레이되는 프레임에 속한 타임스탬프가 디스플레이되고, 그래픽 마크(graphical mark)가 각각의 바에서 상기 현재 프레임의 위치를 표시한다. 각각의 바 내에서, "마킹된 프레임"의 시간적 위치(temporal loci), 즉 임의의 방식으로 어노테이트된 풋티지의 일부분의 그래픽 표시자가 추가로 나타난다.
조작자가 유효 요소를 포함하는 시점까지 풋티지를 탐색(navigate)할 때, 조작자는 제어 손을 타임라인 포즈에서 해제하고, 고속재생 모드가 해제된다. 스크린의 오른쪽 부분 상에 그래픽 태그들의 배열들이 나타나는 동안 타임라인이 반투명하게 희미해지고, 각각의 태그는 풋티지의 현재 프레임 내 유효 요소를 나타낸다.
조작자가 손가락들은 펴고, 엄지를 횡방향으로 두고, 손바닥을 바닥(floor)에 평행하게 한 채() 자신의 손을 머리 높이까지로 가져가며, 조작자가 이렇게 함으로써, 최상위 요소 태그가 팽창되고 강조되어 상기 태그의 선택을 나타낸다. 동시에, 전방 스크린 상의 일시정지된 풋티지 프레임 내에서, 이렇게 태깅된 요소는 밝아지고, 나머지 프레임은 낮은 부분 휘도로 어두워진다. 조작자가 자신의 손을 들고 내릴 때, 포즈는 거의 일정하게 유지되고, 조작자는 요소 태그의 전체 세트를 성공적으로 액세스한다(요소 자체의 대응하는 인-프레임 표시자(in-frame indication)을 이용해, 각각의 요소 태그가 차례로 강조된다).
이에 따라 선택되고 강조된 일부 특정 로토스코프(rotoscope) 요소를 이용해, 조작자는 포인팅 제스처(검지를 제외한 모든 손가락이 접히고, 엄지는 위를 향하며, 검지는 전방 스크린을 포인팅하는 제스처: )를 사용하고, 뒤 이어, '엄지-클릭' 변형(엄지를 검지와 평행하도록 아래로 내리는 제스처: )를 사용하여, 정면 스크린에서 선택된 요소를 취할 수 있다. 즉시, 강조된 요소의 복사본이 나타난다. 선택된 요소가 정적인 경우(일시정지된 풋티지의 현재 프레임의 일부인 경우), 새로운 복사본은, 순방향 재생되고 로토스코프 시퀀스의 끝 부분에서 루프를 형성하는, "라이브(live)"이다. 그 후, 조작자는, 엄지-클릭된 포즈를 유지하면서, 테이블의 표면을 포인팅할 때까지 자신의 손을 내리며, 이러한 동작을 통해, 움직이는(animated) 로토 요소가, 먼저 전방 스크린 아래로 슬라이딩되며, 그 후, 전방 스크린과 테이블 사이의 기하학적 동공(void)으로 사라지고, 그 후, 거기서 다시 나타나는 조작자의 "조준"을 따른다. 조작자는 자신의 포인팅 손을 재-조준하고, 엄지를 들어올림으로써(), 테이블 상에서 움직이는 로토 요소의 위치를 간단히 조정하고, 이에 따라 요소가 테이블 상에서 좌측에 있게 된다.
조작자는, 위 제스처 동작을 반복하는 동일한 시퀀스 프레임으로부터 제 2의 독립적인 요소를 당기고, 동일 시퀀스 내 또 다른 포인트까지로 고속재생-탐색하여, 테이블 상에 축적되어 있는 구성물(composition)에 제 3 요소를 추가할 수 있다. 그 후, 조작자는 (푸시백 상호대화를 함으로써) 완전히 상이한 시퀀스를 액세스하여, 상기 시퀀스로부터 테이블에 또 다른 요소를 추가한다.
결국, 테이블 표면에, 많은 로터스코핑(rotoscope)된 요소를 포함하는 구성물이 유지된다. 상기 요소는 고립 캐릭터(isolated character), 소도구(prop), 배경 등으로서, 이들 모두 계속 움직이고, 불투명한 요소에 있어서, 가장 최근에 추가된 것이 바로 아래 놓인 요소를 가리도록(occlude) 구성물에 추가된 순서로 그려진다. 이들 요소의 투명도(완전 투명도 또는 반-투명도)와 이들 요소의 잠재적 기하학적 겹침에 의해, 순서가 구성물의 중요한 특성임이 의미되기 때문에, 지금부터 요소를 "레이어(layer)"라고 지칭하는 것이 적합하다.
각각의 구성물의 레이어가 부호화된 그래픽 태그에 의해 표현되는데, 태그들의 집합이 테이블의 표면의 우측 에지를 따라(앞-뒤 축(forward-back axis)을 따라) 배열된다. 새로운 요소가 테이블의 구성물에 추가되자마자 태그가 나타나고, 태그의 선형 배열이 각각의 새로운 요소를 포함하도록 매끄럽게 조정된다.
조작자는 이제, 테이블의 오른쪽의 태그 집합 바로 위 약 10센티미터에서 자신의 손이 호버링(hovering)하도록 한다. 조작자가 손을 앞뒤로 직선이동시킬 때, 손에 가장 가까운 태그와 상기 태그가 가리키는 요소 레이어 모두 "선택"된다: 상기 가장 가까운 태그는 더 오른쪽으로 슬라이딩되고, 밝기와 투명도는 더 증가되고, 반면에, 나머지 구성 레이어는 거의 완전히 투명할 정도로 희미해짐으로써, 상기 태그가 선택됨이 나타난다. 따라서 선택된 층이 시각적으로 분리(isolate)된다.
조작자의 오른손이 특정 태그 위에서 거의 안정적인 위치를 유지하고, 이에 따라 하나의 레이어가 선택될 때, 조작자는 자신의 왼손을, 테이블 표면 쪽, 선택된 레이어의 시각적 중앙 근방의 임의의 곳으로 내린다. 조작자의 왼손이 (표면 위 약 20센티미터에서 표면에 평행한) 제 1 임계 평면을 가로지를 때, 시각적 피드백 시스템이 동작 중이며, 여기서, 작은 그래픽 십자가("더하기 기호")의 규칙적인 격자가 표면 상에 나타나고 위치적으로 상기 표면에 고정되고, 각각의 십자가의 밝기와 투명도는 표면 위에서의 손의 높이와, 상기 십자가의 손의 하향 투영된 진앙으로부터의 2차원 방사 거리 둘 모두의 함수이다. 이들 두 매개변수에 적용되는 적정 배율과 추가 상수가, (표면과 접하도록 투영되는) 손 위치를 이동하고 강조하면서 추적하고, 유한 반경의 원 내에서 고정된 격자를 조명하는 영향을 도출한다. 손이 표면 쪽으로 내려갈수록 조명되는 격자는 더 밝아진다.
그 후 내려지는 조작자의 왼손이 테이블과 물리적으로 접촉하게 되고, 피드백 시스템의 모드의 변경을 유발한다: 이제, 앞서 표면에 고정된 피드백 격자가 접촉하는 손을 따라 드래그된다. 이와 동시에, 레이어 재-위치설정(layer repositioning)이 시작되어, 조작자가 자신의 손을 테이블 주변에서 슬라이딩시킬 때, 레이어가 정밀하게 뒤를 따르고, 영향은 (물론 레이어 자체가 계속 활동(animate)하는 것을 제외하고) 표면 상에 종이가 슬라이딩되는 것 중 하나이다.
레이어가 조작자가 원하는 대로 재-위치되면, 조작자는 자신의 왼손을 들어, 표면과의 접촉 상태를 해제한다. 레이어 '드래그(dragging)' 모드가 종료되고, 레이어가 제 위치로 유지된다. 동시에 격자-기반 피드백 시스템이 이전 모드로 돌아가서, 격자는 테이블 표면에 대해 고정된 상태를 유지할 수 있다. 결국 손이 (수직 방향으로) 테이블로부터 충분히 멀리 이동할 때, 손은 제 1 임계면과 다시 교차하고, 격자 피드백은 시각적으로 사라진다. 오른손을 충분히, 수직방향 또는 횡방향(좌우)으로 움직임으로써, 마찬가지로 레이어 태그의 근접도 임계치를 초과하게 되고 , 따라서 모든 태그와 레이어가 선택되지 않고, 그 후, 모든 레이어가 완전 투명하게 되어, 전체 구성물(현재 하나의 레이어가 이동된 상태)이 다시 한 번 드러나게 된다.
조작자는 손가락들이 테이블의 오른쪽 에지 근방의 레이어 태그들 중 하나와 완전히 접촉하도록 자신의 오른손을 아래로 내림으로써 추가적인 레이어 상호대화를 개시하고, 개시되면, 태그가 밝아지고, 색상이 변경되어, '직접 조작(direct manipulation)' 모드로 들어왔음이 나타나게 된다. 이제 조작자는 자신의 손을 테이블을 따라, 오른쪽 에지에 평행하게, 앞뒤로 슬라이딩시키고, 조작자의 손가락 아래에 위치하는 태그가 이를 따라오며, 충분히 멀리 직선 이동한 경우, (다른 태그에 대한) 자신의 일련 위치(ordinal position)을 변경한다. 조작자가 자신의 손을 표면으로부터 들어올릴 때, 새로운 태그 순서가 유지되고, 대응하는 레이어의 새로운 논리적 순서가 도출된다. 이러한 방식으로, 레이어의 드로우 오더(draw order)가 조작될 수 있고, 개별 레이어가 스택에서 '위' 또는 '아래'로 이동될 수 있다.
마지막으로, 시스템 및 그 콘텐츠의 고 레벨 조작을 수행하도록 '순간' 제스처의 세트가 이용 가능하다. 예를 들어, 조작자는 오른손이 오른쪽을 포인팅하고, 왼손이 왼쪽을 포인팅하도록( ), 모든 손가락을 평평하게 유지하고 엄지를 뻗어 우선 앞쪽, 바깥쪽, 그리고 측면을 균일하게 가리켜, 지금까지 축적된 구성물을 삭제 및 제거하도록 자신의 손을 쓸 수 있다. 또는 하나의 손 위에 다른 하나의 손을 유지한 채 손들이 동 평면이 되고, 손바닥이 왼쪽을 향하는, 왼쪽 양손 '푸싱(pushing)' 동작에 의해, 전방 스크린의 콘텐츠가 왼쪽 스크린으로 이동하며, 제스처에 의해, 순방향 풋티지(forward footage)가 왼쪽으로 매끄럽게 직선 이동하기 시작하며, 중앙 법선 벡터가 왼쪽 스크린의 중앙 법선과 일치할 때까지, 동시에 수직 축을 중심으로 반시계 방향으로 회전한다. 따라서 어플리케이션의 전체 섹션 및 구성 데이터가 디스플레이 표면들 간에 재배열되거나 이동될 수 있다.
본원에서 기재되는 필름 조작 시스템은 많은 추가적인 기능, 가령, 조작자의 손가락이 프레임 단위로 관련 실루엣을 따라가는 손에 의해 요소들이 그들이 포함된 시퀀스로부터 로토스코프(rotoscope)될 수 있는 모드(mode)와, 구성물 테이블 상에서의 요소들의 시간-정렬(time-alignment)(또는 정확한 시간-오프셋)을 위한 수단 등을 포함하지만, 본원의 관심 대상인 자유공간, 근접도, 및 터치-기반 제스처 상호대화는 이들 모드에 대한 상세한 검토에서는 추가로(또는 특별히) 설명되지 않는다.
제 3 예시는 포티지 슬레이트(portage slate)에 대한 것이다. 이 제 3 예시에서, 다양한 유틸리티의 상호대화는 하나 이상의 특권(privileged) 물리적 객체(이른바 "포티지 슬레이트(portage slate)" 또는 "p-슬레이트")를 포함한다. 포티지 슬레이트 기능은, 본원에서 기재된 시스템에서 구축되는 모든 적절하게 설정된 애플리케이션에 대해 자동으로 이용 가능해진다. 상기 포티지 슬레이트는 물리적 접시이며, 조작자는 상기 포티지 슬레이트로, 제 1 위치에 디스플레이되는 그래픽 객체와 아티팩트를 "긁어(scrape)"올 수 있으며, 여기서, 이동 수송 후에, 슬레이트화된 객체가, 제 2 위치에서 새로운 디스플레이 맥락을 갖는 새로운 애플리케이션으로 전송될 수 있다.
이 제 3 예시는 제 1 및 제 2 예시를 참조하여 전개된다. 기하학적 설명서(geometry tutorial)의 조작자가 막 20면체를 "두드려서(tap)", 이를 표현하는 태그가 테이블의 에지 근방에 위치하게 되며, 그 후, 앞서 설명된 방식으로 20면체 스피닝을 설정했다. 이제 조작자는, 자신의 왼손을 이용해, 인접 p-슬레이트를 선택한다. p-슬레이트는, 20센티미터×30센티미터의 매트 컬러(matte-color)의 플라스틱의 강성 시트(sheet)이고, 시스템에 의해(일반적으로(그러나 반드시는 아님) 조작자의 손을 추적하기 위한 수단과 동일한 수단을 통해) 적극적으로 추적되며,
조작자가 p-슬레이트를 테이블 에지에 가까이 가져가고, p-슬레이트의 에지 중 하나가 테이블 에지에 평행하거나 거의 터치하도록 배향시킨다. 픽셀의 확장된 원뿔이 엄격한 테이블의 물리적 바운드를 의도적으로 "과하게 채우도록(overfill)" 테이블 표면을 담당하는 투영 시스템이 배열되었고, 실제로, 투영되는 픽셀 필드는, 지금처럼 테이블과 접할 때, 전체 p-슬레이트를 처리하기에 충분히 크다.
p-슬레이트의 근접한 존재(proximal presence)가, 투영 픽셀로의 로컬 액세스를 갖는 시스템의 일부를 포함하여, 임시 기생 디스플레이("TPD", transient parasitic display ) 구조를 인스턴스화한다. TPD의 기능은, p-슬레이트 상에 개별 디스플레이로서 물리적으로 놓이는 픽셀 서브셋을 조작하고, p-슬레이트 상으로의 픽셀 서브어레이의 비-법선 투영 입사에 의해 유도되는 임의의 기하학적 왜곡을 보상하며(즉, 반전시키며), p-슬레이트 및 상기 p-슬레이트 상에 그릴 권한이 있는 임의의 프로세스로 가상 렌더링 맥락을 제공하는 것이다.
p-슬레이트가 p-슬레이트의 코너들 중 테이블에 최근접한 하나에서, 라이브 (live) 상태이며 이용 가능하다는 표시자로서 움직이는 글리프(glyph)를 생성하도록 하는 것이 렌더링 맥락이다. 동기화된 애니메이션과 매칭하는 글리프가 p-슬레이트 근방의 테이블에서 생성된다. 조작자는 2개의 표면(고정된 표면과 이동하는 표면)이 논리적으로 연결됨을 보여주도록 글리프가 이원화됨을 이해한다.
조작자의 오른쪽 검지가 20면체의 태그 상으로 내려지고, 조작자는 테이블의 외곽선을 따라 자신의 손가락을 p-슬레이트로 슬라이딩(따라서 보통, 태그를 슬라이딩)시킨다. 상기 태그는, 현재 테이블의 경계부 밖에 있을지라도, (태그가 "바닥에 던져지는(thrown on the floor)" 제 1 예에서의 상호대화에서처럼) 이 시점에서는 폐기되는 것으로 간주되지 않으며, 대신, 시스템이 태그가 p-슬레이트 상에 "상주"한다고 주장한다.
실제로, 조작자가 다면체 기하학적 워크스테이션의 최인접부를 떠나고 방을 가로질러 움직일 때, 조작자의 궤적이 p-슬레이트를 약간 더 높게 위치하게 하고, 테이블의 투영 원뿔을 통해 전진하게 한다. 시스템의 대기시간(latency)이 낮은 추적에 의해, p-슬레이트의 변화하는 위치 및 배향이, 모바일 디스플레이의 기하학적 형태의 TPD의 내부 모델을 업데이트할 수 있으며, 이 모델에 의해, TPD 구조가 이동 표면과 교차하는 프로젝터 픽셀을 계속 뺏을 수 있다. p-슬레이트는 간단하게도, 자신과 프로젝터 간의 복잡한 투영 관계에 대해 알 필요 없이, 자신 고유의 견고한 기하학적 형태에 대해서 콘텐츠를 제 위치에서 계속 렌더링한다. 따라서 조작자는 태그가 p-슬레이트 상에서 조작자가 놓은 그 위치에 유지되며, 모든 인지 관련 감각으로, 태그는 현재 p-슬레이트 상에 있음을 관찰한다.
조작자가 앞으로 전진함으로써, p-슬레이트를 직선 이동시켜, p-슬레이트의 기하학적 형태가 투영 피라미드로부터 완전히 분리(disjunct)될 때, 상기 시스템은 TPD 구조를 해제하고 TPD의 렌더링 맥락을 비활성으로 마킹한다.
조작자가 기다란 방의 끝을 향해 갈 때, 조작자는 프로젝터가 활성화되어 있는 그 밖의 다른 공간을 통과한다. 각각의 경우에서, 네트워크-연결된 추적 시스템은 자신의 이벤트 스트림을, 로컬 투영 픽셀을 액세스하는 프로세스가 이용 가능하도록 만든다. 추적 이벤트가 p-슬레이트가 피라미드형 투영 원뿔과 새롭게 교차함을 보여줄 때마다, 또 다른 TPD 구조가 인스턴스화된다. 따라서 p-슬레이트는 그 잠깐 동안 투영 공간을 통과하여, 자신의 "콘텐츠"를 렌더링할 수 있다, 구체적으로, 20면체 태그가 p-슬레이트 상의 자신의 위치에 고정된 상태를 유지한다.
곧 조작자는 제 2 예시의 고속 프로타입화 필름 워크스테이션에 도달한다. 여기서도 역시, 하향 프로젝터의 픽셀이 어셈블리 테이블을 과하게 채우도록(overfil), 투영 파라미터가 배열된다. 조작자가 p-슬레이트를 작업테이블에 가까이 가져갈 때, 로컬 TPD가 다시 인스턴스화되고, 태그가 다시 한 번 드러난다. 덧붙여, 글리프(glyph)의 이원화가 다시 나타나서(하나는 p-슬레이트 상에, 다른 하나는 테이블 상에), 두 표면이 데이터-논리적으로 접촉하고 있음을 나타낼 수 있다.
조작자가 p-슬레이트를 테이블의 최후방 에지의 우측에(즉, 조작자 신체에 가장 가까운 곳에) 배치했다. 이제 조작자는 자신의 왼손으로 p-슬레이트를 잡고, 오른손의 손가락을 태그 쪽으로 내리는데, 이때 태그가 밝아져서, 접촉을 확인할 수 있다. 조작자는 p-슬레이트의 전방 에지를 가로질러 테이블 상으로, 태그를 앞쪽으로 매끄럽게 슬라이딩시킨다. 조작자가 테이블로부터 자신의 손가락을 들어, 태그와의 접촉을 종료할 때, 태그는 이동하여 로토스코프된 요소들로 구성된 수직 어레이에 합류하며, 그 후, 새로운 태그를 수용하기 위해, 상기 요소들의 위치가 약간씩 조정된다.
이제, 조작자가 자신이 방금 테이블에 추가한 태그를 가볍게 두드리면, 상기 태그가 자신의 '페이로드(payload)'를 방출한다: 조작자가 남겨둔 채로 여전히 회전 중인 20면체의 2차원 투영물이 이동할수록 커지면서 태그 위치로부터 빠르게 슬라이딩되고, 구성물 테이블의 중앙 위치를 차지한다. 이제 상기 20면체는 구성물에서 사용되는 다른 필름 요소들 중 임의의 것처럼 동작한다: 조작자는 상기 20면체를 재-위치시키고, 레이어 순서를 변경시키는 등을 할 수 있다.
제 4 예시는 특히 호버-스타일 입력(hover-style input)을 이용하는 일반 상호대화 방식을 포함한다. 이러한 제 4 예시는 도시 서비스 애플리케이션의 맥락에서 설명되며, 본원에서, 큰 전방 스크린이, 지상 구조물뿐 아니라 지하 지형(전기, 수도, 가스, 하수도 및 지하철 요소들의 복수의 상호침입성 레이어)까지 포함하는 도심 영역의 3차원 뷰를 보여준다. 자유 공간 제스처 네비게이션에 의해, 조작자는 이하에서 상세히 설명될 방식으로, 전방 디스플레이 상의 투시 장면에서 자유롭게 다닐 수 있다. 그러나 조작자 바로 앞에 있는 투영 테이블은 동일한 도심지의 탑-다운(top-down) 정투영 뷰(orthographic view)를 보여준다. 여기서 기재되는 호버 기반 상호대화에 의해, 애플리케이션의 지하 구조물의 탐색과 선택이 가능해진다.
조작자가 전방으로 약간 기울이고, 자신의 왼손을, 특정 중간지대(midtown region) 위에서 잘 시작하도록 하면서, 테이블 표면 쪽으로 내린다. 손이 테이블 위의 임계면(가령, 테이블 위 약 20센티미터)을 지나 내려감에 따라, 구조물 선택 수단이 활성화되고, 빛나는 반투명 디스크가 도시의 지도형 뷰(maplike view) 상에 그래픽적으로 덧씌워진다(overlay). 상기 디스크의 반경 내에 위치하는 각각의 지하 구조물에 대한 간결한 시각적 표현이 나타난다. 동시에, "강조된" 지하 구조물에 대한 더 상세한 3차원 도시가, 전방 투시 뷰 상의 올바른 3-공간 위치에 나타난다. 손을 표면 위 일정한 높이로 유지하면서, 조작자가 자신의 손을 횡방향으로 직선 이동시킬 때, 항상 손 바로 아래에서 나타나는 디스크가 이에 따라 직선 운동한다. 강조된 구조물들의 집합이 지속적으로 업데이트되어서, 이동하는 디스크가 일종의 선택 스포트라이트처럼 기능할 수 있다.
일 실시예의 상호대화 서브시스템은, 테이블 표면 위의 추적된 손의 높이와, 선택 디스크의 반경의 사상(mapping)을 더 수행하며, 상기 사상은 역 관계(inverse relationship)이어서, 조작자가 자신의 손을 테이블에 가까이 이동시킬수록, 디스크의 크기는 감소된다. 최대 반경은, 모드가 초기화될 때 합리적인 "오버뷰(overview)" 선택을 제공하도록 선택된다. 조작자의 손이 테이블 표면과 직접 접촉할 때 얻어지는 최소 반경은, 개별 지하 요소의 선택을 더 또는 덜 가능하게 만들도록 선택된다. 이러한 방식으로, 디스플레이 표면에 평행하는 한 손의 직선이동 자유도 2가 영역-특정적(domain-specific) 공간 자유도에 사상되며, 제 3 축은 애플리케이션 내 "정확도" 또는 "구체도" 파라미터에 사상된다.
이 상호대화에서, 호버와 실제 물리적 테이블 접촉(터치)은 논리적으로 구별되지 않는다, 즉, 시스템은 터치에 다른 의미를 부여하지 않는다. 그러나 조작자는 완전 접촉의 가능성이 제공하는 특정 물리적 이점을 누린다: 선택 디스크는, 조작자의 손가락이 테이블을 터치하고 있을 때, 가장 작은 크기를 가지는데, 이는 횡방향 손 동작이 선택에 있어서 가능한 최대의 변화(가장 큰, 즉, 디스크 크기에 비례함)를 발생시킴을 의미한다. 그러나 조작자의 손가락은 표면과 접촉할 때 상당한 위치적 안정성을 얻는다.
조작자는 물론 애플리케이션을 양손으로 구동시켜서, 하나의 손이 호버-기반 요소 선택을 추행하고, 다른 한 손이 전방 투시 뷰의 6 자유도의 조작을 수행하도록 사용되도록 할 수 있다. 또는, 2명의 조작자가 한 손씩 이용하여 협업할 수 있다.
마지막으로, 디스크를 조작하지 않는 두 번째 손으로 빛나는 디스크의 주변 테이블을 두드림으로써, 선택이 "고정(locked)"될 수 있다. 이와 달리, 이러한 간단한 두드림 동작은, 터치와 구별된다. 따라서 선택 상태가 동결(frozen)될 때, 원래 손이 자유롭게 테이블로부터 이동할 수 있다. 요컨대, 상기 수단은, 가변 선택 반경에 의해, 공간적으로 분포된 요소들의 평면적 선택을 가능하게 하는 것이다.
자연스럽게, 그 밖의 다른 상호대화 전략(가령, 전기 및 가스 시설만 선택되도록 애플리케이션을 조정하기 위한 것)이 실제 구현에서 핵심 선택 동작을 둘러싼다. 그러나 실시예는 이러한 것에 한정되지 않는다.
공간 운영 환경(SOE: spatial operating environment)
여기서, 공간-연속체 입력 시스템(spatial-continuum input system)의 실시예가 공간 운영 환경(SOE)의 맥락에서 기재된다. 예를 들어, 도 10은 일 실시예에 따르는 공간 운영 환경(SOE)의 블록도이다. 사용자는 자신의 손(101 및 102)을 카메라(104A-104D)의 어레이의 뷰잉 영역(viewing area, 150)에 위치시킨다. 카메라는 손가락 및 손(101 및 102)의 위치, 배향 및 움직임을 공간 추적 데이터로서 검출하고, 출력 신호를 전-프로세서(pre-processor, 105)에게로 발생시킨다. 전-프로세서(105)는 카메라 출력을 제스처 신호로 변환(translate)하며, 상기 제스처 신호는 시스템의 컴퓨터 프로세싱 유닛(107)으로 제공된다. 상기 컴퓨터(107)는 이러한 입력 정보를 이용하여 스크린 커서 상의 하나 이상을 제어하기 위한 명령어(command)를 발생시키며, 비디오 출력을 디스플레이(103)로 제공한다.
상기 시스템이 한 명의 사용자의 손을 입력으로 갖는 것처럼 도시되지만, SOE(100)는 복수의 사용자를 이용하여 구현될 수 있다. 또한, 손에 추가로, 또는 손을 대신하여, 시스템은 사용자 신체의 임의의 하나 이상의 부위를 추적할 수 있으며, 그 예로는 머리, 발, 다리, 팔, 팔꿈치, 무릎 등이 있다.
도시된 실시예에서, 4대의 카메라 또는 센서가 사용되어, 뷰잉 영역(150)에서 사용자의 손(101 및 102)의 위치, 배향 및 움직임을 검출할 수 있다. 본 발명의 사상과 범위 내에서, SOE는 더 많은 대수의 카메라 또는 센서(가령, 6대의 카메라, 8대의 카메라 등), 또는 더 적은 대수의 카메라 또는 센서(가령, 2대의 카메라)를 이용하여 구현될 수 있다. 덧붙이자면, 예시적 실시예에서, 카메라 또는 센서가 대칭적으로 배치될지라도, SOE(100)에서 이러한 대칭성이 필수인 것은 아니다. 사용자의 손의 위치, 배향 및 움직임의 검출을 가능하게 하는 어떠한 카메라의 대수나 배치 방식도 SOE(100)에서 사용될 수 있다.
하나의 실시예에서, 사용되는 카메라는 그레이-스케일(grey-scale) 이미지를 캡처할 수 있는 동작 캡처 카메라이다. 하나의 실시예에서, 사용되는 카메라는 Vicon 사에 의해 제조된 카메라(가령, Vicon MX40 카메라)이다. 이 카메라는 온-카메라 프로세싱(on-camera processing) 기능을 포함하며, 초 당 1000 프레임으로 이미지 캡처할 수 있다. 동작 캡처 카메라는 마커(marker)를 검출하고 마커의 위치를 파악할 수 있다.
기재되는 실시예에서, 카메라는 광학 검출을 위해 사용되는 센서이다. 또 다른 실시예에서, 카메라 또는 그 밖의 다른 검출기가 전자기(electromagnetic) 타입, 정자기(magnetostatic) 타입, RFID 타입 또는 그 밖의 다른 임의의 적합한 검출 타입용으로 사용될 수 있다.
전-프로세서(105)가 3차원 공간 포인트의 재구성 및 골격 포인트(skeletal point)의 라벨링을 발생시킨다. 상기 제스처 변환기(106)가 사용되어 3D 공간 정보와 마커 움직임 정보가 명령어 언어로 변환되며, 상기 명령어 언어는 컴퓨터 프로세서에 의해, 디스플레이 상의 커서의 위치, 형태 및 액션(action)을 업데이트할 수 있다. SOE(100)의 또 다른 실시예에서, 상기 전-프로세서(105)와 제스처 변환기(106)는 하나의 단일 장치로 조합될 수 있다.
컴퓨터(107)는 임의의 범용 컴퓨터일 수 있으며, 예를 들자면, Apple, Dell 또는 그 밖의 다른 임의의 적합한 제조사의 컴퓨터일 수 있다. 상기 컴퓨터(107)는 애플리케이션을 실행하고, 디스플레이 출력을 제공한다. 다른 경우라면 마우스나 그 밖의 다른 공지된 입력 장치로부터 제공될 커서 정보가, 제스처 시스템으로부터 제공된다.
마커 태그(Marker Tag)
하나의 실시예의 SOE가 시스템이 사용자의 손의 위치를 파악하며, 시스템이 보고 있는 것이 왼손인지 오른손인지를 식별하고, 보여지는 손가락이 어느 손가락인지를 식별하기 위해, 사용자의 하나 이상의 손가락 상에 마커 태그를 사용하는 것을 고려한다. 이로 인해서, 시스템은 사용자 손의 위치, 배향 및 움직임을 검출할 수 있다. 이 정보에 의해, 복수의 제스처가 시스템에 의해 인식될 수 있고, 사용자에 의해 명령어(command)로서 사용될 수 있다.
하나의 실시예에서 상기 마커 태그는, (본 발명의 실시예에서, 인간의 손의 다양한 위치에 부착되기에 적합한) 기판과, 상기 기판의 표면에 고유의 식별 패턴으로 배열된 개별적인 마커를 포함하는 물리적 태그이다.
상기 마커 및 이와 연계된 외부 감지 시스템은, 이들의 3차원 위치의 정확하고 정교하며 신속하고 연속적인 획득(acquisition)을 가능하게 하는 임의의 영역(광, 전자기, 정자기 등)에서 동작할 수 있다. 상기 마커 자체는, (가령, 구조된(structured) 전자기 펄스를 발산함으로써) 능동적으로, 또는 (가령, 본원에서 언급되는 바와 같이, 광학 역반사에 의해) 수동적으로 동작할 수 있다.
획득의 각각의 프레임에서, 검출 시스템은, 복원된 3차원 위치의 집성된 "클라우드(cloud)"를 수신하는데, 상기 집성된 클라우드는, (카메라 또는 그 밖의 다른 검출기의 가시 범위 내에서) 기기의 작업공간에 현재 존재하는 태그로부터의 모든 마커를 포함한다. 각각의 태그 상의 마커들은 충분히 많으며, 고유의 패턴으로 배열되어 있어서, 검출 시스템은, (1) 각각의 복원된 마커 위치가, 하나의 단일 태그를 형성하는 포인트들의 유일무이한 하위집합(subcollection)에 할당되는, 세분화(segmentation) 작업, (2) 각각의 세분화된 포인트 하위집합이 특정한 하나의 태그로서 식별되는, 라벨링(labelling) 작업, (3) 식별된 태그의 3차원 위치가 복원되는, 위치 파악(location) 작업, 및 (4) 식별된 태그의 3차원 배향이 복원되는 배향(orientation) 작업을 수행할 수 있다. 작업(1) 및 작업(2)은 마커 패턴의 특정 속성을 통해 가능해지며, 이는 이하에서 설명될 것이며, 도 11에서 하나의 실시예로서 도시되어 있다.
하나의 실시예에서 태그 상의 마커가 정규 격자 위치의 서브셋에 부착된다. 본 실시예에서처럼, 이러한 기저 격자(underlying grid)는 전통적인 카테시안 정렬(cartesian sort)을 이용하거나, 대신, 그 밖의 다른 임의의 정규 평면 테셀레이션(tessellation)(가령, 삼각형/육각형 붙이기 배열(triangular/hexagonal tiling arrangement))을 이용할 수 있다. 격자의 눈금(scale)과 공간(spacing)은, 마커-감지 시스템의 알려진 공간 분해능과 관련하여, 확립되어, 이웃하는 격자 위치가 혼동될 가능성이 없도록 할 수 있다. 모든 태그에 대한 마커 패턴의 선택은 다음의 제약사항을 만족시켜야 한다: 어떠한 태그의 패턴도, 그 밖의 다른 임의의 태그의 패턴의 회전(rotation), 이동(translation), 반사대칭(mirroring) 중 임의의 조합을 통한 패턴과 일체하지 않아야 한다. 일부 특정 개수의 구성 마커의 손실(또는 맞물림)은 용인되도록 마커의 다중도 및 배열이 선택될 수 있다. 임의의 변형 후, 오염된 모듈을 그 밖의 다른 임의의 모듈과 혼란할 가능성이 없어야 한다.
도 11를 참조해 보면, 복수의 태그(201A-201E)(왼손)와 태그(202A-202E)(오른손)가 나타난다. 각각의 태그는 장방형이고, 이 실시예에서, 5×7 격자 어레이로 구성된다. 장방형 형태는 태그의 배향을 결정할 때 도움이 되기 위해, 그리고 반사 중복(mirror duplicate)의 가능성을 감소시키기 위해 선택된 것이다. 도시된 실시예에서, 각각의 손의 각각의 손가락에 대한 태그가 존재한다. 일부 실시예에서, 하나의 손에 1, 2, 3 또는 4개의 태그를 이용하는 것이 적합할 수 있다. 각각의 태그는 다른 그레이-스케일이나 컬러 음영을 갖는 경계부를 갖는다. 이 실시예에서, 이러한 경계부 내에 3×5 격자 어레이가 있다. 마커(도 11에서 검은 점으로 표현됨)가 격자 어레이 내 특정 점에 배치되어, 정보를 제공할 수 있다.
각각의 패턴의 ‘공통(common)’과 ‘고유(unique)’ 서브패턴으로의 세분화를 통해, 검증 정보가 태그의 마커 패턴에 인코딩될 수 있다. 예를 들어, 본 발명의 실시예는 2가지 가능한 ‘경계부 패턴(border pattern)’을 특정한다(장방형 경계부 주변에 마커가 분포). 따라서 태그의 ‘군(family)’이 확립되며, 왼손에 대한 태그는 모두, 태그(201A-201E)에서 나타난 바와 같이, 서로 동일한 경계부 패턴을 이용하며, 반면에, 오른손의 손가락에 부착된 태그는, 태그(202A-202E)에서 나타난 바와 같이, 서로 다른 패턴을 할당받을 수 있다. 이러한 서브패턴은, 태그의 모든 배향에서, 왼 패턴이 오른 패턴과 구별될 수 있도록 선택된 것이다. 도시된 예에서, 왼손 패턴은 각각의 코너에 하나의 마커를 포함하고, 코너 격자 위치로부터 두 번째에 하나의 마커를 포함한다. 오른손 패턴은 단 2개의 코너에만 마커를 가지며, 코너가 아닌 격자 위치에 2개의 마커를 갖는다. 패턴을 자세히 살펴보면, 4개의 마커 중 임의의 3개가 보이는 한, 왼손 패턴은 오른손 패턴으로부터 확실하게 구별될 수 있음을 알 수 있다. 하나의 실시예에서, 경계부의 컬러 또는 음영이 어느 손인지(handedness)에 대한 지시자(indicator)로서 사용될 수도 있다.
물론 각각의 태그는 여전히 고유의 내부 패턴을 이용하는데, 이때 마커는 자신의 군(family)의 공통 경계부 내에서 분포되어 있다. 도시된 실시예에서, 내부 격자 어레이 내 2개의 마커가, 손가락의 회전이나 배향으로 인한 어떠한 중복도 없이, 10개의 손가락 각각을 고유하게 식별하기에 충분함이 밝혀졌다. 마커 중 하나가 맞물리는 경우라도, 태그의 패턴과 왼손/오른손 특성(handedness)의 조합이 고유의 식별자를 만들어낸다.
본 실시예에서, 각각의 역반사성 마커(retroreflective marker)를 자신의 의도된 위치에 부착하는 작업(수작업)을 보조하기 위해, 격자 위치가 강성(rigid) 기판 상에 시각적으로 제공된다. 이들 격자 및 의도되는 마커 위치는 컬러 잉크젯 프린터를 통해 기판 상으로 그대로 인쇄되며, 이때, 상기 기판은 연성 ‘수축 필름(shrink film)’의 시트이다. 각각의 모듈은 상기 시트로부터 절단되고, 오븐-베이킹되며, 이러한 오븐-베이킹 동안 각각의 모듈을 열처리함으로써, 정확하고 재연 가능한 수축이 수행된다. 이러한 절차에 뒤 따르는 짧은 간격 후, 가령, 손가락의 길이방향 곡선을 다소 따르도록 냉각 태그의 형태가 정해질 수 있다. 그 후, 기판이 적정하게 강성이 되고, 마커는 지시된 격자 점에 부착될 수 있다.
하나의 실시예에서, 마커 자체는 3차원이며, 예를 들면, 접착제나 그 밖의 다른 임의의 적합한 수단을 통해 기판에 부착되는 소형의 반사성 구이다. 마커의 3차원 특성은 2차원 마커에 비해 검출 및 위치 파악에 도움이 될 수 있다. 그러나 본원에서 기재된 SOE의 사상과 범위 내에서 어느 것이든 사용될 수 있다.
이제, 태그가 Velcro나 그 밖의 다른 적합한 수단을 통해, 조작자가 착용하는 장갑에 부착되거나, 대신, 약한 양면 접착 테이프를 이용해 조작자의 손가락에 직접 부착된다. 세 번째 실시예에서, 강성 기판 없이, 개별 마커를 조작자의 손가락 및 손에 직접 부착, 또는 칠(paint)하는 것이 가능하다.
제스처 어휘(Gesture Vocabulary)
하나의 실시예의 SOE는 손 포즈(hand pose), 배향, 손 조합, 배향 혼합으로 구성된 제스처 어휘를 고려한다. 또한 SOE의 제스처 어휘에서, 포즈와 제스처를 설계하고 소통하기 위한 표기 언어(notation language)가 구현된다. 상기 제스처 어휘는, 운동 관절(kinematic linkage)의 순간적인 ‘포즈 상태’를, 압축적인 텍스트 형태로 표현하기 위한 시스템이다. 상기 관절은 생물학적(예를 들어 인간의 손, 또는 인간 몸 전체, 또는 메뚜기 다리, 또는 여우 원숭이의 척추관절)이거나, 비생물학적(가령, 로봇의 암)인 것일 수 있다. 어떠한 경우라도, 관절은 단순형(척추)이거나, 가지형(손)일 수 있다. SOE의 상기 제스처 어휘 시스템은 임의의 특정 관절에 대해, 일정 길이 문자열을 확립하고, 상기 문자열의 ‘문자 위치(character location)’를 차지하는 특정 ASCII 문자들의 집합이, 관절의 순간적인 상태, 즉, ‘포즈’의 고유한 기술어(description)가 된다.
손 포즈
도 12은 하나의 실시예 하에서, SOE의 제스처 어휘의 하나의 실시예에서의 손 포즈를 도시한다. 상기 SOE는 하나의 손의 다섯 개의 손가락 각각이 사용된다고 가정한다. 이들 손가락은 소지(새끼손가락)-p, 약지-r, 중지-m, 검지-i, 엄지-t로 코딩된다. 엄지와 손가락들에 대한 복수의 포즈들이 도 12에서 정의되어 있다. 제스처 어휘의 문자열은, 관절(이 경우, 손가락)에서 각각의 표현할 수 있는 자유도(degree of freedom)에 대하여 단일 문자 위치를 확립한다. 덧붙이자면, 문자열의 상기 위치에 유한 개수의 표준 ASCII 문자들 중 하나를 할당함으로써 전체 범위의 움직임이 표현될 수 있도록, 이러한 각각의 자유도는 이산화(또는 양자화)되는 것으로 이해된다. 이러한 자유도는 신체-특정 원점 및 좌표 시스템(손 등, 메뚜기의 몸체의 중심, 로봇 암의 부착부(base) 등)에 관련하여 표현된다. 따라서 적은 개수의 추가적인 제스처 어휘 문자 위치가, 더 전역적인 좌표 시스템에서 관절의 위치와 배향을 ‘전체적으로’ 표현하도록 사용된다.
도 12를 계속 참조하면, ASCII 문자를 이용하여 복수의 포즈가 정의되고 식별된다. 상기 포즈 중 일부는 엄지(thumb)와 비-엄지(non-thumb)로 나뉜다. 이 실시예에서, SOE는 ASCII 문자 자체가 포즈의 암시인 코딩을 사용한다. 그러나 포즈를 표현하기 위해 어떠한 문자라도, 포즈를 암시하는 것에 관계없이, 사용될 수 있다. 덧붙여, 이 실시예에서는 표기 문자열용으로 ASCII 문자를 이용하기 위한 어떠한 요구사항도 없다. 임의의 적합한 기호, 숫자, 또는 그 밖의 다른 표현법이 이 실시예의 사상과 범위 내에서 사용될 수 있다. 예를 들어, 바람직하다면, 표기법은 손가락 당 2비트를 이용할 수 있다. 또는 요구되는 대로 그 밖의 다른 비트 수를 이용할 수도 있다.
구부러진 손가락이 문자 “^”로 표현되며, 구부러진 엄지는 “>”로 표현된다. 위를 향해 곧은 손가락 또는 엄지는 “I”로 지시되며, “\”, 또는 “/”로 각(angle)이 지시된다. "-"는 옆으로 곧은 엄지를 나타내고, “x"는 수평면을 가리키는 엄지를 나타낸다.
이러한 개별 손가락 및 엄지에 대한 기술어를 이용함으로써, 이 실시예의 방식을 이용하여 수많은 개수의 손 포즈가 정의되고 써질 수 있다. 각각의 포즈가 5개의 문자에 의해 표현되며, 이때, 순서는 앞서 언급한 p-r-m-i-t이다. 도 12은 다양한 포즈를 도시하면, 이들 중 몇 개가 예시와 설명을 위해 본원에서 기재된다. 평평하게, 그리고 지면과 평행하게 유지된 손은 “11111”로 표현된다. 주먹은 “”로 표현된다. “OK” 사인은 “”로 표현된다.
암시적인 문자를 이용할 때, 문자열이 쉬운 ‘인간 가독성(human readability)’을 위한 기회를 제공한다. 각각의 자유도를 기술하는 가능한 문자의 집합은, 빠른 인식과 분명한 유추를 위해, 눈으로 선택될 수 있는 것이 일반적이다. 예를 들어, 수직 바(‘|’)는 관절 요소가 ‘곧음(straight)’을 의미하고, 엘('L')은 90도 구부린 상태를 의미하며, 곡절 악센트(‘^’)는 급격히 굽은 상태를 나타낼 수 있다. 앞서 언급한 바와 같이, 어떠한 문자나 코딩이라도 원하는 대로 사용될 수 있다.
제스처 어휘 문자열(가령, 본원에서 기재된 것)을 이용하는 임의의 시스템은, 희망 포즈 문자열과 순간적인 실제 문자열 간의 문자열 비교의 높은 계산적 효율을 이점으로 갖는다(임의의 특정 포즈에 대한 식별, 또는 검색은 말 그대로, ‘문자열 비교(string compare)’가 된다(가령, UNIX의 ‘strcmp( )’ 함수)). 덧붙이자면, ‘와일드카드 문자(wildcard character)’의 사용이 프로그래머나 시스템 설계자에게 친숙한 효율과 효능을 더 제공한다: 매치(match)와 관계없는 순간 상태를 갖는 자유도가 물음표('?')로 특정될 수 있으며, 추가적인 와일드카드의 의미가 할당될 수 있다.
배향
다른 손가락 및 엄지의 포즈에 추가로, 손의 배향은 정보를 나타낼 수 있다. 또한 전역 공간 배향(global-space orientation)을 기술하는 문자가 직관적으로 선택될 수 있다: 문자 ‘<’, ‘>’, ‘^’ 및 ‘v’는, 배향 문자 위치에서 쓰일 때, 왼쪽, 오른쪽, 위 및 아래의 개념을 나타낼 수 있다. 도 13는 손 배향 기술어를 도시하고, 포즈와 배향을 조합하는 코딩의 예를 도시한다. 본 발명의 하나의 실시예에서, 2개의 문자 위치는, 우선, 손바닥의 방향을 특정하고, 그 후, (손가락들의 실제 구부러짐 여부에 관계없이, 손가락들이 곧게 펴 있을 시의) 손가락의 방향을 특정한다. 이들 2개의 위치에 대한 가능한 문자는 배향의 ‘몸-중심(body-centric)’ 표기를 표현한다: ‘-’, ‘+’, ‘x’, ‘*’, ‘^’ 및 ‘v’가 내측(medial), 외측(lateral), 전방(anterior)(몸 앞쪽으로 멀어지는 방향), 후방(몸 뒤쪽으로 멀어지는 방향), 두측(cranial)(위 방향) 및 미측(caudal)(아래 방향)을 기술한다.
하나의 실시예의 표기 방식에서, 손가락 포즈를 나타내는 5개의 문자들 뒤에, 콜론(:)이 뒤 따르고, 그 뒤에, 2개의 배향 문자가 뒤 따라서 완전한 명령어 포즈를 정의할 수 있다. 하나의 실시예에서, 시작 위치는 "xyz" 포즈라고 일컬어지며, 상기 "xyz" 포즈에서, 엄지가 위를 향해 곧게 뻗어 있고, 검지가 전방을 가리키며, 중지가 상기 검지와 수직을 이루면서 좌측을 가리킨다(상기 포즈가 왼손으로 만들어졌을 때). 이 포즈는 문자열 ""로 표현된다.
‘XYZ-핸드’은, 시각적으로 제공되는 3차원 구조의 완전한 6-자유도 네비게이팅을 가능하게 하기 위해, 인간의 손의 기하학적 형태를 활용하기 위한 기법이다. 상기 기법이 조작자의 손의 직선운동과 회전운동에만 의존할지라도(원칙적으로 조작자의 손가락이 원하는 어떠한 포즈로도 유지될 수 있도록), 본 실시예는 검지가 몸으로부터 멀어지는 방향을 가리키고, 엄지가 천장을 가리키고, 중지가 왼쪽-오른쪽을 가리키는 정적인 구성을 선호한다. 따라서 상기 3개의 손가락이 3-공간 좌표계의 상호 직교하는 3개의 축들을 (대략적으로, 그러나 의도는 분명히 명료하게 나타나도록) 기술한다: 따라서 ‘XYZ-핸드’이다.
그 후, XYZ-핸드 네비게이팅이 손을 이용해 진행되며, 이때 조작자의 몸이 지정된 ‘중립 위치’가 되기 전까지 손가락들은 앞서 언급된 바와 같은 포즈를 취한다. 3-공간 물체(또는 카메라)의 3개의 직선운동 자유도와 3개의 회전운동 자유도에 접근하는 것이 다음의 자연스러운 방식으로 발효된다: (몸의 자연 좌표계에 대한) 손의 좌-우 움직임이 연산적 맥락(computational context)의 x-축을 따르는 운동을 도출하고, 손의 위-아래 움직임이 연산적 맥락의 y-축을 따르는 운동을 도출하며, 손의 앞-뒤 움직임(조작자의 몸 쪽 방향-조작자의 몸에서 멀어지는 방향)이 맥락 내에서 z-축 움직임을 도출한다. 이와 유사하게, 검지를 중심으로 하는 조작자의 손의 회전은 연산적 맥락의 배향의 ‘롤 회전(roll)’ 변화를 도출하며, 마찬가지로, ‘피치 회전(pitch)’과 ‘요 회전(yaw)' 변화는 각각, 조작자의 중지와 엄지를 중심으로 하는 회전을 통해 도출된다.
본원에서, ‘연산적 맥락(computational context)’이 XYZ-핸드법에 의해 제어되는 개체를 일컫기 위해 사용되고, 가공의 3-공간 물체나 카메라를 제시하는 것처럼 보이지만, 상기 기법은 실세계의 물체의 다양한 자유도를 제어할 때도 동일하게 유용함을 이해해야 한다. 예를 들자면, 적정한 회전 엑추에이터가 구비된 비디오나 모션 픽처 카메라의 팬(pan)/틸트(tilt)/롤(roll) 제어에도 유용하다. 덧붙여, XYZ-핸드 포즈에 의해 도출된 물리적 자유도는 가상 영역에서는 다소 덜 정확하게 사상될 수 있다. 본 실시예에서, XYZ-핸드는 대형 파노라마 디스플레이 이미지의 네비게이팅적 액세스(navigational access)를 제공하기 위해 사용될 수도 있는데, 여기서 조작자 손의 좌-우 및 위-아래 움직임이 이미지에 대한 기대되는 좌-우 또는 위-아래 패닝(panning)을 야기하며, 다만, 조작자 손의 앞-뒤 움직임은 ‘줌(zooming)' 제어로 사상된다.
모든 경우에서, 손의 움직임과 유도되는 연산적 직선/회전운동 간 결합이 직접적이거나(즉, 조작자의 손의 위치나 회전의 오프셋(offset)이, 임의의 선형(또는 비선형) 함수를 통해, 연산적 맥락의 물체나 카메라의 위치 또는 회전 오프셋과 1대1로 사상됨), 간접적일 수 있다(즉, 조작자 손의 위치 또는 회전 오프셋이, 임의의 선형(또는 비선형) 함수를 통해, 1대1로, 연산적 맥락의 위치/배향의 1차 도함수나 그 이상의 차수의 도함수와 사상되고, 그 후, 연속 적분(ongoing integration)이 연산적 맥락의 실제 0차 위치/배향의 비-정적 변화를 도출함). 이러한 간접적 제어 수단은, 페달의 일정한 오프셋이 일정한 차량 속도를 덜, 또는 더 야기하는, 자동차의 ‘가속 페달’의 사용과 유사하다.
실세계의 XYZ-핸드의 로컬 6-자유도 좌표의 원점으로서 기능하는‘중립 위치’는, (1) (막힌 공간에 대해 상대적인) 공간에서 절대 위치 및 배향으로서, 또는 (2) 조작자의 전체 위치 및 ‘바라보는 방향(heading)’에 관계없이, 조작자 자신에 대한 고정된 위치 및 배향으로서(가령, 몸의 앞쪽으로 8인치, 턱 아래 10인치, 어깨 평면과 일직선으로 외측으로), 또는 (3) 조작자의 의도된 보조 동작을 통해 상호대화적으로(이는 예를 들어, 조작자의 ‘다른’ 손을 통해 내려진 제스처 명령어를 이용하여 이뤄질 수 있으며, 이때, 상기 명령어는 XYZ-핸드의 현재 위치와 배향이 이때부터 직선운동 및 회전운동의 원점으로 사용되어야 함을 나타냄), 확립될 수 있다.
XYZ-핸드의 중립 위치에 관한 ‘멈춤(detent)’ 영역(또는 ‘데드 존(dead zone)’)을 제공하는 것이 또한 편리하다. 이러한 공간에서의 움직임은 제어 맥락에서의 움직임으로 사상되지 않는다.
그 밖의 다른 포즈로는 다음을 포함한다:
두 손 조합
일 실시예의 SOE는 한 손 명령어와 포즈를 고려할 뿐 아니라, 두 손 명령어 및 포즈도 고려한다. 도 14는 SOE의 하나의 실시예에 따르는 두 손 조합과 이와 관련되는 표기법의 예시를 도시한다. 첫 번째 예시의 표기를 살펴보면, “멈춤(full stop)”은 2개의 쥔 주먹을 포함함을 알 수 있다. “스냅샷(snapshot)”예시에서는 각각의 손의 엄지들과 검지들이 뻗어 있는데, 엄지들이 서로를 가리켜서 골대 모양의 프레임을 형성한다. “방향타 및 조절판 시작 위치”에서는 엄지와 나머지 손가락들이 위를 가리키고 손바닥이 스크린을 향한다.
배향 혼합(orientation blend)
도 15는 SOE의 하나의 실시예에서 배향 혼합의 하나의 예를 도시한다. 도시된 예시에서, 혼합은, 손가락 포즈 문자열 뒤에서, 배향 표기의 쌍을 괄호 안에 묶음으로써 표현된다. 예를 들어, 첫 번째 명령어는 모두 곧게 뻗어 있는 손가락 위치를 나타낸다. 배향 명령어의 첫 번째 쌍은 손바닥이 펴서 디스플레이를 향하고, 두 번째 쌍은 손이 스크린 쪽으로 45도 피치(pitch) 회전함을 의미한다. 이 예에서, 혼합의 쌍들이 제시되었지만, SOE에서 임의의 개수의 혼합도 고려될 수 있다.
명령어 예시
도 17은 SOE에서 사용될 수 있는 다양한 가능한 명령어를 도시한다. 본원의 기재 중 일부는 디스플레이 상의 커서를 제어하는 것에 관한 것이지만, SOE는 이러한 행동에 국한되지 않는다. 실제로, SOE는 스크린 상의 모든, 또는 일부 데이터(그뿐 아니라 디스플레이 상태까지)를 조작함에 있어 더 넓은 적용범위를 가진다. 예를 들어, 명령어가 비디오 미디어의 재생 동안 비디오 제어를 발생시키도록 사용될 수 있다. 명령어는 일시 멈춤, 빨리 감기, 되감기 등을 위해 사용될 수 있다. 덧붙여, 명령어는 이미지의 줌 인, 또는 이미지의 줌 아웃, 또는 이미지 배향의 변경, 임의의 방향으로의 팬(pan) 운동 등을 하도록 구현될 수 있다. SOE는 또한 메뉴 명령어(가령, 열기, 닫기, 저장 등)를 대신하여 사용될 수도 있다. 다시 말하자면, 상상될 수 있는 어떠한 명령어 또는 활동도, 손 제스처를 이용하여, 구현될 수 있다.
동작
도 16은 하나의 실시예에서의 본 발명의 동작을 도시하는 순서도이다. 단계(701)에서, 검출 시스템이 마커와 태그를 검출한다. 결정 블록(702)에서, 태그와 마커가 검출되었는지의 여부가 결정된다. 검출되지 않은 경우, 시스템은 단계(702)로 복귀한다. 단계(702)에서 태그와 마커가 검출되었다고 판단된 경우, 시스템은 단계(703)로 진행한다. 단계(703)에서, 시스템은 검출된 태그와 마커로부터 손, 손가락 및 포즈를 식별한다. 단계(704)에서 시스템은 포즈의 배향을 식별한다. 단계(705)에서 시스템은 검출된 하나 이상의 손의 3차원 공간 위치를 식별한다. (단계(703, 704 및 705) 중 하나 이상은 결합될 수 있다.)
단계(706)에서 정보가 앞서 기재된 바 있는 제스처 표기(gesture notation)로 변환된다. 단계(707)에서, 포즈가 유효한가의 여부가 판단된다. 이는 생성된 표기 문자열을 이용한 간단한 문자열 비교를 통해 이뤄질 수 있다. 포즈가 유효한 것이 아니라면, 시스템은 단계(701)로 복귀한다. 포즈가 유효하다면, 단계(708)에서 시스템은 표기와 위치 정보를 컴퓨터로 전송한다. 단계(709)에서 컴퓨터는 제스처에 응답하여 적정한 액션이 취해지도록 결정하고, 이에 따라서 단계(710)에서 디스플레이를 업데이트한다.
SOE의 하나의 실시예에서, 온-카메라 프로세서(on-camera processor)에 의해, 단계(701-705)가 수행된다. 또 다른 실시예에서, 바람직한 경우, 프로세싱이 시스템 컴퓨터에 의해 이뤄질 수 있다.
파싱 및 변환(Parsing and Translation)
본 발명의 시스템은 기저 시스템에 의해 복원된 저-레벨 제스처의 스트림을 “파싱(parse)”하고 “변환(translate)”할 수 있고, 이러한 파싱되고 변환된 제스처를 명령어의 스트림이나 이벤트 데이터로 변환할 수 있으며, 이러한 명령어의 스트림이나 이벤트 데이터는 광범위한 컴퓨터 애플리케이션 및 시스템을 제어하도록 사용될 수 있다. 이들 기법 및 알고리즘은, 이들 기법을 구현하는 엔진과 상기 엔진의 능력을 이용하는 컴퓨터 애플리케이션을 구축하기 위한 플랫폼을 모두 제공하는 컴퓨터 코드로 이루어진 시스템에서 구현될 수 있다.
하나의 실시예가 컴퓨터 인터페이스에서 인간의 손에 의한 풍부한 제스처적 사용을 가능하게 하는 것에 초점을 맞추지만, 또 다른 인체의 부분(예컨대, 팔, 몸통, 다리 및 머리, 그러나 이에 국한되지 않음)뿐 아니라, 다양한 종류의 손을 쓰지 않는 도구(정적(static) 도구와 다관절(articulating) 도구 둘 모두)(예컨대, 캘리퍼스(calipers), 콤파스, 유연성 곡선 근사화기(curve approximator) 및 다양한 형태의 위치 지시 장치, 그러나 이에 국한되지 않음)에 의해 이뤄진 제스처를 인식할 수 있다. 마커와 태그는, 조작자가 지니고 사용할 물건 및 도구에 적용될 수 있다.
본원에서 기재되는 시스템은, 인식될 있고 이에 따라 동작이 취해질 수 있는 넓은 범위의 풍부한 제스처를 포함하면서 동시에, 애플리케이션으로의 간편한 통합을 제공하는 제스처 시스템을 구축할 수 있게 해주는 많은 혁신기술을 포함한다.
하나의 실시예에 따르는 제스처 파싱 및 변환 시스템은 다음의 1) 내지 3)을 포함한다:
1) 여러 다른 집합체 레벨로 제스처를 특정하기 위한(컴퓨터 프로그램에서 사용되기 위해 인코딩하기 위한) 간결하고 효과적인 방식:
a. 한 손 “포즈”(손의 일부분들의 서로에 대한 구성 및 배향). 3차원 공간에서의 한 손의 배향과 위치.
b. 둘 중 어느 한 손의 포즈, 또는 위치(또는 둘 모두)를 고려하기 위한 두 손 조합.
c. 복수의 사람 조합; 시스템은 셋 이상의 손을 추적할 수 있으며, 따라서 둘 이상의 사람이 협업적으로(또는 게임 애플리케이션의 경우 경쟁적으로) 표적 시스템을 제어할 수 있다.
d. 포즈가 순차적으로 시리즈로 결합되는 시퀀스 제스처. 이를 “애니메이팅(animating)” 제스처라고 일컫는다.
e. 조작자가 공간에서 형태를 추적하는 “그래핌(grapheme)” 제스처.
2) 앞서 언급된 각각의 카테고리로부터 주어진 애플리케이션 맥락과 관련있는 특정 제스처를 등록하기 위한 프로그래밍 기법.
3) 등록된 제스처가 식별되고 이들 제스처를 캡슐화하는 이벤트가 관련 애플리케이션 맥락으로 전달될 수 있도록 제스처 스트림을 파싱하기 위한 알고리즘.
구성요소(1a) 내지 (1f)를 갖는 특정화 시스템(specification system)(1)이 본원에서 기재되는 시스템의 제스처 파싱 및 변환 기능을 이용하기 위한 토대를 제공한다.
한 손 “포즈”는,
ⅰ) 손가락과 손등 간의 상대적 배향의 문자열로서 표현되며,
ⅱ) 적은 개수의 이산 상태로 양자화된다.
상대적 복합 배향(relative joint orientation)에 의해, 본원의 시스템은 서로 다른 손 크기와 형태와 관련된 문제를 피할 수 있다. 본 발명의 시스템에서는 어떠한 “연산자 교정(operator calibration)”도 필요하지 않다. 덧붙여, 포즈를 상대적 배향의 문자열 또는 집합으로 특정하는 것은, 추가적인 필터와 특정화(specification)를 이용하여 포즈 표현을 조합함으로써, 더 복잡한 제스처 특정화가 용이하게 생성되게 할 수 있다.
포즈 특정화를 위한 적은 개수의 개별적인 상태들을 이용함으로써, 포즈를 간결하게(compactly) 특정하고, 다양한 기저 추적 기법(가령, 카메라를 이용한 수동 광 추적, 발광 점(lighted dot)과 카메라를 이용한 능동 광 추적, 전자기장 추적 등)을 이용한 정확한 포즈 인식을 보장하는 것이 가능할 수 있다.
모든 카테고리(1a) 내지 (1f)에서 비-핵심 데이터는 무시되도록 제스처는 부분적으로(또는 최소한만) 특정될 수 있다. 예를 들어, 2개의 손가락의 위치가 결정적이고, 그 밖의 다른 손가락 위치는 중요치 않은 제스처는, 2개의 관련 손가락의 동작 위치가 주어지는 한 번의 특정화에 의해, 표현될 수 있으며, 하나의 동일한 문자열 내에서, 다른 손가락에 대해 “와일드카드(wild card)” 또는 일반적인“이것을 무시(ignore these)” 지시자가 리스팅(listing)된다.
제스처 인식에 대해 본원에서 기재된 혁신기술(가령, 멀티-레이어 특정화 기법, 상대적 배향의 사용, 데이터의 양자화, 모든 레벨에서 부분(또는 최소) 특정화만 허용)은 모두 손 제스처의 특정화를 넘어, 그 밖의 다른 신체 부위 및 “제조된” 도구와 물체를 이용한 제스처 특정화까지 일반화될 수 있다.
“제스처 등록하기”를 위한 프로그램적 기법(2)은, 엔진에 의해 실행 중인 시스템의 다른 부분에서도 이용가능해져야 할 제스처가 어느 것인지를 프로그래머가 정의할 수 있게 해주는 API(애플리케이션 프로그래밍 인터페이스) 콜의 지정된 세트로 구성된다.
이들 API 루틴은 애플리케이션 셋-업 시점에서 사용되어, 실행 중인 애플리케이션의 수명 전체 동안 사용되는 정적 인터페이스 정의를 생성할 수 있게 한다. 이들은 또한 실행 중에 사용되어, 인터페이스 특성이 그때 그때 변경되도록 할 수 있다. 이러한 인터페이스의 실시간 변경에 의해,
ⅰ) 복잡한 맥락적 및 조건적 제어 상태를 구축하는 것,
ⅱ) 제어 환경에 히스테리시스(hysterisis)를 동적으로 추가하는 것,
ⅲ) 사용자가 실행 시스템 자체의 인터페이스 어휘를 변경 또는 확장시킬 수 있는 애플리케이션을 생성하는 것
이 가능해진다.
제스처 스트림을 파싱하기 위한 알고리즘(3)은 (1)에서 특정(specify)되고, (2)에서 등록된 제스처를 입력되는(incoming) 저-레벨 제스처 데이터와 비교한다. 등록된 제스처에 대한 매치(match)가 인식되면, 매칭된 제스처를 표현하는 이벤트 데이터가 스택에서 실행 애플리케이션으로 넘겨진다.
본 발명의 시스템의 설계에서 효과적인 실시간 매칭이 바람직하며, 특정된 제스처가, 가능한 빨리 처리되는 가능성(possibility)의 하나의 트리로서 취급된다.
덧붙여, 특정된 제스처를 인식하기 위해 내부적으로 사용되는 원시 비교 연산자(primitive comparison operator)가 또한 애플리케이션 프로그래머에게 사용될 수 있도록 노출되어, 애플리케이션 맥락 내로부터 추가적인 비교(예를 들어, 복잡 또는 복합적인 제스처의 유연 상태 검사)가 발생될 수 있다.
본원에서 기재된 시스템의 혁식기술에 “잠금(locking)” 의미(semantic)의 인식이 있다. 이러한 의미는 등록 API(2)에 의해 함축된다(그리고, 보다 적게는, 특정화 어휘(1) 내에 임베디드된다). 등록 API 콜은,
ⅰ) “엔트리(entry)” 상태 통지자(notifier) 및 “계속(continuation)” 상태 통지자, 및
ⅱ) 제스처 우선순위 특정자(specifier)
를 포함한다.
제스처가 인식되는 경우, 상기 제스처의 “계속” 상태는, 동일한 더 낮은 우선순위의 제스처의 모든 “엔트리” 상태보다 우선한다. 이러한 엔트리와 계속 상태 간의 구별이 인지 시스템(perceived system)에 상당한 유용성(usability)을 추가한다.
본원의 시스템은 실세계 데이터 에러 및 불확실성에 대해 견고한 동작(robust operation)을 위한 알고리즘을 포함한다. 저-레벨 추적 시스템으로부터의 데이터는 불완전할 수 있다(그 이유는 다양하다. 가령, 광학 추적 중 마커의 맞물림(occlusion), 네트워크 드롭-아웃(network drop-out), 또는 프로세싱 래그(processing lag) 등 때문일 수 있다).
파싱 시스템에 의해 손실 데이터(missing data)가 마킹(mark)되고, 상기 손실 데이터의 크기와 맥락에 따라서, “마지막으로 알려진(last known)” 또는 “가장 가능성 높은(most likely)” 상태로 보간(interpolate)된다.
특정 제스처 성분(가령, 특정 관절의 배향)에 관한 데이터가 손실된 경우, 그러나 특정 성분의 “마지막으로 알려진” 상태가 물리적으로 분석될 수 있는 것이 가능한 경우, 상기 시스템은 실시간 매칭에서 이러한 마지막으로 알려진 상태를 이용한다.
반대로 말하자면, 마지막으로 알려진 상태가 물리적으로 분석되는 것이 불가능한 경우, 상기 시스템은 성분의 “최선의 추측 범위(best guess range)”로 고장 대치(fall back)하며, 시스템은 실시간 매칭에서 이러한 합성 데이터를 이용한다.
본원에서 기재된 특정화 및 파싱 시스템은, 복수 손 제스처에 대하여 어느 손으든 포즈 요구사항을 만족시킬 수 있도록, “손잡이 불가지론(handedness agnosticism)”을 지원하도록 주의 깊게 설계되었다.
데이터 공간 네비게이팅
하나의 실시예의 SOE에 의해, '푸시백(pushback)', 또는 인간 조작자 손의 선형 공간 동작, 또는 유사 차원적 동작의 수행이 가능하여, 그래픽 또는 그 밖의 다른 데이터-표현적 공간을 통한 선형 버징(verging) 및 트럭킹(trucking) 동작을 제어할 수 있다. SOE와, 상기 SOE에 의해 구축되는 연산 및 인지적 연합이 배율 레벨을 네비게이팅하기 위한 기본적이고 구조적인 방식을 제공하여, 주로 선형 '심도 차원(depth dimension)'를 순회할 수 있다, 즉, 양자화된, 또는 '멈춤' 파라미터 공간을 액세스할 수 있다. 또한 SOE는 조작자가 의지대로 추가적인 맥락을 획득할 수 있도록 하는 효과적인 수단을 제공한다:공간, 개념, 또는 연산 여부와 관계없이, 인접부 및 이웃들을 이해하기 위한 빠른 기법.
특정 실시예에서, 푸시백 기법은 전통적인 입력 장치(가령, 마우스, 트랙볼, 일체형 슬라이더 또는 손잡이)를 이용하거나, 조작자 외부의 태깅 또는 추적 대상(가령, 계장된(instrumented) 연쇄 링크, 정자기적으로 추적되는 '입력 브릭(input brick)')에 따라 달라질 수 있다. 또 다른 대안적 실시예에서, 푸시백 구현예가 전체 제어 시스템으로서 충분할 수 있다.
하나의 실시예의 SOE는 더 큰 공간 상호대화 시스템의 한 구성요소이며, 상기 상호대화 시스템과 일체 구성되며, 상기 상호대화 시스템은, 컴퓨터를 제어하기 위한 종래의 마우스-기반 그래픽 사용자 인터페이스('WIMP' UI) 방법을 대체하고, 대신, (a) 하나 이상의 유형의 물체(가령, 인간의 손, 인간 손에 쥐어진 물체, 무생물 물체 등)를 추적할 수 있는 물리적 센서; (b) 감지되는 손의 전개되는 위치, 배향 및 포즈를 제스처 이벤트의 시퀀스로 분석하기 위한 분석 구성요소; (c) 이러한 공간 및 제스처 이벤트를 표현하기 위한 기술 방식(descriptive scheme); (d) 이러한 이벤트를 제어 프로그램으로, 그리고 상기 제어 프로그램 내로 배포하는 프레임워크, (e) 이벤트 스트림 자체와, 이벤트 해석의 애플리케이션-특정적 결과 모두의 그래픽, 오디오 및 그 밖의 다른 디스플레이 방식의 표현과, 제스처 이벤트의 스트림에 의해 인코딩되는 인간의 의도(명령어)를 동기화하는 방법을 포함하며, 이들 모두 이하에서 상세히 기재된다. 이러한 하나의 실시예에서, 푸시백 시스템은 추가적인 공간 및 제스처 입력-및-인터페이스 기법과 일체 구성된다.
일반적으로, 데이터 공간의 네비게이션은 검출기(detector)를 통해 수신된 제스처 데이터로부터 신체의 제스처를 검출하는 과정을 포함한다. 제스처 데이터는, 시간과 물리적 공간의 한 포인트에서의 신체의 순간적인 상태의 절대 3-공간 위치 데이터이다. 검출하는 과정은 제스처 데이터를 이용하여 제스처를 식별하는 과정을 포함한다. 네비게이팅하는 과정은 제스처를 제스처 신호로 변환하는 과정과, 상기 제스처 신호에 응답하여 데이터 공간을 네비게이팅하는 과정을 포함한다. 데이터 공간은 물리 공간에서 표현되는 데이터세트를 포함하는 데이터-표현적 공간이다.
하나의 실시예에서, 전체 왕복 대기시간(round trip latency)(손 동작에서 센서로, 그리고 포즈 분석으로, 그리고 푸시백 해석 시스템으로, 그리고 컴퓨터 그래픽 렌더링으로, 그리고 디스플레이 장치로, 그리고 다시 조작자의 시각계로의 왕복 대기시간)이 낮게 유지되고(가령, 하나의 실시예에서 대략 15밀리초(millisecond)의 대기시간이 나타난다), 시스템의 그 밖의 다른 파라미터가 적정하게 튜닝될 때, 푸시백 상호대화의 지각되는 결과는 물리적 인과 관계의 개별적 감지이다: 즉, SOE는 스프링 장착형 구조물에 대한 푸싱의 물리적 공진 메타포를 문자화한다. 푸시백 시스템에 의해 제공되는 또 다른 추상적 그래픽 피드백 방식, 그리고 조작자 움직임의 해석 시 특정 자유도의 주도면밀한 억제와 함께, 지각되는 인과관계는 매우 효과적인 피드백이며, 이러한 피드백은, 인간의 큰 운동(gross motor) 동작과 작은 운동(fine motor) 동작 모두를 제어 수단으로 안정적이고, 신뢰할만하며, 재현 가능하게 사용하도록 한다.
SOE의 맥락을 평가할 때, 많은 데이터세트는 본질적으로 공간적이다: 이들은 문자적 물리 공간(literal physical space) 내에서 현상, 이벤트, 측정치, 관측치, 또는 구조를 나타낸다. 더 추상적이거나, 문자 형식이지만 비-공간적인 정보를 인코딩하는 다른 데이터세트에 대해, 표현(시각, 청각, 또는 그 밖의 다른 디스플레이 방식의 표현)을 준비하는 것이 종종 바람직하며, 상기 표현의 일부 기본 양태는, 단일 스칼라-값 파라미터에 의해 제어되고, 상기 파라미터를 공간적 차원(spatial dimension)과 연계시키는 것이 또한 종종 바람직하다. 이하에서 상세히 설명되겠지만, 푸시백 수단을 이용한 조작으로부터 이점을 얻는 것은 이러한 단일 스칼라 파라미터의 조작이다.
표현은, 데이터세트가 최적이라고 간주되는 자신의 파라미터의 이산 값들을 적게(실제로, 종종, 단 하나만) 추가로 허용할 수 있다. 이러한 경우, '멈춤 파라미터(detented parameter)'에 대해 말하거나, 파라미터가 표현 공간의 하나의 차원으로 명시적으로 사상되는 경우, '멈춤 공간(detented space)'에 대해 말하는 것이 유용하다. 본원에서 사용되는 용어 '멈춤(detented)'은 파라미터의 바람직한 양자화뿐 아니라, 랫치, 자기 정렬 수단, 조그-셔틀 휠(jog-shuttle wheel), 및 그 밖의 다른 세심한 기계적 멈춤을 갖는 널리 사용되는 장치의 시-촉각적 감각(visuo-haptic sensation)까지도 유발하는 의도를 가진다.
이러한 파라미터의 자명한, 그러나 결정적으로 중요한 예로는, (1) 컴퓨터 그래픽 환경에서, 데이터세트의 렌더링 가능한 표현으로부터의 합성 카메라의 거리; (2) 원본 데이터세트로부터 데이터가 샘플링되고 렌더링 가능한 형태로 변환되는 밀도; (3) 시간에 따라 변하는 데이터세트로부터 샘플들이 리트리빙되고 렌더링 가능한 표현으로 변환되는 시간 지수(temporal index)가 있다(그러나 이에 제한되지 않음). 이들은 전역적 접근법이다; 무수한 영역-특정적 파라미터화(parameterization)가 역시 존재한다.
SOE의 푸시백이 데이터세트의 파라미터-제어 축을 물리 공간 내 로컬하게 관련된 '심도 차원'과 정렬하고, 상기 심도 차원을 따르는 구조적 실세계 동작이 제어 축을 따르는 데이터-공간 변환을 야기하도록 하는 것이 일반적이다. 결과는 파라미터 공간을 네비게이팅하기 위한 매우 효과적인 수단이다. SOE에서 구현되는 푸시백의 대표적인 실시예에 대한 자세한 설명이 이어진다.
푸시백 예에서, 조작자는 대형 벽 디스플레이 앞에 편안한 간격을 두고 서 있는다. 상기 대형 벽 디스플레이 상에 텍스트와 이미지를 포함하는 단일 '데이터 프레임'이 나타나며, 여기서 그래픽 데이터 요소는 정적이거나 동적일 수 있다. 예를 들어, 데이터 프레임은 이미지를 포함할 수 있지만, 이에 국한되지 않는다. 데이터 프레임은 그 자체는 2차원 구조지만, 그럼에도 불구하고, 방과 그 내용물(가령, 디스플레이 및 조작자)을 기술하기에 편리한 실세계 좌표와 일치하도록 배열된 기본 좌표계를 갖는 3차원 컴퓨터 그래픽 렌더링 환경에 위치할 수 있다.
조작자의 손가락 및 아마도 전체 손 덩어리의 위치와 배향을, 높은 정확도 및 빠른 시간 속도로 분해(resolve)하는 센서에 의해 조작자의 손이 추적되며, 시스템은 최종 공간 데이터를 분석해, 각각의 손의 '포즈'(즉, 손가락의 서로에 대한, 그리고 손 전체에 대한 기하학적 성질)를 특징짓는다. 이 예시적 실시예가 인간 손인 물체를 추적하지만, 대안적 실시예에서, 그 밖의 다른 복수의 물체가 입력 장치로서 추적될 수 있다. 일례로는, 일방 푸시백(one sided pushback) 시나리오가 있으며, 여기서, 신체는 개방 자세(손바닥은 전방을 향하고(z-축을 따라)(가령, 조작자 앞에 있는 디스플레이 스크린 쪽을 향함))의 조작자의 손이다. 이를 설명하기 위해, 벽 디스플레이는 x 및 y 차원을 차지하며; z는 조작자와 디스플레이 사이의 차원을 설명한다. 이 푸시백 실시예와 연계된 제스처 상호대화 공간은 상수 z의 평면에서 접하는 2개의 공간을 포함하고, 디스플레이로부터 더 멀리 떨어진(즉, 조작자에게 더 가까이 위치하는) 멈춤 구간 공간은 '데드 존(dead zone)'이라고 지칭되며, 더 가까운 절반 공간은 '활성 존(active zone)'이다. 데드 존은 후방으로(조작자 쪽이면서, 디스플레이에서 멀어지는 방향으로) 무한대로 뻗어 있지만, 전방으로는 데드 존 임계면에서 끝나는 유한거리를 가진다. 활성 존은 데드 존 임계면으로부터 디스플레이 쪽으로 뻗어 있다. 디스플레이에 렌더링되는 데이터 프레임은, 활성 존 내에 있는 신체의 움직임에 의해, 상호대화적으로 제어되거나, "푸시백"된다.
데이터 프레임은, 디스플레이의 것과 정확하게 매칭되는 크기 및 종횡비로 구성되고, 자신의 센터와 법선 벡터가 디스플레이의 물리 속성과 일치하도록 놓지만, 실시예가 이에 국한되지는 않는다. 장면을 렌더링하기 위해 사용되는 가상 카메라가 디스플레이 바로 앞에, 조작자의 거리에서 위치한다. 따라서 이러한 맥락에서, 렌더링된 프레임이 디스플레이를 정확하게 채운다.
복수의 추가적인 동평면(coplanar) 데이터 프레임이 가시적 프레임(visible frame)의 왼쪽 및 오른쪽에 논리적으로 배열되며, 서로 적절한 간격을 두고 균등하게 이격되어 있다. 동평면 데이터 프레임이 컴퓨터 그래픽 렌더링 기하학적 요소의 물리/가상 렌더링 바운드 외부에 놓이기 때문에, 이러한 횡방향으로 이동되는 인접 데이터 프레임이 초기에는 보이지 않는다. 알다시피, 데이터 공간(기하학적 구조가 주어짐)은 z-방향에서의 단일 자연 멈춤부와, 복수의 x-멈춤부를 포함한다.
조작자는 자신의 왼손을 어깨까지 들어올리고, 느슨한 주먹 포즈를 유지한다. 그 후, 조작자는 손가락들이 위를 가리키도록 펴고, 엄지는 오른쪽을 가리키도록 펴며, 손바닥이 스크린을 향하도록 한다(이하에서 상세히 설명될 제스처 기술 언어로, 이 포즈 변이(pose transition)는 로 표현될 것이다). 새로운 포즈를 검출하는 시스템은 푸시백 상호대화를 트리거하고, 포즈가 처음 입력된 절대 3-공간 손 위치를 즉시 기록한다. 이 위치는 다음 번 손 동작이 상대적 오프셋으로서 보고될 '원점'으로서 사용된다.
즉시, 부분적으로 투명한 2개의 동심 글리프들이 프레임의 중앙(따라서 디스플레이의 중앙)에 중첩된다. 예를 들어, 글리프가, 데드 존 임계점까지 데드 존 내에서의, 신체 푸시백 제스처를 가리킬 수 있다. 제 2 글리프는 제 1 글리프보다 작다는 것이, 조작자의 손이 데드 존 내에 있다는 것을 나타내는 것이며, 이를 통해, '아직' 푸시백 작업 중이 아님이 나타난다. 조작자가 자신의 손을 전방으로(데드 존 임계면 및 디스플레이를 향해) 이동시킬 때, 제 2 글리프는 점진적으로 커진다. 조작자의 손이 데드 존 임계면에 있는 점에서 제 2 글리프가 제 1 글리프와 동일한 크기를 가진다. 이 예시의 글리프는, 조작자의 손이 자신의 시작 위치에서, 데드 존과 활성 존을 구별하는 데드 존 임계면을 향해 이동함에 따른 글리프의 동심 요소의 진화를 기술한다. 예를 들어, 손이 임계면에 가까이 갈수록, 글리프의 내부 "톱니(toothy)" 부분이 커지며, 상기 내부 부분은, 손이 임계 위치에 도달할 때 내부 글리프의 반경과 (정적인) 외부 글리프가 정확하게 매칭되도록 배열된다.
조작자가 자신의 손을 데드 존과 디스플레이에서 멀어지도록 이동시킴에 따라, 제 2 글리프는 제 1 글리프 내부에서 수축되지만, 제 1 글리프와 동심이며, 디스플레이 중앙에 위치하는 것은 항상 유지한다. 결정적으로, 조작자의 손 동작의 z-성분만 글리프의 스케일링(scaling)에 사상되고, 부수적인 손 동작의 x-성분 및 y-성분이 어떠한 기여도 하지 않는다.
조작자의 손이 데드 존의 임계면을 향해 이동할 때, 활성 존과 만나고, 푸시백 메커니즘이 시작된다. 손의 (임계면에서부터 측정된) 상대적 z-위치가 스케일링 함수의 대상이 되고, 최종 값이 데이터 프레임 및 횡방향 이웃들의 z-축 변위를 야기하도록 사용되어서, 프레임의 렌더링된 이미지가 디스플레이로부터 후퇴하는 것처럼 보이게 되고, 그 후, 이웃 데이터 프레임 역시 가시적이 되어, 디스플레이 공간의 에지로부터 '채운다(filling in)'. 즉, 프레임이 놓이는 평면이 카메라로부터 멀리 이동할수록, 합성 카메라의 일정 각도 대면(constant angular subtent)이, 프레임이 놓이는 평면을 더 많이 '캡처(capture)'한다. z-변위가 지속적으로 업데이트되어, 손을 디스플레이 쪽으로 밀고, 다시 자신 쪽으로 끌어당기는 조작자는, 자신의 움직임에 직접 응답하는, 프레임 집합들의 횡방향 후퇴 및 버징(verging)을 지각한다.
대응하는 푸시백으로부터 도출된 데이터 프레임의 제 1 상대적 z-축 변위의 일례로서, 데이터 프레임의 렌더링된 이미지가 디스플레이로부터 후퇴하는 것처럼 보이며, 이웃하는 데이터 프레임이 가시 상태가 되면서, 디스플레이 공간의 에지로부터 '채운다'. 복수의 추가적인 동평면 데이터 프레임을 포함하는 이웃하는 데이터 프레임이 가시 프레임의 왼쪽과 오른쪽에, 서로 적절한 간격을 두고 균등하게 이격되도록, 논리적으로 배열되어 있다. 대응하는 푸시백으로부터 도출되며, 제 1 상대적 z-축 변위를 고려하고, 제 1 상대적 z-축 변위를 야기한 푸싱 상태에서 조작자의 손을 더 푸싱하는 것을 가정하는 데이터 프레임의 제 2 상대적 z-축 변위의 일례로서, 프레임의 렌더링된 이미지가 디스플레이로부터 추가로 후퇴되는 것처럼 보여서, 추가적인 이웃 데이터 프레임이 가시 상태가 되고, 디스플레이 공간의 에지로부터 더 '채운다'.
한편, 쌍을 이루는 동심 글리프가 수정된 피드백을 보여준다. 활성 존에서 조작자의 손을 이용해, 제 2 글리프가 스케일링-기반 반응(scaliing-based reaction)에서, 회전 반응(rotational reaction)으로 변경되고, 여기서 손과 임계면 간 물리적 z-축 오프셋이 양의(동평면) 각도 오프셋으로 사상된다. 데드 존 임계점 너머의 데드 존에서의 (z-축을 따라, 디스플레이 쪽으로, 그리고 조작자에서 멀어지는) 신체 푸시백 제스처를 나타내는 글리프의 일례에서, 글리프는, 조작자의 손이 데드 존 임계면을 가로지를 때(즉, 푸시백 메커니즘이 활성화될 때)의 글리프의 진화를 나타낸다. 따라서 디스플레이 쪽으로 갔다 오는 조작자 손의 움직임이, 제 2 글리프의 시계방향 및 반-시계방향 회전에 의해(제 1 글리프는, 앞서 언급한 바와 같이, 정적인 기준 상태를 제공함), 시각적으로 나타나서, 글리프의 "톱니" 요소가, 손과 임계면 간의 오프셋의 선형 함수에 따라, 회전하고, 선형 동작을 회전 표현으로 변경한다.
따라서 이 예에서, z-축을 따르는 디스플레이 쪽으로의 손 이동량의 추가적인 제 1 증분이, 제 2 글리프의 점진적 시계방향 회전에 의해(이때, 제 2 글리프는, 앞서 언급한 바와 같이, 정적 기준 상태를 제공함), 시각적으로 표현되어, 글리프의 "톱니" 요소가, 손과 임계면 간의 오프셋의 선형 함수에 대응하는 제 1 크기만큼 회전한다. z-축을 따르는 디스플레이 쪽으로의 손 이동량의 추가적인 제 2 증분이, 제 2 글리프의 점진적인 시계방향 회전에 의해(이때 제 1 글리프는, 앞서 언급된 바와 같이, 정적 기준 상태를 제공함), 시각적으로 표현되어, 글리프의 "톱니" 요소가 손과 임계면 간의 오프셋의 선형 함수에 대응하는 제 2 크기만큼 회전한다. 덧붙여, z-축을 따르는 디스플레이 쪽으로의 손 이동량의 제 3 증분은, 제 2 글리프의 점진적 시계방향 회전에 의해(제 1 글리프는, 앞서 언급한 바와 같이, 정정 기준 상태를 제공함), 시각적으로 표현되어, 글리프의 "톱니" 요소가 손과 임계면 간 오프셋의 선형 함수에 대응하는 제 3 크기만큼 회전한다.
이러한 표본 적용예에서, 조작자의 손이 활성 존에 있을 때 보조 차원적 감도(secondary dimensional sensitivity)가 투입된다: 손의 횡방향(x-축) 동작이 다시, 가능한 스케일링 함수를 통해, 수평방향 프레임 시퀀스의 x-변위에 사상된다. 스케일링 함수가 양수인 경우, 결과는 조작자의 손의 위치 '팔로잉(following)' 중 하나이며, 조작자는 자신이 프레임을 좌우로 슬라이딩하고 있음을 지각한다. 신체의 횡방향 동작으로부터 야기된 데이터 프레임의 횡방향 x-축 변위의 일례로서, 데이터 프레임이 좌우로 슬라이딩되어, 추가 데이터 프레임이 디스플레이 공간의 오른쪽 에지에서부터 채우는 동안, 디스플레이 공간의 왼쪽 에지에서 특정 데이터 프레임이 시야에서 사라지거나, 부분적으로 사라진다.
마지막으로, 조작자가 (가령, 주먹을 쥠으로써) 자신의 손을 손바닥-전방 포즈(palm-forward pose)에서 빠져나오게 할 때, 푸시백 상호대화가 종료되고, 프레임 집합(frame collection)은 자신의 본래의 z-멈춤부로(즉, 디스플레이와 동평면으로) 빠르게 되돌아간다. 이와 동시에, 프레임 집합이 횡방향 조정되어, 하나의 단일 프레임의 디스플레이와의 x-일치(coincidence)를 얻을 수 있으며; 프레임이 종료되고, 따라서, '디스플레이 중앙에 위치(display-centered)'하는 것은, 푸시백 종료의 순간에서 동심 글리프의 중심에 가장 가까이 있었던 것이다. 여기서 글리프 구조는 선택 레티클(selection reticle)로서 제 2 함수로서 기능하는 것으로 보이지만, 실시예가 이에 국한되는 것은 아니다. 일반적으로, 프레임 집합의 z-위치와 x-위치는, '스프링-장착식 반환'의 시각적 감각을 제공하도록 짧은 시간격 동안 최종 디스플레이-일치 값으로 진행하는 것이 가능하다.
이 예시에서 배치된 푸시백 시스템은, (1) (데이터세트의 임의의 특정 부부의 각 대면(angular subtent)을 희미하게 하는 대신) 직접 시각적 사이트라인(심도 차원)을 따라 집합체 데이터세트를 가변적으로 이동시키고, 이에 따라, 더 많은 데이터세트를 시야로 가져옴으로써, 인식적으로 가치 있는 '이웃 맥락(neighborhood context)'을 획득하고, (2) 횡방향-배열된(laterally-arrayed) 데이터세트를, 자연 수평방향 차원을 따라 가변적으로 이동시키고, 데이터의 임의의 특정 섹션의 각 대면은 유지하고, 오래된 데이터의 가시성(visibility)을 새로운 데이터의 가시성으로 교환함으로써, '스크롤링'의 익숙한 감각으로 이웃 맥락을 획득하며, (3) 빠르고 차원적으로 제한된 네비게이션을 통해 데이터세트의 이산화된 요소들을 선택하기 위한 효과적인 제어 방식을 제공한다.
하나의 실시예의 푸시백의 또 다른 예에서, 조작자는, 바닥에 평행하는 수평면에 놓이는 액티브 표면을 갖는 허리 높이의 디스플레이 장치 바로 옆에 선다. 여기서 좌표계가 이전 예에서와 일치하는 방식으로 확립된다: 디스플레이 표면이 x-z 평면에 놓여서, 상기 표면의 법선을 나타내는 y-축이 물리적 중력 벡터에 대향하여 정렬된다.
신체가 테이블형 디스플레이 표면 위에서 수평방향으로 유지되는 일례적 물리적 시나리오에서, 신체는 조작자의 손이지만, 실시예는 여기에 국한되지 않는다. 푸시백 상호대화는 양방향이어서, 상부 데드 존 임계면과 하부 데드 존 임계면이 존재하게 된다. 덧붙여, 푸시백 방식에 의해 액세스되는 선형 공간은, 상부 활성 존에 이산 공간 멈춤부(가령, "제 1 멈춤부", "제 2 멈춤부", "제 3 멈춤부", "제 4 멈춤부")를 제공받고, 하부 활성 존에 이산 공간 멈춤부(가령, "제 1 멈춤부", "제 2 멈춤부", "제 3 멈춤부", "제 4 멈춤부")를 제공받는다. 상부 데드 존과 하부 데드 존을 포함하는 비교적 작은 데드 존이, 푸시백이 시작되는 수직(y-축) 위치의 중앙에 놓이도록, 그리고 상기 데드 존 위에 활성 존이 있으며, 데드 존 아래에 활성 존이 있도록, 하나의 실시예의 상호대화 공간이 구성된다.
조작자는 이산의 평행하는 평면들(데이터 프레임)의 스택으로 분석된 일례적 데이터세트로 작업 중이다. 상기 데이터세트는, 자신이 나타내는 물리 실세계의 자연스러운 결과로서(가령, 단층 촬영(tomographic scan)으로부터의 이산 슬라이스, 3차원 집적 회로의 복수 층들 등), 또는 데이터를 분리하고 이산화하는 것이 논리적이거나 유익하기 때문에(가령, 복수의 스펙트럼 대역으로 획득된 위성 이미지, 각 10년의 데이터가 개별적인 레이어로 제공되는 지리적으로 구성된 인구통계 데이터 등), 그렇게 배열될 수 있다. 데이터의 시각적 표현은 더 정적이거나, 동적 요소를 포함할 수 있다.
푸시백 기능이 진행 중이지 않은 구간 동안, 단일 레이어가 '현재(current)'로 간주되고, 디스플레이에 의해 시각적 두드러짐을 갖도록 표현되고, 디스플레이와 물리적으로 일치된다고 지각된다. 이 예에서 현 레이어(current layer) 위 및 아래의 레이어들이 시각적으로 명확하지 않는다(그러나 존재함을 나타내기 위해 소형 아이코노그래피가 사용될 수 있다).
조작자가 디스플레이 위로 주먹 쥔 자신의 오른손을 뻗으며; 조작자가 손을 펼 때, 즉 손가락들을 전방으로 뻗고, 엄지는 왼쪽으로 뻗으며, 손바닥은 아래를 포인팅할 때(전이: 에서 로), 푸시백 시스템이 시작된다. 짧은 간격(가령, 200밀리초) 동안, 현 레이어에 인접한 임의의 개수의 레이어가 서로 다른 가시성을 갖고 점점 뚜렷해지며, 블러 필터와 현재 레이어로부터의 순서적 거리(ordinal distance)에 따라 달라지는 정도를 갖는 레이어의 투명도를 이용해, 위 또는 아래 레이어 각각이 구성된다.
예를 들어, 푸시백 시스템이 진행될 때, 현 레이어(가령, 데이터 프레임)에 인접한 레이어(가령, 데이터 프레임)가, 차이 나는 가시도를 갖고 뚜렷해진다. 이 예에서, 스택은 푸시백 시스템을 이용해 순회될 수 있는 (데이터 프레임의 데이터세트에 적합한 임의의 개수의) 복수의 데이터 프레임을 포함한다.
이와 동시에, 이전 예에서 익숙한 동심 피드백 글리프가 나타나며, 이 경우, 작은 데드 존이, 푸시백이 진행되는 수직(y-축) 위치 중앙에 위치하며, 상기 데드 존 위 아래 모두에 활성 존이 있도록 상호대화가 설정된다. 이러한 배열은 원본 레이어의 '회복(regaining)'의 보조를 제공한다. 이 경우, 글리프에는 연속되는 레이어들에 대한 지향적 근접도(directed proximity)를 나타내는 추가적인, 간단한 그래픽이 동반된다.
조작자의 손이 데드 존 내에 있는 동안, 레이어 스택의 어떠한 변위도 발생하지 않는다. 글리프가 이전 예에서와 동일한 '예비(preparatory)' 동작을 보이는데, 이때, 손이 존의 어느 한 경계부에 가까이 감에 따라 내부 글리프가 커진다(물론, 여기서, 동작은 양방향이고, 대칭적이다: 손의 시작 y-위치에서는 내부 글리프가 최소 배율로 존재하고, 손이 위 또는 아래에 관계없이 움직일 때 외부 글리프와의 일치를 향해 점점 커진다).
조작자의 손이 데드 존의 상부 면을 지나 위로 이동함에 따라, 내부 글리프가 외부 글리프와 만나고, 앞서와 같이, 이 방향으로의 손의 추가적인 이동에 의해, 내부 글리프의 반시계방향 회전이 야기된다. 동시에, 레이어 스택이 '위로 직선이동'하기 시작한다: 원래 현 레이어(originally-current layer) 위의 레이어들이 더 투명해지고 흐릿해지며, 원래 현 레이어 자체는 더 투명해지고, 더 흐릿해지며, 원래 현 레이어 아래 레이어는 더 가시적이고, 덜 흐릿해진다.
스택의 상향 직선이동의 또 다른 예에서, 이전 현 레이어(previously-current layer)는 더 투명하게 되는데(이 예에서는 안보이게 됨), 이에 비해, 상기 이전 현 레이어에 인접한 레이어는 현재 현 레이어(presently-current layer)로서 가시적이 된다. 덧붙여, 스택이 상향 직선 이동함에 따라, 현재 현 레이어에 인접한 레이어는 상이한 가시도를 갖고 뚜렷해진다. 앞서 설명된 바와 같이, 스택은 푸시백 시스템을 이용해 순회될 수 있는 (데이터 프레임의 데이터세트에 적합한 임의의 개수의) 복수의 데이터 프레임을 포함한다.
실세계 거리(즉, 방 좌표로 측정된, 조작자의 손의 초기 위치로부터의 변위)와 연속되는 레이들 간 '논리적' 거리 간의 사상(mapping)에 의해, 레이어 스택이 구성된다. 물론, 레이어 스택의 직선이동은, 근접도 그래픽(proximity graphic)의 순간적인 등장에 따른, 이러한 사상의 결과인데, 한편, 이는 (처음에는) 디스플레이 평면과 현 레이어 간의 증가하는 거리를 나타내고, 또한 현재는, 디스플레이 평면이 현 레이어 아래에 위치함을 나타낸다.
손 동작이 계속되고, 결국 레이어 스택이 현 레이어와 그 아래 있는 다음 번 레이어가, 정확히 디스플레이 평면을 사이에 두고 있는(즉, 디스플레이 평면으로부터 등거리인) 위치를 통과하고, 이 포인트를 막 통과한 후 그래픽이 변해서, 이제는 디스플레이 평면이 현 레이어보다 높이 있음을 가리킨다: '현 레이어 상태'가 다음 번 하위 레이어에게 할당된다. 현 레이어는 항상 물리적 디스플레이 평면과 가장 가까운 레이어인 것이 일반적이며, 조작자가 푸시백 시스템을 해제할 때 '선택'될 레이어이다.
조작자가 자신의 손을 들어올림에 따라, 각각의 연속하는 레이어가 디스플레이 평면으로 가져 가지고, 점진적으로 더 분해(resolve)되어, 디스플레이 평면과 순간적으로 일치되고, 그 후, 다음 번 하위 레이어를 위해, 투명 상태 및 흐릿한 상태로 되돌아 온다. 조작자가 자신의 손 동작의 방향을 반전시킬 때, 즉, 손을 내릴 때, 프로세스가 반전되며, 내부 글리프가 시계방향으로 회전한다. 마침내 손이 데드 존을 통과할 때, 스택은 디스플레이 평면과 정교하게 y-정렬하여 원래 현 레이어에서 멈추고, 그 후, 스택의 y-이동이 재개되고, 원래 현 레이어 위의 평면들이 연속적으로 초점 맞춰진다. 조작자가 자신의 손을 이용하여, 레이어 스택을 밀고 당기는 것이 조작자의 전체 지각이라는 것은 강력하고 단순하다.
마지막으로 조작자가 자신의 손으로 주먹쥠으로써(또는 그 밖의 다른 방식으로 손의 포즈를 바꿈으로써) 푸시백을 해제할 때, 시스템은, 푸시백이 활성화됐을 때 현 레이어가 디스플레이 평면에 가장 가까운 레이어이도록 하면서, 스택을, 순식간에, 디스플레이 평면과 멈춘(detented) y-축 정렬 상태가 되게 한다. 이 위치 재정렬의 짧은 구간 동안, 그 밖의 다른 모든 레이어가 완전 투명한 상태로 피드백되고, 피드백 글리프는 매끄럽게 사라진다.
이 예시의 데이터세트의 이산화된 요소들(여기서, 레이어)이 주 푸시백(심도-depth) 축을 따라 분산되는데, 전에는, 요소들(데이터 프레임)은 동평면으로 위치하고, 심도 축에 직교하는 차원을 따라, 횡방향으로 배열된다. 투명도 기법의 전개를 따르는 이러한 현재 배열은, 데이터가 종종 중첩됨을 의미한다. 즉, 일부 레이어는 다른 레이어를 통해 보인다. 그럼에도 불구하고, 이 예시에서, 조작자는 (1) 이웃 맥락(현 레이어 위와 아래의 레이어의 내용이 무엇인가?)을 빠르게 획득하기 위한 수단, (2) 데이터세트 내에 병렬로 쌓인(stacked) 요소들을 효과적으로 선택하고 스위칭하기 위한 수단을 이용한다. 조작자가 (1)만을 의도할 때, 데드 존의 준비에 의해, 조작자는 원래 선택된 레이어로 자신있게 되돌아 올 수 있다. 조작 전반에 걸쳐, 두 개의 이동 차원(translational dimension)의 억제에 의해, 속도와 정확도가 가능해진다(대부분의 사람들이 횡방향 기울림 없이 손을 수직으로 직선이동하는 것은 비교적 어려운 일이지만, 본원에서 기재된 방식은 이러한 횡방향 변위를 간단히도 무시한다).
특정 목적으로, 데드 존이 극소의 영역(infinitesimal extent)이도록, 푸시백 입력 공간을 설정하고, 그 후, 푸시백이 실행되자마자 그 활성 수단도 실행되도록 하는 것이 편리할 수 있다. 본원에서 제공된 두 번째 예에서, 이는, 푸시백 조작이 시작되면 원래 현 레이어가 그 밖의 다른 임의의 레이어들과 전혀 다르지 않게 취급되는 것을 의미한다. 경험칙상, 데드 존의 선형 범위(linear extent)는 조작자 선호 문제이다.
이 두 번째 예에서 기재되는 방식은 다양한 디스플레이들, 가령, 2차원 장치(투영식 장치인지 방사식 장치인지에 관계없이)와 3차원 장치(자동스테레오스코피 장치인지 아닌지, 또는 공중-이미지-생성 장치인지 아닌지 등에 관계없이)에게 적합하다. 후자, 즉, 3D 장치의 경우의 고품질 구현예에서, 매체의 특정 특성이 푸시백을 뒷받침하는 지각 메커니즘을 보조할 수 있다. 예를 들어, 시차(parallax), 광학 피사계 심도, 및 안구 조절 현상에 의해 복수의 레이어가 동시에 감지될 수 있어서, 디스플레이 평면으로부터 이격된 레이어를 사라지게 하고 흐릿하게 할(또는 실제로 다함께 제외할) 필요성이 제거된다. 또한 상기 방식은, 디스플레이의 배향과 무관하게, 적용된다: 예를 들어, 디스플레이 배향은 주로 수평방향이거나, 벽에서 눈 높이에 장착되는 것이 유용할 수 있다.
이러한 제 2 예시의 확장된 시나리오가 양 손 조작의 유용성을 설명한다. 특정 적용예에서, 전체 레이어 스택 또는 개별 레이어를 횡방향으로(즉, x 방향과 z 방향으로) 직선이동하는 것이 필요하다. 일 실시예에서, 조작자의 다른 손, 즉, 푸시백하지 않는 손이, 예를 들어, 상기 손을 디스플레이 표면에 가까이 가져감으로써, 이 변환을 야기하는데, 이때, 오프셋 x-z 위치가 손의 위치를 따르도록, 데이터세트의 레이어 중 하나가 '슬라이딩'된다.
조작자는 횡방향 직선운동과 푸시백 조작을 동시에 수행하는 것이 편리하고 쉬움을 발견할 수 있다. 아마도, 한 손에 연속적-영역 조작을 할당하고, 다른 한 손에 이산(discrete)-유형 작업을 할당하는 것이 인지 부담(congnitive load)을 최적화하는 데 작용할 수 있고 말할 수도 있다.
데이터세트의 어떠한 자연적인 시각적 형태도 없는 SOE 하에서의 푸시백의 또 다른 예를 고려하는 것이 유익하다. 복수의 오디오 채널을 모니터링하는 문제 및 집합에서 하나를 간헐적으로 선택하는 문제가 대표적이다. 푸시백 시스템의 적용에 의해, 청취용이지만 시각적 출력용은 아닌 환경에서, 이러한 작업이 가능하며, 상기 방식은 이전 예시들의 방식과 매우 유사하다.
서 있거나 앉아 있는 조작자가 오디오의 단일 채널을 청취 중이다. 개념상으로, 이 오디오는, 기하학적으로, 조작자의 귀를 포함하는 수직 평면(이른바 '청각 평면(aural plane)')에 존재하며, 오디오의 추가적인 채널이, 상기 청각 평면에 평행하지만, z-축을 따라 전후방향으로 변위하는 추가 평면들에 존재한다.
조작자가 손을 펴서, 9인치 앞에 두고, 손바닥은 전방을 향하게 하면, 조작자는 푸시백 시스템과 연계된다. 복수의 근접 평면에서의 오디오가 서로 차이나게 뚜렷해지며, 각각의 볼륨은 현 채널의 평면으로부터의 순서적 거리(ordinal distance)에 반비례한다. 실제로, 셋 이상, 또는 넷 이상의 추가 채널이 가청 상태가 되도록 하는 것은 지각적으로 비현실적이다. 동시에, '오디오 글리프(audio glyph)'가 뚜렷해져서, 근접도 피드백(proximity feedback)을 제공할 수 있다. 먼저, 조작자의 손이 데드 존 내에 유지되는 동안, 글리프는 거의 들리지 않는(barely audible) (초기에는 동음으로 된) 2음 코드이다.
조작자가 자신의 손을 데드 존을 통과하여 전방 또는 후방으로 이동시킬 때, 오디오 채널의 볼륨은 고정된 채 유지되며, 글리프의 볼륨은 증가한다. 손이 데드 존의 전방 임계면 또는 후방 임계면과 교차할 때, 글리프는 자신의 '활성(active)' 볼륨에 도달한다(활성 볼륨은 여전히 현 채널의 볼륨보다 낮다).
조작자의 손이 활성 존을 통과하여, 즉, 전방으로 움직이기 시작하면, 오디오 채널에 미치는 예상 효과가 통용된다: 현 채널 평면이 청각 평면으로부터 더 멀리 푸시되고, 그 볼륨(채널들의 볼륨은 여전히 더 멀리 전진함)은 점진적으로 감소된다. 한편, 청각 채널에 가까이 있을수록, 각각의 '배면(dorsal)' 채널평면의 볼륨이 증가한다.
그러나, 오디오 글리프는 스위칭되는 모드를 가진다. 손의 전방 전진은, 톤(tone)들 중 하나의 주파수의 증가를 동반한다: '중간 지점(midway point)'에서, 청각 평면이 하나의 오디오 채널 평면을 다음 번 채널 평면과 양분할 때, 톤은 정확히 5등분을 형성한다(수학적으로, 트리톤(tritone) 구간이어야 하지만, 이는 삼가되어야 할 많은 이유가 있다). 손이 계속 전방으로 더 나아갈수록, 결국 조작자가 다음번 오디오 평면에 '도달'할 때(이 포인트에서, 톤이 정확하게 1 옥타브에 걸쳐 있음)까지, 가변 톤 주파수가 계속 증가한다.
다양한 채널의 청취가 진행될 때, 조작자가 자신의 손을 전후방으로 직선이동시켜, 채널 각각을 차례로 액세스할 수 있다. 마지막으로, 하나를 선택하기 위해, 조작자는 단지 주먹만 쥐며, 이는 푸시백 세션을 종료시키고, 순식간에, 오디오 평면들의 집합이 정렬되게 한다. 글리프가 그러는 것처럼, 다른(선택되지 않은) 채널이 희미해져서, 들을 수 없는 상태(inaudibility)가 된다.
이 예는 푸시백 적용예의 하나의 변형예를 도시하며, 여기서, 동일한 기능(이웃 맥락으로의 액세스와 이산화된 데이터 요소(여기서는 개별 오디오 스트림)의 빠른 선택)이 다시 제공된다. 시나리오는 청각 피드백 수단을 대신 사용하며, 구체적으로, 조작자에게 그가 선택하도록 표적 채널에 '충분히 가까이' 위치하는지에 대한 정보를 제공하기 위해, 특정 주파수 구간을 인지하는 신뢰할만한 인간 능력을 활용하는 것이 있다. 이는 '가청(audible)' 신호는 간헐적으로만 존재하는 음성 채널의 경우 특히 중요하며, 채널 자체가 조용해졌을 때, 오디오 피드백 글리프의 연속 속성이 이를 존재하고 판독 가능하게 유지한다.
이 예에서 SOE는 공간화된 오디오(spatialized audio)에 대한 기능을 포함하는 경우, 전방 거리 쪽으로 회피(receding)되고, 뒤쪽으로부터 접근(approaching)되는 연속 오디오 레이어의 지각이 크게 개선될 수 있다. 덧붙여, 조작자의 위치에서, 조작 앞에 있는 후행하는 레이어들과 조작자 뒤에 있는 선행하는 레이어들을 이용해, 선택된 오디오 평면을 더 문자적으로(literally) 찾기 위한 기회가 유용하게 활용될 수 있다.
오디오 글리프의 또 다른 인스턴스화가 가능하며, 실제로, 다양한 채널의 내용의 속성이 어느 유형의 글리프가 가장 명료하게 구별될 것인지를 지시하는 경향을 가진다. 예를 들어, 또 하나의 오디오 글리프 포맷이 일정한 볼륨을 유지하지만 주기적인 클릭킹(periodic clicking)을 이용하며, 이때, 클릭과 클릭 사이 간격은, 청각 평면과 최근접 오디오 채널 평면 간의 근접도에 비례한다. 마지막으로, 특정 환경에서, 그리고 조작자의 예리함에 따라, 어떠한 피드백 글리프도 전혀 사용하지 않고 오디오 푸시백을 이용하는 것이 가능하다.
푸시백 메커니즘을 참조하면, 데이터세트 표현에서 공간 멈춤부(spatial detent)의 개수와 밀도가 매우 커질수록, 공간 및 그 파라미터화는 효과적으로 연속이 된다(즉, 멈춤부가 없다). 그럼에도 불구하고, 이러한 극 값에서 푸시백이 유효하게 유지되는데, 이는, 푸시백의 각각의 발동(invocation) 전의 데이터세트의 '초기 상태'가 간단히 데드 존으로서 구현된 임시 멈춤부로서 처리될 수 있기 때문이다.
이러한 멈춤부 없는 푸시백의 적용예가 무한한(또는 적어도 충분한) 줌 가능한 다이어그램의 아이디어와 연결하여 발견될 수 있다. 줌 기능의 푸시백 제어가 오프셋 손 위치를 아핀 배율 값(affine scale value)과 연계하여, 조작자가 자신의 손을 전후방으로 줌 증가 또는 감소의 정도만큼 푸시할 수 있다. 본래의 푸시백 전의 줌 상태는 항상 쉽게 액세스될 수 있는데, 이는 위치를 줌 파라미터로의 직접 사상하는 것이, 제어 손의 데드 존으로의 복귀가 줌 값의 초기 상태로 복귀하는 것을 야기함을 보장하기 때문이다.
앞의 예에서 설명된 각각의 시나리오가 푸시백 시스템의 두드러진 형태와 SOE 하에서의 사용에 대한 설명을 제공한다. 본원에서 설명된 각각의 조작은 1초 이하 내에 정확하고 광범위하게 수행될 수 있는데, 이는 특정 종류의 지각 피드백(perceptual feedback)이 인간의 움직임을 유도할 수 있음으로써, 가능해진 효율과 정확도 때문이다. 다른 때에, 조작자는 하나의 단일 연속 푸시백 '세션(session)'으로 유지되는 것이 유용함을 발견한다: 푸시백에 의해 더 긴 구간에 걸쳐 탐사 및 맥락-획득 목표가 잘 수행된다.
앞서 기재된 예시들은 물리적 입력(제스처) 공간을 표현적 공간(representational space)으로 선형 사상하는 것을 이용했다: 실세계 공간에서 제어 손을 A단위만큼 직선 이동하는 것이 항상, A-직선이동이 수행된 실세계 공간 위치에 관계없이, 표현적 공간에서 B 단위 [프라임]만큼의 결과를 도출한다. 그러나 그 밖의 다른 사상도 가능하다. 특히, 대부분의 사람 조작자가 수행하는 미세 운동 제어 정도에 의해, 가령, 활성 임계면에서 멀리 떨어진 차동 제스처 직선 이동이, 임계면 가까운 곳의 제스처 직선이동보다, 파라미터화된 차원을 따라 더 큰 변위로 변환될 수 있는, 비선형 사상의 이용이 가능해진다.
가상/디스플레이와 물리적 공간의 일치
본 발명의 시스템은, 하나 이상의 디스플레이 장치(“스크린”)에서 보여지는 가상 공간이 시스템의 한 명 이상의 조작자가 살고 있는 물리적 공간과 일치하도록 처리되는 환경을 제공할 수 있다. 이러한 환경의 실시예가 지금부터 기재된다. 이러한 실시예는 고정된 위치에 놓이는 3-프로젝터 구동식 스크린을 포함하며, 하나의 데스크톱 컴퓨터에 의해 구동되고, 본원에서 기재되는 제스처 어휘 및 인터페이스 시스템을 이용하여 제어된다. 그러나 임의의 개수의 스크린이 본원의 기법에 의해 지원되며, 이러한 스크린들은 (고정형이 아닌) 이동형일 수 있으며, 상기 스크린은 복수의 독립적인 컴퓨터들에 의해 동시에 구동될 수 있고, 전체 시스템은 임의의 입력 장치나 기법에 의해 제어될 수 있다.
본원에서 기재된 인터페이스 시스템은 물리적 공간에서의 스크린의 차원, 배향 및 위치를 판단하기 위한 수단을 가져야 한다. 이러한 정보를 가정하면, 상기 시스템은 이들 스크린이 위치하고 있는 (그리고 시스템의 조작자가 살고 있는) 물리적 공간을 동적으로 사상할 수 있다(시스템에서 실행 중인 컴퓨터 애플리케이션의 가상 공간으로의 투영). 이러한 자동 자상(automatic mapping)의 일부로서, 시스템은 시스템에 의해 호스팅되는 애플리케이션의 요구에 따라서, 상기 2개의 공간의 스케일(scale), 각, 심도, 크기 및 그 밖의 다른 공간적 특성을 다양한 방식으로 변환할 수 있다.
이러한 물리적 공간과 가상 공간 간의 연속적인 변환에 의해, 기존의 애플리케이션 플랫폼에서는 달성하기 어려웠던, 또는 기존 플랫폼에서 실행 중인 각각의 애플리케이션에 대해 단편적으로(piece meal) 구현되어야 했던 많은 인터페이스 기법의 일관되고(consistent) 편재적인(pervasive) 사용이 가능해진다. 이들 기법은 다음을 포함한다(그러나 이에 국한되는 것은 아니다):
1) “리터럴 포인팅(literal pointing)”의 사용--편재적이고 자연스러운 인터페이스 기법으로서 제스처 인터페이스 환경에서 손, 또는 물리적 지시 도구(또는 장치)를 이용하는 것.
2) 스크린의 움직임이나 위치 변경에 대한 자동 보상(automatic compensation).
3) 조작자의 위치에 따라 변화하는 그래픽 렌더링(가령,심도 지각(depth perception)을 강화하기 위한 시차 편이 시뮬레이팅).
4) 온-스크린 디스플레이 상에 물리적 물체를 포함시키는 것(실세계 위치, 배향, 상태 등을 고려하여). 예를 들자면, 불투명한 대형 스크린 앞에 서 있는 조작자는 애플리케이션 그래픽과, 스크린 뒤에 위치하는 (그리고 아마도 움직이거나 배향을 변경하는) 축적 모형(scale model)의 실제 위치의 표현 모두를 볼 수 있다.
리터럴 포인팅은 마우스-기반 윈도우 인터페이스 및 그 밖의 다른 대부분의 현대의 시스템에서 사용되는 추상 포인팅(abstract pointing)과 다르다는 것이 중요하다. 이들 시스템에서, 조작자는 가상 포인터와 물리적 위치 지시 장치 간의 변환(translation)을 관리하는 것을 습득할 필요가 있으며, 가상 포인터와 물리적 위치 지시 장치를 인식적으로 사상(map)할 필요가 있다.
이와 달리, 본원의 시스템에서는, 가상 공간과 물리적 공간 간에 (가상 공간이 수학적 조작을 위해 더 수정 가능하다는 사실을 제외하고는) 애플리케이션이나 사용자 관점의 어떠한 차이도 없어서, 조작자에게 어떠한 인식적 변환도 요구되지 않는다.
본 발명의 실시예에 의해 제공되는 리터럴 포인팅과 가장 유사한 것은 (가령, 많은 ATM 기계에서 발견되는 형태의) 터치-감지형 스크린이다. 터치 감지형 스크린은 스크린 상의 2차원 디스플레이 공간과 스크린 표면의 2차원 입력 공간 간에 1대1 사상을 제공한다. 이와 유사한 방식으로, 본원의 시스템은 하나 이상의 스크린 상에서 디스플레이되는 가상 공간과 조작자가 거주하는 물리적 공간 간에 (반드시 그럴 필요는 없지만 가능하다면, 1대1의) 유연한 사상이 이뤄진다. 이러한 유사성으로 인한 유용함에도 불구하고, “사상 방식”의 3차원으로의 확장, 임의의 대형 아키텍처 환경 및 복수의 스크린은 고려할 만하다.
본원에서 기재되는 구성요소에 덧붙여, 상기 시스템은, 환경의 물리적 공간과 각각의 스크린의 디스플레이 공간 간의 연속이면서 시스템-레벨의 사상을 구현하는 알고리즘을 구현할 수 있다.
연산 객체와 사상(mapping)을 취하여 가상 공간의 그래픽 표현을 출력하는 렌더링 스택.
제어 시스템으로부터 이벤트 데이터(이 실시예에서는, 시스템과 마우스 입력으로부터의 제스처 데이터와 포인팅 데이터 모두)를 취하고, 입력 이벤트로부터 가상 공간의 좌표로 공간 데이터를 사상하는 입력 이벤트 프로세싱 스택. 그 후, 변환된 이벤트가 실행 중인 애플리케이션으로 전달된다.
로컬 영역 네트워크 상의 복수의 컴퓨터에 걸쳐 실행되는 시스템이 애플리케이션을 호스팅할 수 있게 해주는 "글루 레이어(glue layer)"
본원에서, 공간-연속체 입력 시스템의 실시예가, 서브시스템 "슬럭스", "프로틴", 및 "풀"을 포함하는 "플라스마"라고 지칭되는 시스템을 포함하는 네트워크-기반 데이터 표현, 전송 및 교환을 포함하는 것으로 상세히 기재된다. 풀 및 프로틴은, 본원에서 기재되는, 프로세스들 간에 공유될 데이터를 캡슐화하기 위한 방법 및 시스템의 구성요소이다. 이들 메커니즘은 또한, 프로틴 및 풀에 추가로 슬럭스("슬러"의 복수형)를 포함한다. 일반적으로, 슬럭스는 프로세스들 간 교환을 위한 최하위 레벨의 데이터 정의를 제공하고, 프로틴은 중간-레벨 구조를 제공하며, 질의와 필터링을 담당하며, 풀은 고-레벨 구성 및 의미 액세스를 위해 제공된다. 슬럭스는 효과적이며, 플랫폼 독립적인 데이터 표현 및 액세스를 위한 메커니즘을 포함한다. 프로틴은 슬럭스를 페이로드로서 이용하는 데이터 캡슐화 및 전송 스킴을 제공한다. 풀은 하나의 프로세스 내에서, 또는 복수의 로컬 프로세스들 간의, 또는 네크워크를 통한 원격 또는 분산 프로세스들 간의, 또는 장기(가령, 온-디스크 등) 저장장치를 통한, 프로틴의 구조적 및 유연한 집합화(aggregation), 오더링(ordering), 필터링 및 분배를 제공한다.
여기서 기재되는 실시예의 구성 및 구현은, 다 함께 복수의 기능을 가능하게 하는 많은 구조를 포함한다. 예를 들어, 여기서 기재되는 실시예는, 앞서 설명한 바와 같이, 복수의 프로세스들 간의 데이터의 효과적인 교환을 제공한다. 여기서 기재되는 실시예는 또한, 유연한 데이터 "유형화(typing)" 및 구조를 제공함으로써, 데이터의 다양한 종류 및 용도가 지원될 수 있다. 덧붙여, 본원에서 기재된 실시예는, 실질적으로 유사한 애플리케이션 프로그래밍 인터페이스(API)에 의해 구동되는, 데이터 교환을 위한 유연한 메커니즘(가령, 로컬 메모리, 디스크 등)을 포함한다. 덧붙여, 본원에서 기재된 실시예에 의해, 서로 다른 프로그래밍 언어로 써진 프로세스들 간에 데이터 교환이 가능하다. 덧붙여, 본원에서 기재된 실시예에 의해, 데이터 캐싱(caching)의 자동 유지 및 집합화 상태가 가능하다.
도 18은 하나의 실시예에 따르는, 슬럭스, 프로틴 및 풀을 이용하는 데이터 표현을 포함하는 프로세싱 환경의 블록도이다. 여기서 제공되는 상기 실시예의 주 구성은 슬럭스(“슬러”의 복수형), 프로틴 및 풀을 포함한다. 본원에서 기재될 때, 슬럭스는 효율적이며, 플랫폼-독립적인 데이터 표현 및 액세스를 위한 메커니즘을 포함한다. 프로틴은, 이하에서 상세히 설명되겠지만, 데이터 캡슐화 및 전송 방식을 제공하며, 하나의 실시예의 프로틴의 페이로드는 슬럭스를 포함한다. 풀은, 본원에서 기재되는 바와 같이, 프로틴의 구조화된, 그러나 유연한 집합화(aggregation), 오더링, 필터링 및 배분을 제공한다. 풀은, 하나의 프로세스 내에서, 복수의 로컬 프로세스들 간에서, 원격(또는 분산) 프로세스들 간 네트워크를 통해, 그리고 “장기(longer term)”(가령, 온-디스크) 저장장치를 통해 이뤄지는, 프로틴을 이용한 데이터 액세스를 제공한다.
도 19는 하나의 실시예에 따르는 프로틴의 블록도이다. 상기 프로틴은 길이 헤더(length header), descrip, ingest를 포함한다. descrip과 ingest 각각은 슬러 또는 슬럭스를 포함하며, 이는 이하에서 상세히 설명될 것이다.
도 20은 하나의 실시예에 따르는 descrip의 블록도이다. 상기 descrip은 오프셋(offset), 길이, 슬럭스를 포함하며, 이는 이하에서 상세히 설명될 것이다.
도 21은 하나의 실시예에 따르는 ingest의 블록도이다. 상기 ingest는 오프셋, 길이 및 슬럭스를 포함하며, 이는 이하에서 상세히 설명될 것이다.
도 22는 하나의 실시예에 따르는 슬러의 블록도이다. 상기 슬러는 유형 헤더(type header)와, 유형-특정 데이터(type-specific data)를 포함하며, 이는 이하에서 상세히 설명될 것이다.
도 23A는 하나의 실시예에 따르는 풀 내에 있는 프로틴의 블록도이다. 상기 프로틴은 길이 헤더(“프로틴 길이”), descrip 오프셋, ingest 오프셋, descrip 및 ingest를 포함한다. 상기 descrip은 오프셋, 길이 및 슬러를 포함한다. ingest는 오프셋, 길이 및 슬러를 포함한다.
본원에서 기재되는 프로틴은 프로세스들 간 공유되거나, 버스 또는 네트워크 또는 그 밖의 다른 프로세싱 구조를 통해 이동될 필요가 있는 데이터를 캡슐화하기 위한 메커니즘이다. 예를 들어, 프로틴은, 사용자 인터페이스 이벤트(특히, 하나의 실시예의 사용자 인터페이스 이벤트는 앞서 기재된 제스처 인터페이스의 이벤트를 포함한다. 상기 미국 특허는 본원에서 참조로서 인용된다)에 대응하거나 이와 관련되는 데이터를 포함하여 데이터를 전송하고 조작하기 위한 개선된 메커니즘을 제공한다. 또 다른 예를 들자면, 프로틴은, 가령, 그래픽 데이터(또는 이벤트) 및 상태 정보 등(그러나 이에 한정되는 것은 아님)의 데이터를 전송하고 조작하기 위한 개선된 메커니즘을 제공한다. 프로틴은 구조화된 레코드(record) 포맷이며, 상기 레코드를 조작하기 위한 방법의 연계된 세트이다. 본원에서 사용될 때, 레코드의 조작은, 데이터를 하나의 구조로 집어넣고, 하나의 구조로부터 데이터 빼내고, 데이터의 포맷 및 존재 여부에 대해 질의하는 것을 포함한다. 프로틴은 다양한 컴퓨터 언어로 써진 코드를 통해 사용되도록 구성된다. 프로틴은 또한, 본원에서 기재된 바와 같이, 풀의 기본 구축 단위(basic building block)이도록 구성된다. 덧붙여, 프로틴은 선천적으로, 자신이 포함하는 데이터가 손상되지 않도록 유지하면서, 프로세서들 간에, 그리고 네트워크를 통해, 이동할 수 있도록 구성된다.
종래의 데이터 전송 메커니즘과 달리, 프로틴은 유형화되지 않는다(untyped). 유형화되지 않지만, 프로틴은 강력하고 유연한 패턴-매칭 기능을 제공하는데, 이들 중 최고는, “유사 유형(type-like)” 기능을 구현하는 것이다. 본원에서 기재된 바와 같이 구성되는 프로틴은 본질적으로, 멀티-포인트(multi-point)이다(그렇지만, 멀티-포인트 송신의 부분집합으로서, 포인트-투-포인트 형태도 쉽게 구현된다). 덧붙여, 프로틴은, 인-메모리, 온-디스크 및 온-더-와이어(네트워크) 포맷에 걸쳐 달라지지 않는(또는 수행되는 선택적 최적화의 유형에서만 달라지는) “전역(universal)” 레코드 포맷을 정의한다.
도 19 및 23A를 참조하여, 하나의 실시예의 프로틴은 바이트의 선형 시퀀스(linear sequence)이다. 이들 바이트 내에서, descrip 리스트와 키-값 쌍(key-value pair)의 세트(이른바 ingest)가 캡슐화된다. descrip 리스트는, 불규칙하게 정교한, 그러나 효율적으로 필터링되는 퍼-프로틴(per-protein) 이벤트 디스크립션을 포함한다. ingest는 프로틴의 실제 내용을 포함하는 키-값 쌍의 세트를 포함한다.
프로틴의 키-값 쌍에 대한 관심뿐 아니라, 네트워크 친화적이며, 멀티-포인트 방식의 데이터 교환에 대한 일부 핵심 아이디어는“튜플(tuple)”의 개념을 우선시하는 초기 시스템(가령, Linda, Jini)과 공유된다. 프로틴은, 표준, 즉 최적화된 패턴 매칭 기질을 제공하기 위해 descrip을 이용하는 점 등 많은 점에서, 튜플-지향 시스템(tuple oriented system)과 다르다. 또한 프로틴은, 다양한 저장장치 및 언어 구조에 적합한 레코드 포맷의 정밀한 명세(specification)에서, 그리고 상기 레코드 포맷의 “인터페이스”의 몇 가지 특정 구현에서, 튜플 지향적 시스템과 다르다.
프로틴에 대해 다시 설명하자면, 프로틴의 첫 4바이트, 또는 첫 8바이트가 프로틴의 길이를 특정하며, 하나의 실시예에서 상기 길이는 16바이트의 배수여야 한다. 이러한 16-바이트의 기본 입도(granularity)는, 오늘날의 하드웨어에서 바이트-정렬 및 버스-정렬 효율이 얻어질 수 있음을 보장한다. 본래 “쿼드-워드 정렬형(quad-word aligned)”이 아닌 프로틴에 임의의 바이트가 패딩(padding)되어, 그 길이가 16바이트의 배수가 될 수 있다.
프로틴의 길이 부분은 다음의 포맷을 갖는다: 길이를 특정하는 빅-엔디안(big-endian) 포맷의 32비트(이때 최하위 4비트가 매크로-레벨의 프로틴 구조 특성을 나타내기 위한 플래그(flag)로서 기능한다)가 존재하고, 프로틴의 길이가 2^32바이트 이상인 경우, 32개의 추가적인 비트가 이에 뒤따른다.
하나의 실시예의 16-바이트 정렬 조건은 첫 4바이트 중 최하위 비트가 플래그로서 이용 가능함을 의미한다. 첫 3개의 하위 비트 플래그는 프로틴의 길이가 첫 4바이트로 표현될 수 있는지, 또는 8바이트를 필요로 하는지를 나타내거나, 프로틴이 빅-엔디안 바이트 오더링(big-endian byte ordering)을 이용하는지, 또는 리틀-엔디안 바이트 오더링(little-endian byte ordering)을 이용하는지를 나타내고, 각각 프로틴이 표준, 또는 비-표준 구조를 채택하는지를 나타낸다. 그러나 프로틴은 이에 한정되지 않는다. 4번째 플래그 비트는 장래의 사용을 위해 예약된다.
8-바이트 길이 플래그 비트가 설정되면, 다음 4개의 바이트를 판독하고, 이들을 빅-엔디안의 8-바이트 정수의 상위 바이트(high-order byte)로서 사용함으로써(이때 이미 판독된 4바이트는 하위 바이트를 제공한다), 프로틴의 길이가 계산된다. 리틀-엔디안 플래그가 설정된 경우, 프로틴의 모든 이진(binary) 숫자 데이터가 리틀-엔디안으로서 해석될 것이다(그렇지 않은 경우, 빅-엔디안). 비-표준 플래그 비트가 설정되는 경우, 프로틴의 나머지 부분이 이하에서 설명될 표준 구조로 순응되지 않는다.
비-표준 프로틴 구조는 여기서 더 이상 언급되지 않을 것인데, 단, 프로틴 및 풀을 이용하여 시스템 프로그래머에게 이용 가능한 비-표준 프로틴 포맷을 기술하고 동기화하기 위한 다양한 방법이 존재하고, 공간 또는 연산 사이클이 제한적일 때 이들 방법이 유용할 수 있다는 점만 언급하겠다. 예를 들어, 일시예의 가장 짧은 프로틴은 16바이트이다. 표준-포맷 프로틴은 어떠한 실질적인 페이로드 데이터도 상기 16바이트 내에 끼워 넣을 수 없다(가장 큰 부분은 이미 프로틴의 구성요소 파트의 위치를 기술하는 것으로 할당된다). 그러나 비-표준 포맷의 프로틴은 자신의 16바이트 중 데이터를 위해 12바이트를 사용할 수 있다. 프로틴을 교환하는 2개의 애플리케이션이, 그들이 발산하는 임의의 16-바이트 길이의 프로틴은 항상, 실시간 아날로그-디지털 컨버터로부터 12개의 8비트 센서 값을 나타내는 12바이트를 포함한다고 상호 결정할 수 있다.
프로틴의 표준 구조에서, 길이 헤더(length header) 바로 뒤에, 둘 이상의 가변 길이 정수 숫자가 나타난다. 이들 숫자는 descrip 리스트의 첫 번째 엘리먼트(element)와 첫 번째 키-값 쌍(ingest)에게 각각 오프셋을 특정한다. 또한 본원에서 이들 오프셋은 각각, descrip 오프셋 및 ingest 오프셋이라고 일컬어진다. 이들 숫자의 각각의 쿼드(quad)의 바이트 순서는 프로틴 엔디안니스 플래그 비트(protein endianness flag bit)에 의해 특정된다. 각각에 있어서, 첫 4바이트의 최상위 비트는 상기 숫자가 4바이트 폭인지, 8바이트 폭인지를 결정한다. 최상위 비트(msb)가 설정되면, 첫 4바이트는 더블-워드(8 바이트) 숫자의 최상위 바이트이다. 본원에서 이는 “오프셋 폼(offset form)”이라고 지칭된다. descrip과 쌍(pair)을 포인팅하는 별도의 오프셋을 이용함으로써, 상기 descrip과 쌍은 서로 다른 코드 경로에 의해 핸들링되고, 이로써 예를 들어, descrip 패턴-매칭과 프로틴 어셈블리에 관한 특정한 최적화가 이뤄질 수 있다. 또한 이들 2개의 오프셋이 프로틴의 시작부분에 존재함으로써, 몇 가지 유용한 최적화가 가능해진다.
대부분의 프로틴은 8-바이트 길이, 또는 포인터를 필요로 할 만큼 크지 않을 것이다. 따라서 일반적으로 (플래그를 포함한) 길이와 2개의 오프셋 숫자가 프로틴의 첫 3바이트만 차지할 것이다. 다수의 하드웨어, 또는 시스템 아키텍처에서, 첫 바이트 이상의 특정 개수의 바이트의 인출(fetch) 및 판독(read)은 “무상(free)"으로 이뤄진다. (가령, 16바이트는 Cell 프로세서의 메인 버스를 가로질러 단일 바이트로서 풀(pull)하기 위해 정확하게 동일한 개수의 클록 사이클만 취한다.)
다수의 예에서, 구현-특정적인, 또는 맥락(context)-특정적인 캐싱(caching), 또는 메타데이터가 프로틴 내에서 존재하도록 하는 것이 유용하다. 오프셋을 사용함으로써, 프로틴의 시작부분 가까이에서 임의의 크기의 “빈곳(hole)”이 생성될 수 있으며, 메타데이터가 상기 빈곳으로 삽입될 수 있다. 8바이트의 메타데이터를 이용할 수 있는 구현예는 다수의 시스템 아키텍처에서, 프로틴의 길이 헤더의 매 인출마다 상기 바이트를 무상으로 얻는다.
descrip 오프셋은 프로틴의 시작부분과 첫 번째 descrip 엔트리 사이의 바이트의 수를 특정한다. 각각의 descrip 엔트리는 다음 descrip 엔트리까지의 오프셋(당연히 오프셋 형태로)과, 이에 뒤 따르는 가변-폭 길이 필드(역시 오프셋 포맷으로)와, 이에 뒤 따르는 슬러(slaw)를 포함한다. 추가적인 descrip이 없을 때, 상기 오프셋은, 규칙대로, 0으로 구성된 4바이트이다. 추가적인 descrip이 있는 경우, 상기 오프셋은 이 descrip의 시작 부분과 다음 descrip 엔트리 사이의 바이트의 수를 특정한다. 길이 필드는 슬러의 길이를 바이트 단위로 특정한다.
대부분의 프로틴에서, 각각의 descrip은 문자열인데, 이 문자열은 슬러 문자열 방식으로 포맷이 정해진다. 슬러 문자열 방식은, 최상위 비트가 설정되고, 하위 30비트만 길이를 특정하기 위해 사용되며, 이 뒤에, 데이터 바이트의 수를 가리키는 헤더가 뒤 따르는 4-바이트 길이/유형 헤더이다. 일반적으로, 길이 헤더는 프로틴에서 자신의 엔디안니스(endianness) 방식을 취한다. UTF-8 문자(character)를 인코딩하기 위한 바이트가 가정된다. (따라서, 문자의 개수는 바이트의 개수와 반드시 동일할 필요가 없다는 것에 주목해야 한다)
ingest 오프셋은 프로틴의 시작부분과 첫 ingest 엔트리 사이의 바이트의 수를 특정한다. 각각의 ingest는 다음 ingest 엔트리까지의 오프셋(오프셋의 형태로)과, 이에 뒤 따르는 길이 필드와 슬러를 포함한다. 상기 ingest 오프셋은 다음 descrip 엔트리가 아닌 다음 ingest 엔트리를 가리킨다는 점을 제외하고, descrip 오프셋과 기능적으로 동일하다.
대부분의 프로틴에서, 모든 ingest는, 일반적으로 키/값 쌍으로서 사용되는 2-값 리스트를 포함하는 슬러 cons 유형을 갖는다. 슬러 cons 레코드는, 상위 두 번째 비트가 설정되고, 하위 30비트만 길이를 특정하기 위해 사용되는 4-바이트 길이/유형 헤더와, 값(두 번째) 요소의 시작부분까지의 4-바이트 오프셋과, 키 요소의 4-바이트 길이와, 키 요소에 대한 슬러 레코드와, 값 요소의 4-바이트 길이와, 마지막으로 값 요소에 대한 슬러 레코드를 포함한다.
일반적으로, cons 키는 슬러 문자열이다. 몇 개의 프로틴에 걸친 데이터의 복제와, 슬러 cons 길이 및 오프셋 필드에 의해, 더 많은 미세조정 및 최적화가 가능하다.
앞서 설명된 바와 같이, 유형화된 데이터(typed data)를 프로틴 내부에 임베디드하기 위해 사용되는 하나의 실시예에 따르는 구조는, “슬러(slaw)”(복수형은 "슬럭스(slawx)")라고 일컬어지는 태깅된 바이트-시퀀스 명세 및 추상화이다. 슬러는 (아마도 집합화된) 유형화된 데이터(typed data)의 일부분을 나타내는 바이트들의 선형 시퀀스이고, 슬럭스가 생성될 때, 수정될 때, 그리고 메모리 공간, 저장 매체 및 머신 간에 이동될 때 사용되는 프로그래밍 언어 특정적 API와 연계된다. 슬러 유형화 방식(slaw type scheme)은 확장 가능하고, 가능한 가벼우며, 임의의 프로그래밍 언어에서 사용될 수 있는 공통의 기반이 되도록 의도된다.
효과적이고, 대규모의 프로세스간 통신 메커니즘을 구축하고자 하는 필요성이 슬러 구성의 구동력이다. 종래의 프로그래밍 언어는 프로세스 특정 메모리 레이아웃에서 잘 동작하지만, 이들 데이터 표현법은, 데이터가 프로세스들 간에 이동되거나, 디스크 상에 저장될 필요가 있을 때는 항상 동작하지 않는 까다로운 데이터 구조 및 유형화 설비를 제공한다. 슬러 아키텍처는, 첫째, 프로세스들 간 통신을 위해 충분히 효과적이며, 멀티-플랫폼 친화적인 로우-레벨(low-level) 데이터 모델이다.
그러나 이보다 훨씬 더 중요한 것은, 슬럭스는 프로틴과 함께 영향을 받도록 구성되어, 장래의 컴퓨팅 하드웨어(마이크로프로세서, 메모리 컨트롤러, 디스크 컨트롤러)의 개발을 가능하게 한다는 것이다. 몇 가지 덧붙이자면, 일반적으로 이용 가능한 마이크로프로세서의 인스트럭션 세트에 의해, 슬럭스가 단일-프로세스에 대해서조차, 대부분의 프로그래밍 언어에서 사용되는 스키마(schema)로서 효과적인 인-메모리 데이터 레이아웃이 되는 것이 가능해진다.
각각의 슬러는 가변-길이 유형 헤더와, 이에 뒤 따르는 유형-특정 데이터 레이아웃을 포함한다. 예를 들어, C, C++ 및 Ruby에서 완전한 슬러 기능을 지원하는 하나의 예시적 실시예에서, 유형(type)은 각각의 언어로부터 액세스 가능한 시스템 헤더 파일에서 정의된 전역 정수(universal integer)에 의해 지시된다. 더 섬세하고 유연한 유형 분해능 기능이 또한 가능해지는데, 예를 들면, 전역 객체 ID(universal object ID)와 네트워크 룩업을 통한 간접 유형화(indirect typing)가 그것이다.
하나의 실시예의 슬러 구성에 의해, 슬러 레코드는, 예를 들자면 Ruby와 C++ 모두에서 언어 친화적인 방식으로, 객체로서 사용될 수 있다. C++ 컴파일러 외부의 유틸리티가 슬러 바이트 레이아웃에 대해 새니티-체크(sanity-check)를 수행하고, 개별 슬러 유형에 특정적인 헤더 파일과 매크로를 생성하며, Ruby를 위한 바인딩(binding)을 자동-생산한다. 따라서 잘 구성된 슬러 유형은 단일 프로세스 내에서 사용될 때조차 꽤 효과적이다. 프로세스의 접근가능한 메모리 내 임의의 곳에 위치하는 어떠한 슬러라도, 복사본 없이, 즉, “역직렬화(deserialization)” 단계 없이, 주소 지정될 수 있다.
하나의 실시예의 슬러 기능은 다음 중 하나 이상을 수행하기 위한 API 기능을 포함한다: 특정 유형의 새로운 슬러 생성하기; 디스크, 또는 메모리 내의 바이트로부터 슬러로의 언어 특정적 참조(reference) 생성, 또는 빌드하기; 유형-특정 방식으로 슬러 내에 데이터 임베딩하기; 슬러의 크기 질의하기; 슬러 내에서 데이터 불러오기(retrieve); 슬러 복제하기; 슬러 내의 모든 데이터의 엔디안니스(endianness) 및 그 밖의 다른 포맷 속성 번역하기. 모든 종류의 슬러가 앞서 언급된 동작을 구현한다.
도 23B는 하나의 실시예에 따르는 슬러 헤더 포맷을 도시한다. 지금부터 슬러에 대해 상세히 설명하겠다.
각각의 슬러의 내부 구조는 유형 분해능(type resolution), 캡슐화된 데이터로의 액세스, 상기 슬러 인스턴스에 대한 크기 정보 각각을 최적화한다. 하나의 실시예에서, 슬러 유형들의 전체 세트는 계획적으로 최소한이도록 완성되며, 다음을 포함한다: 슬러 문자열(slaw string); 슬러 cons(slaw cons)(즉, dyad); 슬러 리스트(slaw list); 약 6개의 기본 속성의 순열로서 이해되는 개별 숫자형의 광범위한 세트를 자체적으로 나타내는 슬러 숫자형 객체(slaw numerical object). 임의의 슬러의 그 밖의 다른 기본 특성은 그 크기이다. 하나의 실시예에서, 슬럭스는 4의 배수로 양자화된 바이트-길이를 가지며, 이들 4-바이트 워드는 본원에서 “쿼드(quad)”라고 일컬어진다. 일반적으로, 이러한 쿼드-기반의 크기결정은 슬럭스를 현대의 컴퓨터 하드웨어 아키텍처의 구성에 따라 잘 정렬되게 한다.
하나의 실시예에서 모든 슬럭스의 첫 4바이트는 유형-기술(type-description) 및 그 밖의 다른 메타 정보를 인코딩하고, 특정 유형의 의미 특정 비트 패턴으로 연결하는 헤더 구조(header structure)를 포함한다. 예를 들어, 슬러 헤더의 첫 비트(최상위 비트)는 상기 슬러의 크기(쿼드-워드로 된 길이)가 초기 4-바이트 유형 헤더를 따르는가의 여부를 특정하기 위해 사용된다. 이 비트가 설정되면, 슬러의 크기는 슬러의 다음 4바이트(가령, 5 내지 8번째 바이트)에 명시적으로 기록된다; 슬러의 크기가 4바이트로 표현될 수 없는 경우(즉, 크기가 2의 32승이거나, 그 이상인 경우), 상기 슬러의 첫 4바이트의 다음 번 상위 비트가 또한 설정되고, 이는 슬러가 (4-바이트 길이가 아닌) 6-바이트 길이를 가짐을 의미한다. 상기의 경우, 조사 프로세스(inspecting process)가 5 내지 12번째 바이트에 저장된 슬러의 길이를 찾을 것이다. 다른 한편으로는, 적은 개수의 슬러 유형이, 다수의 경우에서, 완전 특정된 유형의 비트-패턴이 4바이트 슬러 헤더에서 다수의 비트를 “미사용으로 남겨둠”을 의미하며, 이러한 경우, 이들 비트는 슬러의 길이를 인코딩하도록 사용되어, 다른 경우라면 요구됐을 바이트(5 내지 8번째)를 절약할 수 있다.
예를 들어, 하나의 실시예에서, 슬러 헤더의 최상위 비트(“length follows" 플래그)가 설정되지 않은 채로 남겨지고, 다음 번 비트를 설정하여, 슬러가 ”wee cons"임 가리킨다. 그리고 이 경우에서 슬러의 길이(쿼드 단위)는 나머지 30비트로 인코딩된다. 마찬가지로, 헤더에서 “wee string"은 패턴 001에 의해 표시되고, 슬러-문자열의 길이를 표현하기 위해 29비트를 남겨두는 것이다. 그리고 헤더의 선두(leading) 0001가 "wee list"를 기술하며, 이는 28개의 이용가능한 길이-표현 비트를 이용함으로써, 2 내지 28 쿼드까지의 크기를 갖는 슬러 리스트가 될 수 있다는 것이다. "full string"(또는 cons, 또는 리스트)은 헤더에서 상이한 비트 서명을 가지며, 이때, 슬러 길이가 5 내지 8번째(또는 극단적인 경우, 12번째) 바이트에서 개별적으로 인코딩되기 때문에, 최상위 헤더 비트가 반드시 설정된다. Plasma 구현예가 슬러 구성의 예에서, 이들 구성의 "wee" 버전을 이용하는지, 또는 "full" 버전을 이용하는지를 “결정”한다(이러한 결정은 최종 크기가 이용 가능한 wee 비트에 꼭 맞을 것인가의 여부를 토대로 이뤄진다). 그러나 슬러 문자열, 또는 슬러 cons, 또는 슬러 리스트를 이용하고 있는 것만 알고 신경 쓰고 있는 Plasma 구현예의 사용자에게 full-vs.-wee 세부사항은 숨겨져 있다.
하나의 실시예에서, 숫자형 슬럭스는 선두 헤더 패턴 00001에 의해 나타내진다. 이에 뒤 따르는 헤더 비트는, 임의의 순열로 조합될 수 있는 직교 특성(orthogonal property)의 세트를 나타내기 위해 사용된다. 하나의 실시예에서, 숫자가 (1)부동소수점 유형인지, (2) 복소수 유형인지, (3) 부호가 없는 유형인지(unsigned), (4) "와이드(wide)" 유형인지, (5) “스텀피(stumpy)” 유형인지를 나타내기 위해 이러한 5 문자 비트가 사용된다((4) “와이드”유형 및 (5) “스텀피”유형은 순열로 조합되어 8, 16, 32 및 64 비트 숫자 표현을 나타낸다). 2개의 추가 비트(가령, (7) 및 (8))는 캡슐화된 숫자형 데이터가 2-, 3-, 또는 4-요소 벡터임을 나타낸다(두 비트 모두 0인 것은 숫자가 “1-원소 벡터”(즉, 스칼라)임을 제시한다). 이 실시예에서, 4번째 헤더 바이트의 8비트가 캡슐화된 숫자형 데이터의 크기를 (쿼드가 아닌 바이트로) 인코딩하기 위해 사용된다. 이러한 크기 인코딩은 1만큼 오프셋되어, 1과 256바이트를 포함하여 그 사이의 임의의 크기를 나타낼 수 있다. 최종적으로, 2 문자 비트(가령, (9) 및 (10))가 사용되어, 숫자형 데이터가, 각각이 문자 비트 (1) 내지 (8)에 의해 기술되는 유형을 갖는 개별 숫자형 개체의 어레이를 인코딩함을 나타낼 수 있다. 어레이의 경우, 상기 개별 숫자형 개체에 추가적인 헤더가 태깅(tagging)되지 않지만, 상기 개별 숫자형 개체는 단일 헤더에 따르는 연속 데이터로서(가능하면 명시적인 슬러 크기 정보와 함께) 묶인다(packing).
이 실시예는 (바이트 단위 복사(byte-for-byte copy)로서 구현될 수 있는) 단순하고 효과적인 슬러 복제(slaw duplication)를 가능하게 하고, 매우 수월하고 효과적인 슬러 비교(slaw comparison)를 가능하게 한다(2개의 슬러가 서로 동일하기 위한 필요 충분 조건은 시퀀스라고 간주된 구성 바이트 각각의 1대1 매치(match)가 존재한다는 것이다). 예를 들어, 프로틴의 descrip 리스트의 검색, 또는 매치 기능이 핵심적으로 널리 퍼질만한 특징 중 하나인 프로틴 아키텍처의 효과적인 구현예에서, 이러한 후자의 속성은 중요하다.
덧붙이자면, 본원의 실시예에 의해, 집합화된 슬러 형식(가령, 슬러 cons 및 슬러 리스트)이 간단하고 효과적으로 구성될 수 있다. 하나의 실시예에서, 예를 들어, 임의의 유형의 2개의 구성 슬러(component slaw)(가령, 자체 집합화된 슬러)로부터 하나의 슬러 cons가 구축될 수 있는데, 이는 (a) 각각의 구성 슬러의 크기를 질의하고 (b) 2개의 구성 슬러의 크기와 헤더-플러스-크기 구조(header-plus-size structure)를 위해 필요한 1, 2, 또는 3 쿼드의 총 합과 동일한 크기의 메모리를 할당하고, (c) 슬러 헤더(플러스 크기 정보)를 첫 4, 8, 또는 12바이트에 기록하고, (d) 구성 슬러의 바이트를 차례로 바로 연속하는 메모리에 복사함으로써, 이뤄진다. 이러한 구축 루틴은 2개의 구성 슬러의 유형에 대해 아무 것도 알 필요가 없으며, 단지 그들의 크기(그리고 바이트의 시퀀스로서의 접근가능성)만 알 필요가 있다. 혼성 유형의 임의의 다수의 서브-슬러(sub-slaw)의 오더링된 캡슐화인 슬러 리스트의 구축에 동일한 프로세스가 관련된다.
메모리 내 순차적 바이트로서 시스템의 기본 포맷의 추가적인 중요함은 “횡단(traversal)”활동과 관련하여 얻어진다, 즉, 순환적 사용 패턴이, 예를 들어, 슬러 리스트에 저장된 개개의 슬럭스로의 순차적 액세스를 이용한다. 마찬가지로, 하나의 프로틴 구조 내의 descrip과 ingest를 나타내는 개개의 슬럭스가 횡단된다. 이러한 방식은 수월하고 효과적인 방식으로 이뤄진다. 슬러 리스트 내 다음 슬러에 “도달”하기 위해, 현재 슬러의 길이를 메모리 내 자신의 로케이션에 추가하고, 최종 메모리 로케이션이 다음 슬러의 헤더와 동일하다. 이러한 간단성은, 슬러와 프로틴 설계가 “간접방식(indirection)”을 피하기 때문에 가능하다. 어떠한 포인터도 존재하지 않으며, 오히려, 현장에서(in situ), 데이터가 간단하게 완전하게 존재한다.
슬러 비교에서도, Plasma 시스템의 완전한 구현예는, 서로 다른 운영 체제, CPU 및 하드웨어 아키텍처 간에 상이하고 호환되지 않는 데이터 표현 방식 존재한다고 긍정 응답(acknowledge)해야만 한다. 이러한 주요한 차이점으로는 바이트-오더링 정책(가령, 리틀-엔디안 vs. 빅-엔디안)과, 부동 소수점 표현이 있으며, 그 밖의 다른 차이점이 존재하다. Plasma 명세(specification)에서는 슬럭스에 의해 캡슐화된 데이터가 상호운용성을 가질 것을 요구한다(즉, 슬러가 검사 되는 아키텍처, 또는 플랫폼의 원시 포맷(native format)으로 나타나야 한다). 이러한 요구사항은 차례로 Plasma 시스템이 스스로 데이터 포맷 변환을 담당함을 의미한다. 그러나 명세(specification)는, 슬러가 상기 슬러를 검사할 수 있는 실행 프로세스에게 “모두 가시적(at all visible)”이 되기 전에 발생한다고만 규정한다. 따라서 이러한 포맷 c 변환을 수행하도록 선택하는 개별 구현예에 따라 다르며, 2가지 적정한 접근법은 (1) 개별 슬러가 자신이 패킹된 프로틴에서 꺼내질 때, 또는 (2) 프로틴이 상기 프로틴이 위치하고 있는 풀(pool)로부터 추출될 때, 프로틴 내 모든 슬러에 대해 동시에, 슬러 데이터 페이로드가 로컬 아키텍처의 데이터 포맷으로 순응되는 것이다. 변환 조건은 하드웨어 보조 구현예의 가능성을 고려한다. 예를 들어, 명시적인 Plasma 기능을 포함하여 구축된 네트워킹 칩셋은 포맷 변환을 지능적으로(intelligently), 그리고 송신의 경우, 수신 시스템의 알려진 특성을 토대로 수행할 것을 선택할 수 있다. 대안적으로, 송신 프로세스는 데이터 페이로드를 정규 포맷(canonical format)으로 변환할 수 있으며, 이때, 수신 프로세서는 정류 포맷에서 “로컬” 포맷으로 대칭적으로(symmetrically) 변환한다. 또 다른 실시예는 “메탈에서(at the metal)” 포맷 변환을 수행하는데, 이는 데이터가 항상, 로컬 메모리에서조차 정규 포맷으로 저장되는 것을 의미하고, 데이터가 메모리로부터 불러와지고, 인접한(proximal) CPU의 레지스터에 위치될 때 메모리 컨트롤러 하드웨어 자체가 변환을 수행함을 의미한다.
하나의 실시예의 최소(그리고 판독 전용의) 프로틴 구현예는 프로틴을 이용하는 하나 이상의 애플리케이션, 또는 프로그래밍 언어에서의 연산, 또는 동작을 포함한다. 도 23C는 하나의 실시예에 따르는 프로틴을 이용하기 위한 순서도(650)이다. 프로틴의 길이를 바이트 단위로 질의함으로써(652), 연산이 시작한다. descrip 엔트리의 개수가 질의된다(654). ingest의 개수가 질의된다(656). 인데스 번호(index number)에 의해 descrip 엔트리가 검색된다(658). 인덱스 번호에 의해 ingest가 검색된다(660).
본원 발명의 실시예는 또한, 프로틴을 구축하고, 데이터를 채우는 기본 방법과, 일반적인 작업은 프로그래머에게 더 용이하도록 만들고, 최적화를 생성하기 위한 보조 방법을 정의한다. 도 23D는 하나의 실시예 하에서, 프로틴을 구축, 또는 생성하기 위한 순서도(670)이다. 새로운 프로틴의 생성(672)으로 연산이 시작된다. 일련의 descrip 엔트리가 부가된다(674). ingest가 또한 부가된다(676). 일치하는 descrip의 존재 여부가 질의되며(678), 일치하는 ingest 키의 존재 여부가 질의된다(680). ingest 키가 주어지면, ingest 값을 리트리빙(retrieve)한다(682). descrip에 걸쳐 패턴 매칭이 수행된다(684). 프로틴의 시작 부분 가까이에 비-구조화된 메타데이터가 임베딩된다(686).
앞서 설명된 바와 같이, 슬럭스(slawx)는 프로세스간 교환에 있어서 데이터의 가장 로우-레벨(lowest-level)의 정의를 제공하고, 프로틴(protein)은 중간-레벨 구조를 제공하며 질의와 필터링에 적합하고, 풀(pool)은 하이-레벨 구성 및 액세스 시맨틱을 위해 제공된다. 상기 풀은 프로틴의 레포지토리(repository)이며, 선형 시퀀싱(linear sequencing)과 상태 캐싱(state caching)을 제공한다. 또한 상기 풀은 여러 다른 유형의 복수의 프로그램, 또는 애플리케이션에 의한 멀티-프로세스 액세스를 제공한다. 덧붙이자면, 풀은 일반적이고 최적화된 필터링 및 패턴-매칭 행동의 세트를 제공한다.
하나의 실시예에서의 풀은 수만 개의 프로틴을 수용하고, 상태를 유지하도록 기능함으로써, 개별 프로세스가 멀티-프로세스 프로그램 코드에게 공통되는 장황한 북키핑(bookkeeping)의 대부분을 덜(offload) 수 있다. 풀이 과거 프로틴(past protein)의 큰 버퍼를 이용 가능한 상태로 유지함으로써(Platonic 풀은 명시적으로 무한함), 참여 프로세스들은, 원하는 대로, 풀에서 역방향 및 순방향 스캔 모두를 수행할 수 있다. 버퍼의 크기는 구현예에 따라 다르지만, 물론 일반적으로, 수 시간, 또는 수 일동안 프로틴을 풀에 유지하는 것이 가능하다.
본원에서 기재되는 바와 같이, 기존의 프로세스간 통신 프레임워크에 의해 취해지는 포인트-투-포인트 접근법인 기계론과 달리, 풀 사용의 가장 일반적인 스타일은 생물학 은유법을 따른다. 프로틴(protein)이라는 명칭은 생물학적 영감을 암시한다: 생물의 화학적 단백질(protein)이 다수의 세포 에이전트에 의해 패턴 매칭 및 필터링에 이용 가능한 바와 같이, 풀 내의 데이터, 즉 프로틴은, 다수의 연산적 프로세스에 의해, 유연한 질의 및 패턴 매칭에 대해 이용 가능하다.
2가지 추가적인 추상적 개념이 생물학 은유법에 따르는데, 예를 들어, “핸들러(handler)”와 Golgi 프레임워크의 사용이 그것이다. 일반적으로 풀에 참여하는 프로세스가 다수의 핸들러를 생성한다. 핸들러는 핸들 행동(handle behavior)과의 매칭 조건과 연계되는 비교적 작은 코드의 묶음(bundle)이다. 하나 이상의 핸들러를 하나의 풀에 연계시킴으로써, 프로세스가 상태를 캡슐화하고, 새로운 프로틴에 대해 반응하는 유연한 콜-백 트리거(call-back trigger)를 설정한다.
복수의 풀에 참여하는 프로세스는 추상 Golgi 클래스로부터 상속받는 것이 일반적이다. Golgi 프레임워크는 복수의 풀과 핸들러를 관리하기 위한 복수의 유용한 루틴을 제공한다. 또한 상기 Golgi 클래스는 부모-자식 관계(parent-child relationship)를 캡슐화하여, 풀을 사용하지 않는 로컬 프로틴 교환을 위한 메커니즘을 제공한다.
하나의 실시예에 따라 제공되는 풀 API에 의해, 풀은 다양한 방식으로 구현되어, 시스템 특정 목표와, 주어진 하드웨어 및 네트워크 아키텍처의 이용 가능한 기능을 모두 설명할 수 있다. 풀이 따르는 2개의 기본 시스템의 준비 설비(provision)는 저장 기기와 프로세스간 통신 수단이다. 본원에서 기재되는 현존하는 시스템은 공유 메모리와, 가상 메모리와, 저장(storage) 기능을 위한 디스크의 유연한 조합과, 프로세스간 통신을 위한 IPC 큐 및 TCP/IP 소켓을 사용한다.
하나의 실시예의 풀 기능은, 풀에 참가하기; 풀 내에 프로틴을 위치시키기; 풀로부터 알려지지 않은 다음 번 프로틴을 가져오기(retrieve); 하나의 풀 내의 내용물(가령, 프로틴)을 되감아 보기, 또는 빨리 감아 보기를 포함한다(그러나 이에 한정되는 것은 아님). 덧붙이자면, 풀의 기능은, 프로세스를 위한 스트리밍 풀 콜-백을 설정하기; descrip, 또는 ingest 키의 특정 패턴과 매칭되는 프로틴을 선택적으로 가져오기; 상기 descrip, 또는 ingest 키의 특정 패턴과 매칭되는 프로틴에 대해 역방향 및 순방향 스캔하기를 포함할 수 있다(그러나 이에 한정되는 것은 아님).
프로틴 데이터 내용을 다른 애플리케이션과 공유하는 방식으로 앞서 설명된 프로틴이 풀에게 제공된다. 도 24는 하나의 실시예에서, 슬럭스, 프로틴 및 풀을 이용하는 데이터 교환을 포함하는 프로세싱 환경의 블록도이다. 이 예시적 환경은, 앞서 설명된 슬럭스, 프로틴 및 풀을 사용하여 데이터를 공유하는 3개의 장치(가령, 장치 X, 장치 Y 및 장치 Z이며, 이들은 본원에서 총체적으로 장치라고 일컬어짐)를 포함한다. 각각의 장치는 3개의 풀(가령, 풀 1, 풀 2 및 풀 3)로 연결된다. 풀 1은 각각의 장치로부터 풀로 제공, 또는 전송되는 다수의 프로틴(가령, 프로틴 X1, 프로틴 Z2, 프로틴 Y2, 프로틴 X4, 프로틴 Y4)을 포함한다. 풀 2는 각각의 장치로부터 풀로 제공, 또는 전송되는 다수의 프로틴(가령, 프로틴 Z4, 프로틴 Y3, 프로틴 Z1, 프로틴 X3)을 포함한다(가령, 프로틴 Y3은 장치 Y에 의해 풀 3로 전송, 또는 제공된다). 풀 3은 각각의 장치로부터 풀로 제공, 또는 전송되는 다수의 프로틴(가령, 프로틴 Y1, 프로틴 Z3, 프로틴 X2)을 포함한다(가령, 프로틴 X2는 장치 X에 의해 풀 3로 전송, 또는 제공된다). 앞서 언급된 예시는 3개의 풀 사이에서 연결되는 3개의 장치를 포함하지만, 임의의 개수의 장치가 임의의 개수의 풀들 간에서 임의의 방식, 또는 조합으로 결합될 수 있고, 임의의 풀은 임의의 개수의, 또는 임의의 조합의 장치로부터 제공된 임의의 개수의 프로틴을 포함할 수 있다. 이 예시의 프로틴과 풀은 도 18-23을 참조하여 앞서 기재되었다.
도 25은 복수의 장치와, 상기 장치 중 하나 이상에서 실행되는 복수의 프로그램을 포함하는 프로세싱 환경의 블록도이며, 여기서 플라스마(Plasma) 구성(가령, 풀, 프로틴 및 슬러)이 사용되어, 복수의 실행 중인 프로그램이 장치에 의해 생성된 이벤트를 공유하고 다 같이 응답할 수 있게 할 수 있다. 그러나 이 시스템은 멀티-사용자(multi-user), 멀티-장치, 멀티-컴퓨터 상호대화 제어 시나리오, 또는 구성의 하나의 예에 불과하다. 더 구체적으로, 이 예시에서, 복수의 장치(가령, 장치 A, B 등)와 장치 상에서 실행되는 복수의 프로그램(가령, 애플리케이션 AA-Ax, 애플리케이션 BA-BX 등)을 포함하는 상호대화 시스템은 Plasma 구성(가령, 풀, 프로틴 및 슬러)을 이용하여, 실행 중인 프로그램이 이들 입력 장치에 의해 생성되는 이벤트를 공유하고, 다 같이 응답할 수 있게 할 수 있다.
이 예시에서, 각각의 장치(가령, 장치 A, B 등)는, 각각의 장치 상에서 실행 중인 프로그램(가령, 애플리케이션 AA-Ax, 애플리케이션 BA-BX 등)에 의해 생성, 또는 출력되는 개개의 원시 데이터를, Plasma 프로틴으로 해석하고, 이들 프로틴을 Plasma 풀에 예치(deposit)한다. 예를 들어, 프로그램 AX는 데이터, 또는 출력을 생성하고 출력을 장치 A로 제공하며, 그 후, 상기 장치 A가 원시 데이터를 프로틴(가령, 프로틴 1A, 프로틴 2A 등)으로 해석하고, 이들 프로틴을 풀에 예치한다. 또 다른 예에서, 프로그램 BC는 데이터를 생성하고, 데이터를 장치 B에게 제공하며, 그 후, 상기 장치 B는 상기 데이터를 프로틴(가령, 프로틴 1B, 프로틴 2B 등)으로 해석하고, 상기 프로틴을 풀에 예치한다.
각각의 프로틴은 애플리케이션에 의해 등록된 데이터, 또는 출력을 특정하고, 프로그램 자체에 대한 정보를 식별하는 descrip 리스트를 내포한다. 가능한 경우, 또한 프로틴 descrip은 출력 이벤트, 또는 동작에 대한 일반적인 시맨틱 의미를 뜻할 수 있다. 상기 프로틴의 데이터 페이로드(가령, ingest)는 프로그램 이벤트에 대한 유용한 상태 정보의 완전한 세트를 포함한다.
앞서 기재된 바와 같이, 프로틴은, 풀로 연결되는 임의의 프로그램, 또는 장치에 의해 사용되기 위해, 프로그램, 또는 장치의 유형에 관계없이, 상기 풀에서 이용가능하다. 따라서 임의의 개수의 컴퓨터에서 실행되는 임의의 개수의 프로그램이 이벤트 프로틴을 입력 풀로부터 추출할 수 있다. 풀에서 프로틴을 추출하기 위해, 이들 장치는, 로컬 메모리 버스, 또는 네트워크 연결을 통해 풀에 참여할 필요만 있다. 이에 따라서 즉각적으로, 이벤트를 사용하거나 해석하는 프로세스로부터 프로세싱 이벤트를 생성하는 프로세스를 연결 해제할 수 있다. 또한, 이벤트의 소스와 소비자를 멀티플렉싱하여, 최종 이벤트 스트림이 복수의 이벤트 소비자에게 차례로 보여지는 동안, 입력 장치가 1명의 사람, 또는 복수 명의 사람에 의해 동시에 제어될 수 있다(가령, Plasma-기반의 입력 프레임워크가 복수의 동시 사용자를 지원한다).
예를 들어, 장치 C는 하나 이상의 프로틴(가령, 프로틴 1A, 프로틴 2A 등)을 풀에서 추출할 수 있다. 프로틴 추출 후에, 장치 C는, 프로틴 데이터에 대응되는 이벤트를 처리하는 중에, 프로틴의 descrip 및 ingest의 슬러로부터 불러와진, 또는 판독된 프로틴의 데이터를 사용할 수 있다. 또 다른 예를 들자면, 장치 B는 풀로부터 하나 이상의 프로틴(가령, 프로틴 1C, 프로틴 2A 등)을 추출할 수 있다. 프로틴 추출 후에, 장치 B는, 상기 프로틴 데이터에 대응되는 이벤트를 처리하는 중에, 프로틴의 데이터를 사용할 수 있다.
풀에 결합 또는 연결된 장치 및/또는 프로그램은 프로틴의 특정한 시퀀스를 검색하는 풀에서 전방 및 후방 스킴할 수 있다. 예를 들면, 소정의 패턴을 매칭하는 프로틴의 출현을 대기하고, 이후에 소정의 다른 것과 함께 이러한 프로틴이 출현하는지 여부를 결정하기 위해 후방 스킴하는 것이 프로그램을 설정하는데 종종 유용하다. 입력 풀에 저장된 이벤트 히스토리의 사용을 위한 이러한 편의성은 종종 쓰기 상태 관리 코드를 불필요하게 하나, 적어도 현저하게 이러한 바람직한 코딩 패턴에 대한 의존성을 감소시킨다.
도 26은 멀티 장치 및 장치 중 하나 이상에 동작하는 수많은 프로그램을 포함하는 프로세싱 환경의 블록도이며, 이러한 장치에서 플라스마 구성체(예, 풀스, 프로틴, 및 슬러)가 사용되어 선택적인 환경에서, 수많은 동작 프로그램이 장치에 의해 발생된 이벤트를 공유하고 집합적으로 응답하는 것을 가능하게 한다. 그러나 이러한 시스템은 멀티-유저, 멀티-장치, 멀티-컴퓨터 대화형 제어 시나리오 또는 환경설정의 단지 하나의 예이다. 더 구체적으로, 이러한 예에서, 대화형 시스템(멀티 장치(예, 장치 A 및 B에 각각 연결된 장치 X 및 Y) 및 하나 이상의 컴퓨터(예, 장치 A 및 B 등)에서 동작하는 복수의 프로그램(예, 앱스 AA-AX, 앱스 BA-BX 등)) 포함)은 플라스마 구성체(예, 풀스, 프로틴, 및 슬러)를 사용하여 동작 프로그램이 이러한 입력 장치에 의해 발생된 이벤트를 공유하고 집합적으로 응답하는 것을 가능하게 한다.
이러한 예에서, 각각의 장치(예, 장치 A 및 B에 각각 연결된 장치 X 및 Y)가 개별적인 장치(예, 장치 A, 장치 B 등)에서 호스트된 하나 이상의 프로그램 하에서 또는 이와 관련하여 동작하기 위해 관리 및/또는 여견된다. 개별적인 장치(예, 장치 A, 장치 B 등)는 장치(예, 장치 X, 장치 A, 장치 Y, 장치 B 등) 하드웨어에 의해 발생된 이산 로 데이터를 플라스마 프로틴으로 번역하고 이러한 프로틴을 플라스마 풀에 배치한다. 예를 들어, 장치 A에서 호스트된 애플리케이션 AB와 관련하여 동작하는 장치 X가 로 데이터를 발생하고, 이산 로 데이터를 프로틴(예, 프로틴 1A, 프로틴 2A 등)으로 번역하고, 이러한 프로틴을 풀에 배치한다. 다른 예에서, 장치 A에서 호스팅된 애플리케이션 AT와 관련하여 동작하는 장치 X는 이산 로 데이터를 프로틴(예, 프로틴 1A, 프로틴 2A 등)으로 번역하고, 이러한 프로틴을 풀에 배치한다. 또 다른 예로서, 장치 C에서 호스트된 애플리케이션 CD와 관련하여 동작하는 장치 Z는 로 데이터를 발생하고, 이산 로 데이터를 프로틴(프로틴 1C, 프로틴 2C 등)으로 번역하며, 이러한 프로틴을 풀에 배치한다.
각각의 프로틴은 입력 장치에 의해 등록된 액션을 구체화하고 마찬가지로 장치 자체에 대한 정보를 식별하는 디스크립 리스트(descrip list)를 포함한다. 가능한 경우에, 프로틴 디스크립은 또한 장치 액션에 대한 일반 의미론적 의미에 속할 수 있다. 프로틴의 데이터 페이로드(예, 인제스트(ingests))는 장치 이벤트에 대한 유용한 상태 정보의 전체 세트를 지닌다.
전술한 것과 같이, 프로틴은 임의의 프로그램 또는 풀에 결합 또는 연결된 장치에 의해 사용하기 위한 풀에서, 프로그램 또는 장치의 유형에 상관없이 이용할 수 있다. 결과적으로, 임의 개수의 컴퓨터 상에서 동작하는 임의의 개수의 프로그램이 입력 풀로부터 이벤트 프로틴을 추출할 수 있다. 이러한 장치는 로컬 메모리 버스 또는 네트워크 연결을 통해, 풀로부터 프로틴을 추출하기 위해, 풀에 참여할 수 있는 것만이 필요하다. 이의 즉각적인 결과는 이벤트를 사용 또는 해석하는 것들로부터 프로세싱 이벤트를 발생할 책임이 있는 프로세스를 분리하는 유용한 가능성이다. 다른 결과는, 입력 장치가 한 사람에 의해 제어될 수 있거나, 수 명의 사람에 의해 동시에 사용될 수 있으며(예, 플라스마-기반 입력 프레임워크가 많은 동시 사용자를 지원함) 자원 및 소비자를 다중화하는 것이며, 결과 이벤트 스트림이 차례로 멀티 이벤트 소비자에게 가시화된다.
풀에 결합 또는 연결된 장치 및/프로그램은 프로틴의 특정 시퀀스를 검색하는 풀에서 전방 및 후방 스킴될 수 있다. 예를 들면, 소정의 패턴을 매칭하는 프로틴의 출현을 대기하고, 이후에 소정의 다른 것과 함께 이러한 프로틴이 출현하는지를 결정하기 위해 후방 스킴하는 것이 종종 유용하다. 입력 풀 내의 저장된 이벤트 히스토리를 사용하기 위한 이러한 편의성은 종종 쓰기 상태 관리 코드를 불필요하게 하거나, 적어도 현저하게 이러한 바람직하지 않은 코딩 패턴에 대한 의존성을 줄인다.
도 27는 다른 선택적인 실시예에서, 플라스마 구성체(예, 풀스, 프로틴, 및 슬러)가 사용되어 수많은 동작 프로그램이 입력 장치에 의해 발생된 이벤트를 공유 및 집합적으로 응답하도록 하는, 하나 이상의 장치에서 동작하는 수 많은 프로그램들 사이에 연결된 멀티 입력 장치를 포함하는 프로세싱 환경에 대한 블록도이다. 이러한 시스템은 멀티-유저, 멀티-장치, 멀티-컴퓨터 대화형 제어 시나리오 또는 환경설정의 단지 하나의 예이다. 더 구체적으로, 이러한 예에서, 대화형 시스템(멀티 입력 장치(예, 입력 장치 A, B, BA 및 BB 등) 및 하나 이상의 컴퓨터(예, 장치 A 및 B 등)에서 동작하는 복수의 프로그램(도시되지 않음) 포함)은 플라스마 구성체(예, 풀스, 프로틴, 및 슬러)를 사용하여 동작 프로그램이 이러한 입력 장치에 의해 발생된 이벤트를 공유하고 집합적으로 응답하는 것을 가능하게 한다.
이러한 예에서, 각각의 입력 장치(예, 입력 장치 A, B, BA 및 BB 등)가 개별적인 장치(예, 장치 A, 장치 B 등)에서 호스팅된 소프트웨어 드라이버 프로그램에 의해 관리된다. 개별적인 장치(예, 장치 A, 장치 B 등)는 입력 장치 하드웨어에 의해 발생된 이산 로 데이터를 플라스마 프로틴으로 번역하고 이러한 프로틴을 플라스마 풀에 배치한다. 예를 들어, 입력 장치 A가 로 데이터를 발생하고, 차례로 이산 로 데이터를 프로틴(예, 프로틴 1A, 프로틴 2A 등)으로 번역하는 장치 A로 이산 로 데이터를 제공하며, 이러한 프로틴을 풀에 배치한다. 다른 예에서, 입력 장치 BB는 로 데이터를 발생하고, 차례로 이산 로 데이터를 프로틴(예, 프로틴 1B, 프로틴 2B, 프로틴 3B 등)으로 번역하는 장치 B로 이산 로 데이터를 제공하며, 이러한 프로틴을 풀에 배치한다.
각각의 프로틴은 입력 장치에 의해 등록된 액션을 구체화하고 마찬가지로 장치 자체에 대한 정보를 식별하는 디스크립 리스트(descrip list)를 포함한다. 가능한 경우에, 프로틴 디스크립은 또한 장치 액션에 대한 일반 의미론적 의미에 속할 수 있다. 프로틴의 데이터 페이로드(예, 인제스트(ingests))는 장치 이벤트에 대한 유용한 상태 정보의 전체 세트를 운반한다.
설명을 위해, 이러한 시스템에서 두 개의 전형적인 이벤트에 대한 예시적인 프로틴이 제시된다. 프로틴은 내용 중에 텍스트로 표현되나, 실제 구현 시에, 이러한 프로틴의 성분 일부가 유형화된 데이터 번들(예, 슬러)이다. g-스피크 "원 핑거 클릭" 포즈(관련 애플리케이션에서 설명됨)를 기술하는 프로틴은 다음과 같다:
추가 예로서, 마우스 클릭을 기술하는 프로틴은 다음과 같다:
위의 샘플 프로틴 중 하나 또는 양자는, 호스트 장치의 참여 프로그램이 이의 코트의 특정 부분을 동작시키도록 할 것이다. 이러한 프로그램은 다음의 일반 의미론적 라벨에 관심이 있을 수 있다: 전체(all) 중 가장 일반형인, "포인트", 또는 보다 구체적인 쌍인 , "인게이지(engage), 원(one)". 또는 이들은 정확한 장치에 의해서만 그럴듯하게 발생될 수 있는 이벤트를 검색할 수 있다: "원-핑거-인게이지", 또는, 단일한 집합체 객체, "핸드-아이디-23(hand-id-23)".
전술한 것과 같은 프로틴은, 프로그램 또는 장치의 유형에도 불구하고, 풀에 결합 또는 연결된 임의의 프로그램 도는 장치에 의한 사용을 위해 풀에서 이용할 수 있다. 결과적으로, 임의의 수의 컴퓨터에서 동작하는 임의의 수의 프로그램이 입력 풀로부터 이벤트 프로틴을 추출할 수 있다. 이러한 장치는 풀로부터 프로틴을 추출하기 위해 로컬 메모리 버스 또는 네트워크 연결을 거쳐 풀에 참여할 수 있는 것만이 필요하다. 이의 즉각적인 결과는 이벤트를 사용 또는 해석하는 것들로부터 프로세싱 이벤트를 발생할 책임이 있는 프로세스를 분리하는 유용한 가능성이다. 다른 결과는, 입력 장치가 한 사람에 의해 제어될 수 있거나, 수 명의 사람에 의해 동시에 사용될 수 있도록(예, 플라스마-기반 입력 프레임워크가 많은 동시 사용자를 지원함) 자원 및 소비자를 다중화하는 것이며, 결과 이벤트 스트림이 차례로 멀티 이벤트 소비자에게 가시화된다.
일 예 또는 프로틴 용도로서, 장치 C는 하나 이상의 프로틴(예, 프로틴 1B 등)을 풀로부터 추출할 수 있다. 프로틴 추출에 뒤이어, 장치 C는, 프로틴 데이터가 대응하는 입력 장치 CA 및 CC의 입력 이벤트의 처리 시, 프로틴의 디스크립 및 인제스트의 슬러로부터 검색 또는 판독된 프로틴의 데이터를 사용할 수 있다. 다른 예로서, 장치 A는 풀로부터 하나 이상의 프로틴(예, 프로틴 1B 등)을 추출할 수 있다. 프로틴 추출에 뒤이어, 장치 A는 프로틴 데이터가 대응하는 입력 장치 A의 입력 이벤트 처리 시 프로틴의 데이터를 사용할 수 있다.
풀에 결합 또는 연결된 장치 및/프로그램은 프로틴의 특정 시퀀스를 검색하는 풀에서 전방 및 후방 스킴될 수 있다. 예를 들면, 소정의 패턴을 매칭하는 프로틴의 출현을 대기하고, 이후에 소정의 다른 것과 함께 이러한 프로틴이 출현하는지를 결정하기 위해 후방 스킴하는 것이 종종 유용하다. 입력 풀 내의 저장된 이벤트 히스토리를 사용하기 위한 이러한 편의성은 종종 쓰기 상태 관리 코드를 불필요하게 하거나, 적어도 현저하게 이러한 바람직하지 않은 코딩 패턴에 대한 의존성을 줄인다.
내용 중에 설명된 시스템의 실시예에서 사용된 입력 장치의 예는 제스처 입력 센서, 키보드, 마우스, 소비자의 전자장치에서 사용되는 것과 같은 적외선 원격 제어장치, 및 작업-지향형 접촉식 매체 객체, 및 그 밖의 명칭의 것들을 포함한다.
도 28은 다른 선택적인 실시예에서, 플라스마 구성체(예, 풀스, 프로틴, 및 슬러)가 사용되어 수많은 동작 프로그램이 입력 장치에 의해 발생된 이벤트를 공유하고 및 집합적으로 응답하도록 하는, 하나 이상의 장치에서 동작하는 수많은 프로그램들 사이에 연결된 멀티 장치를 포함하는 프로세싱 환경에 대한 블록도이다. 이러한 시스템은 멀티 동작 프로그램(예, 그래픽 A-E) 및 하나 이상의 디스플레이 장치(도시되지 않음)를 포함하는 시스템의 단지 일 예이다. 여기서, 프로그램의 일부 또는 전부의 그래픽 출력은 동작 프로그램이 장치에 의해 발생된 그래픽 이벤트를 공유하고 집합적으로 응답하도록 하기 위해 플라스마 구성체(예, 풀스, 프로틴, 및 슬러)를 사용하여 조정 방식으로 다른 프로그램에서 이용가능하게 만들어진다.
컴퓨터 프로그램이 다른 프로그램에 의해 발생된 그래픽을 디스플레이하는 것이 종종 유용할 수 있다. 수 개의 일반적인 예는 화상 회의 애플리케이션, 네트워크-기반 슬라이드쇼 및 데모 프로그램 및 윈도우 매니저를 포함한다. 이러한 환경설정에서, 풀은 비디오, 네트워크 애플리케이션 공유, 및 윈도우 관리를 내포하는 일반화된 프레임워크를 구현하기 위한 플라스마 라이브러리로 사용되고, 이러한 프로그램의 현재 버전에서 일반적으로 이용할 수 없는 다수의 특징부에 프로그래머가 추가하는 것을 가능하게 한다.
환경을 구성하는 플라스마에서 동작하는 프로그램(예, 그래픽 A-E)은 풀로의 결합 및/또는 연결을 통해 조정 풀(coordination pool)에 참여한다. 각각의 프로그램은 다양한 종류의 그래픽 자원의 이용가능성을 나타내기 위해 그 풀에 프로틴을 예치할 수 있다. 또한 그래픽을 디스플레이할 수 있는 프로그램이 이들의 디스플레이의 성능, 보안 및 사용자 프로파일, 그리고 물리적 및 네트워크 위치를 나타내기 위해 프로틴을 예치한다.
또한, 그래픽 데이터는 풀을 통해 전송될 수 있거나, 디스플레이 프로그램이 다른 종류(예를 들면, RTSP 스트림)의 네트워크 자원으로 포인트될 수 있다. 내용 중에 사용된 어구 "그래픽 데이터"는 연속적으로 놓인 다양한 서로 다른 표현을 지칭하다. 즉, 그래픽 데이터의 예는 문자적 예(예, '이미지' 또는 픽셀 블록), 절차적 예(예, 전형적인 오픈GL 파이프라인 아래로 흐르는 것과 같은 '드로잉' 디렉티브의 시퀀스), 및 묘사적 예(예, 기하학적 변환, 클리핑 및 합성 동작을 이용하여 다른 그래픽 구성체를 결합하는 명령)를 포함하나 이에 한정되는 것은 아니다.
로컬 머신에 그래픽 데이터가 플랫폼(특정한 디스플레이 드라이버 최적화)을 통해 전달될 수 있다. 그래픽이 풀을 통해 전송되는 경우에도, 종종 주기적 스크린-캡쳐가 조정 풀에 저장될 것이며 이에 따라 보다 비밀적인 자원에 대한 직접적인 접속 없이도 폴-백 그래픽을 디스플레이할 수 있다.
본원에서 기재된 시스템의 한 가지 이점은, 대부분의 메시지 패싱 프레임워크 및 네트워크 프로토콜과 달리, 풀은 데이터의 중요 버퍼를 유지한다는 것이다. 따라서 프로그램은 접속 및 용도 패턴을 관찰하는(조정 풀의 경우에) 또는 이전 그래픽 프레임을 추출하는(그래픽 풀의 경우에) 풀로 후방 재감기할 수 있다.
도 29는 또 다른 선택적인 실시예에서, 플라스마 구조체(예, 풀, 프로틴, 및 슬러)가 사용되어 동작 프로그램의 상태 검사, 가시화 및 디버깅을 하기 위해 사용되는, 멀티 장치에서 동작하는 수많은 프로그램 사이에 연결된 멀티 장치를 포함하는 프로세싱 환경에 대한 블록도이다. 이러한 시스템은 멀티 장치(장치 A, 장치 B 등) 상의 멀티 동작 프로그램(예, 그래픽 P-A, 프로그램 P-B 등)을 포함하는 시스템의 단지 하나의 예에 불과하다. 여기서, 일부 프로그램은 동작 프로그램이 풀을 사용하거나 풀을 통해 다른 프로그램의 내부 상태에 접속한다.
대부분의 대화형 컴퓨터 시스템은 서로의 옆에서, 단일 머신 또는 복수의 머신 상에서 동작하며, 그리고 네트워크를 통한 상호대화하는 많은 프로그램을 포함한다. 멀티-프로그램 시스템은 런-타임 데이터가 각각의 프로세스 내부에서 감춰지거나 접속이 어렵기 대문에, 구성, 분석 및 디버그하기가 어려울 수 있다. 내용 중에 설명된 실시예의 일반화된 프레임워크 및 플라스마 구성체는 풀을 통해 많은 이들의 데이터를 동작 프로그램이 이용할 수 있게 하고, 이에 따라 다른 프로그램이 이들의 상태를 조사할 수 있도록 한다. 이러한 프레임워크는 통상적인 디버거보다 더 유연한 디버깅 도구, 정교한 시스템 관리 툴, 및 사람 오퍼레이터로 하여금 프로그램이나 프로그램들이 통과한 상태의 시퀀스를 상세히 분석할 수 있게 하도록 구성된 가시화 견고성을 가능하게 한다.
다시 도 29로 돌아가서, 이러한 프레임워크에서 동작하는 프로그램(예, 프로그램 P-A, 프로그램 P-B, 등)은 프로그램 시동 시 프로세스 풀을 발생하거나 생성한다. 이러한 풀은 시스템 책력에 등록되고 보안 및 접속 제어가 적용된다. 더 구체적으로, 각각의 장치(예, 장치 A, B, 등)는 개별적인 장치에서 동작하는 프로그램(예, 프로그램 P-A, 프로그램 P-B 등)으로부터의 출력에 의해 발생된 이산 로 데이터를 플라스마 프로틴으로 번역하고 이러한 프로틴을 플라스마 도구로 예치한다. 예를 들어, 프로그램 P-A는 데이터 또는 출력를 발생하고, 이러한 출력 장치 A로 제공하며, 이어서 장치 A는 로 데이터를 프로틴(예, 프로틴 1A, 프로틴 2A, 프로틴 3A 등)으로 번역하고, 이러한 프로틴으로 풀에 예치한다. 다른 예로서, 프로그램 P-B는 데이터를 생성하고, 데이터를 장치 B로제공하며, 장치 B는 이어서 이러한 데이터를 프로틴(예, 프로틴 1B-4B 등)으로 번역하고 이러한 프로틴을 풀로 예치한다.
프로그램의 수명의 지속기간 중에, 충분한 접속 허가를 가지는 다른 프로그램이 도구에 부착될 수 있고 프로그램이 예치한 프로틴을 판독하며; 이는 기본 조사 양상(modality)를 나타내며, 개념적으로 "원-웨이" 또는 "리드-온리" 명제이며: 프로그램 P-A에 관련된 엔터티는 자신의 프로세스 풀에서 P-A에 의해 예치된 상태 정보의 흐름을 조사한다. 예를 들어, 조사 프로그램 또는 장치 C하에서 동작하는 애플리케이션은 하나 이상의 프로틴(예, 프로틴 1A, 프로틴 2A, 등)을 추출할 수 있다. 프로틴 추출에 뒤이어, 장치 C가 디스크립의 슬러 및 프로틴의 인제스트로부터 검색 또는 판독된 프로틴의 데이터를 사용하여 프로그램 P-A의 내부 상태를 접속, 해석 및 조사할 수 있다.
그러나, 플라스마 시스템은 효과적인 상태 기반 송신 스킴일 뿐 아니라 전방향 메시지징 환경일 수 있다는 것을 상기하면, 수 개의 추가 모드가 프로그램-투-프로그램 스테이트 조사를 지원한다. 승인된 조사 프로그램은, 그 프로세스 풀(이는 결국, 프로그램 P가 기록과 더불어 판독하는 것)에서 생성 및 예치된 상태 정보의 특성에 영향을 주거나 제어하기 위해 프로그램 P의 프로세스 도구로 프로틴을 스스로 예치할 수 있다.
도 30은 하나의 대안적 실시예에서, 실행되는 많은 프로그램을 갖는 서로 연결되어 있는 복수의 장치들을 포함하는 프로세싱 환경의 블록도이며, 여기서, 플라스마 구조체(가령, 풀, 프러틴 및 슬러)가 상기 프로세스 풀에서 생성되고 그곳에 위치하는 상태 정보의 특성에 영향을 미치거나 제어하도록 사용된다. 이러한 시스템 예에서, 장치 C의 조사 프로그램은 예를 들면, 한 순간 또는 특정한 지속시간 동안, 프로그램(프로그램 P-A, 프로그램 P-B 등)이 풀로 정상 이상의 상태를 내보내도록 요청한다. 또는, 디버그 통신의 다음 '레벨'을 예상하면, 관심 프로그램은 프로그램(예, 프로그램 P-A, 프로그램 P-B 등)이 디버그 풀을 통해 인터액션할 수 있고 이를 이용할 수 있는 자신의 런타임 환경에서 남아 있는 객체를 열거한(listing, 리스팅) 프로틴을 방출한다. 따라서, 정보가 전해지면, 관심 프로그램은 프로그램 런타임에서 객체 중에 개별적인 것을 '어드레스;할 수 있으며, 프로틴을 특정 객체가 단독으로 차지하거나 응답하는 프로세스 풀에 예치한다. 관심 프로그램은 예를 들면, 객체가 모든 자신의 컴포넌트 변수의 임시 값을 기술하는 리포트 프로틴을 발생할 것을 요청할 것이다. 더 구체적으로, 관심 프로그램은 다른 프로틴 통해, 자신의 동작이나 자신의 변수의 값을 변경하기 위해 객체에 지시할 수 있다.
더 구체적으로, 이러한 예에서, 장치 C의 조사 애플리케이션은 풀로 풀에 연결된 각각의 장치(예, 장치 A, 장치 B 등)에 의해 추출된 객체 리스트(예, "요청-객체 리스트")에 대한 요청(프로틴의 형태로)을 예치한다. 이러한 요청에 응답하여, 각각의 장치(예, 장치 A, 장치 B 등)은 풀로, 디버그 풀을 거쳐 개별적으로 인터액션이 가능하고 이용할 수 있는 런타임 환경에서 남아있는 객체를 열거하는 프로틴(예, 프로틴 1A, 프로틴 1B 등)을 예치한다.
따라서, 장치로부터 리스팅을 통해 정보가 전해지면, 객체의 리스팅에 응답하여, 장치 C의 조사 애플리케이션은 프로그램 런타임에서 객체들 중 개개의 것을 어드레스하고, 특정한 객체가 차지 및 응답하는 프로세스 풀에 프로틴을 예치한다. 장치 C의 조사 애플리케이션은, 예를 들면, 객체(예, 객체 P-A-O, 객체 P-B-O, 각각)가, 모든 자신의 컴포넌트 변수의 값을 기술하는 리포트 프로틴(예, 프로틴 2A, 프로틴 2B, 등)을 방출하는 풀에 요청 프로틴(예, 프로틴 "요청 리포트 P-A-O", "요청 리포트 P-B-O")를 예치할 수 있다. 각각의 객체(예, 객체, P-A-O, 객체 P-B-O)는 자신의 요청(예, "요청 리포트 P-A-O", "요청 리포트 P-B-O", 각각)을 추출하고, 응답하여, 프로틴을 요청된 리포트(예, 프로틴 2A, 프로틴 2B, 각각)을 포함하는 풀로 예치한다. 장치 C는 이어서 다양한 리포트 프로틴(예, 프로틴 2A, 프로틴 2B 등)을 추출하고, 리포트의 콘텐트에 적합한 후속 프로세싱 액션을 취한다.
이러한 식으로, 교환 매체로서의 플라스마의 용도는 궁극적으로 비버깅, 프로세스 제어, 및 프로그램-투-프로그램 통신 및 조정 사이의 구별을 부식시키기 쉽다.
이를 위해 마지막으로, 일반화된 플라스마 프레임워크는 시각화 및 분석 프로그램이 느슨하게-결합되는 방식으로 디자인되도록 한다. 메모리 접속 패턴을 디스플레이하는 시각화 도구는 예를 들면, 자신의 기본 메모리 읽기 및 쓰기를 풀로 출력하는 임의의 프로그램과 함께 사용될 것이다. 분석을 수행하는 프로그램은 시각화 도구의 존재 또는 디자인에 대해 인식할 필요가 없으며 반대도 마찬가지다.
전술한 방식의 풀의 사용은 시스템 성능에 지나치게 영향을 주지 않는다. 실시예는 예를 들어, 초당, 수 십만 개의 프로틴을 풀에 예치하는 것을 가능하게 함으로써, 비교적 장황한 데이터 출력도, 대부분의 프로그램의 반응도나 상호대화 특성을 눈에 띄게 억누르지 않는다.
본원에서 기재된 실시예는, 복수의 소스로부터 입력 데이터를 수집하는 단계를 포함하는 하나의 방법을 포함한다. 상기 입력 데이터는 물체의 기준계에서의, 의미적으로 비상관적인, 물체의 순간적인 공간 및 기하학적 상태의 3-공간 데이터이다. 하나의 실시예에 따르는 상기 방법은 입력 데이터를 시공간 데이터의 스트림으로 순응시키는 단계를 포함한다. 상기 스트림의 시공간 데이터는 균일하게 표현된다. 하나의 실시예의 상기 방법은, 복수의 제스처 기술어를 이용해 시공간 데이터로부터 제스처 이벤트를 생성하는 단계를 포함한다. 하나의 실시예에 따르는 상기 방법은 상기 제스처 이벤트를, 애플리케이션-중립적(application-neutral)이고 완전 명료화된(fully articulated) 데이터 포맷을 포함하는 프로토이벤트(protoevent)로 표현하는 단계를 포함한다. 하나의 실시예의 상기 방법은 제스처 이벤트를 배포하고, 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서 대응하는 프로토이벤트를 통해 하나 이상의 이벤트 소비자에 의한 제스처 이벤트의 액세스를 제공하는 단계를 포함한다.
본원에서 기재되는 실시예는, 한 방법을 포함하며, 상기 방법은: 복수의 소스로부터 입력 데이터를 수집하는 단계(상기 입력 데이터는, 물체의 기준계에서의, 의미적으로 비상관적인, 물체의 순간적인 공간 및 기하학적 상태의 3-공간 데이터임)와, 입력 데이터를 시공간 데이터의 스트림으로 순응시키는 단계(상기 스트림의 시공간 데이터는 균일하게 표현됨)와, 복수의 제스처 기술어를 이용해 시공간 데이터로부터 제스처 이벤트를 생성하는 단계와, 상기 제스처 이벤트를, 애플리케이션-중립적(application-neutral)이고 완전 명료화된(fully articulated) 데이터 포맷을 포함하는 프로토이벤트(protoevent)로 표현하는 단계와, 제스처 이벤트를 배포하고, 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서 대응하는 프로토이벤트를 통해 하나 이상의 이벤트 소비자에 의한 제스처 이벤트의 액세스를 제공하는 단계를 포함한다.
하나의 실시예의 입력 데이터는 물체의 비제약적인 자유공간 제스처 데이터를 포함한다.
하나의 실시예에서, 물체가 표면에 대한 근접 범위와 정의된 공간 중 하나 이상 내에 있을 때 입력 데이터는 물체의 근접 제스처 데이터(proximal gesural data)이다.
하나의 실시예에서, 입력 데이터는, 물체가 표면에 바로 인접한 평면 내에 있을 때, 물체의 호버(hover) 제스처 데이터를 포함한다.
하나의 실시예에서, 상기 입력 데이터는 물체가 표면과 접촉하고 있을 때 물체의 표면-접촉 제스처 데이터를 포함한다.
하나의 실시예에서, 상기 입력 데이터는 복수의 데이터 스트림을 포함한다.
하나의 실시예의 방법이 복수의 데이터 스트림을 시간 정렬하는 단계를 포함한다.
하나의 실시예의 방법은, 복수의 데이터 스트림으로부터의 이벤트들을 공간적으로 잇고, 하나의 단일 합성 이벤트를 생성하는 단계를 포함한다.
하나의 실시예의 방법은, 선행 동작으로부터 야기된 관련 이벤트들을 수집하는 과정을 포함하는 의미적 집합화(semantic aggregation)를 수행하는 단계를 포함한다.
하나의 실시예의 방법은 메타정보 태깅(tagging)을 수행하는 단계를 포함한다.
하나의 실시예의 방법은 광학 동작-추적 시스템, 비행 시간(time-of-flight) 추적 시스템, 전기장 감지 시스템, 및 터치 스크린 장치 중 하나 이상으로부터 입력 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 광학 동작 추적 시스템으로부터 상기 입력 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 비행 시간(time-of-flight) 추적 시스템으로부터 입력 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 터치 스크린 장치로부터 입력 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 전기장 감지 시스템으로부터 입력 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 용량성 감지 시스템으로부터 입력 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 물체의 3-공간 위치를 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 물체의 3-공간 배향을 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 물체의 동작을 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 3-공간 위치를 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 물체를 포함하는 복수의 요소와 상기 물체와 연결되는 복수의 요소 중 하나 이상의 벌크 3-공간 배향을 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은, 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 동작을 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은 물체를 포함하는 복수의 요소의 포즈(pose)의 의미적 다이제스트(semantic digest)를 포함하는 시공간 데이터를 수신하는 단계를 포함한다.
하나의 실시예의 방법은, 시공간 데이터를 제스처 기술어에 비교하는 단계를 포함한다.
하나의 실시예의 방법은 시공간 데이터와 제스처 기술어 간의 매치(match)에 응답하여, 프로토이벤트를 생성하는 단계를 포함하며, 프로토이벤트는 매칭된 시공간 데이터의 다이제스트를 포함하며, 매칭된 제스처 기술어의 의미적 맥락(semantic context)으로 해석된 데이터 포맷을 포함한다.
하나의 실시예의 방법은 복수의 인식자(recognizer)를 제공하는 단계를 포함하며, 각각의 인식자는 하나씩의 제스처 기술어를 포함한다.
하나의 실시예의 방법은, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자의 등급을 매기는 것을 포함한다.
하나의 실시예의 방법은 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 더하는 것을 포함한다.
하나의 실시예의 방법은, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 제거한다.
하나의 실시예의 방법은, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 수정한다.
하나의 실시예의 방법은 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 재설정(reconfigure)한다.
하나의 실시예에서, 시공간 데이터와 인식자의 활성화 기준(activation criteria) 간의 매치 전에, 상기 인식자는 휴면 상태(dormant)를 유지한다.
하나의 실시예에서, 시공간 데이터의 시공간 양태가 활성화 기준에 매칭할 때 인식자는 활성 상태가 된다.
하나의 실시예에서, 시공간 데이터가 인식자의 유지 기준(maintenance criteria)을 만족시키는 한, 인식자는 활성 상태를 유지한다.
하나의 실시예에서, 시공간 데이터가 유지 기준을 만족시키지 않을 때, 상기 인식자는 비활성 상태가 된다.
하나의 실시예의 방법은, 배포자가 프로토이벤트를, 하나 이상의 이벤트 소비자에 의해 액세스되기 위해 하나 이상의 레포지토리(repository)에 예치하는 단계를 포함한다.
하나의 실시예의 방법은 하나 이상의 이벤트 소비자의 리스트를 제공하는 단계를 포함한다.
하나의 실시예의 방법은 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 비동기 방식으로 전송하는 단계를 포함한다.
하나의 실시예의 방법은 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 동기 방식으로 전송하는 단계를 포함한다.
하나의 실시예의 방법은 복수의 이벤트 소비자에 대응하는 복수의 공간-의미적 기준계들 간에, 제스처 이벤트를 변환하는 단계를 포함한다.
하나의 실시예의 방법은 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서 제스처 이벤트를 재-전송하는 단계를 포함한다.
하나의 실시예의 방법은 제스처 이벤트 및 제스처 이벤트의 상태 정보를 특정하는 제스처 이벤트 데이터를 포함하는 하나 이상의 데이터 시퀀스를 생성하고, 하나 이상의 데이터 시퀀스를 포함하도록 데이터 캡슐을 형성함으로써, 프로토이벤트를 생성하는 단계를 포함하며, 상기 데이터 캡슐은 하나 이상의 데이터 시퀀스의 애플리케이션-독립적 표현을 포함하는 데이터 구조를 가진다.
하나의 실시예에서, 하나 이상의 데이터 시퀀스의 생성은, 각각의 제 1 제스처 이벤트 데이터를 포함하는 각각의 제 1 데이터 세트를 생성하고, 각각의 제 2 상태 정보를 포함하는 각각의 제 2 데이터 세트를 생성하며, 각각의 제 1 데이터 세트와 각각의 제 2 데이터 세트를 포함하도록 제 1 데이터 시퀀스를 형성하는 것을 포함한다.
하나의 실시예에서, 상기 하나 이상의 데이터 시퀀스의 생성은, 각각의 제 1 제스처 이벤트 데이터를 포함하는 각각의 제 1 데이터 세트를 생성하고, 각각의 제 2 상태 정보를 포함하는 각각의 제 2 데이터 세트를 생성하며, 각각의 제 1 데이터 세트와 각각의 제 2 데이터 세트를 포함하도록 제 2 데이터 시퀀스를 형성하는 것을 포함한다.
하나의 실시예에서, 각각의 제 1 데이터 세트의 생성은, 각각의 제 1 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 1 데이터 세트 오프셋은 제 2 데이터 시퀀스의 각각의 제 1 데이터 세트를 포인트(point)한다.
하나의 실시예에서, 각각의 제 2 데이터 세트의 생성은, 각각의 제 2 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 2 데이터 세트 오프셋은 제 2 데이터 시퀀스의 각각의 제 2 데이터 세트를 포인트한다.
하나의 실시예에서, 각각의 제 1 데이터 세트는 기술어 리스트이고, 기술어 리스트는 데이터의 기술어를 포함한다.
하나의 실시예의 방법은, 하나 이상의 오프셋을 생성하는 단계와, 하나 이상의 오프셋을 포함하도록 데이터 캡술을 형성하는 단계를 포함한다.
하나의 실시예의 방법은 제 1 가변 길이를 갖는 제 1 오프셋을 생성하는 단계를 포함하며, 상기 제 1 오프셋은 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 제스처 이벤트 데이터를 포인트한다.
하나의 실시예의 방법은 제 2 가변 길이를 갖는 제 2 오프셋을 생성하는 단계를 포함하며, 제 2 오프셋이 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 상태 정보를 포인트한다.
하나의 실시예의 방법은, 하나 이상의 오프셋의 제 1 오프셋을 이용하여, 데이터 캡슐을 통과하는 제 1 코드 경로를 형성하는 단계와, 하나 이상의 오프셋의 제 2 오프셋을 이용하여 데이터 캡슐을 통과하는 제 2 코드 경로를 형성하는 단계를 포함하며, 제 1 코드 경로와 제 2 코드 경로는 상이한 경로이다.
하나의 실시예에서, 제 1 오프셋과 제 2 오프셋 중 하나 이상은 메타데이터를 포함하고, 상기 메타데이터는 맥락-특정적 메타데이터를 포함한다.
하나의 실시예에서, 이벤트 소비자는 복수의 상호대화형 시스템 중 상호대화형 시스템이며, 상기 복수의 상호대화형 시스템은 복수의 기준계를 포함한다.
하나의 실시예에서, 하나 이상의 이벤트 소비자는, 하나 이상의 이벤트 소비자에게 특정적인 애플리케이션 유형을 이용하여 프로토이벤트를 소비한다.
하나의 실시예에서, 상기 하나 이상의 이벤트 소비자는 제 1 기준계를 갖는 제 1 상호대화형 시스템과 제 2 기준계를 갖는 제 2 상호대화형 시스템을 포함한다.
하나의 실시예에서, 제 1 상호대화형 시스템은 제 1 애플리케이션 유형을 이용해 프로토이벤트를 소비하고, 제 2 상호대화형 시스템은 제 2 애플리케이션 유형을 이용해 프로토이벤트를 소비한다.
하나의 실시예에서, 상기 물체는 인간의 손이다.
하나의 실시예에서, 상기 물체는 인간의 손의 하나 이상의 손가락이다.
하나의 실시예에서, 상기 물체는 하나 이상의 인간의 손과, 인간의 손의 하나 이상의 손가락을 포함한다.
본원에서 기재되는 실시예는 복수의 소스로부터 입력 데이터를 수집하는 단계를 포함하는 방법을 포함한다. 상기 입력 데이터는 하나의 물체에 대응하는, 의미적으로 비상관적인 3-공간 데이터이다. 복수의 소스는 이종 소스를 포함한다. 하나의 실시예의 방법은 입력 데이터로부터 물체의 복수의 공간 이벤트를 렌더링하는 단계를 포함한다. 복수의 공간 이벤트는 전역적 방 공간에 대해 순응된-좌표 표현을 포함한다. 하나의 실시예의 방법은 공간 이벤트로부터 공간 이벤트의 집합체를 생성하는 단계를 포함한다. 상기 집합체는 문자로 된, 물체의 기하학적 및 의미적 특성을 포함하는 논리적 집합체이다. 하나의 실시예의 방법은 공간 이벤트의 집합체에서 제스처를 검출 및 명확화하는 단계를 포함한다. 하나의 실시예의 방법은 제스처를 나타내는 데이터 번들을 생성하는 단계를 포함한다. 상기 데이터 번들은 중립적으로 기술된다. 하나의 실시예의 방법은 복수의 이종 애플리케이션에 의해 소비되기 위해 데이터 번들을 배포하는 단계를 포함한다.
본원에서 기재되는 실시예는 한 방법을 포함하며, 상기 방법은, 복수의 소스로부터 입력 데이터를 수집하는 단계(상기 입력 데이터는 하나의 물체에 대응하는, 의미적으로 비상관적인 3-공간 데이터이며, 상기 복수의 소스는 이종 소스를 포함함)와, 입력 데이터로부터 물체의 복수의 공간 이벤트를 렌더링하는 단계(상기 복수의 공간 이벤트는 전역적 방 공간에 대해 순응된-좌표 표현을 포함함)와, 공간 이벤트로부터 공간 이벤트의 집합체를 생성하는 단계(상기 집합체는 문자로 된(literal) 물체의 기하학적 및 의미적 특성을 포함하는 논리적 집합체임)와, 공간 이벤트의 집합체에서 제스처를 검출 및 명확화(disambibuating)하는 단계와, 제스처를 나타내는 데이터 번들(data bundle)을 생성하는 단계(상기 데이터 번들은 중립적으로 기술됨)와, 복수의 이종 애플리케이션에 의해 소비되기 위해 상기 데이터 번들을 배포하는 단계를 포함한다.
본원에서 기재되는 실시예는 프로세서로 연결되어 있는 데이터 펀넬을 포함한다. 상기 데이터 펀넬은 복수의 소스로부터 입력 데이터를 수집한다. 입력 데이터는 물체의 기준계에서의 물체의 순간적인 공간 및 기하학적 상태에 대한, 의미적으로 비상관적(semantically uncorrelated)인 3-공간 데이터이다. 복수의 소스는 이종 소스를 포함하며, 데이터 펀넬은 입력 데이터를 시공간적 데이터의 스트림으로 순응시키고, 상기 스트림의 시공간적 데이터는 균일하게 표현된다. 상기 시스템은 상기 데이터 펀넬로 연결되어 있는 제스처 엔진을 포함한다. 상기 제스처 엔진은 복수의 제스처 기술어를 이용하여 시공간 데이터로부터 제스처 이벤트를 생성한다. 상기 제스처 엔진은, 애플리케이션-중립적(application-neutral)이고 완전 명료화된(fully articulated) 데이터 포맷을 포함하는 프로토이벤트로 제스처 이벤트를 표현한다. 상기 시스템은 상기 제스처 엔진으로 연결되어 있는 배포자(distributor)를 포함한다. 상기 배포자는 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서의 대응하는 프로토이벤트를 통한 하나 이상의 이벤트 소비자(event consumer)에 의한 제스처 이벤트로의 액세스를 제공한다.
본원에서 기재되는 실시예는 한 시스템을 포함하며, 상기 시스템은, 프로세서로 연결되어 있는 데이터 펀넬(data funnel)(상기 데이터 펀넬은 복수의 소스로부터 입력 데이터를 수집하며, 입력 데이터는 물체의 기준계에서의 물체의 순간적인 공간 및 기하학적 상태에 대한, 의미적으로 비상관적(semantically uncorrelated)인 3-공간 데이터이며, 복수의 소스는 이종 소스를 포함하며, 데이터 펀넬은 입력 데이터를 시공간적 데이터의 스트림으로 순응시키고, 상기 스트림의 시공간적 데이터는 균일하게 표현됨)과, 상기 데이터 펀넬로 연결되어 있는 제스처 엔진(상기 제스처 엔진은 복수의 제스처 기술어를 이용하여 시공간 데이터로부터 제스처 이벤트를 생성하며, 상기 제스처 엔진은, 애플리케이션-중립적(application-neutral)이고 완전 명료화된(fully articulated) 데이터 포맷을 포함하는 프로토이벤트로 제스처 이벤트를 표현함)과, 상기 제스처 엔진으로 연결되어 있는 배포자(distributor)(상기 배포자는 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서의 대응하는 프로토이벤트를 통한 하나 이상의 이벤트 소비자(event consumer)에 의한 제스처 이벤트로의 액세스를 제공함)를 포함한다.
하나의 실시예의 입력 데이터는 물체의 비제약적인 자유공간 제스처 데이터를 포함한다.
하나의 실시예에서, 물체가 표면에 대한 근접 범위와 정의된 공간 중 하나 이상 내에 있을 때 입력 데이터는 물체의 근접 제스처 데이터(proximal gesural data)이다.
하나의 실시예에서, 입력 데이터는, 물체가 표면에 바로 인접한 공간 내에 있을 때, 물체의 호버(hover) 제스처 데이터를 포함한다.
하나의 실시예에서, 상기 입력 데이터는 물체가 표면과 접촉하고 있을 때 물체의 표면-접촉 제스처 데이터를 포함한다.
하나의 실시예에서, 상기 입력 데이터는 복수의 데이터 스트림을 포함한다.
하나의 실시예에서, 상기 데이터 펀넬은 복수의 데이터 스트림을 시간 정렬한다.
하나의 실시예에서, 상기 데이터 펀넬은 복수의 데이터 스트림으로부터의 이벤트들을 공간적으로 잇고, 하나의 단일 합성 이벤트를 생성한다.
하나의 실시예에서, 상기 데이터 펀넬은, 데이터 펀넬의 선행하는 동작으로부터 야기된 관련 이벤트들을 수집하는 과정을 포함하는 의미적 집합화(semantic aggregation)를 수행한다.
하나의 실시예에서, 상기 데이터 펀넬은 메타정보 태깅(tagging)을 수행한다.
하나의 실시예에서, 상기 입력 데이터는 광학 동작-추적 시스템, 비행 시간(time-of-flight) 추적 시스템, 전기장 감지 시스템, 및 터치 스크린 장치 중 하나 이상으로부터 수신된다.
하나의 실시예에서, 상기 입력 데이터는 광학 동작 추적 시스템으로부터 수신된 것이다.
하나의 실시예에서, 상기 입력 데이터는 비행 시간(time-of-flight) 추적 시스템으로부터 수신된다.
하나의 실시예에서, 상기 입력 데이터는 터치 스크린 장치로부터 수신된다.
하나의 실시예에서, 상기 입력 데이터는 전기장 감지 시스템으로부터 수신된다.
하나의 실시예에서, 상기 입력 데이터는 용량성 감지 시스템으로부터 수신된다.
하나의 실시예에서, 상기 제스처 엔진은 물체의 3-공간 위치를 포함하는 시공간 데이터를 수신한다.
하나의 실시예에서, 제스처 엔진은 물체의 3-공간 배향을 포함한다.
하나의 실시예에서, 상기 제스처 엔진은 물체의 동작을 포함하는 시공간 데이터를 수신한다.
하나의 실시예에서, 상기 제스처 엔진은 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 3-공간 위치를 포함하는 시공간 데이터를 수신한다.
하나의 실시예에서, 상기 제스처 엔진은, 물체를 포함하는 복수의 요소와 상기 물체와 연결되는 복수의 요소 중 하나 이상의 벌크 3-공간 배향을 포함하는 시공간 데이터를 수신한다.
하나의 실시예에서, 상기 제스처 엔진은 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 동작을 포함하는 시공간 데이터를 수신한다.
하나의 실시예에서, 상기 제스처 엔진은 물체를 포함하는 복수의 요소의 포즈(pose)의 의미적 다이제스트(semantic digest)를 포함하는 시공간 데이터를 수신한다.
하나의 실시예에서, 상기 제스처 엔진은 시공간 데이터를 제스처 기술어에 비교한다.
하나의 실시예에서, 제스처 엔진은 시공간 데이터와 제스처 기술어 간의 매치(match)에 응답하여, 프로토이벤트를 생성하며, 프로토이벤트는 매칭된 시공간 데이터의 다이제스트를 포함하며, 매칭된 제스처 기술어의 의미적 맥락(semantic context)으로 해석된 데이터 포맷을 포함한다.
하나의 실시예에서, 상기 제스처 엔진은 복수의 인식자(recognizer)를 포함하며, 각각의 인식자는 하나씩의 제스처 기술어를 포함한다.
하나의 실시예에서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자의 등급을 매기는 것을 포함한다.
하나의 실시예에서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 더한다.
하나의 실시예에서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 제거하는 것을 포함한다.
하나의 실시예에서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 수정한다.
하나의 실시예에서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 재설정(reconfigure)한다.
하나의 실시예에서, 시공간 데이터와 인식자의 활성화 기준(activation criteria) 간의 매치 전에, 상기 인식자는 휴면 상태(dormant)를 유지한다.
하나의 실시예에서, 시공간 데이터의 시공간 양태가 활성화 기준에 매칭할 때 인식자는 활성 상태가 된다.
하나의 실시예에서, 시공간 데이터가 인식자의 유지 기준(maintenance criteria)을 만족시키는 한, 인식자는 활성 상태를 유지한다.
하나의 실시예에서, 시공간 데이터가 유지 기준을 만족시키지 않을 때, 상기 인식자는 비활성 상태가 된다.
하나의 실시예에서, 배포자가 프로토이벤트를, 하나 이상의 이벤트 소비자에 의해 액세스되기 위해 하나 이상의 레포지토리(repository)에 예치한다.
하나의 실시예에서, 배포자는 하나 이상의 이벤트 소비자의 리스트를 포함한다.
하나의 실시예에서, 상기 배포자는 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 비동기 방식으로 전송한다.
하나의 실시예에서, 상기 배포자는 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 동기 방식으로 전송한다.
하나의 실시예의 시스템은 하나 이상의 소비자의 원격 클라이언트 장치로 연결되는 변환기(transformer)를 포함하며, 상기 변환기는 하나 이상의 이벤트 소비자의 공간-의미 기준계로 제스처 이벤트를 재-전송한다.
하나의 실시예에서, 상기 배포자가 변환기를 포함하는 것을 특징으로 하는 시스템.
하나의 실시예에서, 상기 제스처 엔진은, 제스처 이벤트 및 제스처 이벤트의 상태 정보를 특정하는 제스처 이벤트 데이터를 포함하는 하나 이상의 데이터 시퀀스를 생성하고, 하나 이상의 데이터 시퀀스를 포함하도록 데이터 캡슐을 형성함으로써, 프로토이벤트를 생성하며, 상기 데이터 캡슐은 하나 이상의 데이터 시퀀스의 애플리케이션-독립적 표현을 포함하는 데이터 구조를 가진다.
하나의 실시예에서, 하나 이상의 데이터 시퀀스의 생성은, 각각의 제 1 제스처 이벤트 데이터를 포함하는 각각의 제 1 데이터 세트를 생성하고, 각각의 제 2 상태 정보를 포함하는 각각의 제 2 데이터 세트를 생성하며, 각각의 제 1 데이터 세트와 각각의 제 2 데이터 세트를 포함하도록 제 1 데이터 시퀀스를 형성하는 것을 포함한다.
하나의 실시예에서, 상기 하나 이상의 데이터 시퀀스의 생성은, 각각의 제 1 제스처 이벤트 데이터를 포함하는 각각의 제 1 데이터 세트를 생성하고, 각각의 제 2 상태 정보를 포함하는 각각의 제 2 데이터 세트를 생성하며, 각각의 제 1 데이터 세트와 각각의 제 2 데이터 세트를 포함하도록 제 2 데이터 시퀀스를 형성하는 것을 포함한다.
하나의 실시예에서, 각각의 제 1 데이터 세트의 생성은, 각각의 제 1 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 1 데이터 세트 오프셋은 제 2 데이터 시퀀스의 각각의 제 1 데이터 세트를 포인트(point)한다.
하나의 실시예에서, 각각의 제 2 데이터 세트의 생성은, 각각의 제 2 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 2 데이터 세트 오프셋은 제 2 데이터 시퀀스의 각각의 제 2 데이터 세트를 포인트한다.
하나의 실시예에서, 각각의 제 1 데이터 세트는 기술어 리스트이고, 기술어 리스트는 데이터의 기술어를 포함한다.
하나의 실시예에서, 하나 이상의 오프셋이 생성되고, 하나 이상의 오프셋을 포함하도록 데이터 캡슐이 형성된다.
하나의 실시예에서, 제 1 가변 길이를 갖는 제 1 오프셋이 생성되고, 상기 제 1 오프셋은 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 제스처 이벤트 데이터를 포인트한다.
하나의 실시예에서, 제 2 가변 길이를 갖는 제 2 오프셋이 생성되고, 제 2 오프셋이 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 상태 정보를 포인트한다.
하나의 실시예에서, 하나 이상의 오프셋의 제 1 오프셋을 이용하여, 데이터 캡슐을 통과하는 제 1 코드 경로가 형성되고 하나 이상의 오프셋의 제 2 오프셋을 이용하여 데이터 캡슐을 통과하는 제 2 코드 경로가 형성되며, 제 1 코드 경로와 제 2 코드 경로는 상이한 경로이다.
하나의 실시예에서, 제 1 오프셋과 제 2 오프셋 중 하나 이상은 메타데이터를 포함하고, 상기 메타데이터는 맥락-특정적 메타데이터를 포함한다.
하나의 실시예에서, 이벤트 소비자는 복수의 상호대화형 시스템 중 상호대화형 시스템이며, 상기 복수의 상호대화형 시스템은 복수의 기준계를 포함한다.
하나의 실시예에서, 하나 이상의 이벤트 소비자는, 하나 이상의 이벤트 소비자에게 특정적인 애플리케이션 유형을 이용하여 프로토이벤트를 소비한다.
하나의 실시예에서, 상기 하나 이상의 이벤트 소비자는 제 1 기준계를 갖는 제 1 상호대화형 시스템과 제 2 기준계를 갖는 제 2 상호대화형 시스템을 포함한다.
하나의 실시예에서, 제 1 상호대화형 시스템은 제 1 애플리케이션 유형을 이용해 프로토이벤트를 소비하고, 제 2 상호대화형 시스템은 제 2 애플리케이션 유형을 이용해 프로토이벤트를 소비한다.
하나의 실시예에서, 상기 물체는 인간의 손이다.
하나의 실시예에서, 상기 물체는 인간의 손의 하나 이상의 손가락이다.
하나의 실시예에서, 상기 물체는 하나 이상의 인간의 손과, 인간의 손의 하나 이상의 손가락을 포함한다.
본원에서 기재된 실시예는 프로세서에 연결된 데이터 펀넬을 포함하는 시스템을 포함한다. 상기 데이터 펀넬은 복수의 소스로부터 입력 데이터를 수집하고, 입력 데이터를 시공간 데이터 스트림으로 순응시킨다. 상기 입력 데이터는 시간 및 공간의 한 점에서 신체의 순간적 상태에 대한 절대적 3-공간 위치 데이터이다. 상기 시스템은 상기 데이터 펀넬로 연결되는 제스처 엔진을 포함한다. 상기 제스처 엔진은 복수의 제스처 기술어를 이용해 시공간 데이터 스트림으로부터 제스처 이벤트를 생성한다. 제스처 엔진은 각각의 제스처 이벤트를 애플리케이션-중립적(application-neutral)인 데이터 포맷을 포함하는 프로토이벤트(protoevent)로 나타낸다. 상기 시스템은 제스처 엔진으로 연결되는 배포자를 포함한다. 상기 배포자는 복수의 이벤트 소비자에 의한 복수의 프로토이벤트의 액세스를 통한 제스처 이벤트로의 액세스를 제공한다. 상기 제스처 이벤트의 액세스는 복수의 이벤트 소비자의 공간-의미적 기준계에서 이뤄진다.
본원에서 기재되는 실시예는 한 시스템을 포함하며, 상기 시스템은, 프로세서로 연결되어 있는 데이터 펀넬(data funnel)(상기 데이터 펀넬은 복수의 소스롤부터 입력 데이터를 수집하고, 입력 데이터를 시공간 데이터 스트림으로 순응시키고, 상기 입력 데이터는 시간 및 공간의 한 점에서 신체의 순간적 상태에 대한 절대적 3-공간 위치 데이터임)과, 상기 데이터 펀넬로 연결되는 제스처 엔진(상기 제스처 엔진은 복수의 제스처 기술어를 이용해 시공간 데이터 스트림으로부터 제스처 이벤트를 생성하고, 제스처 엔진은 각각의 제스처 이벤트를 애플리케이션-중립적(application-neutral)인 데이터 포맷을 포함하는 프로토이벤트(protoevent)로 나타냄)과, 상기 제스처 엔진으로 연결되는 배포자(배포자는 복수의 이벤트 소비자에 의한 복수의 프로토이벤트의 액세스를 통한 제스처 이벤트로의 액세스를 제공하고, 상기 제스처 이벤트의 액세스는 복수의 이벤트 소비자의 공간-의미적 기준계에서 이뤄짐)를 포함한다.
하나의 실시예의 프로세싱 시스템은 하나 이상의 프로세서와 하나 이상의 메모리 장치 또는 서브 시스템을 포함한다. 상기 프로세싱 시스템은 또한 하나 이상의 데이터베이스를 포함, 또는 상기 데이터베이스로 연결될 수 있다. “프로세서”라는 용어는, 본원에서 사용될 때, 임의의 로직 프로세싱 유닛을 일컬으며, 예를 들어, 하나 이상의 CPU(central processing unit), DSP(digital signal processor), ASIC(application-specific integrated circuit) 등이 있다. 프로세서와 메모리가 하나의 칩에 모노리식(monolithic)하게 집적, 및/또는 호스트 시스템의 복수의 칩이나 구성요소들 간에 분산, 및/또는 알고리즘의 조합에 의해 제공될 수 있다. 본원에서 기재된 방법은 소프트웨어 알고리즘, 프로그램, 펌웨어, 하드웨어, 부품, 회로 중 하나 이상의 임의의 조합으로 구현될 수 있다.
본원의 시스템과 방법을 구현하는 시스템 구성요소는 다 함께, 또는 따로 따로 위치할 수 있다. 따라서 본 발명의 시스템과 방법을 구현하는 시스템 구성요소는 단일 시스템, 복수 시스템 및/또는 지리적으로 이격되어 있는 시스템의 구성요소일 수 있다. 이들 구성요소는 호스트 시스템이나 상기 호스트 시스템에 연결된 시스템의 하나 이상의 그 밖의 다른 구성요소로 연결될 수 있다.
통신 경로가 시스템 구성요소를 연결하고, 상기 구성요소들 통신이나 파일 전송을 위한 임의의 매체를 포함한다. 상기 통신 경로는 무선 연결, 유선 연결 및 하이브리드 무선/유선 연결을 포함한다. 또한 상기 통신 경로는 네트워크(가령, LAN(local area network), MAN(metropolitan area network), WAN(wide area network), 사설 네트워크, 인터오피스 또는 백엔드 네트워크, 인터넷)로의 결합이나 연결을 포함한다. 덧붙이자면, 통신 경로는 탈착식 고정 매체를 포함하며, 예를 들어, 플로피 디스크, 하드 디스크 드라이브, CD-ROM 디스크뿐 아니라, 플래쉬 RAM, USB(Universal Serial Bus) 연결, RS-232 연결, 전화 선, 버스 및 전자 메일 메시지가 있다.
"포함한다"는 용어는 배타적이거나 한정적인 의미로 사용되어서는 안되며 포괄적인 의미로 해석되어야 한다. 즉, "포함하지만, 이에 제한되지는 않는다"는 의미로 해석되어야 한다. 단수나 복수를 이용하는 용어가 각각 복수나 단수를 또한 포함한다. 추가적으로, "여기서", "위에서", "아래에서" 등의 표현이나 이와 유사한 표현들은 본 출원의 특정 부분만으로 제한되어서는 안되며, 본 출원 전체를 의미하는 것으로 해석되어야 한다. "또는"이라는 용어는, 둘 이상의 품목의 리스트와 관련하여 사용되는데, 이러한 표현은 리스트 내 품목 중 임의의 것과, 리스트 내 모든 품목과, 리스트 내 품목들 간의 임의의 조합을 모두 포함하는 의미로 간주되어야 한다.
프로세싱 환경의 실시예들에 대한 앞서 제공된 기재가, 정확히 기재된 형태로만 시스템 및 방법을 제한하기 위한 것은 아니다. 구체적인 실시예 및 사례들은 설명을 위한 용도로 제시된 것이며, 다양한 등가 변형예가 다른 시스템 및 방법의 범위 내에서 가능하다. 본원에서 제공되는 사상은 앞서 설명한 시스템 및 방법뿐만 아니라 그 밖의 다른 프로세싱 시스템 및 방법에도 적용될 수 있다.
앞서 설명된 다양한 실시예의 요소 및 단계들이 조합되어, 또 다른 실시예가 제공될 수 있다. 이러한 그리고 그 밖의 다른 변경이, 위의 상세한 설명의 기재에 비추어 프로세싱 환경에 적용될 수 있다.
일반적으로, 다음의 청구범위에서, 사용되는 용어들은, 실시예를 상세한 설명과 청구범위에 기재된 구체적 실시예들로 한정하기 위한 것이 아니며, 청구범위 하에서 동작되는 모든 시스템을 포함하도록 파악되어야 한다. 따라서 실시예는 본원에 기재된 것으로 한정되지 않고, 실시예의 범위는 청구범위에 의해 전적으로 결정된다.
실시예의 특정 양태가 특정 청구항 형태로 제공될지라도, 그 밖의 다른 임의의 개수의 청구항 형태로 다양한 실시예 양태가 고려될 수 있다. 따라서 본 발명의 출원 후에도, 실시예의 다른 양태에 대한 추가적인 청구항 형태를 얻기 위해 추가적인 청구항을 추가할 권리가 있다.
Claims (120)
- 프로세서로 연결되어 있는 데이터 펀넬(data funnel)로서, 상기 데이터 펀넬은 복수의 소스로부터 복수의 입력 데이터 타입을 수집하며, 입력 데이터는 물체의 기준계에서의 물체의 순간적인 공간 및 기하학적 상태에 대한, 의미적으로 비상관적(semantically uncorrelated)인 3-공간 데이터이며, 복수의 소스는 이종 소스를 포함하며, 데이터 펀넬은, 단일 데이터 스트림을 형성하기 위하여, 복수의 소스의 각각으로부터의 입력 데이터를 공간적으로 잇고(seaming) 시간적으로 정렬(aligning)함에 의해, 복수의 소스들로부터의 복수의 입력 데이터 타입을 시공간적 데이터의 단일 스트림으로 수집하는 특징의, 상기 데이터 펀넬과,
상기 데이터 펀넬로 연결되어 있는 제스처 엔진으로서, 상기 제스처 엔진은 복수의 제스처 기술어를 이용하여 시공간 데이터로부터 제스처 이벤트를 생성하며, 상기 제스처 엔진은, 애플리케이션-중립적(application-neutral)인 데이터 포맷을 사용하여 제스처 이벤트의 자세한 기술어인 데이터를 포함하는 프로토이벤트로 제스처 이벤트를 표현하는 특징의, 상기 제스처 엔진과,
상기 제스처 엔진으로 연결되어 있는 배포자(distributor)로서, 상기 배포자는, 하나 이상의 이벤트 소비자(event consumer)의 기준계에서 하나 이상의 이벤트 소비자로 제공되는, 대응하는 프로토이벤트를 통해, 하나 이상의 이벤트 소비자에 의해 제스처 이벤트로의 액세스를 제공하는 특징의, 상기 배포자
를 포함하는 것을 특징으로 하는 시스템. - 제 1 항에 있어서, 상기 입력 데이터는 물체의 비제약적인 자유공간 제스처 데이터를 포함하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 물체가 표면에 대한 근접 범위와 정의된 공간 중 하나 이상 내에 있을 때 입력 데이터는 물체의 근접 제스처 데이터(proximal gesural data)인 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 입력 데이터는, 물체가 표면에 바로 인접한 공간 내에 있을 때, 물체의 호버(hover) 제스처 데이터를 포함하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 물체가 표면과 접촉하고 있을 때 물체의 표면-접촉 제스처 데이터를 포함하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 복수의 데이터 스트림을 포함하는 것을 특징으로 하는 시스템.
- 제 6 항에 있어서, 상기 데이터 펀넬은 복수의 데이터 스트림을 시간 정렬하는 것을 특징으로 하는 시스템.
- 제 6 항에 있어서, 상기 데이터 펀넬은 복수의 데이터 스트림으로부터의 이벤트들을 공간적으로 잇고, 하나의 단일 합성 이벤트를 생성하는 것을 특징으로 하는 시스템.
- 제 6 항에 있어서, 상기 데이터 펀넬은, 데이터 펀넬의 선행하는 동작으로부터 야기된 관련 이벤트들을 수집하는 과정을 포함하는 의미적 집합화(semantic aggregation)를 수행하는 것을 특징으로 하는 시스템.
- 제 6 항에 있어서, 상기 데이터 펀넬은 메타정보 태깅(tagging)을 수행하는 것을 특징으로 하는 시스템.
- 제 6 항에 있어서, 상기 입력 데이터는 광학 동작-추적 시스템, 비행 시간(time-of-flight) 추적 시스템, 전기장 감지 시스템, 및 터치 스크린 장치 중 하나 이상으로부터 수신된 것임을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 광학 동작 추적 시스템으로부터 수신된 것임을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 비행 시간(time-of-flight) 추적 시스템으로부터 수신된 것임을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 터치 스크린 장치로부터 수신된 것임을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 전기장 감지 시스템으로부터 수신된 것임을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 입력 데이터는 용량성 감지 시스템으로부터 수신된 것임을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 물체의 3-공간 위치를 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 제스처 엔진은 물체의 3-공간 배향을 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 물체의 동작을 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 3-공간 위치를 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은, 물체를 포함하는 복수의 요소와 상기 물체와 연결되는 복수의 요소 중 하나 이상의 벌크 3-공간 배향을 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 동작을 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 물체를 포함하는 복수의 요소의 포즈(pose)의 의미적 다이제스트(semantic digest)를 포함하는 시공간 데이터를 수신하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 시공간 데이터를 제스처 기술어에 비교하는 것을 특징으로 하는 시스템.
- 제 24 항에 있어서, 제스처 엔진은 시공간 데이터와 제스처 기술어 간의 매치(match)에 응답하여, 프로토이벤트를 생성하며, 프로토이벤트는 매칭된 시공간 데이터의 다이제스트를 포함하며, 매칭된 제스처 기술어의 의미적 맥락(semantic context)으로 해석된 데이터 포맷을 포함하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은 복수의 인식자(recognizer)를 포함하며, 각각의 인식자는 하나씩의 제스처 기술어를 포함하는 것을 특징으로 하는 시스템.
- 제 26 항에 있어서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자의 등급을 매기는 것을 포함하는 것을 특징으로 하는 시스템.
- 제 26 항에 있어서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 더하는 것을 포함하는 것을 특징으로 하는 시스템.
- 제 26 항에 있어서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 제거하는 것을 포함하는 것을 특징으로 하는 시스템.
- 제 26 항에 있어서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 수정하는 것을 포함하는 것을 특징으로 하는 시스템.
- 제 26 항에 있어서, 상기 제스처 엔진은 복수의 인식자에 대해 복수의 연산을 수행하며, 복수의 연산은 인식자들을 재설정(reconfigure)하는 것을 특징으로 하는 시스템.
- 제 26 항에 있어서, 시공간 데이터와 인식자의 활성화 기준(activation criteria) 간의 매치 전에, 상기 인식자는 휴면 상태(dormant)를 유지하는 것을 특징으로 하는 시스템.
- 제 32 항에 있어서, 시공간 데이터의 시공간 양태가 활성화 기준에 매칭할 때 인식자는 활성 상태가 되는 것을 특징으로 하는 시스템.
- 제 33 항에 있어서, 시공간 데이터가 인식자의 유지 기준(maintenance criteria)을 만족시키는 한, 인식자는 활성 상태를 유지하는 것을 특징으로 하는 시스템.
- 제 33 항에 있어서, 시공간 데이터가 유지 기준을 만족시키지 않을 때, 상기 인식자는 비활성 상태가 되는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 배포자가 프로토이벤트를, 하나 이상의 이벤트 소비자에 의해 액세스되기 위해 하나 이상의 레포지토리(repository)에 예치하는 것을 특징으로 하는 시스템.
- 제 36 항에 있어서, 배포자는 하나 이상의 이벤트 소비자의 리스트를 포함하는 것을 특징으로 하는 시스템.
- 제 37 항에 있어서, 상기 배포자는 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 비동기 방식으로 전송하는 것을 특징으로 하는 시스템.
- 제 37 항에 있어서, 상기 배포자는 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 동기 방식으로 전송하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서,
하나 이상의 소비자의 원격 클라이언트 장치로 연결되는 변환기(transformer)로서, 상기 변환기는 하나 이상의 이벤트 소비자의 공간-의미 기준계로 제스처 이벤트를 재-전송하는 특징의, 상기 변환기
를 포함하는 것을 특징으로 하는 시스템. - 제 40 항에 있어서, 상기 배포자는 변환기를 포함하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 제스처 엔진은, 제스처 이벤트 및 제스처 이벤트의 상태 정보를 특정하는 제스처 이벤트 데이터를 포함하는 하나 이상의 데이터 시퀀스를 생성하고, 하나 이상의 데이터 시퀀스를 포함하도록 데이터 캡슐을 형성함으로써, 프로토이벤트를 생성하며, 상기 데이터 캡슐은 하나 이상의 데이터 시퀀스의 애플리케이션-독립적 표현을 포함하는 데이터 구조를 갖는 것을 특징으로 하는 시스템.
- 제 42 항에 있어서, 하나 이상의 데이터 시퀀스의 생성은,
각각의 제 1 제스처 이벤트 데이터를 포함하는 각각의 제 1 데이터 세트를 생성하고,
각각의 제 2 상태 정보를 포함하는 각각의 제 2 데이터 세트를 생성하며,
각각의 제 1 데이터 세트와 각각의 제 2 데이터 세트를 포함하도록 제 1 데이터 시퀀스를 형성하는 것을 포함함을 특징으로 하는 시스템. - 삭제
- 제 43 항에 있어서, 각각의 제 1 데이터 세트의 생성은, 각각의 제 1 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 1 데이터 세트 오프셋은 제 1 데이터 시퀀스의 각각의 제 1 데이터 세트를 포인트(point)하는 것을 특징으로 하는 시스템.
- 제 43 항에 있어서, 각각의 제 2 데이터 세트의 생성은, 각각의 제 2 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 2 데이터 세트 오프셋은 제 1 데이터 시퀀스의 각각의 제 2 데이터 세트를 포인트하는 것을 특징으로 하는 시스템.
- 제 43 항에 있어서, 각각의 제 1 데이터 세트는 기술어 리스트이고, 기술어 리스트는 데이터의 기술어를 포함하는 것을 특징으로 하는 시스템.
- 제 42 항에 있어서,
하나 이상의 오프셋이 생성되고,
하나 이상의 오프셋을 포함하도록 데이터 캡슐이 형성되는 것을 특징으로 하는 시스템. - 제 48 항에 있어서,
제 1 가변 길이를 갖는 제 1 오프셋이 생성되고,
상기 제 1 오프셋은 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 제스처 이벤트 데이터를 포인트하는 것을 특징으로 하는 시스템. - 제 48 항에 있어서,
제 2 가변 길이를 갖는 제 2 오프셋이 생성되고,
제 2 오프셋이 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 상태 정보를 포인트하는 것을 특징으로 하는 시스템. - 제 48 항에 있어서,
하나 이상의 오프셋의 제 1 오프셋을 이용하여, 데이터 캡슐을 통과하는 제 1 코드 경로가 형성되고
하나 이상의 오프셋의 제 2 오프셋을 이용하여 데이터 캡슐을 통과하는 제 2 코드 경로가 형성되며,
제 1 코드 경로와 제 2 코드 경로는 상이한 경로인 것을 특징으로 하는 시스템. - 제 51 항에 있어서, 제 1 오프셋과 제 2 오프셋 중 하나 이상은 메타데이터를 포함하고, 상기 메타데이터는 맥락-특정적 메타데이터를 포함하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 하나 이상의 이벤트 소비자는 복수의 상호대화형 시스템 중 하나 이상이며, 상기 복수의 상호대화형 시스템은 복수의 기준계를 포함하는 것을 특징으로 하는 시스템.
- 제 53 항에 있어서, 하나 이상의 이벤트 소비자는, 하나 이상의 이벤트 소비자에게 특정적인 애플리케이션 유형을 이용하여 프로토이벤트를 소비하는 것을 특징으로 하는 시스템.
- 제 54 항에 있어서, 상기 하나 이상의 이벤트 소비자는 제 1 기준계를 갖는 제 1 상호대화형 시스템과 제 2 기준계를 갖는 제 2 상호대화형 시스템을 포함하는 것을 특징으로 하는 시스템.
- 제 55 항에 있어서, 제 1 상호대화형 시스템은 제 1 애플리케이션 유형을 이용해 프로토이벤트를 소비하고, 제 2 상호대화형 시스템은 제 2 애플리케이션 유형을 이용해 프로토이벤트를 소비하는 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 물체는 인간의 손인 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 물체는 인간의 손의 하나 이상의 손가락인 것을 특징으로 하는 시스템.
- 제 1 항에 있어서, 상기 물체는 하나 이상의 인간의 손과, 인간의 손의 하나 이상의 손가락을 포함하는 것을 특징으로 하는 시스템.
- 삭제
- 시공간적 데이터의 단일 데이터 스트림을 형성하기 위하여, 복수의 소스의 각각으로부터의 입력 데이터를 공간적으로 잇고(seaming) 시간적으로 정렬(aligning)함에 의해, 복수의 소스로부터 복수의 입력 데이터 타입을 수집하는 단계 - 복수의 소스는 이종 소스를 포함하고, 상기 입력 데이터는 물체의 기준계에서의 물체의 순간적인 공간 및 기하학적 상태에 대한 의미적으로 비상관적(semantically uncorrelated)인 3-공간 데이터임 - 와,
복수의 제스처 기술어를 이용해 시공간 데이터로부터 제스처 이벤트를 생성하는 단계와,
상기 제스처 이벤트를, 애플리케이션-중립적(application-neutral)인 데이터 포맷을 사용하여 제스처 이벤트의 자세한 기술어인 데이터를 포함하는 프로토이벤트(protoevent)로 표현하는 단계와,
제스처 이벤트를 배포하고, 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서 대응하는 프로토이벤트를 통해 하나 이상의 이벤트 소비자에 의한 제스처 이벤트의 액세스를 제공하는 단계
를 포함하는 것을 특징으로 하는 방법. - 제 61 항에 있어서, 상기 입력 데이터는 물체의 비제약적인 자유공간 제스처 데이터를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체가 표면에 대한 근접 범위와 정의된 공간 중 하나 이상 내에 있을 때 입력 데이터는 물체의 근접 제스처 데이터(proximal gesural data)인 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 입력 데이터는, 물체가 표면에 바로 인접한 평면 내에 있을 때, 물체의 호버(hover) 제스처 데이터를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 상기 입력 데이터는 물체가 표면과 접촉하고 있을 때 물체의 표면-접촉 제스처 데이터를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 상기 입력 데이터는 복수의 데이터 스트림을 포함하는 것을 특징으로 하는 방법.
- 제 66 항에 있어서, 복수의 데이터 스트림을 시간 정렬하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 66 항에 있어서, 복수의 데이터 스트림으로부터의 이벤트들을 공간적으로 잇고, 하나의 단일 합성 이벤트를 생성하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 66 항에 있어서, 선행 동작으로부터 야기된 관련 이벤트들을 수집하는 과정을 포함하는 의미적 집합화(semantic aggregation)를 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 66 항에 있어서, 메타정보 태깅(tagging)을 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 66 항에 있어서, 광학 동작-추적 시스템, 비행 시간(time-of-flight) 추적 시스템, 전기장 감지 시스템, 및 터치 스크린 장치 중 하나 이상으로부터 입력 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 광학 동작 추적 시스템으로부터 상기 입력 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 비행 시간(time-of-flight) 추적 시스템으로부터 입력 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 터치 스크린 장치로부터 입력 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 전기장 감지 시스템으로부터 입력 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 용량성 감지 시스템으로부터 입력 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체의 3-공간 위치를 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체의 3-공간 배향을 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체의 동작을 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 3-공간 위치를 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체를 포함하는 복수의 요소와 상기 물체와 연결되는 복수의 요소 중 하나 이상의 벌크 3-공간 배향을 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체를 포함하는 복수의 요소와 상기 물체에 연결되어 있는 복수의 요소 중 하나 이상의 벌크 동작을 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 물체를 포함하는 복수의 요소의 포즈(pose)의 의미적 다이제스트(semantic digest)를 포함하는 시공간 데이터를 수신하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 시공간 데이터를 제스처 기술어에 비교하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 84 항에 있어서, 시공간 데이터와 제스처 기술어 간의 매치(match)에 응답하여, 프로토이벤트를 생성하는 단계로서, 프로토이벤트는 매칭된 시공간 데이터의 다이제스트를 포함하며, 매칭된 제스처 기술어의 의미적 맥락(semantic context)으로 해석된 데이터 포맷을 포함하는 특징의, 생성하는 단계
를 포함하는 것을 특징으로 하는 방법. - 제 61 항에 있어서, 복수의 인식자(recognizer)를 제공하는 단계를 포함하며, 각각의 인식자는 하나씩의 제스처 기술어를 포함하는 것을 특징으로 하는 방법.
- 제 86 항에 있어서, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자의 등급을 매기는 것을 포함하는 것을 특징으로 하는 방법.
- 제 86 항에 있어서, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 더하는 것을 포함하는 것을 특징으로 하는 방법.
- 제 86 항에 있어서, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 제거하는 것을 포함하는 것을 특징으로 하는 방법.
- 제 86 항에 있어서, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 수정하는 것을 포함하는 것을 특징으로 하는 방법.
- 제 86 항에 있어서, 복수의 인식자에 대해 복수의 연산을 수행하는 단계를 포함하며, 복수의 연산은 인식자들을 재설정(reconfigure)하는 것을 특징으로 하는 방법.
- 제 86 항에 있어서, 시공간 데이터와 인식자의 활성화 기준(activation criteria) 간의 매치 전에, 상기 인식자는 휴면 상태(dormant)를 유지하는 것을 특징으로 하는 방법.
- 제 92 항에 있어서, 시공간 데이터의 시공간 양태가 활성화 기준에 매칭할 때 인식자는 활성 상태가 되는 것을 특징으로 하는 방법.
- 제 93 항에 있어서, 시공간 데이터가 인식자의 유지 기준(maintenance criteria)을 만족시키는 한, 인식자는 활성 상태를 유지하는 것을 특징으로 하는 방법.
- 제 93 항에 있어서, 시공간 데이터가 유지 기준을 만족시키지 않을 때, 상기 인식자는 비활성 상태가 되는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 배포자가 프로토이벤트를, 하나 이상의 이벤트 소비자에 의해 액세스되기 위해 하나 이상의 레포지토리(repository)에 예치하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 96 항에 있어서, 하나 이상의 이벤트 소비자의 리스트를 제공하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 97 항에 있어서, 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 비동기 방식으로 전송하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 97 항에 있어서, 제스처 엔진에 의해 생성된 각각의 프로토이벤트를 하나 이상의 이벤트 소비자 각각에게 동기 방식으로 전송하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서,
복수의 이벤트 소비자에 대응하는 복수의 공간-의미적 기준계들 간에, 제스처 이벤트를 변환하는 단계
를 포함하는 것을 특징으로 하는 방법. - 제 61 항에 있어서, 하나 이상의 이벤트 소비자의 공간-의미적 기준계에서 제스처 이벤트를 재-전송하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 제스처 이벤트 및 제스처 이벤트의 상태 정보를 특정하는 제스처 이벤트 데이터를 포함하는 하나 이상의 데이터 시퀀스를 생성하고, 하나 이상의 데이터 시퀀스를 포함하도록 데이터 캡슐을 형성함으로써, 프로토이벤트를 생성하는 단계를 포함하며, 상기 데이터 캡슐은 하나 이상의 데이터 시퀀스의 애플리케이션-독립적 표현을 포함하는 데이터 구조를 갖는 것을 특징으로 하는 방법.
- 제 102 항에 있어서, 하나 이상의 데이터 시퀀스의 생성은,
각각의 제 1 제스처 이벤트 데이터를 포함하는 각각의 제 1 데이터 세트를 생성하고,
각각의 제 2 상태 정보를 포함하는 각각의 제 2 데이터 세트를 생성하며,
각각의 제 1 데이터 세트와 각각의 제 2 데이터 세트를 포함하도록 제 1 데이터 시퀀스를 형성하는 것을 포함함을 특징으로 하는 방법. - 삭제
- 제 103 항에 있어서, 각각의 제 1 데이터 세트의 생성은, 각각의 제 1 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 1 데이터 세트 오프셋은 제 1 데이터 시퀀스의 각각의 제 1 데이터 세트를 포인트(point)하는 것을 특징으로 하는 방법.
- 제 103 항에 있어서, 각각의 제 2 데이터 세트의 생성은, 각각의 제 2 데이터 세트 오프셋을 생성하는 것을 포함하며, 각각의 제 2 데이터 세트 오프셋은 제 1 데이터 시퀀스의 각각의 제 2 데이터 세트를 포인트하는 것을 특징으로 하는 방법.
- 제 103 항에 있어서, 각각의 제 1 데이터 세트는 기술어 리스트이고, 기술어 리스트는 데이터의 기술어를 포함하는 것을 특징으로 하는 방법.
- 제 102 항에 있어서,
하나 이상의 오프셋을 생성하는 단계와
하나 이상의 오프셋을 포함하도록 데이터 캡술을 형성하는 단계
를 포함하는 것을 특징으로 하는 방법. - 제 108 항에 있어서,
제 1 가변 길이를 갖는 제 1 오프셋을 생성하는 단계
를 포함하며, 상기 제 1 오프셋은 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 제스처 이벤트 데이터를 포인트하는 것을 특징으로 하는 방법. - 제 108 항에 있어서,
제 2 가변 길이를 갖는 제 2 오프셋을 생성하는 단계
를 포함하며, 제 2 오프셋이 하나 이상의 데이터 시퀀스의 제 1 데이터 시퀀스의 상태 정보를 포인트하는 것을 특징으로 하는 방법. - 제 108 항에 있어서,
하나 이상의 오프셋의 제 1 오프셋을 이용하여, 데이터 캡슐을 통과하는 제 1 코드 경로를 형성하는 단계와
하나 이상의 오프셋의 제 2 오프셋을 이용하여 데이터 캡슐을 통과하는 제 2 코드 경로를 형성하는 단계
를 포함하며,
제 1 코드 경로와 제 2 코드 경로는 상이한 경로인 것을 특징으로 하는 방법. - 제 111 항에 있어서, 제 1 오프셋과 제 2 오프셋 중 하나 이상은 메타데이터를 포함하고, 상기 메타데이터는 맥락-특정적 메타데이터를 포함하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 하나 이상의 이벤트 소비자는 복수의 상호대화형 시스템 중 하나 이상이며, 상기 복수의 상호대화형 시스템은 복수의 기준계를 포함하는 것을 특징으로 하는 방법.
- 제 113 항에 있어서, 하나 이상의 이벤트 소비자는, 하나 이상의 이벤트 소비자에게 특정적인 애플리케이션 유형을 이용하여 프로토이벤트를 소비하는 것을 특징으로 하는 방법.
- 제 114 항에 있어서, 상기 하나 이상의 이벤트 소비자는 제 1 기준계를 갖는 제 1 상호대화형 시스템과 제 2 기준계를 갖는 제 2 상호대화형 시스템을 포함하는 것을 특징으로 하는 방법.
- 제 115 항에 있어서, 제 1 상호대화형 시스템은 제 1 애플리케이션 유형을 이용해 프로토이벤트를 소비하고, 제 2 상호대화형 시스템은 제 2 애플리케이션 유형을 이용해 프로토이벤트를 소비하는 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 상기 물체는 인간의 손인 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 상기 물체는 인간의 손의 하나 이상의 손가락인 것을 특징으로 하는 방법.
- 제 61 항에 있어서, 상기 물체는 하나 이상의 인간의 손과, 인간의 손의 하나 이상의 손가락을 포함하는 것을 특징으로 하는 방법.
- 삭제
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17537409P | 2009-05-04 | 2009-05-04 | |
US61/175,374 | 2009-05-04 | ||
US12/553,845 | 2009-09-03 | ||
US12/553,845 US8531396B2 (en) | 2006-02-08 | 2009-09-03 | Control system for navigating a principal dimension of a data space |
US12/572,689 | 2009-10-02 | ||
US12/572,689 US8866740B2 (en) | 2005-02-08 | 2009-10-02 | System and method for gesture based control system |
PCT/US2010/033613 WO2010129599A1 (en) | 2009-05-04 | 2010-05-04 | Gesture-based control systems including the representation, manipulation, and exchange of data |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20120034637A KR20120034637A (ko) | 2012-04-12 |
KR101821418B1 true KR101821418B1 (ko) | 2018-01-23 |
Family
ID=43050411
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117029041A KR101821418B1 (ko) | 2009-05-04 | 2010-05-04 | 데이터의 표현, 조작 및 교환을 포함하는 제스처-기반 시스템 |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP2427857B1 (ko) |
JP (1) | JP5698733B2 (ko) |
KR (1) | KR101821418B1 (ko) |
WO (1) | WO2010129599A1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11107236B2 (en) | 2019-04-22 | 2021-08-31 | Dag Michael Peter Hansson | Projected augmented reality interface with pose tracking for directing manual processes |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9285589B2 (en) | 2010-02-28 | 2016-03-15 | Microsoft Technology Licensing, Llc | AR glasses with event and sensor triggered control of AR eyepiece applications |
US20120249797A1 (en) | 2010-02-28 | 2012-10-04 | Osterhout Group, Inc. | Head-worn adaptive display |
US9366862B2 (en) | 2010-02-28 | 2016-06-14 | Microsoft Technology Licensing, Llc | System and method for delivering content to a group of see-through near eye display eyepieces |
US9097890B2 (en) | 2010-02-28 | 2015-08-04 | Microsoft Technology Licensing, Llc | Grating in a light transmissive illumination system for see-through near-eye display glasses |
US9759917B2 (en) | 2010-02-28 | 2017-09-12 | Microsoft Technology Licensing, Llc | AR glasses with event and sensor triggered AR eyepiece interface to external devices |
EP2539759A1 (en) | 2010-02-28 | 2013-01-02 | Osterhout Group, Inc. | Local advertising content on an interactive head-mounted eyepiece |
US20150309316A1 (en) | 2011-04-06 | 2015-10-29 | Microsoft Technology Licensing, Llc | Ar glasses with predictive control of external device based on event input |
US10180572B2 (en) | 2010-02-28 | 2019-01-15 | Microsoft Technology Licensing, Llc | AR glasses with event and user action control of external applications |
US9134534B2 (en) | 2010-02-28 | 2015-09-15 | Microsoft Technology Licensing, Llc | See-through near-eye display glasses including a modular image source |
US9129295B2 (en) | 2010-02-28 | 2015-09-08 | Microsoft Technology Licensing, Llc | See-through near-eye display glasses with a fast response photochromic film system for quick transition from dark to clear |
US8467133B2 (en) | 2010-02-28 | 2013-06-18 | Osterhout Group, Inc. | See-through display with an optical assembly including a wedge-shaped illumination system |
US8488246B2 (en) | 2010-02-28 | 2013-07-16 | Osterhout Group, Inc. | See-through near-eye display glasses including a curved polarizing film in the image source, a partially reflective, partially transmitting optical element and an optically flat film |
US8482859B2 (en) | 2010-02-28 | 2013-07-09 | Osterhout Group, Inc. | See-through near-eye display glasses wherein image light is transmitted to and reflected from an optically flat film |
US9341843B2 (en) | 2010-02-28 | 2016-05-17 | Microsoft Technology Licensing, Llc | See-through near-eye display glasses with a small scale image source |
US9091851B2 (en) | 2010-02-28 | 2015-07-28 | Microsoft Technology Licensing, Llc | Light control in head mounted displays |
US8472120B2 (en) | 2010-02-28 | 2013-06-25 | Osterhout Group, Inc. | See-through near-eye display glasses with a small scale image source |
US9182596B2 (en) | 2010-02-28 | 2015-11-10 | Microsoft Technology Licensing, Llc | See-through near-eye display glasses with the optical assembly including absorptive polarizers or anti-reflective coatings to reduce stray light |
US8477425B2 (en) | 2010-02-28 | 2013-07-02 | Osterhout Group, Inc. | See-through near-eye display glasses including a partially reflective, partially transmitting optical element |
US9223134B2 (en) | 2010-02-28 | 2015-12-29 | Microsoft Technology Licensing, Llc | Optical imperfections in a light transmissive illumination system for see-through near-eye display glasses |
US9229227B2 (en) | 2010-02-28 | 2016-01-05 | Microsoft Technology Licensing, Llc | See-through near-eye display glasses with a light transmissive wedge shaped illumination system |
US9128281B2 (en) | 2010-09-14 | 2015-09-08 | Microsoft Technology Licensing, Llc | Eyepiece with uniformly illuminated reflective display |
US9097891B2 (en) | 2010-02-28 | 2015-08-04 | Microsoft Technology Licensing, Llc | See-through near-eye display glasses including an auto-brightness control for the display brightness based on the brightness in the environment |
WO2012123033A1 (de) * | 2011-03-17 | 2012-09-20 | Ssi Schaefer Noell Gmbh Lager Und Systemtechnik | Steuerung und überwachung einer lager- und kommissionieranlage durch bewegung und sprache |
US8179604B1 (en) | 2011-07-13 | 2012-05-15 | Google Inc. | Wearable marker for passive interaction |
US20130089237A1 (en) * | 2011-10-10 | 2013-04-11 | Invisage Technologies, Inc. | Sensors and systems for the capture of scenes and events in space and time |
US9646200B2 (en) | 2012-06-08 | 2017-05-09 | Qualcomm Incorporated | Fast pose detector |
KR102135355B1 (ko) * | 2012-10-23 | 2020-07-17 | 엘지전자 주식회사 | 영상표시장치 및 그 제어방법 |
US9600077B2 (en) | 2012-10-23 | 2017-03-21 | Lg Electronics Inc. | Image display device and method for controlling same |
WO2014093334A2 (en) | 2012-12-10 | 2014-06-19 | Invisage Technologies, Inc. | Capture of scenes and events in space and time |
US9692968B2 (en) | 2014-07-31 | 2017-06-27 | Invisage Technologies, Inc. | Multi-mode power-efficient light and gesture sensing in image sensors |
WO2017089910A1 (en) | 2015-11-27 | 2017-06-01 | Nz Technologies Inc. | Method and system for interacting with medical information |
CN109408653B (zh) * | 2018-09-30 | 2022-01-28 | 叠境数字科技(上海)有限公司 | 基于多特征检索和形变的人体发型生成方法 |
CN109614899B (zh) * | 2018-11-29 | 2022-07-01 | 重庆邮电大学 | 一种基于李群特征和卷积神经网络的人体动作识别方法 |
KR102057448B1 (ko) | 2018-12-28 | 2019-12-20 | (주)웨이버스 | 3차원 입체 격자 기반 지리정보체계 데이터 변환 시스템 |
US11064096B2 (en) * | 2019-12-13 | 2021-07-13 | Sony Corporation | Filtering and smoothing sources in camera tracking |
CN111368720A (zh) * | 2020-03-03 | 2020-07-03 | 瀚颐(上海)汽车电子科技有限公司 | 一种自动搬运取货***及方法 |
US11709553B2 (en) | 2021-02-25 | 2023-07-25 | International Business Machines Corporation | Automated prediction of a location of an object using machine learning |
CN116070601B (zh) * | 2023-03-28 | 2023-06-13 | 联仁健康医疗大数据科技股份有限公司 | 数据拼接方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060187196A1 (en) * | 2005-02-08 | 2006-08-24 | Underkoffler John S | System and method for gesture based control system |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6501515B1 (en) * | 1998-10-13 | 2002-12-31 | Sony Corporation | Remote control system |
US7680295B2 (en) * | 2001-09-17 | 2010-03-16 | National Institute Of Advanced Industrial Science And Technology | Hand-gesture based interface apparatus |
US20080065291A1 (en) * | 2002-11-04 | 2008-03-13 | Automotive Technologies International, Inc. | Gesture-Based Control of Vehicular Components |
US7761814B2 (en) * | 2004-09-13 | 2010-07-20 | Microsoft Corporation | Flick gesture |
JP2009042796A (ja) * | 2005-11-25 | 2009-02-26 | Panasonic Corp | ジェスチャー入力装置および方法 |
WO2008134745A1 (en) * | 2007-04-30 | 2008-11-06 | Gesturetek, Inc. | Mobile video-based therapy |
-
2010
- 2010-05-04 KR KR1020117029041A patent/KR101821418B1/ko active IP Right Grant
- 2010-05-04 JP JP2012509917A patent/JP5698733B2/ja not_active Expired - Fee Related
- 2010-05-04 EP EP10772727.3A patent/EP2427857B1/en not_active Not-in-force
- 2010-05-04 WO PCT/US2010/033613 patent/WO2010129599A1/en active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060187196A1 (en) * | 2005-02-08 | 2006-08-24 | Underkoffler John S | System and method for gesture based control system |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11107236B2 (en) | 2019-04-22 | 2021-08-31 | Dag Michael Peter Hansson | Projected augmented reality interface with pose tracking for directing manual processes |
Also Published As
Publication number | Publication date |
---|---|
KR20120034637A (ko) | 2012-04-12 |
EP2427857A4 (en) | 2012-12-26 |
JP2012526328A (ja) | 2012-10-25 |
EP2427857A1 (en) | 2012-03-14 |
CN102804206A (zh) | 2012-11-28 |
WO2010129599A1 (en) | 2010-11-11 |
JP5698733B2 (ja) | 2015-04-08 |
EP2427857B1 (en) | 2016-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101821418B1 (ko) | 데이터의 표현, 조작 및 교환을 포함하는 제스처-기반 시스템 | |
US10521021B2 (en) | Detecting, representing, and interpreting three-space input: gestural continuum subsuming freespace, proximal, and surface-contact modes | |
US9495013B2 (en) | Multi-modal gestural interface | |
US8681098B2 (en) | Detecting, representing, and interpreting three-space input: gestural continuum subsuming freespace, proximal, and surface-contact modes | |
KR101649769B1 (ko) | 멀티-프로세스 대화형 시스템 및 방법 | |
US10565030B2 (en) | Multi-process interactive systems and methods | |
US8941588B2 (en) | Fast fingertip detection for initializing a vision-based hand tracker | |
US9063801B2 (en) | Multi-process interactive systems and methods | |
US10990454B2 (en) | Multi-process interactive systems and methods | |
US9933852B2 (en) | Multi-process interactive systems and methods | |
JP2015525381A (ja) | 相互ユーザ手追跡および形状認識ユーザ・インターフェース | |
CN102804206B (zh) | 包括数据表示、操作和交换的基于姿势的控制*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
GRNT | Written decision to grant |