Aruco.py
ИНИЦИАЛИЗАЦИЯ БИБЛИОТЕК
import cv2
import sys
import socket
from cv2 import aruco
cv2: Библиотека OpenCV для обработки изображений и видео.
sys: Модуль для работы с параметрами командной строки и другими системными функциями.
socket: Модуль для сетевого взаимодействия.
cv2.aruco: Подмодуль для работы с маркерами Aruco.
ПОДКЛЮЧЕНИЕ К СЕРВЕРУ
if len(sys.argv) > 1:
port_data = sys.argv[-1]
print(port_data)
port_data = port_data.split(',')
ports = port_data[0].split(':')
rtsp_url = port_data[1]
socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socks.connect((ports[0], int(ports[1])))
else:
print("данных нет")
exit()
Этот блок кода устанавливает подключение к серверу, используя данные, переданные через командную строку.
Процесс:
- Проверяет наличие аргументов командной строки.
- Извлекает данные о порте и URL RTSP-потока.
- Устанавливает сокетное соединение с сервером по указанному адресу и порту.
ИНИЦИАЛИЗАЦИЯ КАМЕРЫ И РАСПОЗНОВАНИЕ ARUCO
try:
cap = cv2.VideoCapture(rtsp_url)
aruco_dict = cv2.aruco.getPredefinedDictionary(aruco.DICT_4X4_100)
parameters = aruco.DetectorParameters()
while True:
ret, frame = cap.read()
if ret:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)
# Обрисовка обнаруженных маркеров ArUco
if ids is not None:
aruco.drawDetectedMarkers(frame, corners, ids)
# Отправка данных через сокет, если необходимо
socks.sendall(f"{ids.flatten().tolist()}".encode('utf-8'))
else:
# # Отправка данных через сокет, если не обнаружено маркеров
socks.sendall("null".encode())
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
print("Не удалось захватить изображение")
break
cv2.imshow('Frame with ArUco Markers', frame)
except Exception as e:
pass
Этот блок кода отвечает за захват видео, обнаружение маркеров Aruco и их отрисовку на кадре.
Процесс:
- Инициализация видеопотока: Открывает RTSP-поток для захвата видео.
- Настройка словаря Aruco: Задает словарь для обнаружения маркеров.
Основной цикл:
Захват кадра из видеопотока.
Преобразование кадра в оттенки серого.
Обнаружение маркеров Aruco на кадре.
Отрисовка найденных маркеров на кадре.
Отправка данных о найденных маркерах на сервер через сокет.
Отображение кадра с нарисованными маркерами.
ЗАКРЫТИЕ ПОТОКОВ И СОЕДИНЕНИЙ
# закрытие потоков, окна камеры, и подключения к серверу
finally:
cap.release()
socks.close()
cv2.destroyAllWindows()
Этот блок кода выполняется в любом случае (при нормальной работе или при возникновении исключения) и отвечает за закрытие всех открытых ресурсов.
Процесс подготовки кода:
Создайте файл и назовите его aruco.py:

Поэтапно копируйте части кода в ваш файл:


Установка библиотек: в данном случае библиотека cv2 не предустановлена в python. Без неё мы не сможем работать с видеопотоком и обрабатывать AruCo метки. Если вы еще не установили эту библиотеку, то вот процесс установки библиотеки:
Откройте терминал в Visual Studio Code (Terminal - New Terminal или комбинацией Ctrl + Shift + `)
В открывшимся терминале прописываем команду
pip install opencv-python
и нажимаем Enter
После установки библиотеки файл будет готов к работе, при запуске в консоль выводится "данных нет". Данный файл используется импортом для других файлов.
Last updated