Kenley	
  Cheung	
  
Rensselaer	
  Center	
  for	
  Open	
  Source	
  
               So6ware	
  
Introduc:on	
  
•  Concerto	
  is	
  an	
  open	
  source	
  digital	
  signage	
  
   system	
  used	
  here	
  at	
  RPI.	
  
•  Concerto	
  has	
  operates	
  on	
  a	
  client-­‐server	
  
   model.	
  
    –  Clients	
  (Concerto	
  Player	
  instances)	
  download	
  
       content	
  from	
  the	
  content	
  server	
  and	
  display	
  
       them.	
  
    –  Concerto	
  Player	
  currently	
  displays	
  content	
  in	
  a	
  
       carousel-­‐like	
  fashion.	
  
    –  No	
  interac:vity	
  with	
  the	
  viewer.	
  
Introduc:on	
  
•  Concerto	
  Con	
  Moto	
  makes	
  digital	
  signage	
  more	
  
   interac:ve	
  with	
  mo:on!	
  
    –  Con	
  moto	
  means	
  “with	
  mo:on”	
  
    –  Keeping	
  with	
  the	
  use	
  music	
  terminolog,	
  it’s	
  an	
  appropriate	
  
       name	
  for	
  a	
  product.	
  
•  Con	
  Moto	
  u:lizes	
  the	
  Xbox	
  Kinect	
  to	
  deliver	
  gesture	
  
   detec:on	
  and	
  recogni:on.	
  
    –  U:lizes	
  three	
  open-­‐source	
  libraries	
  
         •  Libfreenect	
  –	
  open-­‐source,	
  cross-­‐plaRorm	
  libusb-­‐based	
  driver	
  for	
  
            the	
  Kinect.	
  
         •  OpenCV	
  –	
  open-­‐source	
  computer	
  vision	
  library	
  
         •  DepthJS	
  –	
  open-­‐source	
  Kinect-­‐JavaScript	
  bridge	
  with	
  u:lizing	
  a	
  
            built-­‐in	
  gesture	
  detec:on	
  engine	
  
What’s	
  been	
  done	
  so	
  far?	
  
What’s	
  been	
  done	
  so	
  far?	
  
•  Numerous	
  DepthJS	
  enhancements	
  and	
  fixes	
  
     –  Research	
  project	
  at	
  MIT	
  Media	
  Lab.	
  
     –  Upstream	
  code	
  didn’t	
  work.	
  Needed	
  a	
  lot	
  of	
  tender	
  loving	
  care	
  to	
  get	
  it	
  
        working!	
  
     –  Theore:cal	
  support	
  for	
  Linux.	
  
            •  “It	
  should	
  work,	
  but	
  we	
  haven’t	
  tested	
  it	
  in	
  a	
  while.”	
  
     –  Needed	
  several	
  modifica:ons	
  in	
  order	
  to	
  work	
  
            •  Created	
  Linux	
  build	
  script	
  
            •  Rewrote	
  parts	
  of	
  the	
  code	
  to	
  work	
  against	
  a	
  new	
  libfreenect	
  (Kinect	
  driver)	
  API	
  (fun!)	
  
                     –  Received	
  assistance	
  from	
  the	
  #OpenKinect	
  channel	
  on	
  FreeNode.	
  
            •  Learned	
  how	
  to	
  build	
  shared	
  libraries	
  on	
  Linux	
  (even	
  more	
  fun!)	
  
                     –  Learned	
  how	
  the	
  compiler	
  works	
  to	
  produce	
  shared	
  libraries.	
  
                     –  Sta:cally	
  linked	
  libfreenect	
  and	
  OpenCV	
  -­‐	
  allows	
  us	
  to	
  distribute	
  DepthJS	
  binaries	
  with	
  no	
  
                        addi:onal	
  dependencies!	
  
            •  Modified	
  Chrome	
  extension	
  to	
  detect	
  and	
  load	
  the	
  appropriate	
  shared	
  library	
  for	
  a	
  
               supported	
  plaRorm.	
  
            •  Fixed	
  bug	
  where	
  hand	
  gesture	
  events	
  were	
  not	
  being	
  triggering	
  JavaScript	
  events.	
  
What’s	
  been	
  done	
  so	
  far?	
  
•  Framework	
  for	
  Concerto	
  Con	
  Moto	
  	
  
   –  LiveUSB	
  +	
  Chromium	
  +	
  Packaged	
  Chrome	
  
      Applica:on	
  
   –  Concerto	
  Player	
  replacement	
  
       •  No	
  longer	
  requires	
  internet	
  connec:on	
  to	
  ini:alize.	
  
       •  Classic	
  exponen:al	
  back-­‐off	
  when	
  network	
  disrup:ons	
  
          occur.	
  
       •  Skeleton	
  code	
  for	
  con	
  moto	
  overlay	
  checked	
  in.	
  
       •  UI	
  mockup	
  of	
  Concerto	
  con	
  moto	
  overlay	
  
