Jetson TX2-usb camera streaming-seek shot pro

Hi :)

I wanna connect seek shot pro(thermal camera) to Jetson TX2 and streaming it in real time.
But I have some problems :(

First, when I command lsusb
2207:0000 is my device’s IdVendor and IdProduct.

Screenshot from 2020-05-04 16-37-29

So I use this code(from this site) with my device’s IdVendor and IdProduct.

# You will need to have python 2.7 (3+ may work)
# and PyUSB 1.0
# and PIL 1.1.6 or better
# and numpy
# and scipy
# and ImageMagick

# Many thanks to the folks at eevblog, especially (in no particular order) 
#   miguelvp, marshallh, mikeselectricstuff, sgstair and many others
#     for the inspiration to figure this out
# This is not a finished product and you can use it if you like. Don't be
# surprised if there are bugs as I am NOT a programmer..... ;>))


## https://github.com/sgstair/winusbdotnet/blob/master/UsbDevices/SeekThermal.cs
import usb.core
import usb.util
import Tkinter
from PIL import Image, ImageTk
import numpy
from scipy.misc import toimage
import sys, os, time


# find our Seek Thermal device  289d:0010
dev = usb.core.find(idVendor=0x2207, idProduct=0x0000)
if not dev: raise ValueError('Device not found')

def send_msg(bmRequestType, bRequest, wValue=0, wIndex=0, data_or_wLength=None, timeout=None):
    assert (dev.ctrl_transfer(bmRequestType, bRequest, wValue, wIndex, data_or_wLength, timeout) == len(data_or_wLength))

# alias method to make code easier to read
receive_msg = dev.ctrl_transfer

def deinit():
    '''Deinit the device'''
    msg = '\x00\x00'
    for i in range(3):
        send_msg(0x41, 0x3C, 0, 0, msg)


# set the active configuration. With no arguments, the first configuration will be the active one
dev.set_configuration()

# get an endpoint instance
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]

But, when I run this code, I got this error…

Traceback (most recent call last):
  File "seek.py", line 44, in <module>
    dev.set_configuration()
  File "/usr/local/lib/python3.6/dist-packages/usb/core.py", line 869, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "/usr/local/lib/python3.6/dist-packages/usb/core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/usb/core.py", line 148, in managed_set_configuration
    self.backend.set_configuration(self.handle, cfg.bConfigurationValue)
  File "/usr/local/lib/python3.6/dist-packages/usb/backend/libusb1.py", line 794, in set_configuration
    _check(self.lib.libusb_set_configuration(dev_handle.handle, config_value))
  File "/usr/local/lib/python3.6/dist-packages/usb/backend/libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 16] Resource busy

I really confused what is exactly problem with this…

I am not sure, But I guess Jetson TX2 couldn’t recognize my device…
If Jetson TX2 couldn’t recognize my device, then Is there any way to recognize it or other way?

ps. I also considering using ros.

If anyone knows, I would really really appreciate your help :)

Thank you for reading this topic :) !

Could you check if the /dev/videox be gen by usb camera driver?

This is what I’ve got…!

Screenshot from 2020-05-04 19-46-21

Is this mean jetson tx2 couldn’t recognize seek shot pro?
If so, what am I gonna have to do?

Check if it’s the correct device by v4l2-ctl
v4l2-ctl --all

I’ve got this
What is this mean?
Thank you for your help :)

Driver Info (not using libv4l2):
	Driver name   : tegra-video
	Card type     : vi-output, ov5693 2-0036
	Bus info      : platform:15700000.vi:2
	Driver version: 4.9.140
	Capabilities  : 0x84200001
		Video Capture
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps   : 0x04200001
		Video Capture
		Streaming
		Extended Pix Format
Priority: 2
Video input : 0 (Camera 2: no power)
Format Video Capture:
	Width/Height      : 2592/1944
	Pixel Format      : 'YUYV'
	Field             : None
	Bytes per Line    : 5184
	Size Image        : 10077696
	Colorspace        : sRGB
	Transfer Function : Default (maps to sRGB)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Limited Range)
	Flags             : 

Camera Controls

                     group_hold 0x009a2003 (bool)   : default=0 value=0 flags=execute-on-write
                     hdr_enable 0x009a2004 (intmenu): min=0 max=1 default=0 value=0
                    eeprom_data 0x009a2005 (str)    : min=0 max=2048 step=2 value='00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' flags=read-only, has-payload
                       otp_data 0x009a2006 (str)    : min=0 max=1024 step=2 value='9332a83b82207f44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047000000000000000000130000000000' flags=read-only, has-payload
                        fuse_id 0x009a2007 (str)    : min=0 max=16 step=2 value='9332a83b82207f44' flags=read-only, has-payload
                           gain 0x009a2009 (int64)  : min=0 max=0 step=0 default=0 value=10 flags=slider
                       exposure 0x009a200a (int64)  : min=0 max=0 step=0 default=0 value=34 flags=slider
                     frame_rate 0x009a200b (int64)  : min=0 max=0 step=0 default=0 value=1816577 flags=slider
                 exposure_short 0x009a200c (int64)  : min=0 max=0 step=0 default=0 value=34 flags=slider
                    bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
                override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
                   height_align 0x009a2066 (int)    : min=1 max=16 step=1 default=1 value=1
                     size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
               write_isp_format 0x009a2068 (int)    : min=1 max=1 step=1 default=1 value=1
       sensor_signal_properties 0x009a2069 (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
        sensor_image_properties 0x009a206a (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
      sensor_control_properties 0x009a206b (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
              sensor_dv_timings 0x009a206c (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
               low_latency_mode 0x009a206d (bool)   : default=0 value=0
                   sensor_modes 0x009a2082 (int)    : min=0 max=30 step=1 default=30 value=3 flags=read-only

This command shows the video0 is the on board CSI camera instead of your USB camera.
Your USB camera have problem to register the video node. Maybe it’s not standard v4l2 UVC camera.
Does this device working on any others platform?

You could post the verbose information and see what it says about device class:
sudo lsusb -d 2207:0000

I’ve got this

Bus 001 Device 004: ID 2207:0000 Fuzhou Rockchip Electronics Company

What I am confused about now is that the device seems to be recognized, but is it not able to read video information?

Then what am I have to do to read video information?

I haven’t tried it yet, but I will try it :) !

This is PCI telling you it sees the device, and that the device has reported what it is. PCI itself in no way provides the driver to the connected device…PCI is just a data pipe (PCI has correctly completed its job and what remains does not involve PCI software so long as the verbose lspci does not show an error). To this end you may want to see what the verbose lspci shows, and this might indicate a driver did load or errors occurred without a driver loading, so on (the “-vvv” makes lspci the most verbose it can be):
sudo lsusb -d 2207:0000 -vvv

You might need to install additional drivers/software.

When I contacted the camera company, they said it was not a uvc camera.
If so, is it not possible to receive it in real time through opencv or ros?
Then, is there any other way?
Thank you very much for all the answers :)

If not UVC you must need the driver and software for it.

For more detail on what @ShaneCCC said: Certain “default” classes of devices following particular standards can use the “standard” drivers. For any device which follows any other configuration the manufacturer must provide a driver. “UVC” is the name for the standard driver “USB Video Class”. Since your device is not UVC the UVC driver cannot do the job and it is up to the manufacturer (either a binary arm64/aarch64 driver or source code to build a driver against your kernel/architecture).