Cannot capture video from ASUS Xtion using OpenCV on Jetson TK1

I’m having trouble capturing video from an ASUS Xtion on an Nvidia Jetson TK1 using OpenCV. When I run the following code, I always get “Error.”

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <iostream>

int main()
{
  cv::VideoCapture input;
  input.open(CV_CAP_OPENNI_ASUS);

  if(!input.isOpened())
    {
      std::cout << "Error.\n";
      return -1;
    }
}

I’m using OpenCV2 [EDIT: previously, I had written “OpenCV4Tegra” in error]. I installed OpenNI2 following instructions here (using the pre-compiled binary). SimpleRead from that site works. Following Tutorial 2 here, I am able to load a video image from a file, but not read the Asus. Running lsusb shows that the device is active:

Bus 002 Device 002: ID 1d27:0601 ASUS

I have successfully read from the Asus from within ROS.

I have seen this thread, but it does not help (I did incorporate the _ASUS for the open macro).

Does anyone have suggestions for what to try next? I’m sure I’m missing something obvious – any debugging help appreciated.

What’s the CV_CAP_OPENNI_ASUS define?
Have you try some other tools like gstreamer to make sure this HW support V4L2 video device?

Hi gcl8a,

Have you clarified the cause and fixed this issue?
Or could you provide more information? Then we can provide the suggestion accordingly.

Thanks

Sorry to take so long in getting back to you.

A few comments:

  • The issue happens on the Jetson and a "generic" ubuntu machine. It doesn't seem to be Jetson specific, and I've opened up a thread on the OpenCV boards. Still, I happy to get any help here.
  • The hardware works on both machines when interfaced with ROS (Indigo). Specifically, I can see with the camera just fine with rqt.
  • CV_CAP_OPENNI_ASUS is defined in highgui.hpp as an alternative to the Kinect define (CV_CAP_OPENNI). I don't have a Kinect to try, unfortunately.

What libraries are linked against when compiling your test program (what’s the build command you used)?

Here are what I think** are the relevant lines from the Makefile:

vid_proc.o: vid_proc.cpp.o
.PHONY : vid_proc.o

# target to build an object file
vid_proc.cpp.o:
	$(MAKE) -f CMakeFiles/vid_proc.dir/build.make CMakeFiles/vid_proc.dir/vid_proc.cpp.o
.PHONY : vid_proc.cpp.o

vid_proc.i: vid_proc.cpp.i
.PHONY : vid_proc.i

# target to preprocess a source file
vid_proc.cpp.i:
	$(MAKE) -f CMakeFiles/vid_proc.dir/build.make CMakeFiles/vid_proc.dir/vid_proc.cpp.i
.PHONY : vid_proc.cpp.i

vid_proc.s: vid_proc.cpp.s
.PHONY : vid_proc.s

# target to generate assembly for a file
vid_proc.cpp.s:
	$(MAKE) -f CMakeFiles/vid_proc.dir/build.make CMakeFiles/vid_proc.dir/vid_proc.cpp.s
.PHONY : vid_proc.cpp.s

And build.make:

# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8

#=============================================================================
# Special targets provided by cmake.

# Disable implicit rules so canonical targets will work.
.SUFFIXES:

# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =

.SUFFIXES: .hpux_make_needs_suffix_list

# Suppress display of executed commands.
$(VERBOSE).SILENT:

# A target that is always out of date.
cmake_force:
.PHONY : cmake_force

#=============================================================================
# Set environment variables for the build.

# The shell in which to execute make rules.
SHELL = /bin/sh

# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake

# The command to remove a file.
RM = /usr/bin/cmake -E remove -f

# Escaping for special characters.
EQUALS = =

# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace

# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/build

# Include any dependencies generated for this target.
include CMakeFiles/vid_proc.dir/depend.make

# Include the progress variables for this target.
include CMakeFiles/vid_proc.dir/progress.make

# Include the compile flags for this target's objects.
include CMakeFiles/vid_proc.dir/flags.make

