Control Logitech Camera & Simulate Key Press


/ Published in: Python
Save to your folder(s)



Copy this code and paste it in your HTML
  1. #!/usr/bin/python
  2. from SimpleXMLRPCServer import SimpleXMLRPCServer
  3. import subprocess as subp
  4. import lpantilt
  5. import time
  6. import socket
  7. import thread
  8.  
  9. from ctypes import cdll
  10.  
  11. class Dir :
  12. UP = "UP>"
  13. DOWN = "DOWN>"
  14. LEFT = "LEFT>"
  15. RIGHT = "RIGHT>"
  16. RESET = "RESET>"
  17.  
  18.  
  19. class KeySimulator :
  20. PRESS_UP = 0
  21. PRESS_DOWN = 1
  22. PRESS_LEFT = 2
  23. PRESS_RIGHT = 3
  24. PRESS_ENTER = 4
  25. PRESS_ESC = 5
  26. PRESS_HOME = 6
  27.  
  28. def __init__(self):
  29. self.lib = cdll.LoadLibrary("./lib/Util_KeyPressSimulator.so")
  30.  
  31. def simPress(self, key):
  32. if key == "UP" :
  33. self.lib.press(self.PRESS_UP)
  34. elif key == "DOWN" :
  35. self.lib.press(self.PRESS_DOWN)
  36. elif key == "LEFT" :
  37. self.lib.press(self.PRESS_LEFT)
  38. elif key == "RIGHT" :
  39. self.lib.press(self.PRESS_RIGHT)
  40. elif key == "HOME" :
  41. self.lib.press(self.PRESS_HOME)
  42. elif key == "B" :
  43. self.lib.press(self.PRESS_ESC)
  44. elif key == "A" :
  45. self.lib.press(self.PRESS_ENTER)
  46.  
  47. print "simulating " + key
  48.  
  49. class CameraControl :
  50. def __init__(self):
  51. self.lpt = lpantilt.Lpantilt("/dev/video0")
  52. self.stop = False
  53. self.key_simulator = KeySimulator()
  54.  
  55. def move(self, drt):
  56. self.stop = False
  57. if drt == Dir.UP :
  58. thread.start_new_thread(self.startTilt,(0,-2))
  59. elif drt == Dir.DOWN:
  60. thread.start_new_thread(self.startTilt,(0,2))
  61. elif drt == Dir.LEFT :
  62. thread.start_new_thread(self.startTilt,(-2,0))
  63. elif drt == Dir.RIGHT :
  64. thread.start_new_thread(self.startTilt ,(2,0))
  65. elif drt == Dir.RESET :
  66. self.lpt.reset()
  67. else :
  68. self.stopMove()
  69.  
  70.  
  71. def startTilt(self, pan, tilt):
  72. while not self.stop :
  73. self.lpt.pantilt(pan, tilt)
  74. print "tilt ..."
  75.  
  76. def startPan(self, pan):
  77. while not self.stop :
  78. self.lpt.pan(pan)
  79. print "panning ..."
  80.  
  81. def stopMove(self):
  82. self.stop = True
  83. print "stop..."
  84.  
  85.  
  86. def updateState(self, state):
  87. print "new state = ", state
  88.  
  89. if state == "B-UP" :
  90. self.move(Dir.UP)
  91. elif state == "B-DOWN" :
  92. self.move(Dir.DOWN)
  93. elif state == "B-LEFT" :
  94. self.move(Dir.LEFT)
  95. elif state == "B-RIGHT" :
  96. self.move(Dir.RIGHT)
  97. elif state == "B-A" :
  98. self.move(Dir.RESET)
  99. else :
  100. print "else state " + state
  101. self.key_simulator.simPress(state)
  102. self.move(state)
  103.  
  104. if __name__ == "__main__" :
  105. c = CameraControl()
  106. server = SimpleXMLRPCServer( ("localhost", 9191) )
  107. server.register_function(c.updateState)
  108.  
  109. print "service start @localhost 9191 forever"
  110. server.serve_forever()

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.