UsbCam.py
Go to the documentation of this file.
00001 import shlex
00002 import subprocess
00003 import re
00004 
00005 __author__ = 'tom1231'
00006 from PyQt4.QtCore import QUrl
00007 from PyQt4.QtGui import *
00008 from BAL.Interface.DeviceFrame import DeviceFrame, EX_DEV, USBCAM
00009 from lxml.etree import Element, SubElement, XML
00010 
00011 
00012 class UsbCam(DeviceFrame):
00013 
00014     def __init__(self, frame, data):
00015         DeviceFrame.__init__(self, EX_DEV, frame, data)
00016         self._name = 'RiC_CAM'
00017         self._output = 'screen'
00018         self._respawn = 'true'
00019         self._videoDevice = '/dev/video0'
00020         self._frameId = 'Head_Camera'
00021         self._format = 'yuyv'
00022         self._width = '640'
00023         self._height = '480'
00024 
00025     def fromDict(self, data):
00026         self._name = data['name']
00027         self._output = data['output']
00028         self._respawn = data['respawn']
00029         self._videoDevice = data['videoDevice']
00030         self._frameId = data['frameId']
00031         self._format = data['format']
00032         self._width = data['width']
00033         self._height = data['height']
00034         index = self._videoDevice.find('/dev/')
00035         if index != -1:
00036             self._videoDevice = self._videoDevice[index + 5:]
00037 
00038     def toDict(self):
00039         data = dict()
00040 
00041         data['type'] = USBCAM
00042         data['name'] = self._name
00043         data['output'] = self._output
00044         data['respawn'] = self._respawn
00045         data['videoDevice'] = self._videoDevice
00046         data['frameId'] = self._frameId
00047         data['format'] = self._format
00048         data['width'] = self._width
00049         data['height'] = self._height
00050 
00051         return data
00052 
00053     def printDetails(self):
00054         self._frame.layout().addRow(QLabel('name: '), QLabel(self._name))
00055         self._frame.layout().addRow(QLabel('Output: '), QLabel(self._output))
00056         self._frame.layout().addRow(QLabel('Respawn: '), QLabel(self._respawn))
00057         self._frame.layout().addRow(QLabel('Video device: '), QLabel(self._videoDevice))
00058         self._frame.layout().addRow(QLabel('Frame id: '), QLabel(self._frameId))
00059         self._frame.layout().addRow(QLabel('Pixel format: '), QLabel(self._format))
00060         self._frame.layout().addRow(QLabel('Image width: '), QLabel(self._width))
00061         self._frame.layout().addRow(QLabel('Image height: '), QLabel(self._height))
00062 
00063     def getName(self):
00064         return self._name
00065 
00066     def findItem(self):
00067         for i in xrange(self.videoDevice.count()):
00068             if self._videoDevice == str(self.videoDevice.itemText(i)):
00069                 return i
00070         return -1
00071 
00072     def showDetails(self, items=None):
00073         self.name = QLineEdit(self._name)
00074         self.output = QLineEdit(self._output)
00075         self.respawn = QLineEdit(self._respawn)
00076         self.videoDevice = QComboBox()
00077         self.frameId = QLineEdit(self._frameId)
00078         self.format = QLineEdit(self._format)
00079         self.width = QLineEdit(self._width)
00080         self.height = QLineEdit(self._height)
00081 
00082         allDev = subprocess.check_output(shlex.split("ls /dev"))
00083         videoDevs = re.findall('video.*', allDev)
00084 
00085         self.videoDevice.addItems(videoDevs)
00086         index = self.findItem()
00087         if index != -1: self.videoDevice.setCurrentIndex(index)
00088 
00089         link = QLabel("<a href = http://wiki.ros.org/usb_cam> Usb Camera Wiki </a>")
00090         link.linkActivated.connect(self.onLink)
00091 
00092         self._frame.layout().addRow(QLabel('name: '), self.name)
00093         self._frame.layout().addRow(QLabel('Output: '), self.output)
00094         self._frame.layout().addRow(QLabel('Respawn: '), self.respawn)
00095         self._frame.layout().addRow(QLabel('Video device: '), self.videoDevice)
00096         self._frame.layout().addRow(QLabel('Frame id: '), self.frameId)
00097         self._frame.layout().addRow(QLabel('Pixel format: '), self.format)
00098         self._frame.layout().addRow(QLabel('Image width: '), self.width)
00099         self._frame.layout().addRow(QLabel('Image height: '), self.height)
00100         self._frame.layout().addRow(QLabel('More information: '), link)
00101 
00102     def onLink(self, URL):
00103         QDesktopServices().openUrl(QUrl(URL))
00104 
00105     def add(self):
00106         old = self._name
00107         self._name = str(self.name.text())
00108 
00109         if not self.nameIsValid():
00110             error = QErrorMessage()
00111             error.setWindowTitle("Same name error")
00112             error.showMessage("Name already taken.")
00113             error.exec_()
00114             self._name = old
00115             self._isValid = False
00116             return
00117 
00118         self._isValid = True
00119         self._name = str(self.name.text())
00120         self._output = str(self.output.text())
00121         self._respawn = str(self.respawn.text())
00122         self._videoDevice = str(self.videoDevice.currentText())
00123         self._format = str(self.format.text())
00124         self._frameId = str(self.frameId.text())
00125         self._width = str(self.width.text())
00126         self._height = str(self.height.text())
00127 
00128     def saveToFile(self, parent):
00129             nodeAt = {
00130                 'pkg': 'usb_cam',
00131                 'name': self._name,
00132                 'output': self._output,
00133                 'respawn': self._respawn,
00134                 'type': 'usb_cam_node'
00135             }
00136             element = SubElement(parent, 'node', nodeAt)
00137             SubElement(element, 'param', {
00138                 'name': 'video_device',
00139                 'value': '/dev/%s' % self._videoDevice
00140             })
00141             SubElement(element, 'param', {
00142                 'name': 'camera_frame_id',
00143                 'value': self._frameId
00144             })
00145             SubElement(element, 'param', {
00146                 'name': 'pixel_format',
00147                 'value': self._format
00148             })
00149             SubElement(element, 'param', {
00150                 'name': 'image_width',
00151                 'value': self._width
00152             })
00153             SubElement(element, 'param', {
00154                 'name': 'image_height',
00155                 'value': self._height
00156             })


ric_board
Author(s): RoboTiCan
autogenerated on Fri Oct 27 2017 03:02:31