Быстрый старт: камеры с моторизованной фокусировкой для NVIDIA Jetson
Подключение оборудования
Камера для NVIDIA Jetson Nano/Xavier NX
- Найдите разъём камеры (CSI). Он находится на краю несущей платы, напротив выводов GPIO.
- Потяните вверх за края пластикового фиксатора разъёма. Делайте это аккуратно, чтобы не вырвать фиксатор.
- Вставьте шлейф камеры контактами в сторону радиаторов. Не сгибайте шлейф и вставьте его до упора в разъём.
- Придерживая шлейф, нажмите на пластиковый фиксатор, пока он не встанет на место.
Камера для NVIDIA Orin Nano/Orin NX
- Найдите разъём камеры (CSI). Он находится на краю несущей платы, напротив выводов GPIO.
- Потяните вверх за края пластикового фиксатора разъёма. Делайте это аккуратно, чтобы не вырвать фиксатор.
- Вставьте шлейф камеры контактами в сторону радиаторов. Не сгибайте шлейф и вставьте его до упора в разъём.
- Придерживая шлейф, нажмите на пластиковый фиксатор, пока он не встанет на место.
Схема: NVIDIA Jetson Orin Nano
Шлейф FPC 15–22 контакта

Шлейф FFC 22–22 контакта

Схема: NVIDIA Jetson Orin NX
Шлейф FPC 15–22 контакта

Шлейф FFC 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
Справка:

ПримечаниеНа 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
Справка:

Пример:

Скриншот:

Камера 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