2016-04-16 41 views
2

私は、最新のJetpack(TegraはR23.2用のLinux)と私のJETSON TX1を点滅し、次のコマンドは完璧に動作します:Jetson TX1組み込みカメラから画像を受信する方法は?

gst-launch-1.0 nvcamerasrc fpsRange="30.0 30.0" ! 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)I420, framerate=(fraction)30/1' ! nvtee ! nvvidconv flip-method=2 ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvoverlaysink -e 

私はウェブカメラから画像を受信するには、以下のPythonプログラムを使用しようとしました:

ソース:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /hdd/buildbot/slave_jetson_tx_2/35-O4T-L4T-Jetson-L/opencv/modules/imgproc/src/color.cpp, line 3739 
Traceback (most recent call last): 
    File "webcam.py", line 11, in <module> 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
cv2.error: /hdd/buildbot/slave_jetson_tx_2/35-O4T-L4T-Jetson-L/opencv/modules/imgproc/src/color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cvtColor 
http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    # Our operations on the frame come here 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

    # Display the resulting frame 
    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

# When everything done, release the capture 
cap.release() 
cv2.destroyAllWindows() 

私は、次のエラーを得ました

私はウェブカメラから画像を受け取ることができないということを知っています。私もwebcamから受信した画像を表示するようにコードを変更しましたが、それは私にはカメラから取得する画像がないことを意味するエラーが表示されます。

私も次のコードでC++を使用しようとしました:

#include "opencv2/opencv.hpp" 
using namespace cv; 
int main(int argc, char** argv) 
{ 
    VideoCapture cap; 
    // open the default camera, use something different from 0 otherwise; 
    // Check VideoCapture documentation. 
    if(!cap.open(0)) 
     return 0; 
    for(;;) 
    { 
      Mat frame; 
      cap >> frame; 
      if(frame.empty()) break; // end of video stream 
      imshow("this is you, smile! :)", frame); 
      if(waitKey(1) == 27) break; // stop capturing by pressing ESC 
    } 
    // the camera will be closed automatically upon exit 
    // cap.close(); 
    return 0; 
} 

、それは

g++ webcam.cpp -o webcam `pkg-config --cflags --libs opencv` 

を使用してエラーなしでコンパイルされた。しかし、私はプログラムを実行しているとき、再び、私はこのエラーを受け取ります:

$ ./webcam 
Unable to stop the stream.: Device or resource busy 
Unable to stop the stream.: Bad file descriptor 
VIDIOC_STREAMON: Bad file descriptor 
Unable to stop the stream.: Bad file descriptor 

何が欠けていますか?このプログラムを実行する前にウェブカメラを起動するコマンドがありますか?

+0

この問題を解決しましたか? – Qazi

+0

ここで同じ問題が発生した場合は、解決策を見つけたらお知らせください。 – SimpleMan

答えて

2

nvidiaフォーラムによれば、gstreamerパイプラインを正しく取得する必要があります。そして、現時点では、opencvはnvcameraのストリームを自動検出できません。

私はそれが動作するようになった唯一の方法は、ビデオをつかむためにOpencv3とのコード行していました:

cap = cv2.VideoCapture("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)640, height=(int)480, format=(string)I420, framerate=(fraction)30/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)I420 ! videoconvert ! video/x-raw, format=(string)BGR ! appsink")

1

このスレッドからのすべての情報のおかげでは、とにかく、私はちょうど私を得ましたpythonはTX1カメラモジュールから1つのフレームを取得します。

重要なことは、OpenCV 3.1.0をインストールする必要があることです。公式のビルド方法に従い、python cv2.so libをバージョン3.1.0に置き換えることができます。元のl4t OpenCVは2.4です。

もう1つ重要なことは、正しいnvcamerasrcを使用することです。それはちょうどここに共有するために、私のTX1上で動作 C

ap = cv2.VideoCapture("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)I420, framerate=(fraction)30/1 ! nvtee ! nvvidconv flip-method=2 ! video/x-raw(memory:NVMM), format=(string)I420 ! nvoverlaysink -e ! appsink") 

を試してみてください。

関連する問題