2016-03-20 476 views
3

我遇到了麻煩,試圖從我的新GoPro Hero 4相機捕捉實時流,並使用openCV對其進行一些圖像處理。如何使用Python將GoPro Hero 4相機直播流連接到openCV?

這裏是我的審判(什麼也不顯示

import cv2 
import argparse 
import time 
import datetime 
from goprohero import GoProHero 


ap = argparse.ArgumentParser() 
ap.add_argument("-a", "--min-area", type=int, default=500, help="minimum area size") 
args = vars(ap.parse_args()) 

camera = cv2.VideoCapture("http://10.5.5.9:8080/gp/gpControl/executep1=gpStream&c1=restart") 
time.sleep(5) 

cv2.namedWindow("", cv2.CV_WINDOW_AUTOSIZE) 

firstFrame = None 
noOfCars = 0 
speed = 80 

while True: 
    (grabbed, frame) = camera.read() 
    text = "Smooth" 
    print("Capturing ...") 

    if not grabbed: 
     print("nothing grabbed") 
     break 

循環中斷一如既往抓起創建的窗口上等於false這意味着OpenCV的什麼都沒有。

+0

你最終解決了這個問題嗎? –

+0

不,我將相機 –

+1

@AhmedSamy改爲相機? – jessica

回答

0

這是因爲你沒有選擇文字視頻捕捉對象的IP必須包含擴展名,無論是.jpg還是.mpeg(我更願意使用此擴展名)或文檔中列出的一些其他擴展名。如果使用文本視頻流(比如.mpeg而不是圖片),你應該做cv.grab然後cv.retrieve。這適用於所有的ip攝像機。 希望這有助於:)

1

對於那些想知道我能在OpenCV中獲得了良好的流:

首先,您需要下載的GoPro的Python API,如果你有點子:

pip install goprocam 

如果不是

git clone https://github.com/konradit/gopro-py-api 
cd gopro-py-api 
python setup.py install 

然後運行在一個python終端窗口下面的代碼:

from goprocam import GoProCamera 
from goprocam import constants 
gopro = GoProCamera.GoPro() 
gopro.stream("udp://127.0.0.1:10000") 

這將重新流到本地主機的UDP流,路徑上需要FFmpeg!

然後你就可以使用OpenCV中打開本地主機流:

import cv2 
import numpy as np 
from goprocam import GoProCamera 
from goprocam import constants 
cascPath="/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml" 
faceCascade = cv2.CascadeClassifier(cascPath) 
gpCam = GoProCamera.GoPro() 
cap = cv2.VideoCapture("udp://127.0.0.1:10000") 
while True: 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.1, 
     minNeighbors=5, 
     minSize=(30, 30), 
     flags=cv2.CASCADE_SCALE_IMAGE 
    ) 
    for (x, y, w, h) in faces: 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
    cv2.imshow("GoPro OpenCV", frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 
cap.release() 
cv2.destroyAllWindows() 

見進一步的例子here - 你甚至可以用純OpenCV to open the stream雖然我沒有因爲它很laggy這樣推薦它,ffmpeg的>本地主機>與opencv相比,opencv非常穩定。

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/16180494) – chtz

+1

我在鏈接中添加了基本代碼和一些示例。 – konraditurbe