2016-06-17 6 views
-1

Вот скрипт установки py2exe:Невозможно выполнить рендеринг видео, загружаемых через OpenCV в PyQt4 gui, на другой компьютер через автономный исполняемый файл python. не дает никаких ошибок не делает ничего

from setuptools import setup 
import py2exe 
from glob import glob 
import numpy 
import sys 
import cv2 

SETUP_DICT = { 
'windows': [{ 
    'script': 'C:\\Users\\Codemen1\\Documents\\Python Scripts\\video.py', 
}], 

'zipfile': 'lib/library.zip', 

'data_files': (
    ('', glob(r'C:\Windows\SYSTEM32\msvcp100.dll')), 
    ('', glob(r'C:\Windows\SYSTEM32\msvcr100.dll')), 
), 

'options': { 
    'py2exe': { 
     'bundle_files': 3, 
     #'bundle_files': 1, 
     #'packages': 'cv2', 
     'includes': ['sip', 'PyQt4.QtCore','numpy','sys','cv2'], 

    }, 
    } 
} 

setup(**SETUP_DICT) 

Этот setup.py скрипт отлично работает на изображениях & другие функции, если я сделать их исполняемыми.

Вот мой PyQt код, где я не имею отображения выставлению

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
    MainWindow.setObjectName(_fromUtf8("Control panel")) 
    MainWindow.setWindowTitle(_translate("Control panel", "Control panel", None)) 
    #MainWindow.resize(1407, 722) 
    MainWindow.setFixedSize(800, 722) 

    self.centralwidget = QtGui.QWidget(MainWindow) 
    self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 

    self.verticalLayoutWidget = QtGui.QWidget(self.centralwidget) 
    self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 20, 160, 661)) 
    self.verticalLayoutWidget.setObjectName(_fromUtf8("verticalLayoutWidget")) 
    self.verticalLayout = QtGui.QVBoxLayout(self.verticalLayoutWidget) 
    self.verticalLayout.setMargin(0) 
    self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))    

    self.videoFrame = QtGui.QLabel(self.centralwidget) 
    self.videoFrame.setGeometry(QtCore.QRect(100, 40, 591, 611)) 
    self.videoFrame.setText(_fromUtf8("")) 
    self.videoFrame.setObjectName(_fromUtf8("videoFrame")) 

    MainWindow.setCentralWidget(self.centralwidget) 

    self.videoFrame = QtGui.QLabel(self.centralwidget) 
    self.videoFrame.setGeometry(QtCore.QRect(190, 40, 591, 611)) 
    self.videoFrame.setText(_fromUtf8("")) 
    self.videoFrame.setObjectName(_fromUtf8("videoFrame")) 

    MainWindow.setCentralWidget(self.centralwidget) 


class Video(): 
def __init__(self,capture): 
     self.capture = capture 
     self.currentFrame=np.array([]) 

def captureNextFrame1(self): 
    """       
    capture frame and reverse RBG BGR and return opencv image          
    """ 
    ret, readFrame=self.capture.read() 
    if(ret==True): 
      self.currentFrame=cv2.cvtColor(readFrame,cv2.COLOR_BGR2RGB) 


def convertFrame(self): 
    """  converts frame to format suitable for QtGui   """ 
    try: 
     height,width=self.currentFrame.shape[:2] 
     bytesPerLine = 3 * width 
     img=QtGui.QImage(self.currentFrame.data,width,height,bytesPerLine,QtGui.QImage.Format_RGB888) 
     img=QtGui.QPixmap.fromImage(img) 
     self.previousFrame = self.currentFrame 
     return img 
    except: 
     return None 


    class Gui(QtGui.QMainWindow): 
    def __init__(self,parent=None): 
     QtGui.QWidget.__init__(self,parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.video1 = Video(cv2.VideoCapture("C:\\Users\Public\\OpenCVproject\\IMG_1491.mov")) 
     self._timer = QtCore.QTimer(self) 
     self._timer.timeout.connect(self.play) 
     self._timer.start(27) 
     self.update() 

    def play(self): 
     try: 
      self.video1.captureNextFrame1()  
      self.ui.videoFrame.setPixmap(self.video1.convertFrame()) 
      self.ui.videoFrame.setScaledContents(True) 


     except TypeError: 
      print "No frame" 

def main():   
    app = QtGui.QApplication(sys.argv) 
    ex = Gui() 
    ex.show()  
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

ничего плохого с кодом до сих пор. Работает отлично. Но если я сделаю это автономным exe-файлом, видео не будет отображаться на другом компьютере. Прекрасно показывается на моем.

+0

Вы можете добавить более подробную информацию о том, что вы пытаетесь сделать? Предоставьте код и некоторую справочную информацию ... Это очень смутно – Shahram

ответ

0

Я решил проблему. py2exe не смог получить все ffmpeg, highgui & другие dll & pyd файлы. Так что нужно вручную импортировать все эти файлы в мои обычные исполняемые файлы &, он решил проблему. Спасибо.