2014-11-03 5 views
1

ArDrone 2.0에서 이미지를 가져오고 Python OpenCV, cv2를 사용하여 이미지를 처리하고 컨트롤러를 만들려고합니다.ArDrone 2.0에서 이미지 가져 오기 및 cv2 사용

이 내 코드입니다 :

Traceback (most recent call last): 
    File "ArDrn/7/drony.py", line 14, in <module> 
    ret, frame = cap 
TypeError: 'NoneType' object is not iterable 

누군가가 내가 잘못하시기 바랍니다 뭐하는 거지 말해 줄 수 :

import cv2 
import numpy as np 
from pydrone import libardrone 

drone = libardrone.ARDrone() 
cap = drone.image 

while(True): 
    ret, frame = cap 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows() 

는 그러나, 나는이 문제가 계속?

답변

1
당신이 캡을 사용하기 전에 아무도없는 경우 확인하기 위해 약간의 논리를 변경해야 할 수도 있음을 날 것으로 보인다

:

while(True): 
    cap = drone.image 
    if not cap: 
     time.sleep(0.1) # or something to save just a touch of CPU spin time, optional 
     continue 
    ret, frame = cap 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

이 될 수는 전환 이미지의 중간에있는 동안 또는 그런 시간에는 cap이 None 일 때가있을 수 있습니다. 또한 각 루프에 새 이미지를 가리 키기 위해 캡을 업데이트하지 않는 것 같아 문제가 될 수도 있습니다.

+0

그래이 문제가 해결 된 것 같습니다. 그러나 나는 방금 drone.image가 이미지가 아닌 문자열임을 깨달았습니다. 나는 그것을 개조 할 필요가있다. –

+0

도움 주셔서 감사합니다. –

1

아무 잘못도 없습니다.

pydrone 라이브러리는 AR.Drone 2.0 비디오 스트림에서 작동하지 않습니다.

AR.Drone 2.0의 두 가지 중요한 변화가 있습니다 스트림은 TCP에

  • 가;
  • H264 기반이며 앵무새 맞춤 헤더가 있습니다.

무인도의 비디오는 ffplay tcp://192.168.1.1:5555 (아마도 끔찍한 대기 시간이 있음)을 사용하여 볼 수 있습니다.

development foruns에 AR.Drone 2.0 비디오에 대한 자세한 정보가 있습니다.

1

mangon이 언급했듯이 비디오 지원은 libardrone에서 깨졌습니다. 하지만 비디오 피드에 액세스 할 때는 libardrone이 필요하지 않습니다. 다음은 OpenCV의 간단한 예입니다.

import cv2 
cam = cv2.VideoCapture('tcp://192.168.1.1:5555') 
running = True 
while running: 
    # get current frame of video 
    running, frame = cam.read() 
    if running: 
     cv2.imshow('frame', frame) 
     if cv2.waitKey(1) & 0xFF == 27: 
      # escape key pressed 
      running = False 
    else: 
     # error reading frame 
     print 'error reading video feed' 
cam.release() 
cv2.destroyAllWindows()