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_()
はあなたが私たちあなたのコードを示しすることはできますか?何かエラーが出ていますか?プログラムがクラッシュしたりフリーズしたり、あなたがしたいことをやっていないのですか?動画は読み込まれますが、再生されないのですか、何も起こりませんか? – BHawk
クラッシュしたりフリーズしたりすることはありませんが、私のIDEでうまくいくビデオポップアップは表示されません。ビデオがロードされます(私はself.videoをコンソールに表示しました)が、再生されません。また、play()関数に入り、cv2.VideoCapture(self.video)ステートメントの前に何かを印刷することもできます。だから、それは機能を認識していません。 –
コードは正常です。スペックファイルで '--add-binary'コマンドを使ってdllを指していましたか? – BHawk