Armadilloフォーラム

Armadillo-IoT A6でNTSC出力カメラを使用する方法

hisao_ayame

2022年4月15日 13時05分

お世話になっております。

車載用の広角カメラ(NTSC出力)で撮影した画像を、Armadillo-IoT A6で撮影するシステムの検討を行っております。
NTSC出力をUVC規格信号に変換する市販アダプタが市販されているので、それを利用してUVCとしてArmadilloに接続し、撮影する方法を試しました。

過去の記事
・ Armadillo-640:USB Video Class(UVC)を有効にする
https://armadillo.atmark-techno.com/blog/615/3185
・ Armadillo-640:OpenCVを使ってみる
https://armadillo.atmark-techno.com/blog/615/4036
・ Armadillo-640:USBカメラで撮影した画像をMQTT通信でAWS(S3)に保存してみた
https://armadillo.atmark-techno.com/blog/10900/8817

などを参考に何とか通常のUVCカメラを繋いで場合、画像を取得できるようになりました。
しかし、前述の市販アダプタを介してNTSC出力のカメラを繋いで撮影した場合、添付のように画像が真っ黒になってしまい、正常に撮影できません。
何か対策ありますでしょうか?

御社サイトにてArmadillo-800シリーズ向けのNTSC拡張ボードが市販されているのを見たのですが、今回はA6で対応したくご相談した次第です。
お手数ですが、ご検討よろしくお願いいたします。

■補足①
市販のアダプタは2種類試しまして、出力画像はどちらも同じで真っ黒でした。
それぞれのアダプタを指した際に、以下のメッセージがCUIに表示されました。

#YOTOCAP USBビデオオーディオキャプチャレコーダー
[  889.210286] usb 2-1: new high-speed USB device number 3 using ci_hdrc
[  889.428091] uvcvideo: Found UVC 1.00 device AV TO USB2.0 (534d:0021)
[  889.450190] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
#USB2.0ビデオキャプチャー gv-usb2 RCA for PAL or NTSC
[ 1038.100205] usb 2-1: new high-speed USB device number 5 using ci_hdrc
[ 1039.181576] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (18ec:5555)
[ 1039.204620] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
[ 1039.222479] input: USB2.0 PC CAMERA as /devices/soc0/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb2/2-1/2-1:1.0/input/input3

試しにカメラ側は同じ構成でRaspberry Pi 3 Model B(OS Full32ビット)で動かしたところ、正常に撮影できました。

■補足②
撮影の方法は下記の2つの方法を試しました。
それぞれの出力結果画像は添付のもので、どちらも真っ黒になっています。

#subprocessを使う方法
$cmd = "fswebcam -i 0 -d v4l2:/dev/video0 -r 640x480 --jpeg 85 test.jpg"
$subprocess.call(cmd, shell=True)
--- Opening v4l2:/dev/video0...
/dev/video0 opened.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Setting output format to JPEG, quality 85
Writing JPEG image to 'test.jpg'.
#OpenCV撮影(pythonコード中で)
cap=cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imwrite('test.jpg',frame)
コメント

溝渕です。

> $cmd = "fswebcam -i 0 -d v4l2:/dev/video0 -r 640x480 --jpeg 85 test.jpg"

"-F"オプションで複数枚(例えば"-F 100"のように)取ってみていただけますか。最初の数枚が正しく撮れないカメラを見たことがあるように思います。

> 試しにカメラ側は同じ構成でRaspberry Pi 3 Model B(OS Full32ビット)で動かしたところ、正常に撮影できました。

Raspberry PI 3でもアタッチされていたドライバはUVCでしょうか。Raspberry PI 3でのusb-devicesコマンドの出力を教えてもらえますか。

溝渕様

お世話になっております。
早急なご返信ありがとうございます。

>"-F"オプションで複数枚(例えば"-F 100"のように)取ってみていただけますか。
試しに"-F 100"というオプションを追加して撮影したところ、添付のように正常に撮影できたようです。
アドバイスありがとうございます。
ちなみに、"-F 9"と一桁台の数字を入れたところ、添付のように映ってはいるもののおかしな画像が出力されました。
自分なりに、もう少し検証したいと思います。

