$30 off During Our Annual Pro Sale. View Details »

Perl meets Leap Motion

akiym
August 31, 2013

Perl meets Leap Motion

Hokkaido.pm #10

akiym

August 31, 2013
Tweet

More Decks by akiym

Other Decks in Technology

Transcript

  1. 1FSMNFFUT
    -FBQ.PUJPO
    !BLJZN
    )PLLBJEPQN

    View Slide

  2. NF
    w!BLJZN
    wେֶੜ
    wઌ೔ηΩϡϦςΟΩϟϯϓʹࢀՃ
    ͖ͯ͠·ͨ͠
    w:"1$"TJBͰ͸ʮ)FSPLVͰֶͿɺॳΊ
    ͯͷ1FSMʯͱ͍͏࿩Λ͠·͢

    View Slide

  3. ࠷ۙ͸͜Μͳ΋ͷΛ
    ࡞ͬͯ·͢

    View Slide

  4. DUGLBUTVEPOPSH

    View Slide

  5. -FBQ.PUJPO
    w࣍ੈ୅σόΠε
    wखͷͻΒɺࢦΛࡉ͔͘ೝࣝ
    w8FC4PDLFUͰσʔλΛऔͬͯ͘Δ͜ͱ
    ͕Ͱ͖Δ

    View Slide

  6. 1FSM͔Β-FBQ.PUJPOΛѻ͏

    View Slide

  7. %FWJDF-FBQ
    wIUUQTNFUBDQBOPSHNPEVMF
    %FWJDF-FBQ
    wͱΓ͋͑ͣॻ͍ͨײ
    wδΣενϟʔ͕औΕͳ͍

    View Slide

  8. my($LEAP_HANDLE); # After connection, this contains our websocket handle
    my($SEND); # Data to send, when other end is ready for it
    my($BUFF)=''; # Buffer in case calling script misses a few events
    sub Leap {
    my $ret;
    if($BUFF eq '') { # Nothing in the buffer - try to get some more
    unless($LEAP_HANDLE) { # Establish a new connection
    # Make the socket
    socket($LEAP_HANDLE, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || return (\{'error' => "socket: $!"});
    # Don't let stuff like UTF-style characters get screwed up
    binmode($LEAP_HANDLE) || return (\{'error' =>,"binmode(socket
    handle): $!"});
    # Allow more than one connection
    setsockopt($LEAP_HANDLE, SOL_SOCKET, SO_REUSEADDR, 1) || return (\{'error' =>,"SO_REUSEADDR:
    $!"});
    # Don't block on close (Remember not to close it until we've sent everything we want):-
    if($^O =~/Win32/i) {
    setsockopt($LEAP_HANDLE, SOL_SOCKET, SO_DONTLINGER, 1) || return (\{'error' =>,"SO_DONTLINGER:
    $!"});
    }
    vec($bitsr,fileno($LEAP_HANDLE),1)=1; # This tells select() which socket we want to query
    vec($null,fileno($LEAP_HANDLE),1)=0;
    if(defined $SEND) {$bitsw=$bitsr} else {$bitsw=$null} # We only care about write-status if we've got data to write

    View Slide

  9. use Device::Leap;
    while(1) {
    $d=&Leap();
    next unless(ref $d); # no new data
    print $d->{hands}->[0]->{sphereRadius} . "\n"; # print some
    }

    View Slide


  10. View Slide

  11. wॻ͖௚ͨ͠
    w"OZ&WFOU-FBQ.PUJPO
    wͨͩ8FC4PDLFUͰ௨৴͍ͯ͠Δ͚ͩ

    View Slide

  12. my $leap = AnyEvent::LeapMotion->new(
    enable_gesture => 1,
    on_frame => sub {
    my $frame = shift;
    ...
    },
    );
    $leap->run;
    AE::cv->recv;

    View Slide


  13. BJSQPJOUFS

    View Slide

  14. wϚ΢ε
    w049ͰϚ΢εΛίϯτϩʔϧ͢Δํ๏
    w8JOEPXTͳΒ8JO(VJ5FTU
    w049ͳΒʜʁ

    View Slide

  15. ॻ͍ͨ ͪΐͬͱ͚ͩ

    View Slide

  16. $PDPB(VJ5FTU
    wΈΜͳେ޷͖$PDPBϞδϡʔϧ
    wϚ΢εΛಈ͔͢ɺΩʔೖྗ
    wෆ҆ఆ

    View Slide

  17. $PDPB(VJ5FTUͷσϞ
    wςΩετΤσΟλ Ωʔૢ࡞

    w೾
    wάϧάϧඳ͘

    View Slide

  18. ·ͱΊ
    w1FSM͔Β-FBQ.PUJPOΛѻͬͯΈ·ͨ͠
    wເɺ޿͕ͬͯ·͢
    w$PDPBϞδϡʔϧ͕·ͩ·ͩগͳ͍

    View Slide