2017-06-07 78 views
1

pyinstallerを使ってPython 2.7でPyQt4で作成した簡単なGUIの.exeを生成しようとしています。ここでVideoCapture()opencv python pyinstallerが開かない

は私の問題の詳細については、以下のとおりです。二つのボタン、ビデオを再生するために他のビデオを、ロードするための1と

シンプルなレイアウト。私のIDEでは、ビデオが完全に読み込まれ、再生されます。ビデオは別のウィンドウでポップアップし、終了すると終了します。

プログラムでpyinstallerを実行すると、.exeの実行後にGUIインターフェイスがポップアップします。開いているファイルのダイアログは正常に動作しますが、ビデオは再生されません。

私のIDEで、opencvのインストールディレクトリからのopencv_ffmpeg2412_64.dllを削除して、エラーを再現することができます。ディレクトリ内の他のものを削除してもIDE内のビデオの再生可能性には影響しないようです。ですから、私はpyinstallerがopencv_ffmpeg2412_64.dllを見つけていないと考えています。 pyinstallerが作成したdistフォルダに手動でコピーしようとしました。私はそれをフックしてspecFileに含めることも試みました。この問題を解決しようとすると、間違ったことをしたり、間違った場所を探したりしているはずです。

私がこれをどのように修正できるかについてのご意見は、大変ありがたく思っています。ありがとう!

EDIT:それは任意の助けとなることができればここで

は、私のコードの主要な部分です。これは、私が.exeファイルに配置しようとしているより大きいGUIのテストに過ぎません。転送互換性の問題のため、古いバージョンのcv2を使用しています。

#imports 
import sys 

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4 import QtCore 
from PyQt4.QtGui import QFileDialog 

import cv2 
import numpy 

import mainwindow 


class MainWindow(QMainWindow, mainwindow.Ui_MainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 

     self.Load_B.clicked.connect(self.open) 
     self.Play_B.clicked.connect(self.play) 

    def play(self): 


     cap = cv2.VideoCapture(self.video) 
     while(True): 
      (grabbed, frame) = cap.read() 
      if not grabbed: 
       break    
      currentframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 
      height, width = currentframe.shape[:2] 
      cv2.namedWindow("Preview", cv2.WINDOW_NORMAL) 
      cv2.imshow("Preview",currentframe) 

      if cv2.waitKey(1) & 0xFF == ord('q'): 
       break 
     cap.release() 
     cv2.destroyAllWindows() 

    def open(self): 
     self.video=QFileDialog.getOpenFileName(self,"Video file",filter="Video 
    Files (*.mp4)") 


app = QApplication(sys.argv) 
app.aboutToQuit.connect(app.deleteLater) 
form = MainWindow() 
form.show() 
app.exec_() 
+0

はあなたが私たちあなたのコードを示しすることはできますか?何かエラーが出ていますか?プログラムがクラッシュしたりフリーズしたり、あなたがしたいことをやっていないのですか?動画は読み込まれますが、再生されないのですか、何も起こりませんか? – BHawk

+0

クラッシュしたりフリーズしたりすることはありませんが、私のIDEでうまくいくビデオポップアップは表示されません。ビデオがロードされます(私はself.videoをコンソールに表示しました)が、再生されません。また、play()関数に入り、cv2.VideoCapture(self.video)ステートメントの前に何かを印刷することもできます。だから、それは機能を認識していません。 –

+0

コードは正常です。スペックファイルで '--add-binary'コマンドを使ってdllを指していましたか? – BHawk

答えて

1

私はちょうどこれと同じ問題を抱えていたし、これが私の仕事:

はBHawkのような--add-binaryオプションを使用するには、exeファイルを構築するときにsite-packagesフォルダからあなたのdistフォルダにDLLをコピーすることを指摘しました。

例:
pyinstaller program.spec --add-binary <PATH_TO_PYTHON>\Lib\site-packages\cv2\opencv_ffmpeg320_64.dll;.

関連する問題