What’s	
  in	
  store…	
  
•  Concerto	
  Player	
  configura:on	
  
   –  Powered	
  by	
  HTML5	
  localStorage	
  
   –  Set	
  Concerto	
  server	
  endpoint	
  
       •  Not	
  all	
  Concerto	
  users	
  are	
  at	
  RPI	
  
       •  One-­‐size-­‐fits-­‐all	
  Concerto	
  Player	
  –	
  No	
  need	
  to	
  generate	
  
          new	
  disk	
  images	
  
   –  Choice	
  between	
  overlay	
  or	
  simple	
  control	
  of	
  
      screen	
  content	
  
•  Integra:on	
  with	
  exis:ng	
  Concerto	
  screen.js	
  
   and	
  Concerto	
  client	
  infrastructure	
  
What’s	
  in	
  store…	
  
•  Demo	
  :me!	
  

Concerto conmoto

  • 1.
    Kenley  Cheung   Rensselaer  Center  for  Open  Source   So6ware  
  • 2.
    Introduc:on   •  Concerto  is  an  open  source  digital  signage   system  used  here  at  RPI.   •  Concerto  has  operates  on  a  client-­‐server   model.   –  Clients  (Concerto  Player  instances)  download   content  from  the  content  server  and  display   them.   –  Concerto  Player  currently  displays  content  in  a   carousel-­‐like  fashion.   –  No  interac:vity  with  the  viewer.  
  • 3.
    Introduc:on   •  Concerto  Con  Moto  makes  digital  signage  more   interac:ve  with  mo:on!   –  Con  moto  means  “with  mo:on”   –  Keeping  with  the  use  music  terminolog,  it’s  an  appropriate   name  for  a  product.   •  Con  Moto  u:lizes  the  Xbox  Kinect  to  deliver  gesture   detec:on  and  recogni:on.   –  U:lizes  three  open-­‐source  libraries   •  Libfreenect  –  open-­‐source,  cross-­‐plaRorm  libusb-­‐based  driver  for   the  Kinect.   •  OpenCV  –  open-­‐source  computer  vision  library   •  DepthJS  –  open-­‐source  Kinect-­‐JavaScript  bridge  with  u:lizing  a   built-­‐in  gesture  detec:on  engine  
  • 4.
  • 5.
    What’s  been  done  so  far?   •  Numerous  DepthJS  enhancements  and  fixes   –  Research  project  at  MIT  Media  Lab.   –  Upstream  code  didn’t  work.  Needed  a  lot  of  tender  loving  care  to  get  it   working!   –  Theore:cal  support  for  Linux.   •  “It  should  work,  but  we  haven’t  tested  it  in  a  while.”   –  Needed  several  modifica:ons  in  order  to  work   •  Created  Linux  build  script   •  Rewrote  parts  of  the  code  to  work  against  a  new  libfreenect  (Kinect  driver)  API  (fun!)   –  Received  assistance  from  the  #OpenKinect  channel  on  FreeNode.   •  Learned  how  to  build  shared  libraries  on  Linux  (even  more  fun!)   –  Learned  how  the  compiler  works  to  produce  shared  libraries.   –  Sta:cally  linked  libfreenect  and  OpenCV  -­‐  allows  us  to  distribute  DepthJS  binaries  with  no   addi:onal  dependencies!   •  Modified  Chrome  extension  to  detect  and  load  the  appropriate  shared  library  for  a   supported  plaRorm.   •  Fixed  bug  where  hand  gesture  events  were  not  being  triggering  JavaScript  events.  
  • 6.
    What’s  been  done  so  far?   •  Framework  for  Concerto  Con  Moto     –  LiveUSB  +  Chromium  +  Packaged  Chrome   Applica:on   –  Concerto  Player  replacement   •  No  longer  requires  internet  connec:on  to  ini:alize.   •  Classic  exponen:al  back-­‐off  when  network  disrup:ons   occur.   •  Skeleton  code  for  con  moto  overlay  checked  in.   •  UI  mockup  of  Concerto  con  moto  overlay  
  • 7.
    What’s  in  store…   •  Concerto  Player  configura:on   –  Powered  by  HTML5  localStorage   –  Set  Concerto  server  endpoint   •  Not  all  Concerto  users  are  at  RPI   •  One-­‐size-­‐fits-­‐all  Concerto  Player  –  No  need  to  generate   new  disk  images   –  Choice  between  overlay  or  simple  control  of   screen  content   •  Integra:on  with  exis:ng  Concerto  screen.js   and  Concerto  client  infrastructure  
  • 8.
    What’s  in  store…   •  Demo  :me!