К содержимому
  1. Главная
  2. Документация
  3. Камеры для NVIDIA Jetson
  4. Быстрый старт: камеры с моторизованной фокусировкой для NVIDIA Jetson

Быстрый старт: камеры с моторизованной фокусировкой для NVIDIA Jetson

Документация Arducam · перевод arducam-russia.ru

Подключение оборудования

Камера для NVIDIA Jetson Nano/Xavier NX

  • Найдите разъём камеры (CSI). Он находится на краю несущей платы, напротив выводов GPIO.
  • Потяните вверх за края пластикового фиксатора разъёма. Делайте это аккуратно, чтобы не вырвать фиксатор.
  • Вставьте шлейф камеры контактами в сторону радиаторов. Не сгибайте шлейф и вставьте его до упора в разъём.
  • Придерживая шлейф, нажмите на пластиковый фиксатор, пока он не встанет на место.

Камера для NVIDIA Orin Nano/Orin NX

  • Найдите разъём камеры (CSI). Он находится на краю несущей платы, напротив выводов GPIO.
  • Потяните вверх за края пластикового фиксатора разъёма. Делайте это аккуратно, чтобы не вырвать фиксатор.
  • Вставьте шлейф камеры контактами в сторону радиаторов. Не сгибайте шлейф и вставьте его до упора в разъём.
  • Придерживая шлейф, нажмите на пластиковый фиксатор, пока он не встанет на место.

Схема: NVIDIA Jetson Orin Nano

Шлейф FPC 15–22 контакта
Подключение к NVIDIA Jetson Orin Nano шлейфом 15–22 контакта
Шлейф FFC 22–22 контакта
Подключение к NVIDIA Jetson Orin Nano шлейфом 22–22 контакта

Схема: NVIDIA Jetson Orin NX

Шлейф FPC 15–22 контакта
Подключение к NVIDIA Jetson Orin NX шлейфом 15–22 контакта
Шлейф FFC 22–22 контакта
Подключение к NVIDIA Jetson Orin NX шлейфом 22–22 контакта

Программное обеспечение

Поддерживаемые платформы и версии JetPack (L4T)

Поддерживаемые платформы и версии JetPack смотрите в руководстве:

Поддерживаемые платформы и версии JetPack для камер Arducam на NVIDIA Jetson

Камера IMX219 с моторизованной фокусировкой

Первый запуск

  • Скачайте репозиторий Arducam для Jetson Nano:
git clone https://github.com/ArduCAM/Nvidia_Jetson.git
  • Перейдите в папку с демо-программой автофокуса:
cd Nvidia_Jetson/IMX219_AutoFocus
  • Запустите демо-программу.

Этот пример на Python создан на основе примера JetsonHacks и доработан для модуля камеры Arducam IMX219 с автофокусом.

ПримечаниеНа Jetson Nano B01 разъёму CAM0 соответствует шина I2C 7, разъёму CAM1 — шина 8. На Jetson Xavier NX/Jetson Orin Nano разъёму CAM0 соответствует шина I2C 10, разъёму CAM1 — шина 9. На Jetson Orin NX разъёму CAM0 соответствует шина I2C 9, разъёму CAM1 — шина 10.
sudo python Autofocus.py -i 7

Скрипт на Python:

# MIT License
# Copyright (c) 2019 JetsonHacks
# See license
# Using a CSI camera (such as the Raspberry Pi Version 2) connected to a 
# NVIDIA Jetson Developer Kit using OpenCV
# Drivers for the camera and OpenCV are included in the base image

import cv2
import numpy as py
import os

def focusing(val):
    value = (val << 4) & 0x3ff0
    data1 = (value >> 8) & 0x3f
    data2 = value & 0xf0
    os.system("i2cset -y 6 0x0c %d %d" % (data1,data2))

def sobel(img):
    img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
    img_sobel = cv2.Sobel(img_gray,cv2.CV_16U,1,1)
    return cv2.mean(img_sobel)[0]

def laplacian(img):
    img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
    img_sobel = cv2.Laplacian(img_gray,cv2.CV_16U)
    return cv2.mean(img_sobel)[0]


# gstreamer_pipeline returns a GStreamer pipeline for capturing from the CSI camera
# Defaults to 1280x720 @ 60fps 
# Flip the image by setting the flip_method (most common values: 0 and 2)
# display_width and display_height determine the size of the window on the screen

def gstreamer_pipeline (capture_width=1280, capture_height=720, display_width=1280, display_height=720, framerate=60, flip_method=0) :   
    return ('nvarguscamerasrc ! ' 
    'video/x-raw(memory:NVMM), '
    'width=(int)%d, height=(int)%d, '
    'format=(string)NV12, framerate=(fraction)%d/1 ! '
    'nvvidconv flip-method=%d ! '
    'video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! '
    'videoconvert ! '
    'video/x-raw, format=(string)BGR ! appsink'  % (capture_width,capture_height,framerate,flip_method,display_width,display_height))

def show_camera():
    max_index = 10
    max_value = 0.0
    last_value = 0.0
    dec_count = 0
    focal_distance = 10
    focus_finished = False
    # To flip the image, modify the flip_method parameter (0 and 2 are the most common)
    print gstreamer_pipeline(flip_method=0)
    cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
    if cap.isOpened():
        window_handle = cv2.namedWindow('CSI Camera', cv2.WINDOW_AUTOSIZE)
        # Window 
        while cv2.getWindowProperty('CSI Camera',0) >= 0:
            ret_val, img = cap.read()
            cv2.imshow('CSI Camera',img)

            if dec_count < 6 and focal_distance < 1000:
                #Adjust focus
                focusing(focal_distance)
                #Take image and calculate image clarity
                val = laplacian(img)
                #Find the maximum image clarity
                if val > max_value:
                    max_index = focal_distance
                    max_value = val

                #If the image clarity starts to decrease
                if val < last_value:
                    dec_count += 1
                else:
                    dec_count = 0
                #Image clarity is reduced by six consecutive frames
                if dec_count < 6:
                    last_value = val
                    #Increase the focal distance
                    focal_distance += 10

            elif not focus_finished:
                #Adjust focus to the best/
                focusing(max_index)
                focus_finished = True
            # This also acts as 
            keyCode = cv2.waitKey(16) & 0xff
            # Stop the program on the ESC key
            if keyCode == 27:
                break
            elif keyCode == 10:
                max_index = 10
                max_value = 0.0
                last_value = 0.0
                dec_count = 0
                focal_distance = 10
                focus_finished = False
        cap.release()
        cv2.destroyAllWindows()
    else:
        print 'Unable to open camera'


if __name__ == '__main__':
    show_camera()

Камера IMX477 с моторизованной фокусировкой

Подготовка

Установка драйвера

Установите драйвер по руководству Драйвер для камеры IMX477.

Первый запуск

  • Скачайте репозиторий Arducam для Jetson Nano:
git clone https://github.com/ArduCAM/MIPI_Camera.git
  • Перейдите в папку с демо-программой автофокуса:
cd ~/MIPI_Camera/Jetson/IMX477/AF_LENS
  • Автофокус:
python Autofocus.py -i 7

Справка:

Справка по параметрам скрипта Autofocus.py
ПримечаниеНа Jetson Nano B01 разъёму CAM0 соответствует шина I2C 7, разъёму CAM1 — шина 8. На Jetson Xavier NX/Jetson Orin Nano разъёму CAM0 соответствует шина I2C 10, разъёму CAM1 — шина 9. На Jetson Orin NX разъёму CAM0 соответствует шина I2C 9, разъёму CAM1 — шина 10.
  • Моторизованная фокусировка: python FocuserExample.py -i 7

Справка:

Справка по параметрам скрипта FocuserExample.py

Пример:

Пример запуска FocuserExample.py

Скриншот:

Окно программы ручной фокусировки

Камера Jetvariety с моторизованной фокусировкой

Подготовка

Установка драйвера

Установите драйвер по руководству Драйвер для камер Jetvariety.

  • Проверьте, определяется ли камера

Выполните команду. Если камера обнаружена, в выводе будет /dev/video0.

ls /dev/video*
  • Проверьте поддерживаемые форматы и разрешения
sudo apt-get install -y v4l-utils
v4l2-ctl --list-formats-ext

Запуск камеры

  • Установите пакет Python
wget https://bootstrap.pypa.io/get-pip.py  
sudo python3 get-pip.py  
sudo pip3 install v4l2-fix 
  • Скачайте библиотеку
cd ~
git clone https://github.com/ArduCAM/MIPI_Camera.git 
  • Запустите камеру
cd ~/MIPI_Camera/Jetson/Jetvariety/example
# directly preview
python arducam_displayer.py

# set resolution and formats to preview, example:
python arducam_displayer.py -f BG10 --width 1920 --height 1080

Настройка фокуса

ПримечаниеИ для ручной фокусировки, и для автофокуса сначала выполните действия из предыдущего раздела, затем откройте второй терминал и выполните нужную команду.

Ручная фокусировка

cd ~/MIPI_Camera/Jetson/Jetvariety/example/focus
python3 python3 FocuserExample.py

Автофокус

cd ~/MIPI_Camera/Jetson/Jetvariety/example/focus
python3 Focuser.py -i 7

Запросить цену

Укажите количество — пришлём коммерческое предложение.