>Raspberry PI 3でもアタッチされていたドライバはUVCでしょうか。
USBで接続して、自動でドライバがインストールされるようなので、おそらくUVCでアタッチ?したのだと思います。
ただ、当方の勘違いでRaspberry PI 3環境で改めてfswebcamコマンドを-Fオプションを付けずに動かしたところ、やはり真っ黒の画像でした。
デスクトップ環境で使える「guvcview」というソフト上でリアルタイムのカメラ映像が見えたので、Raspberry PI 3では正常に動くのだと思い込んでいたようです。
fswebcamコマンド(たぶんOpenCVも)での挙動は、Armadillo-IoT A6と差がないと思われます。
大変失礼しました。

> Raspberry PI 3でのusb-devicesコマンドの出力
ご参考までに、下記が出力されました。

$ usb-devices
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480 MxCh= 1
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev=05.10
S:  Manufacturer=Linux 5.10.17-v7+ dwc_otg_hcd
S:  Product=DWC OTG Controller
S:  SerialNumber=3f980000.usb
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
 
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 5
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=02 MxPS=64 #Cfgs=  1
P:  Vendor=0424 ProdID=9514 Rev=02.00
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I:  If#=0x0 Alt= 1 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=02 Driver=hub
 
T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0424 ProdID=ec00 Rev=02.00
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I:  If#=0x0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=smsc95xx
 
T:  Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#=  4 Spd=1.5 MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=1ddd ProdID=1002 Rev=01.10
S:  Manufacturer=SIGMACHIP
S:  Product=USB Keyboard
C:  #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid
I:  If#=0x1 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
 
T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#= 10 Spd=480 MxCh= 4
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=05e3 ProdID=0608 Rev=85.36
S:  Product=USB2.0 Hub
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
 
T:  Bus=01 Lev=03 Prnt=10 Port=01 Cnt=01 Dev#= 11 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=046d ProdID=c534 Rev=29.01
S:  Manufacturer=Logitech
S:  Product=USB Receiver
C:  #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=98mA
I:  If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid
I:  If#=0x1 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
 
T:  Bus=01 Lev=03 Prnt=10 Port=02 Cnt=02 Dev#= 12 Spd=480 MxCh= 0
D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=30de ProdID=6545 Rev=01.10
S:  Manufacturer=KIOXIA
S:  Product=TransMemory
S:  SerialNumber=C03FD5FE8EB3E57103230C9D
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=300mA
I:  If#=0x0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
 
T:  Bus=01 Lev=03 Prnt=10 Port=03 Cnt=03 Dev#= 13 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=18ec ProdID=5555 Rev=01.00
S:  Manufacturer=ARKMICRO
S:  Product=USB2.0 PC CAMERA
C:  #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=200mA
I:  If#=0x0 Alt= 0 #EPs= 1 Cls=0e(video) Sub=01 Prot=00 Driver=uvcvideo
I:  If#=0x1 Alt= 0 #EPs= 0 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo
I:  If#=0x2 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=snd-usb-audio
I:  If#=0x3 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=snd-usb-audio
ファイル ファイルの説明
20220415_170937.jpg "-F 100"オプションを追加した場合です。正常な画像です。
20220415_170734.jpg "-F 9"オプションを追加した場合です。少しおかしな画像となります。

溝渕です。

> >"-F"オプションで複数枚(例えば"-F 100"のように)取ってみていただけますか。
> 試しに"-F 100"というオプションを追加して撮影したところ、添付のように正常に撮影できたようです。
> アドバイスありがとうございます。
> ちなみに、"-F 9"と一桁台の数字を入れたところ、添付のように映ってはいるもののおかしな画像が出力されました。

このカメラははセンサーで取得した画像をそのままUSBホストに渡すものではありません。ホワイトバランス等を調整した後に渡します。

このカメラは恐らくソフトウェアから画像取得を開始した時点から画像の調整が始まると思うのですが、これに時間がかかっているものと思います。

このカメラが人が見て綺麗に見える程度に画像を調整できるようになるまでにどのくらい時間がかかるのかわかりませんが、それに合わせた十分な枚数を("-F"オプションで)捨てる必要があると思います。