ここから公式のサンプルコードを使用して、Kivyでカメラを使用したいと思います。
https://github.com/kivy/kivy/blob/1.10.0/examples/camera/main.py
ただし、 opencv-3.3.0|. If I compile
opencv-2.4.13.3`からcv2.soを使用すると、白い画面しか表示されません。
どちらの場合も、カメラは初期化されているように見えますが(LEDがオンになっている)、opencv-2を使用するとビデオが表示され、opencv-3を使用すると画面が白のままになります。
また、以下のよりミニマリストな例を試してみました。
import kivy
from kivy.app import App
from kivy.uix.camera import Camera
class MainApp(App):
def build(self):
return Camera(play=True, resolution=(640, 480))
if __name__== "__main__":
MainApp().run()
そして、同じ結果が得られます。つまり、 opencv-2.4.13.3
ではなくopencv-3.3.0
ます。
https://github.com/opencv/opencv/releasesから両方のバージョンをダウンロードしました
そして、それらは両方ともデフォルトのフラグ(単にcmake
そしてmake -j4
)でコンパイルされました。
また、以下の純粋なOpenCVの例も機能しています。
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Display the resulting frame
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
そのため、Kivyとの統合に問題があるように見えます。
問題を確認できます
opencv3の白い画面もあります。
デバッグしたところ、着信フレームが空ではないことがわかりましたが、それでも画面にうまく表示されません
それを解決しました。 ファイル.../lib/python3.6/site-packages/kivy/core/camera/camera_opencv.py
見てください
121行目:
if self.fps <= 0:
self.fps = 1 / 30.
デバッグモードでそこに到達すると、fps値が実際には30であることがわかります(1/30ではありません)。
この値は、フレーム更新のスケジューリングに使用されます。
self._update_ev = Clock.schedule_interval(self._update, self.fps)
この行を次のように変更します。
self._update_ev = Clock.schedule_interval(self._update, 1/self.fps)
問題を解決します。 もちろん、これは完全な解決策ではありません。おそらく、コード内の他の場所も変更する必要があります。
これがあなたにもうまくいくことを願っています
上記の「ソリューション」はいずれも、Python2.7.14およびopencv3を使用するUbuntu18.04(ベータリリース)では機能しません。
ウェブカメラはチーズのようなデスクトップアプリで動作しています。
私たちbraintrainerplus.nlは、本当にWebカメラが機能している必要があり、誰かが興味を持っている場合は、この問題に報奨金を支払う準備ができています。
opencvから返されたnumpy配列データを表示する前に、前処理したかったのです。 残念ながら、kivyのカメラ抽象化はテクスチャバイナリデータしか提供しませんでした。
この要点は、カメラに直接アクセスするのに役立ちました。
参考:opencv 2.4.13は、Ubuntu18.04のkivy1.10で動作します。
(私の最初の試みが失敗した理由はわかりませんが、別のコンパイル後には機能しました)
@yoelkの「修正」がOpenCV3.3.0を使用する
これはhttps://github.com/kivy/kivy/issues/5146と同じ問題のように見え
@yoelk私の121行目は
if self.fps <= 0:
self.fps = 1 / 30
そして、私は白い画面を取得しています。 ダウングレードしようとして、pipまたはcondaを使用してopencv2をダウンロードできません
私は、ビルドインバイソンとUSBロジクールのウェブカメラでテストが、今@yoelkからの修正と安定kivy 1.10.1に取り組んでいることを確認することができます。
システム: ppa:kivy-team / kivyのUbuntu18.04 / Mint 19、openvc 3.2.0、
また、kivy / core / camera / __ init__。pyのopencvを除くすべてのプロバイダーをコメントアウトして、opencvの使用を強制する必要があります。残りは失敗し、あらゆる種類の奇妙なエラーが発生します。
@CurtlyCritchlow修正は152行
最も参考になるコメント
それを解決しました。 ファイル
.../lib/python3.6/site-packages/kivy/core/camera/camera_opencv.py
見てください121行目:
デバッグモードでそこに到達すると、fps値が実際には30であることがわかります(1/30ではありません)。
この値は、フレーム更新のスケジューリングに使用されます。
この行を次のように変更します。
問題を解決します。 もちろん、これは完全な解決策ではありません。おそらく、コード内の他の場所も変更する必要があります。
これがあなたにもうまくいくことを願っています