CMakeFiles/vid_proc.dir/vid_proc.cpp.o: CMakeFiles/vid_proc.dir/flags.make
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: ../vid_proc.cpp
	$(CMAKE_COMMAND) -E cmake_progress_report /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/build/CMakeFiles $(CMAKE_PROGRESS_1)
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object CMakeFiles/vid_proc.dir/vid_proc.cpp.o"
	/usr/bin/c++   $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/vid_proc.dir/vid_proc.cpp.o -c /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/vid_proc.cpp

CMakeFiles/vid_proc.dir/vid_proc.cpp.i: cmake_force
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/vid_proc.dir/vid_proc.cpp.i"
	/usr/bin/c++  $(CXX_DEFINES) $(CXX_FLAGS) -E /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/vid_proc.cpp > CMakeFiles/vid_proc.dir/vid_proc.cpp.i

CMakeFiles/vid_proc.dir/vid_proc.cpp.s: cmake_force
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/vid_proc.dir/vid_proc.cpp.s"
	/usr/bin/c++  $(CXX_DEFINES) $(CXX_FLAGS) -S /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/vid_proc.cpp -o CMakeFiles/vid_proc.dir/vid_proc.cpp.s

CMakeFiles/vid_proc.dir/vid_proc.cpp.o.requires:
.PHONY : CMakeFiles/vid_proc.dir/vid_proc.cpp.o.requires

CMakeFiles/vid_proc.dir/vid_proc.cpp.o.provides: CMakeFiles/vid_proc.dir/vid_proc.cpp.o.requires
	$(MAKE) -f CMakeFiles/vid_proc.dir/build.make CMakeFiles/vid_proc.dir/vid_proc.cpp.o.provides.build
.PHONY : CMakeFiles/vid_proc.dir/vid_proc.cpp.o.provides

CMakeFiles/vid_proc.dir/vid_proc.cpp.o.provides.build: CMakeFiles/vid_proc.dir/vid_proc.cpp.o

# Object files for target vid_proc
vid_proc_OBJECTS = \
"CMakeFiles/vid_proc.dir/vid_proc.cpp.o"

# External object files for target vid_proc
vid_proc_EXTERNAL_OBJECTS =

