Pioneer RKNN

Библиотека RKNN представляет собой набор классов и функций для работы с моделями машинного обучения. Для использования библиотеки необходимо установить фреймворк RKNNLite. Инструкцию по установке можно найти в официальной документации RKNN.

Чтобы работать с искусственным интеллектом, сначала необходимо импортировать класс модели из библиотеки pioneer_rknn, а затем инициализировать экземпляр этого класса.

Доступные модели:

  • Yolo - семейство моделей используемых для обнаружения и классификации объектов на изображении.

  • YoloPose - модифицация Yolo, используется для оценки позы человека.

  • PaddleOCR - ансамбль моделей используемых для распознавания текста и символов.

# Импорт необходимого модуля

from pioneer_rknn import Yolo

# Инициализация экземпляра класса Yolo моделью "yolov8n"

model = Yolo(model_name="yolov8n")

Подсказка

Класс ImageViewer обеспечивает вывод изображения для его удобного просмотра, данный класс импортируется из библиотеки Pioneer-SDK2

Подсказка

Другие модели могут быть найдены в репозитории: https://github.com/airockchip/rknn_model_zoo

Класс ModelContainer

Класс ModelContainer обеспечивает базовые функции для загрузки, выполнения инференса нейронной сети. При добавлении новых моделей нужно наследоваться от данного класса, переопределяя метод run в дочернем классе.

# Пример переопределения функции run для модели Yolo

def run(self, inputs: list) -> tuple | None:
    raw_outputs = super().run(inputs)
    return self.post_process(raw_outputs)

Подсказка

При наследовании от ModelContainer обязательно укажите атрибут класса arch со списком кратких имен архитектур моделей. Это имя используется для проверки соответствия модели при загрузке из регистра.

# Пример №1

arch = ["yolov8", "yolov11"]

# Пример №2

arch = ["yolov8-pose"]

Методы ModelContainer

model_container = ModelContainer(self, model_path: str | None = None, model_name: str | None = None, target: str | None = None, device_id: int | None = None) -> None
Описание метода:

Инициализирует контейнер модели.

Аргументы метода:
  • model_path - Путь к модели в формате .rknn. (при отсутствии model_name)

  • model_name - Имя модели в регистре моделей. (при отсутствии model_path)

  • target - Целевая платформа для выполнения, если не указана - определяется автоматически.

  • device_id - Идентификатор устройства. Если не указан, используется нулевое ядро нейровычислителя.

run(self, inputs: list) list
Описание метода:

Выполняет инференс на заданных входных данных.

Аргументы метода:
  • inputs - Входные данные для инференса.

Возвращает:

Результаты инференса.

release(self) None
Описание метода:

Освобождает ресурсы нейровычислительного модуля.

Класс ModelRegistry

Класс ModelRegistry предоставляет интерфейс для взаимодействия с регистром моделей, позволяя получать список моделей, информацию о конкретной модели, удалять и загружать модели.

Методы ModelRegistry

model_registry = ModelRegistry(self, url: str = "http://127.0.0.1:7777/model")
Описание метода:

Инициализирует экземпляр ModelRegistry.

Аргументы метода:
  • url - URL-адрес регистра моделей.

list_model(self) dict | None
Описание метода:

Получает список всех моделей, зарегистрированных в регистре.

Возвращает:

Словарь с информацией о моделях или None в случае ошибки.

get_model_info(self, name: str) dict | None
Описание метода:

Получает подробную информацию о конкретной модели по ее имени.

Аргументы метода:
  • name - Имя модели.

Возвращает:

Словарь с информацией о модели или None в случае ошибки.

delete_model(self, name: str) dict | None
Описание метода:

Удаляет модель из регистра по ее имени.

Аргументы метода:
  • name - Имя модели для удаления.

Возвращает:

Словарь с результатом операции удаления или None в случае ошибки.

upload_model(self, name: str, version: str, filepath: str, arch: str)
Описание метода:

Загружает новую модель в регистр.

Аргументы метода:
  • name - Имя модели.

  • version - Версия модели. Если версия - пустая строка, будет автоматическое инкрементирование версии.

  • filepath - Путь к файлу модели для загрузки.

  • arch - Архитектура модели (например, «yolov8», «yolov8-pose»).

Класс Yolo

Класс Yolo инкапсулирует логику работы с моделью YOLO: загружает модель, выполняет инференс по входному изображению и проводит постобработку для получения координат объектов, классов и уверенности детекции.

Подсказка

