Code :
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys,cv from PyQt4.QtCore import * # Moteur contrôle Qt from PyQt4.QtGui import * # IHM Qt #variables d'initialisation min_size = (30, 30) image_scale = 4 haar_scale = 1.2 min_neighbors = 1 haar_flags = 0 global detection detection = False def modif_video(frame,bool): class IplQImage(QImage): class VideoWidget(QWidget): """ A class for rendering video coming from OpenCV """ def __init__(self, parent=None): QWidget.__init__(self) self._capture = cv.CreateCameraCapture(0) # Take one frame to query height frame = cv.QueryFrame(self._capture) self.setMinimumSize(frame.width, frame.height) self.setMaximumSize(self.minimumSize()) self._frame = None self._image = self._build_image(frame,bool) # Paint every 50 ms self._timer = QTimer(self) self._timer.timeout.connect(self.queryFrame) self._timer.start(50) def _build_image(self, frame,bool): if not self._frame: self._frame = cv.CreateImage((frame.width, frame.height), cv.IPL_DEPTH_8U, frame.nChannels) if frame.origin == cv.IPL_ORIGIN_TL: cv.Copy(frame, self._frame) else: cv.Flip(frame, self._frame, 0) modif_video(frame,bool) return IplQImage(self._frame) def paintEvent(self, event): painter = QPainter(self) painter.drawImage(QPoint(0, 0), self._image) def queryFrame(self): frame = cv.QueryFrame(self._capture) self._image = self._build_image(frame,bool) self.update() class QtAppli( QApplication): # Objet hérité "Fenêtre de l'application" # Constructeur fenêtre def __init__( self, # Instance objet argv, # Arguments programme transFile=None): # Fichier de traduction # Message de contrôle print "Python version %s - QtAppli (qt v%s, pyqt_v%s)" % ( sys.version, QT_VERSION_STR, PYQT_VERSION_STR ) # Appel constructeur de l'objet hértié QApplication.__init__(self, argv) # Translations if transFile != None: self.__trans=QTranslator() self.installTranslator(self.__trans) self.__trans.load(transFile) #if # Environnement ihm self.ihm={} self.ihm["appli"]=self self.ihm["self"]=self # Widget principale self.mainWid=QMainWindow() self.mainWid.setCentralWidget(QWidget(self.mainWid)) self.mainWid.statusBar() # Titre self.mainWid.setWindowTitle( QApplication.translate( "VerifQt", "Exemple Qt (v%1)", "Note: titre de la fenêtre", QApplication.UnicodeUTF8, ).arg(QString.fromUtf8(QT_VERSION_STR)) ) # Le bouton webcam btn=QPushButton( QApplication.translate( "VerifQt", "Webcam", "Note: titre du bouton", QApplication.UnicodeUTF8, ), self.mainWid.centralWidget() ) self.connect( btn, SIGNAL("clicked()" ), self.__slotWebcam, ) # Le bouton détection btnd=QPushButton( QApplication.translate( "VerifQt", "Modification", "Note: titre du bouton", QApplication.UnicodeUTF8, ), self.mainWid.centralWidget() ) self.connect( btnd, SIGNAL("clicked()" ), self.__slotmodif, ) # Pour quitter quit=QPushButton( QApplication.translate( "VerifQt", "Quitter", "Note: titre du bouton", QApplication.UnicodeUTF8, ) ) self.connect( quit, SIGNAL("clicked()" ), self.mainWid, SLOT("close()" ), ) # La fenêtre webcam self.webcam=QtWebcam(self.ihm) self.webcam.setVisible(False) # Rangement des éléments mainLayout=QGridLayout(self.mainWid.centralWidget()) mainLayout.addWidget(self.webcam, 0, 0, 3, 1) mainLayout.addWidget(btn, 0, 1) mainLayout.addWidget(btnd, 1, 1) mainLayout.addWidget(quit, 2, 1) # __init__() # Affichage et lancement application def run( self): # Instance objet self.mainWid.show() self.exec_() # run() # Slot qui affiche la fenêtre webcam def __slotWebcam( self): # Instance objet print "%s.__slotWebcam" % self.__class__.__name__ # Affichage/Masquage sous-fenêtre self.webcam.setVisible(not self.webcam.isVisible()) # __slotWebcam() def __slotmodif( self): modifvid(True) # __slotQt() # class QtAppli # Objet de fenêtre associée à la webcam class QtWebcam( QWidget): # Objet hérité "Fenêtre de l'application" # Constructeur fenêtre def __init__( self, # Instance objet ihm): # Environnement ihm # Récupération environnement ihm self.ihm=dict(ihm) # Environnement ihm self.ihm["mainWid"]=self self.ihm["self"]=self # Appel constructeur de l'objet hérité QWidget.__init__(self) # Eléments self.__video=VideoWidget(self) btn=QPushButton( QApplication.translate( "VerifQt", "add text", "Note: texte du bouton", QApplication.UnicodeUTF8, ) ) self.connect( btn, SIGNAL("clicked()" ), self.__modifvid, ) # Rangement de la sous-fenêtre mainLayout=QVBoxLayout(self) mainLayout.setMargin(0) mainLayout.setSpacing(0) mainLayout.addWidget(self.__video) mainLayout.addWidget(btn) #======================================================================= self.__video.setVisible(True) # __init__() # Slot activé lors de l'appel sur le bouton def __modifvid(self): bool = True self.__video._build_image(self.__video._frame, bool) # __slotAction() # class QtWebcam def modifvid(booleen): if booleen == True: Appli.webcam.__video._build_image(frame, True) if __name__ == "__main__": # Lancement appli Appli=QtAppli(sys.argv, "verifqt_en" ) Appli.run() # if
|