vid_proc: CMakeFiles/vid_proc.dir/vid_proc.cpp.o
vid_proc: CMakeFiles/vid_proc.dir/build.make
vid_proc: /usr/local/lib/libopencv_viz.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videostab.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videoio.so.3.1.0
vid_proc: /usr/local/lib/libopencv_video.so.3.1.0
vid_proc: /usr/local/lib/libopencv_superres.so.3.1.0
vid_proc: /usr/local/lib/libopencv_stitching.so.3.1.0
vid_proc: /usr/local/lib/libopencv_shape.so.3.1.0
vid_proc: /usr/local/lib/libopencv_photo.so.3.1.0
vid_proc: /usr/local/lib/libopencv_objdetect.so.3.1.0
vid_proc: /usr/local/lib/libopencv_ml.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgproc.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgcodecs.so.3.1.0
vid_proc: /usr/local/lib/libopencv_highgui.so.3.1.0
vid_proc: /usr/local/lib/libopencv_flann.so.3.1.0
vid_proc: /usr/local/lib/libopencv_features2d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_core.so.3.1.0
vid_proc: /usr/local/lib/libopencv_calib3d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_viz.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videostab.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videoio.so.3.1.0
vid_proc: /usr/local/lib/libopencv_video.so.3.1.0
vid_proc: /usr/local/lib/libopencv_superres.so.3.1.0
vid_proc: /usr/local/lib/libopencv_stitching.so.3.1.0
vid_proc: /usr/local/lib/libopencv_shape.so.3.1.0
vid_proc: /usr/local/lib/libopencv_photo.so.3.1.0
vid_proc: /usr/local/lib/libopencv_objdetect.so.3.1.0
vid_proc: /usr/local/lib/libopencv_ml.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgproc.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgcodecs.so.3.1.0
vid_proc: /usr/local/lib/libopencv_highgui.so.3.1.0
vid_proc: /usr/local/lib/libopencv_flann.so.3.1.0
vid_proc: /usr/local/lib/libopencv_features2d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_core.so.3.1.0
vid_proc: /usr/local/lib/libopencv_calib3d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_viz.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videostab.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videoio.so.3.1.0
vid_proc: /usr/local/lib/libopencv_video.so.3.1.0
vid_proc: /usr/local/lib/libopencv_superres.so.3.1.0
vid_proc: /usr/local/lib/libopencv_stitching.so.3.1.0
vid_proc: /usr/local/lib/libopencv_shape.so.3.1.0
vid_proc: /usr/local/lib/libopencv_photo.so.3.1.0
vid_proc: /usr/local/lib/libopencv_objdetect.so.3.1.0
vid_proc: /usr/local/lib/libopencv_ml.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgproc.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgcodecs.so.3.1.0
vid_proc: /usr/local/lib/libopencv_highgui.so.3.1.0
vid_proc: /usr/local/lib/libopencv_flann.so.3.1.0
vid_proc: /usr/local/lib/libopencv_features2d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_core.so.3.1.0
vid_proc: /usr/local/lib/libopencv_calib3d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_viz.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videostab.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videoio.so.3.1.0
vid_proc: /usr/local/lib/libopencv_video.so.3.1.0
vid_proc: /usr/local/lib/libopencv_superres.so.3.1.0
vid_proc: /usr/local/lib/libopencv_stitching.so.3.1.0
vid_proc: /usr/local/lib/libopencv_shape.so.3.1.0
vid_proc: /usr/local/lib/libopencv_photo.so.3.1.0
vid_proc: /usr/local/lib/libopencv_objdetect.so.3.1.0
vid_proc: /usr/local/lib/libopencv_ml.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgproc.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgcodecs.so.3.1.0
vid_proc: /usr/local/lib/libopencv_highgui.so.3.1.0
vid_proc: /usr/local/lib/libopencv_flann.so.3.1.0
vid_proc: /usr/local/lib/libopencv_features2d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_core.so.3.1.0
vid_proc: /usr/local/lib/libopencv_calib3d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_features2d.so.3.1.0
vid_proc: /usr/local/lib/libopencv_ml.so.3.1.0
vid_proc: /usr/local/lib/libopencv_highgui.so.3.1.0
vid_proc: /usr/local/lib/libopencv_videoio.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgcodecs.so.3.1.0
vid_proc: /usr/local/lib/libopencv_flann.so.3.1.0
vid_proc: /usr/local/lib/libopencv_video.so.3.1.0
vid_proc: /usr/local/lib/libopencv_imgproc.so.3.1.0
vid_proc: /usr/local/lib/libopencv_core.so.3.1.0
vid_proc: CMakeFiles/vid_proc.dir/link.txt
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX executable vid_proc"
	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/vid_proc.dir/link.txt --verbose=$(VERBOSE)

# Rule to build all files generated by this target.
CMakeFiles/vid_proc.dir/build: vid_proc
.PHONY : CMakeFiles/vid_proc.dir/build

CMakeFiles/vid_proc.dir/requires: CMakeFiles/vid_proc.dir/vid_proc.cpp.o.requires
.PHONY : CMakeFiles/vid_proc.dir/requires

CMakeFiles/vid_proc.dir/clean:
	$(CMAKE_COMMAND) -P CMakeFiles/vid_proc.dir/cmake_clean.cmake
.PHONY : CMakeFiles/vid_proc.dir/clean

CMakeFiles/vid_proc.dir/depend:
	cd /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/build /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/build /home/greg/Dokumenter/opencv-3.1.0/workspace/opencv_workspace/build/CMakeFiles/vid_proc.dir/DependInfo.cmake --color=$(COLOR)
.PHONY : CMakeFiles/vid_proc.dir/depend

**I’m not much of a linux make guru – if there are specific files you’d like to see, let me know.

I’m interested in reproducing the build, but there isn’t enough information to copy what you are doing. Here’s what I have:

.
├── CMakeFiles
│   └── vid_proc.dir
│       └── build.make
├── Makefile
└── vid_proc.cpp

File “vid_proc.cpp” contains what you have at the top with function “main()”. The Makefile and build.make are from the excerpt you gave of build information. More is needed though, it wants this missing information:

