Kivy: شاشة بيضاء على OpenCV3 ، لكنها تعمل على OpenCV2

تم إنشاؤها على ٢٥ سبتمبر ٢٠١٧  ·  10تعليقات  ·  مصدر: kivy/kivy

إصدارات

  • بايثون: v2.7.12
  • نظام التشغيل: Linux (Gentoo)
  • كيفي: 1.10.0
  • طريقة تركيب Kivy: Pip install kivy == 1.10.0

وصف

أريد استخدام الكاميرا الخاصة بي في Kivy باستخدام رمز المثال الرسمي من هنا:
https://github.com/kivy/kivy/blob/1.10.0/examples/camera/main.py
ومع ذلك ، لا أحصل إلا على شاشة بيضاء عند استخدام cv2.so من opencv-3.3.0|. If I compile opencv-2.4.13.3` إنها تعمل.
من المثير للاهتمام أن نلاحظ أنه في كلتا الحالتين ، يبدو أن الكاميرا قد تم تهيئتها (تشغيل الصمام) ، ولكن مع 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.

التعليق الأكثر فائدة

حلها. ابحث في الملف .../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)

يحل المشكلة. إنه بالطبع ليس حلاً كاملاً ، وربما يجب تغيير أماكن أخرى في الكود أيضًا.
اتمنى ان يعمل هذا معك ايضا

ال 10 كومينتر

أستطيع أن أؤكد المشكلة

لدي أيضًا شاشة بيضاء مع opencv 3.
لقد قمت بتصحيحه ورأيت أن الإطارات الواردة ليست فارغة ، لكنها لا تزال لا تظهر جيدًا على الشاشة

حلها. ابحث في الملف .../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)

يحل المشكلة. إنه بالطبع ليس حلاً كاملاً ، وربما يجب تغيير أماكن أخرى في الكود أيضًا.
اتمنى ان يعمل هذا معك ايضا

لا تعمل أي من الحلول المذكورة أعلاه على Ubuntu 18.04 (إصدار بيتا) مع python 2.7.14 و opencv 3.
تعمل كاميرا الويب مع تطبيقات سطح المكتب مثل الجبن.
نحن ، braintrainerplus.nl ، نحتاج حقًا إلى عمل كاميرا الويب ومستعدون لتقديم مكافأة على هذه المشكلة إذا كان أي شخص مهتمًا بها.

كنت أرغب في المعالجة المسبقة لبيانات المصفوفة غير المعقدة التي أرجعها opencv ، قبل عرضها. لسوء الحظ ، لم يقدم تجريد كاميرا kivy سوى بيانات ثنائية للنسيج.

كان هذا الجوهر مفيدًا للوصول إلى الكاميرا مباشرة:

https://gist.github.com/ExpandOcean/de261e66949009f44ad2

لمعلوماتك: يعمل opencv 2.4.13 مع kivy 1.10 على Ubuntu 18.04.
(لست متأكدًا من سبب فشل محاولتي الأولى ولكن بعد تجميع آخر نجح)

يمكن تأكيد أن "fix" yoelk يعمل على Arch Linux باستخدام Python 3.6.5 و OpenCV 3.3.0 داخل Virtual Env.

تبدو هذه نفس المشكلة مثل https://github.com/kivy/kivy/issues/5146

yoelk خطي 121 هو
if self.fps <= 0: self.fps = 1 / 30

وأحصل على الشاشة البيضاء. لا يمكنني تنزيل opencv2 سواء باستخدام النقطة أو conda في محاولتي الرجوع إلى إصدار أقدم

أستطيع أن أؤكد أن كاميرا الويب ، التي تم اختبارها باستخدام bison-in و usb logitech ، تعمل الآن على kivy 1.10.1 الثابت مع الإصلاح من yoelk .
النظام: Ubuntu 18.04 / Mint 19 و openvc 3.2.0 و kivy 1.10.1 من ppa: kivy-team / kivy.

يجب أيضًا أن أعلق على جميع مقدمي الخدمة باستثناء opencv في kivy / core / camera / __ init__.py لفرض استخدام opencv لأن البقية تفشل وتعطي جميع أنواع الأخطاء الغريبة.

CurtlyCritchlow الإصلاح في السطر 152: self._update_ev = Clock.schedule_interval (self._update، 1 / ​​self.fps)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات