Jetson NanoでWebカメラ

Jetson Nanoでカメラ使いたいけど、組み込み向けのはよくわかんねえよ。と思ったのでWebカメラで簡単に撮像してみた。安物なので画質はよろしくないが、とりあえず試してみたい、という方は参考にしてください。

使ったもの

  • Jetson Nano 4GB

  • BUFFALO マイク内蔵120万画素Webカメラ

www.amazon.co.jp

セットアップ

前準備としてJetson Nanoは起動できるところまで済ませておくこと。

接続

Jetson Nanoの電源を入れて、ターミナルを開く。

接続確認のためにWebカメラを接続(すでに接続してある場合は抜き差し)して、ターミナルで下記コマンドを実行。

$ dmesg

すると、BAFFALOのカメラが接続されているっぽいことがわかる。この出力だとusb 1-2.1に接続されている。

[  110.858165] usb 1-2.1: new high-speed USB device number 5 using tegra-xusb
[  111.225241] usb 1-2.1: New USB device found, idVendor=0411, idProduct=0260
[  111.225246] usb 1-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  111.225249] usb 1-2.1: Product: BUFFALO BSWHD06M USB Camera
               
[  111.225252] usb 1-2.1: Manufacturer: KYE Systems Corp.
[  111.234231] uvcvideo: Found UVC 1.00 device BUFFALO BSWHD06M USB Camera
                (0411:0260)

無事に接続できたので、実際に動かしてみます。 いくつかサンプルプログラムは入っているのですが、自分のNanoがモニターにつながっておらず使えなかったのでPythonでコードを書きました。

準備:OpenCVのビルド

カメラ操作にはOpenCVが楽なのでOpenCVのインストールを行います。ただ、PIP等ではインストールできなかったのでソースコードからビルドします。

幸いビルド用のスクリプトを配布してくれている方がいるのでそれを使用します。

GitHub - mdegans/nano_build_opencv: Build OpenCV on Nvidia Jetson Nano

$ git clone https://github.com/mdegans/nano_build_opencv.git
$ cd nano_build_opencv
$ ./build_opencv.sh

待ちます。(完了まで1時間くらい?とにかく長いです)

完了したら動作確認します。

$ python3
>>>import cv2
>>>

import cv2でエラーがでなければひとまずOKです。

カメラ撮像

実際に動かしてみます。Jupyter notebookで下記を実行してください。

import cv2
%matplotlib inline
import matplotlib.pyplot as plt

DEVICE_ID = 0 

# open
cap = cv2.VideoCapture (DEVICE_ID)

# capture
_, frame = cap.read()
if(frame is not None):
    # show
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    plt.imshow(frame)
    
else:
    print("Failed video capture!")

# releace 
cap.release()
cv2.destroyAllWindows()

無事撮影できればOKです。