Прочие библиотеки Python, используемые в ровере
В этой статье описаны прочие библиотеки проекта для работы с такими алгоритмами как: видеопоток, нейросеть и т.д..
Так же рекомендуется проверять коды, представленные ниже в отдельном проекте:

cv2
OpenCV (Библиотека компьютерного зрения с открытым исходным кодом) - нестандартная библиотека компьютерного зрения, предоставляющая широкий спектр функций для обработки изображений и видео, обнаружения объектов, распознавания объектов и многого другого.
Базовый код для вывода видеопотока:
import cv2
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Error: Unable to open stream")
else:
print("Stream opened successfully")
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow("Stream", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Объяснение кода:
Инициализация библиотек:
import cv2
cv2 - нестандартная библиотека python для работы с видеопотоком
Инициализация камеры:
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Error: Unable to open stream")
else:
print("Stream opened successfully")
Здесь в переменной cap инициализируется видеопоток (при значении 0 выводится изображение с внутреннего устройства вашего компьютера)
В условии прописано, что если видеопоток не открылся, выводится сообщение: Error: Unable to open stream, если видеопоток открылся: Stream opened successfully. Сообщения выводятся в терминал.
Захват и отображение видеопотока:
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow("Stream", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
В этом условии пока открыт видеопоток код будет получать значения с камеры с помощью cap.read() и показывать видеопоток благодаря cv2.imshow()
Установка библиотеки:
Так как библиотека не стандартная в Python, ее необходимо установить
Откройте Visual Studio Code

Откройте терминал (Terminal -> New Terminal или комбинацией Ctrl+Shift+`)


Введите команду и установите библиотеку
В терминал пропишите: pip install opencv-python


Запуск кода:
Создайте файл и назовите его, например, cv2_lib.py

Скопируйте код в файл:

Запустите код:
При запуске кода открывается отдельно окно с трансляцией видеопотока:

Ultralytics
Ultralytics - это мощная библиотека для компьютерного зрения и машинного обучения, которая позволяет легко работать с моделями YOLO (You Only Look Once) для обнаружения объектов на изображениях и видеопотоках.
YOLO - это алгоритм обнаружения объектов в реальном времени, который может обнаруживать объекты на изображении или видеопотоке и определять их класс (например: человек, машина, собака и т.д.). Ultralytics предоставляет готовые модели YOLO, которые можно использовать для обнаружения объектов на изображениях и видеопотоках.
Пример кода:
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame)
annotated_frame = results[0].plot()
cv2.imshow('Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Объяснение кода:
Инициализация библиотек:
cv2: OpenCV (Компьютерное зрение) - нестандартная библиотека python для работы с видеопотоком.
ultralytics: Ultralytics - это библиотека для работы с моделями компьютерного зрения, такими как YOLO (You Only Look Once). Она позволяет легко использовать эти модели для детекции объектов на изображениях и видео.
Инициализация модели и видеопотока:
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)
Здесь в переменную model мы инициализируем модель yolov8n.pt, в переменную cap - видеопоток с внутреннего устройства вашего компьютера
ПРИМЕЧАНИЕ: модель устанавливается самостоятельно с первым запуском кода, если после установки модели код завершил работу, запустите его снова.
Открытие потока и работа нейросети по модели yolov8n.pt:
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame)
annotated_frame = results[0].plot()
cv2.imshow('Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Здесь запускается чтение кадра с помощью переменной frame. Обработка модели происходит с помощью переменной results.
annotated_frame вырисовывает рамки и дает информацию об обнаруженном нейросетью объекте, далее уже обработанные кадры выводятся в окне видеопотока с рамками
Установка библиотеки:
Библиотека ultralytics не является предустановленной
Откройте терминал (Terminal -> New Terminal или комбинацией Ctrl+Shift+`)

Введите команду: pip install ultralytics и подтвердите команду

Запуск кода:
Создайте файл с названием ultralytics_lib.py:

Скопируйте код в файл:

Запустите код:

Как можно увидеть, в видеопотоке появились рамки распознавания. На кадре виден человек person, и телефон cell phone. В терминал выводится информация о найденных объектах.
Mediapipe
Mediapipe - это библиотека для работы с жестами в видеопотоке. Mediapipe позволяет реализовать различный функционал с помощью жестов. Процесс установки и работы с mediapipe:
Установите библиотеку:
Откройте Visual Studio Code и запустите терминал (Terminal -> New Terminal или комбинацией ctrl + shift + `)

Пропишите команду pip install mediapipe

Проверьте работоспособность библиотеки
import cv2
import numpy as np
import mediapipe as mp
import time
import os
# Подключаем камеру
cap = cv2.VideoCapture(0)
cap.set(3, 640) # Width
cap.set(4, 480) # Lenght
cap.set(10, 100) # Brightness
mpHands = mp.solutions.hands
hands = mpHands.Hands(False)
npDraw = mp.solutions.drawing_utils
pTime = 0
cTime = 0
#Зацикливаем получение кадров от камеры
while True:
success, img = cap.read()
img = cv2.flip(img,1) # Mirror flip
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = hands.process(imgRGB)
if results.multi_hand_landmarks:
for handLms in results.multi_hand_landmarks:
for id, lm in enumerate(handLms.landmark):
h,w,c = img.shape
cx, cy = int(lm.x*w), int(lm.y*h)
# print(id, lm)
if id == 8 or id == 12:
cv2.circle(img, (cx,cy),10,(255,0,255),cv2.FILLED)
npDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
cTime = time.time()
fps = 1/(cTime-pTime)
pTime = cTime
cv2.putText(img, str(int(fps)),(10,30), cv2.FONT_HERSHEY_PLAIN, 2, (255,0,0), 2) # ФреймРейт
cv2.imshow('python', img)
if cv2.waitKey(20) == 27: # exit on ESC
break
cv2.destroyWindow("python")
cap.release()
cv2.waitKey(1)
Импорт библиотек:
import cv2 import numpy as np import mediapipe as mp import time import os
Здесь мы импортируем необходимые библиотеки:
cv2
: для работы с изображениями и видеопотоками (OpenCV).numpy
: для работы с массивами.mediapipe
: для обнаружения и отслеживания рук.time
: для работы со временем (например, для расчета FPS).os
: для работы с операционной системой (хотя в этом коде она не используется).
Подключение к камере:
cap = cv2.VideoCapture(0) cap.set(3, 640) # Width cap.set(4, 480) # Length cap.set(10, 100) # Brightness
cv2.VideoCapture(0)
: открывает веб-камеру (0 - это индекс первой камеры).cap.set(3, 640)
иcap.set(4, 480)
: устанавливает ширину и высоту видеопотока.cap.set(10, 100)
: устанавливает яркость камеры.
Инициализация MediaPipe:
mpHands = mp.solutions.hands hands = mpHands.Hands(False) npDraw = mp.solutions.drawing_utils
mpHands.Hands(False)
: создает объект для обнаружения рук. ПараметрFalse
указывает, что мы не хотим использовать модель для отслеживания жестов.npDraw
: утилиты для рисования на изображениях (например, для отображения соединений между ключевыми точками рук).
Основной цикл:
while True: success, img = cap.read() img = cv2.flip(img,1) # Mirror flip
В этом цикле происходит захват кадров с камеры.
cap.read()
считывает кадр, аcv2.flip(img, 1)
переворачивает изображение по горизонтали (для эффекта зеркала).Обработка изображения:
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) results = hands.process(imgRGB)
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
: преобразует изображение из формата BGR (который использует OpenCV) в RGB.hands.process(imgRGB)
: обрабатывает изображение и ищет руки.
Отрисовка ключевых точек и соединений:
if results.multi_hand_landmarks: for handLms in results.multi_hand_landmarks: for id, lm in enumerate(handLms.landmark): h,w,c = img.shape cx, cy = int(lm.x*w), int(lm.y*h) if id == 8 or id == 12: cv2.circle(img, (cx,cy),10,(255,0,255),cv2.FILLED) npDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS)
Если обнаружены руки, для каждой руки (
handLms
) мы проходим по всем ключевым точкам (landmark
).h, w, c = img.shape
: получает высоту, ширину и количество каналов изображения.cx
иcy
: вычисляют координаты ключевых точек на изображении.Если идентификатор (
id
) ключевой точки равен 8 или 12 (что соответствует указательному и среднему пальцам), то рисуем круг на этих точках.npDraw.draw_landmarks
: рисует соединения между ключевыми точками руки.
Расчет FPS:
cTime = time.time() fps = 1/(cTime-pTime) pTime = cTime cv2.putText(img, str(int(fps)),(10,30), cv2.FONT_HERSHEY_PLAIN, 2, (255,0,0), 2)
cTime = time.time()
: получает текущее время.fps = 1/(cTime-pTime)
: вычисляет количество кадров в секунду (FPS).cv2.putText
: отображает FPS на изображении.
Отображение изображения:
cv2.imshow('python', img) if cv2.waitKey(20) == 27: # exit on ESC break
cv2.imshow('python', img)
: отображает текущее изображение в окне с названием 'python'.cv2.waitKey(20)
: ждет 20 миллисекунд нажатия клавиши. Если нажата клавиша ESC (код 27), цикл прерывается.
Очистка ресурсов:
cv2.destroyWindow("python") cap.release() cv2.waitKey(1)
cv2.destroyWindow("python")
: закрывает окно отображения.cap.release()
: освобождает ресурсы, связанные с камерой.cv2.waitKey(1)
: дополнительная задержка для завершения работы.
Вывод:

Last updated