1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/duping812-jetson-inference

Клонировать/Скачать
imagenet-example-python-2.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.06.2025 15:38 5e07e18

Назад | Вперед | Содержание
Распознавание изображений

# Написание собственной программы для распознавания изображений (Python) В предыдущем шаге мы запустили образец приложения, входящее в репозиторий `jetson-inference`. Теперь мы пройдем через создание новой программы с нуля на Python для распознавания изображений, названной [`my-recognition.py`](../python/examples/my-recognition.py). Этот скрипт загружает произвольное изображение с диска и классифицирует его с помощью объекта [`imageNet`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.inference.html#imageNet). Завершенный исходный код доступен по адресу [`python/examples/my-recognition.py`](../python/examples/my-recognition.py) ```python # !/usr/bin/python3 import jetson.inference import jetson.utils import argparse # парсинг командной строки parser = argparse.ArgumentParser() parser.add_argument("filename", type=str, help="имя файла изображения для обработки") parser.add_argument("--network", type=str, default="googlenet", help="модель для использования, может быть: googlenet, resnet-18 и т. д.") args = parser.parse_args() # загрузка изображения (в общую память CPU/GPU) img = jetson.utils.loadImage(args.filename) # загрузка сети распознавания net = jetson.inference.imageNet(args.network) # классификация изображения class_idx, confidence = net.Classify(img) # нахождение описания объекта class_desc = net.GetClassDesc(class_idx) # вывод результата print("изображение распознано как '{:s}' (класс #{:d}) с {:f}% уверенностью".format(class_desc, class_idx, confidence * 100))```python format(class_desc, class_idx, confidence * 100)) ``` ## Настройка проекта Если вы используете контейнер Docker, вы захотите сохранить свой код в [монтированном каталоге](aux-docker.md#mounted-data-volumes). Таким образом, ваш код не будет потерян при выключении контейнера. Для простоты, этот гайд создаст его в каталоге на вашем устройстве-хосте под домашним каталогом пользователя, расположенным по адресу `~/my-recognition-python`, а затем примонтирует этот путь в контейнер. Запустите эти команды из терминала (за пределами контейнера) для создания каталога, исходного файла и загрузки некоторых тестовых изображений: ```bash # запустите эти команды за пределами контейнера $ cd ~/ $ mkdir my-recognition-python $ cd my-recognition-python $ touch my-recognition.py $ chmod +x my-recognition.py $ wget https://github.com/dusty-nv/jetson-inference/raw/master/data/images/black_bear.jpg $ wget https://github.com/dusty-nv/jetson-inference/raw/master/data/images/brown_bear.jpg $ wget https://github.com/dusty-nv/jetson-inference/raw/master/data/images/polar_bear.jpg ```bash Затем, когда вы запустите контейнер, [подключите директорию](aux-docker.md#mounted-data-volumes), которую вы только что создали: $ docker/run.sh --volume ~/my-recognition-python:/my-recognition-python # подключена внутри контейнера к /my-recognition-python ``` Далее мы добавим Python-код для программы в пустой исходный файл, созданный здесь. ## Исходный код Откройте `my-recognition.py` в редакторе вашего выбора (или запустите `gedit my-recognition.py`). Вы можете редактировать файл снаружи контейнера. Сначала добавим последовательность shebang в самый верх файла для автоматического использования интерпретатора Python: ```python #! /usr/bin/python3 ``` Далее мы импортируем Python-модули, которые будем использовать в скрипте. #### Импорт модулей Добавьте `import`-инструкции для загрузки модулей [`jetson.inference`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.inference.html) и [`jetson.utils`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.utils.html), используемых для распознавания изображений и загрузки изображений. Также загрузим стандартный пакет `argparse` для парсинга командной строки. ```python import jetson.inference import jetson.utils import argparse ``` > **Примечание**: эти модули Jetson устанавливаются во время шага `sudo make install` [компиляции репозитория](building-repo-2.md#compiling-the-project). Если вы не выполнили `sudo make install`, то эти пакеты не будут найдены при запуске примера. #### Парсинг командной строки Далее добавим некоторый шаблонный код для парсинга имени файла изображения и необязательного параметра `--network`: ```python # парсинг командной строки parser = argparse.ArgumentParser() parser.add_argument("filename", type=str, help="имя файла изображения для обработки") parser.add_argument("--network", type=str, default="googlenet", help="модель для использования, может быть: googlenet, resnet-18 и т. д. (см. --help для других)") opt = parser.parse_args() ``` Пример загружает и классифицирует изображение, которое указывает пользователь. Запуск ожидается следующим образом: ```bash $ ./my-recognition.py my_image.jpg ```Для загрузки изображения необходимо заменить `my_image.jpg` на имя файла, который вы хотите загрузить. Также можно опционально указать параметр `--network`, чтобы изменить сеть классификации (по умолчанию используется GoogleNet): ```bash $ ./my-recognition.py --network=resnet-18 my_image.jpg ``` Дополнительная информация о загрузке других сетей представлена в разделе [Загрузка других моделей классификации](imagenet-console-2.md#downloading-other-classification-models) предыдущей страницы.#### Загрузка изображения с диска Изображения можно загружать с диска в общую память CPU/GPU с помощью функции `loadImage()`. Поддерживаемые форматы: JPG, PNG, TGA и BMP. Добавьте следующую строку для загрузки изображения с указанным именем файла из командной строки: ```python img = jetson.utils.loadImage(opt.filename) ``` Возвращенное изображение будет объектом класса `jetson.utils.cudaImage`, который содержит атрибуты, такие как ширина, высота и формат пикселей: ```python .ptr # адрес памяти (не используется обычно) .size # размер в байтах .shape # кортеж (высота, ширина, каналы) .width # ширина в пикселях .height # высота в пикселях .channels # количество цветовых каналов .format # строка формата .mapped # true, если используется ZeroCopy ``` Дополнительная информация о работе с изображениями из Python представлена на странице [Работа с изображениями с помощью CUDA](aux-image.md). Для простоты здесь загружается только одно изображение. Для загрузки видео или последовательности изображений следует использовать API `videoSource`, как это делается в предыдущем примере `imagenet.py`.#### Загрузка сети распознавания изображений С помощью объекта `imageNet` следующий код загружает требуемую модель классификации с использованием TensorRT. Если вы не указали другую сеть с помощью флага `--network`, по умолчанию загружается GoogleNet, который был загружен при первоначальной сборке репозитория `jetson-inference` (по умолчанию также загружается модель `ResNet-18`). Все доступные модели классификации предобучены на наборе данных ImageNet ILSVRC, который может распознавать до 1000 различных классов объектов, таких как разные виды фруктов и овощей, множество различных видов животных, а также повседневные предметы, созданные человеком, такие как автомобили, офисная мебель, спортивное оборудование и т. д. ```python # загрузка сети распознавания net = jetson.inference.imageNet(opt.network) ``` #### Классификация изображения Далее мы будем классифицировать изображение с помощью сети распознавания с помощью функции `imageNet.Classify()`: ```python # классификация изображения class_idx, confidence = net.Classify(img) ``` `imageNet.Classify()` принимает изображение и его размеры, а затем выполняет инференцию с использованием TensorRT. Она возвращает кортеж, содержащий целочисленный индекс класса объекта, который был распознан изображение, а также значение уверенности в виде числа с плавающей точкой. #### Интерпретация результатов Как последний шаг, давайте получим описание класса и выведем результаты классификации: ```python # получение описания класса class_desc = net.GetClassDesc(class_idx) # вывод результата print("изображение распознано как '{:s}' (класс #{:d}) с {:f}% уверенностью".format(class_desc, class_idx, confidence * 100)) ``` `imageNet.Classify()` возвращает индекс распознанного класса объекта (от `0` до `999` для этих моделей, обученных на ILSVRC). С учетом индекса класса, функция `imageNet.GetClassDesc()` вернет строку, содержащую текстовое описание этого класса. Эти описания автоматически загружаются из файла [`ilsvrc12_synset_words.txt`](../data/networks/ilsvrc12_synset_words.txt). Это всё! Это все Python-код, который нам нужен для классификации изображений. См. [полный исходный код](#coding-your-own-image-recognition-program-python) выше. ## Запуск примера Теперь, когда наш Python-программа завершена, давайте классифицируем тестовые изображения, которые мы [скачали](#setting-up-the-project) в начале этой страницы: ```bash $ ./my-recognition.py polar_bear.jpg изображение распознано как 'ледовый медведь, полярный медведь, Ursus Maritimus, Thalarctos maritimus' (класс #296) с 99.999878% уверенностью ``` ```bash $ ./my-recognition.py brown_bear.jpg изображение распознано как 'brown bear, bruin, Ursus arctos' (класс #294) с уверенностью 99.928925% ``` ```bash $ ./my-recognition.py black_bear.jpg изображение распознано как 'American black bear, black bear, Ursus americanus, Euarctos americanus' (класс #295) с уверенностью 98.898628% ``` ```bash $ ./my-recognition.py --network=resnet-18 polar_bear.jpg ```изображение распознано как 'ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus' (класс #296) с уверенностью 99,743396% ``` Далее мы рассмотрим создание версии на C++ этой программы. ##

Далее | Создание собственной программы распознавания изображений (C++)
Назад | Классификация изображений с использованием ImageNet

© 2016-2019 NVIDIA | Содержание

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/duping812-jetson-inference.git
git@api.gitlife.ru:oschina-mirror/duping812-jetson-inference.git
oschina-mirror
duping812-jetson-inference
duping812-jetson-inference
master