2016-03-20 7 views
3

У меня возникли проблемы с попыткой захватить живой поток с моей новой камеры GoPro Hero 4 и сделать некоторую обработку изображения на нем с помощью openCV.Как подключить мой видеоролик GoPro Hero 4 к openCV с помощью Python?

Вот мое исследование (ничего не отображается на созданном окне

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 

цикл прерывается, как схватил всегда равно ложь, которая означает, что OpenCV не получил ничего.

+0

Вы в конечном итоге решили это? –

+0

Нет, я сменил камеру –

+1

@AhmedSamy, на какую камеру? – jessica

ответ

0

Это потому, что вы не выбираете буквальным поток для захвата видео. Ваш ip из объекта видеозахвата должен содержать расширение в конце, будь то .jpg или .mpeg (я бы предпочел использовать это) или несколько других, перечисленных в документации. Если вы используете литерал видео-поток (например, .mpeg вместо изображения), вы должны сделать cv.grab, затем cv.retrieve. Это касается всех ip-камер. Надеюсь, что это помогло :)

1

Для тех, кому интересно, я был в состоянии получить хороший поток на OpenCV:

Сначала вам необходимо скачать API GoPro Python, если у вас есть пип:

pip install goprocam 

если не

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

Затем запустите следующий код в окне терминала: питон

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

Это приведет к повторному потоку потока UDP на локальном хосте, FFmpeg необходимо на пути!

Затем вы можете использовать OpenCV, чтобы открыть поток LOCALHOST:

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 хотя я не рекомендую, потому что его очень лаг таким образом, FFmpeg> локальный > opencv очень стабилен по сравнению с opencv.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/16180494) – chtz

+1

Я добавил основной код и некоторые примеры в ссылке. – konraditurbe