Kivy: OpenCV3μ—μ„œλŠ” 흰색 화면이 ν‘œμ‹œλ˜μ§€λ§Œ OpenCV2μ—μ„œλŠ” μž‘λ™ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 09μ›” 25일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: kivy/kivy

버전

  • 파이썬: v2.7.12
  • OS: λ¦¬λˆ…μŠ€(젠투)
  • ν‚€λΉ„: 1.10.0
  • Kivy μ„€μΉ˜ 방법: pip install kivy==1.10.0

μ„€λͺ…

μ—¬κΈ°μ—μ„œ 곡식 예제 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 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μ™€μ˜ 톡합에 λ¬Έμ œκ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. .../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)

문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€. λ¬Όλ‘  μ™„μ „ν•œ μ†”λ£¨μ…˜μ€ μ•„λ‹ˆλ©° μ½”λ“œμ˜ λ‹€λ₯Έ μœ„μΉ˜λ„ λ³€κ²½λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
이것이 λ‹Ήμ‹ μ—κ²Œλ„ νš¨κ³Όκ°€ 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

μœ„μ˜ 'μ†”λ£¨μ…˜' 쀑 μ–΄λŠ 것도 Python 2.7.14 및 opencv 3이 μžˆλŠ” Ubuntu 18.04(베타 릴리슀)μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
웹캠은 μΉ˜μ¦ˆμ™€ 같은 λ°μŠ€ν¬ν†± μ•±κ³Ό ν•¨κ»˜ μž‘λ™ν•©λ‹ˆλ‹€.
우리 braintrainerplus.nl은 μ›ΉμΊ  μž‘λ™μ΄ 정말 ν•„μš”ν•˜λ©° 관심이 μžˆλŠ” μ‚¬λžŒμ΄ 있으면 이 λ¬Έμ œμ— ν˜„μƒκΈˆμ„ κ±Έ μ€€λΉ„κ°€ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 그것을 ν‘œμ‹œν•˜κΈ° 전에 opencvμ—μ„œ λ°˜ν™˜λœ numpy λ°°μ—΄ 데이터λ₯Ό 사전 μ²˜λ¦¬ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. λΆˆν–‰νžˆλ„ kivy의 카메라 μΆ”μƒν™”λŠ” ν…μŠ€μ²˜ λ°”μ΄λ„ˆλ¦¬ λ°μ΄ν„°λ§Œ μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€.

이 μš”μ§€λŠ” 카메라에 직접 μ•‘μ„ΈμŠ€ν•˜λŠ” 데 μœ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

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

μ°Έκ³ : opencv 2.4.13은 Ubuntu 18.04의 kivy 1.10μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.
(μ™œ 첫 번째 μ‹œλ„κ°€ μ‹€νŒ¨ν–ˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ λ‹€λ₯Έ 컴파일 ν›„μ—λŠ” μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€)

@yoelk 의 "μˆ˜μ •"이 가상 ν™˜κ²½ λ‚΄μ—μ„œ Python 3.6.5 및 OpenCV 3.3.0을 μ‚¬μš©ν•˜λŠ” Arch Linuxμ—μ„œ μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 https://github.com/kivy/kivy/issues/5146 κ³Ό 같은 문제처럼 λ³΄μž…λ‹ˆλ‹€.

@yoelk λ‚΄ 라인 121은
if self.fps <= 0: self.fps = 1 / 30

그리고 흰색 화면이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. λ‹€μš΄κ·Έλ ˆμ΄λ“œλ₯Ό μ‹œλ„ν•  λ•Œ pip λ˜λŠ” condaλ₯Ό μ‚¬μš©ν•˜μ—¬ opencv2λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λ‚΄μž₯ λ“€μ†Œ 및 usb logitech둜 ν…ŒμŠ€νŠΈν•œ 웹캠이 이제 @yoelk의 μˆ˜μ • μ‚¬ν•­μœΌλ‘œ μ•ˆμ •μ μΈ kivy 1.10.1μ—μ„œ μž‘λ™ν•˜κ³  μžˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ‹œμŠ€ν…œ: ppa:kivy-team/kivy의 Ubuntu 18.04/Mint 19, openvc 3.2.0 및 kivy 1.10.1

λ˜ν•œ kivy/core/camera/__init__.pyμ—μ„œ opencvλ₯Ό μ œμ™Έν•œ λͺ¨λ“  κ³΅κΈ‰μžλ₯Ό 주석 μ²˜λ¦¬ν•˜μ—¬ λ‚˜λ¨Έμ§€λŠ” μ‹€νŒ¨ν•˜κ³  λͺ¨λ“  μ’…λ₯˜μ˜ μ΄μƒν•œ 였λ₯˜λ₯Ό μ œκ³΅ν•˜λ―€λ‘œ opencvλ₯Ό κ°•μ œλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

@CurtlyCritchlow μˆ˜μ • 사항은 152행에 μžˆμŠ΅λ‹ˆλ‹€. self._update_ev = Clock.schedule_interval(self._update, 1/self.fps)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