How connect my GoPro Hero 4 camera live stream to openCV using Python?

后端 未结 2 451
醉梦人生
醉梦人生 2021-02-06 10:32

I \'m having troubles trying to capture a live stream from my new GoPro Hero 4 camera and do some image processing on it using openCV.

Here is my trial (nothing shows up

相关标签:
2条回答
  • 2021-02-06 10:54

    For those wondering I was able to get a good stream on OpenCV:

    First you'll need to download the GoPro Python API, if you have pip:

    pip install goprocam
    

    if not

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

    Then run the following code in a python terminal window:

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

    This will re-stream the UDP stream to localhost, FFmpeg is needed on the path!

    Then you can use OpenCV to open the localhost stream:

    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()
    

    See further examples here - you can even use pure OpenCV to open the stream although I don't recommend it because its very laggy this way, ffmpeg > localhost > opencv is very stable compared to opencv only.

    0 讨论(0)
  • 2021-02-06 10:58

    This is because you are not choosing a literal stream to capture video from. Your ip from the videocapture object must contain an extension on the end, whether it's .jpg or .mpeg (I'd prefer using this), or a few others listed in the documentation. If you use a literal video stream (such as the .mpeg instead of a picture), you should do cv.grab then cv.retrieve. this goes for all ip cameras. Hope this helped :)

    0 讨论(0)
提交回复
热议问题