ubuntu@tk2:/usr/local/src/devel/xtion_pro$ make
make -f CMakeFiles/vid_proc.dir/build.make CMakeFiles/vid_proc.dir/vid_proc.cpp.o
make[1]: Entering directory `/usr/local/src/devel/xtion_pro'
CMakeFiles/vid_proc.dir/build.make:44: CMakeFiles/vid_proc.dir/depend.make: No such file or directory
CMakeFiles/vid_proc.dir/build.make:47: CMakeFiles/vid_proc.dir/progress.make: No such file or directory
CMakeFiles/vid_proc.dir/build.make:50: CMakeFiles/vid_proc.dir/flags.make: No such file or directory
make[1]: *** No rule to make target `CMakeFiles/vid_proc.dir/flags.make'.  Stop.
make[1]: Leaving directory `/usr/local/src/devel/xtion_pro'
make: *** [vid_proc.cpp.o] Error 2

So far flags.make, progress.make and depend.make are missing (once those are found perhaps others will be missing). I have an Xtion Pro here which I can try if I can reproduce your program exactly as you have it.

Thanks for your help.

If it’s easier, send me an email and I can zip it up and send it to you. Or if you have cmake, you can probably start with my CMakeLists.txt file:

cmake_minimum_required (VERSION 2.8)

project(cv_vid)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(vid_proc vid_proc.cpp)
target_link_libraries(vid_proc ${OpenCV_LIBS})

But here are the files you’ve asked for. Thanks again for doing this!

depend.make:

CMakeFiles/vid_proc.dir/vid_proc.cpp.o: vid_proc.cpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv/cxcore.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/calib3d.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/calib3d/calib3d_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/affine.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/base.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/bufferpool.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/core.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/core_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/cvdef.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/cvstd.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/cvstd.inl.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/fast_math.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/hal/interface.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/mat.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/mat.inl.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/matx.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/neon_utils.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/operations.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/optim.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/persistence.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/ptr.inl.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/saturate.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/traits.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/types.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/types_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/utility.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/core/version.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/features2d.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/flann/config.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/flann/defines.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/flann/miniflann.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/highgui.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/highgui/highgui.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/highgui/highgui_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/imgcodecs.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/imgcodecs/imgcodecs_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/imgproc.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/imgproc/imgproc.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/imgproc/imgproc_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/imgproc/types_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/ml.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/objdetect.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/objdetect/detection_based_tracker.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/objdetect/objdetect_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/opencv.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/photo.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/photo/photo_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/video.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/video/background_segm.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/video/tracking.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/video/tracking_c.h
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/videoio.hpp
CMakeFiles/vid_proc.dir/vid_proc.cpp.o: /usr/local/include/opencv2/videoio/videoio_c.h

progress.make has one line:

CMAKE_PROGRESS_1 = 4

flags.make is also short:

# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8

# compile CXX with /usr/bin/c++
CXX_FLAGS = -I/usr/local/include/opencv -I/usr/local/include   

CXX_DEFINES =

Although you can’t attach a file in the forums while creating a post, you can attach to one of your posts after it exists. In the upper right corner is the “quote” icon for quoting your post…if you hover the mouse over it a “paper clip” icon will show up…this allows attaching files.

Not all file formats are allowed, you can create a zip file with everything in it to contain file formats not otherwise accepted…give that a try, see if that works.

Done. Thanks, again.
opencv_workspace.zip (72.2 KB)

Which version of OpenCV do you have? I’m wondering if there is an issue of mixing OpenCV 2 and 3. When I go to compile this some of the errors I see make me think my OpenCV 2 (what the compile finds) should be OpenCV 3.

Oh, rats! I screwed up on my end! I posted the files from my ubuntu laptop (which has OpenCV 3.0) instead of the Jetson (which has OpenCV 2.0 as installed with Jetpack).

I’ve just attached the correct .zip file to the previous message and deleted the v3.0 files.

I appreciate your patience.

I’m wondering if it is still mixed up. The reason is that even after running cmake without error, file vid_proc.cpp has this include statement:

#include <opencv2/features2d.hpp>

My OpenCV 2 install places headers at:

/usr/include/opencv2<b>/features2d/</b>features2d.hpp
// Implies this alternate header state:
#include <opencv2/features2d/features2d.hpp>

Something about your OpenCV 2 install differs from mine. If I manually edit the “#include” statement to actually find my features2d.hpp I end up with the error that 1 argument is expected, but 0 arguments were passed…this seems to be an API version difference matching the original. The zip file I downloaded seems to be exactly the same as the prior one.

The forum can be strange about attachments because some changes don’t go through until the antivirus scan completes…there may be a weakness that if you delete a file and replace it with a different file of the same name, then the original might have been restored when the file scan finished. Try attaching again with a new file name (e.g., add “v2” in it or “v3” to designate version difference). Make sure that alternate header statement is what the vid_proc.cpp actually uses.

Indeed. The latest upload shouldn’t even have that include statement. I’ll attach _v2 to this post presently.
opencv_asus_v2.zip (61.7 KB)

I’ll give an observation which is the core of why I believe this fails, and then go through the long list of what I went through to find it (though I was unable to find a workaround).

OpenNI has some sample programs. One of them is “SimpleRead”. SimpleRead works great, but only when run as root. I don’t know if SimpleRead reads or writes a device special file (I know nothing about OpenNI, nor do I know what the USB hotplug creates when the XtionPro is plugged in), but somewhere is something requiring root permissions to function. The failure comes from OpenNI not allowing access when run through OpenCV…presumably running vid_proc as root should work around permissions, but for whatever reason, root permissions are not inherited as expected.

For reference, when SimpleRead fails for lack of permissions, this is the identifier of the device which apparently requires root:

Couldn't open device
        Could not open "1d27/0601@1/8": Failed to open the USB device!

I can verify the OpenCV “open” command does not find anything with either argument “CV_CAP_OPENNI_ASUS” nor with “CV_CAP_ANY” (it seems OpenCV does not believe any OpenCV capable devices exist). I do not have the OpenCV library itself set up for debug so the gdb did not say anything about why no device is found (gdb always fails in “events.c”, but there is so much linked in I don’t know which events.c is being complained about for lack of debugging symbols). Whatever stage has a permissions issue can’t be tracked through gdb.

dmesg was not interesting (audio can be ignored for this purpose). Connecting the device validates that up to the USB part things work as they should:

[ 1769.461865] tegra-xhci tegra-xhci: Firmware timestamp: 2014-09-16 02:10:07 UTC, Falcon state 0x20
[ 1769.807150] usb 1-3: new high-speed USB device number 8 using tegra-xhci
[ 1769.845533] usb 1-3: New USB device found, idVendor=1d27, idProduct=0601
[ 1769.845748] usb 1-3: New USB device strings: Mfr=5, Product=4, SerialNumber=0
[ 1769.845912] usb 1-3: Product: PrimeSense Device
[ 1769.846048] usb 1-3: Manufacturer: PrimeSense
[ 1770.111616] usb_audio: Warning! Unlikely big volume range (=4181), cval->res is probably wrong.
[ 1770.111714] usb_audio: [3] FU [Mic Capture Volume] ch = 2, val = 0/12544/3usb_audio: Warning! Unlikely big volume range (=4181), cval->res is probably wrong.
[ 1770.123429] usb_audio: [3] FU [Mic Capture Volume] ch = 1, val = 0/12544/3

strace was mostly not useful, but “sort of” implies that the USB did its job and the driver for the ASUS XtionPro LIVE does not respond as having any OpenCV-capable device (and explicitly does not have the CV_CAP_OPENNI_ASUS device). This makes me believe OpenCV relies on OpenNI and the issue is within the OpenNI software, which I know very little about. Unfortunately I could not see a system call blocked from permissions (more likely it was a library call which doesn’t forward the permissions issue other than to say “it don’t work”).

Going back to OpenNI, this is when I found out the SimpleRead sample program only works when run as root. I also noted that running your test program “vid_proc” as root does not work around the issue.

Someone who knows more about OpenNI and OpenCV will need to figure out how to either (A) get OpenCV to be able to call OpenNI with root permissions, or (B) get OpenNI to work as non-root. This latter might be a part of udev rules which is easily changed, but I don’t know what the XtionPRO device files are (if you know the name of the device special files you can use udev rules to modify permissions).

For reference, here is that URL again on OpenNI2 install:
http://myzharbot.robot-home.it/blog/software/configuration-nvidia-jetson-tk1/asus-xtion-pro-live-openni2-compilation-install-instructions/