web-dev-qa-db-ja.com

OpenCVを使用したIPカメラアクセス

以下のコードは、OpenCVを使用してAxis IPカメラにアクセスするためのものです。プログラムを実行すると、最初に「cap_ffmpeg_implを開くときにエラーが発生しました...」と表示され、次にCamera not found。と表示されます。

#include <opencv\cv.h>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
    Mat frame;
    namedWindow("video", 1);
    VideoCapture cap("http://IPADDRESS/video.mjpg");
    if(!cap.isOpened())
    {
        cout<<"Camera not found"<<endl;
        getchar();
        return -1;
    }
    while ( cap.isOpened() )
    {
        cap >> frame;
        if(frame.empty()) break;

        imshow("video", frame);
        if(waitKey(30) >= 0) break;
    }   
    return 0;
}

どこがいけないの?

パブリックIPカメラを使用してIPカメラを表示しようとすると、同様の問題に直面しました。 Opencvは、カメラを開くためにいくつかの典型的な種類のURLを必要とします。以下のコードからURLを試してください。私のために働いたコードがここにあります。

int main(int, char**) {
    cv::VideoCapture vcap;
    cv::Mat image;

    // This works on a D-Link CDS-932L
    const std::string videoStreamAddress = "http://ID:PASSWORD@IPADDRESS:PORTNO/mjpeg.cgi?user=ID&password=ID:PASSWORD&channel=0&.mjpg";
       //open the video stream and make sure it's opened
    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    for(;;) {
        if(!vcap.read(image)) {
            std::cout << "No frame" << std::endl;
            cv::waitKey();
        }
        cv::imshow("Output Window", image);

        if(cv::waitKey(1) >= 0) break;
    }   

}

このコードをそのままコピーして試してください。

#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int, char**) {
    cv::VideoCapture vcap;
    cv::Mat image;

    // This works on a D-Link CDS-932L

    const std::string videoStreamAddress = "http://USER:PWD@IPADDRESS:8088/mjpeg.cgi?user=USERNAME&password=PWD&channel=0&.mjpg";
       //open the video stream and make sure it's opened
    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    for(;;) {
        if(!vcap.read(image)) {
            std::cout << "No frame" << std::endl;
            cv::waitKey();
        }
        cv::imshow("Output Window", image);

        if(cv::waitKey(1) >= 0) break;
    }   

}
7
Mayur

以下は、イーサネットケーブルを介してコンピューターに接続されたAxis M1004-Wで機能します。

  1. 選択したブラウザー(私はChromeを使用しています)で、カメラのIPアドレスに移動します。必要に応じて資格情報を提供します。
  2. カメラからのライブストリームを見ているは​​ずです。ビデオストリームを右クリックして、[要素の検査](またはChrome以外のブラウザでは同等のもの)を選択します。
  3. Srcという変数が表示されます。これは、OpenCV内でカメラに直接アクセスするために使用できる変数です。鉱山は/mjpg/video.mjpg、私はあなたのものも似ていると思います。

OpenCVに与えるアドレスは次のようになります。

http://<USERNAME>:<PASSWORD>@<IP_ADDRESS>/<the value of src>

これは私のものです:

http://uname:[email protected]/mjpg/video.mjpg

コードに住所を入力したところ、OpenCVウィンドウからビデオストリームを見ることができます。

2
Connor

IPhoneに「Mini WebCam」アプリをインストールし、「 http://192.168.1.1 」というアドレスでIPカメラとして使用しました。さらに、次のコードを使用しました。

VideoCapture capture;
Mat image;
if (!capture.open("http://192.168.1.103/video.cgi?.mjpg")) {
    cout << "Error opening video stream or file" << endl;
    return -1;
}
....

動作します。( http://192.168.1.103/video.cgi?.mjpg

0
Mohammad Rahimi