Поддерживаемые архитектуры:

  • yolov8

  • yolov11

Методы Yolo

yolo = Yolo(self, model_path: str | None = None, model_name: str | None = None, target: str | None = None, device_id: int | None = None, object_thresh: float = 0.25, nms_thresh: float = 0.45, img_width: int = 640, img_height: int = 640) -> None
Описание класса:

Инициализирует модель Yolo.

Аргументы метода:
  • model_path - Путь к модели .rknn (при отсутствии model_name).

  • model_name - Имя модели в регистре моделей (при отсутствии model_path).

  • target - Целевая платформа для выполнения.

  • device_id - Идентификатор устройства.

  • object_thresh - Порог обнаружения объекта.

  • nms_thresh - Порог NMS.

  • img_width - Ширина входного изображения.

  • img_height - Высота входного изображения.

Класс YoloPose

Класс YoloPose расширяет функциональность Yolo для решения задачи оценки позиции (pose estimation). Помимо детекции объектов, извлекает ключевые точки скелета для каждого обнаруженного объекта и выполняет постобработку для получения координат и достоверности ключевых точек.

Подсказка

Поддерживаемые архитектуры:

  • yolov8-pose

Методы YoloPose

yolo_pose = YoloPose(self, model_path: str | None = None, model_name: str | None = None, target: str | None = None, device_id: int | None = None, object_thresh: float = 0.4, nms_thresh: float = 0.5, img_width: int = 640, img_height: int = 640) -> None
Описание метода:

Инициализирует модель YoloPose.

Аргументы метода:
  • model_path - Путь к модели .rknn (при отсутствии model_name).

  • model_name - Имя модели в регистре моделей (при отсутствии model_path).

  • target - Целевая платформа для выполнения.

  • device_id - Идентификатор устройства.

  • object_thresh - Порог обнаружения объекта.

  • nms_thresh - Порог NMS.

  • img_width - Ширина входного изображения.

  • img_height - Высота входного изображения.

run(self, inputs: list[np.ndarray]) list['YoloPose.DetectBox']
Описание метода:

Выполняет инференс модели и последующую обработку выходов.

Аргументы метода:
  • inputs - Список из изображений.

Возвращает:

Список обнаруженных боксов с ключевыми точками.

Подсказка

Подкласс DetectBox представляет обнаруженный бокс с ключевыми точками, находится внутри класса YoloPose.

DetectBox(self, classId: int, score: float, xmin: float, ymin: float, xmax: float, ymax: float, keypoint: np.ndarray) None:
Аргументы метода:
  • classId (int) - Идентификатор класса объекта.

  • score (float) - Уверенность обнаружения.

  • xmin (float) - Левая координата.

  • ymin (float) - Верхняя координата.

  • xmax (float) - Правая координата.

  • ymax (float) - Нижняя координата.

  • keypoint (np.ndarray) = Массив точек позы [17×3].

Класс PaddleOCR (PPOCR)

Класс PaddleOCR инкапсулирует пайплайн OCR: выделение текстовых областей, чем занимается модель «детекции», а далее на выделенных областях распознаётся символьный текст, за это отвечает модель «распознавания» текстовых символов.

Подсказка

Поддерживаемые архитектуры:

  • PP-OCRv5_mobile_det

  • eslav_PP-OCRv5_mobile_rec

Подсказка

PaddleOCR хранит два основных компонента:

  • self.text_detector - объект модели детекции текста - ищет текстовые регионы на изображении (четырёхугольники).

  • self.text_recognizer - объект модели распознавания текста - распознаёт текст в найденных ограничивающих четырёхугольниках.

Методы PaddleOCR

def __init__(self, det_model_path: str | None = None, rec_model_path: str | None = None, rec_model_name: str | None = None, det_model_name: str | None = None) -> None
Описание метода:

Инициализирует модель PaddleOCR.

Аргументы метода:
  • det_model_path - Путь к detector-модели .rknn.

  • rec_model_path - Путь к recognizer-модели .rknn.

  • det_model_name - Имя detector-модели в регистре моделей.

  • rec_model_name - Имя recognizer-модели в регистре моделей.

def run(self, img: np.ndarray) -> tuple[list[np.ndarray], list[list[tuple[str, float]]]]
Описание метода:

Выполняет инференс модели и последующую обработку выходов.

Аргументы метода:
  • img - Изображение дял инференса.

Возвращает:

Список найденных ограничивающих четырёхугольников. Список результатов распознавания для каждого четырёхугольника.

Примеры