Курс быстрого запуска встроенного искусственного интеллекта-K510 (Часть 3: Настройка среды и работа макетной платы)
Курс быстрого запуска встроенного искусственного интеллекта-K510 (Часть 3: Настройка среды и работа макетной платы)

1. Настройте VMware для использования сетевой карты с мостовым соединением.

1.1 настройки вмваре

В режиме моста виртуальный хост и реальный хост в основном обмениваются данными внутри локальной сети, состоящей из VMnet0, и в то же время взаимодействуют с внешней сетью через шлюз на реальном хосте, так что Ubuntu и плата разработки могут передавать файлы.

Установите сетевой адаптер в режим моста.

Рисунок 1.1. Вход в настройки виртуальной машины VMware

Нажмите NAT сетевого адаптера и выберите метод сетевого подключения как режим моста.

Рисунок 1.2 Изменение сетевого адаптера

1.2 Настройки редактора виртуальных сетей

Найдите «Редактор виртуальной сети» в меню «Пуск» и нажмите «Запуск от имени администратора», чтобы открыть редактор виртуальной сети:

Рис. 1.3 Редактор виртуальной сети More Love

См. рисунок 1.4, нажмите «VMnet0», выберите «Режим моста», в раскрывающемся списке «Мост к» в режиме моста выберите сетевую карту WIFI, фактически используемую на вашем компьютере, и, наконец, нажмите «ОК», чтобы завершить настройку VMware. .

Примечание. Это должно быть «VMnet0». Если «VMnet0» нет, вы можете нажать «Добавить сеть».

Рисунок 1.4. Соединение реальной сетевой карты Wi-Fi.

2. Установите программное обеспечение

2.2 Установите программное обеспечение Windows

“<Совет по развитию Дополнительная информация>\2_DongshanPI-Vision_Поддержкаинструмент\”

В указанном выше каталоге пакета данных сетевого диска можно получить ряд установочных программ, рекомендуется установить их все. Есть следующее программное обеспечение:

Таблица 2‑1 Программное обеспечение, которое необходимо установить в Windows

Название программного обеспечения

иллюстрировать

VMwareWorkstation

При установке программного обеспечения виртуальной машины требуются права администратора.

SD Card Formatter

Инструмент форматирования SD-карты

MobaXterm

Инструменты последовательного порта, инструменты удаленного входа в систему

Filezilla

Инструмент передачи файлов для передачи файлов между Windows и Ubuntu

Source insight

Готовый к использованию инструмент для чтения и написания исходного кода, рекомендуемый новичкам;

2.3 Используйте MobaXterm для удаленного входа в Ubuntu

Сначала подтвердите IP Ubuntu,существоватьUbuntuТерминальное выполнениеifconfigЗаказ Определить мостовую сетевую картуIP(Уведомление:этотIPЭто изменится со временем,Затем переподключитесь, используя новый IP),нравитьсякартина Как показано в 2.3:

Рисунок 2.3. ifconfig проверяет IP-адрес сети

Установите и запустите MobaXterm и создайте сеанс следующим образом:

Рисунок 2.4. Установка ssh

После действий согласно рисунку 2.4 вы увидите рисунок 2.5 в левой части MobaXterm. Дважды щелкните его, чтобы войти в Ubuntu (при первом входе вам будет предложено ввести пароль, пароль — ubuntu). , а затем вы можете выполнять различные команды Linux. Got:

Рисунок 2.5. Mobaxterm входит в Ubuntu

2.4 Используйте FileZilla для передачи файлов между Windows и Ubuntu

Вы можете использовать MobaXterm для входа в систему через SSH и передачи файлов. Однако Mobaxterm не так эффективен при передаче файлов, как FileZilla, поэтому мы рекомендуем использовать FileZilla, когда Windows и Ubuntu передают файлы друг другу.

После двойного щелчка мыши, чтобы открыть FileZilla, действуйте, как показано на рисунке 2.6:

Рисунок 2.6 FileZilla соединяет Windows и Ubuntu

При первом подключении появится запрос, как показано на рисунке 2.7. Выберите «Всегда доверять»:

Рисунок 2.7 FileZilla устанавливает соединение

В Filezilla слева расположены файлы Windows, а справа — файлы Ubuntu, как показано на рисунке 2.8:

Рисунок 2.8 Передача файлов между Windows и Ubuntu с помощью FileZilla

2.5 Пример программирования: программа Hello в Ubuntu

В этом разделе показано, как написать программу в Windows, загрузить ее в Ubuntu, скомпилировать и выполнить в Ubuntu. Он включает в себя только простую программу Hello, скомпилированную с использованием командной строки, и не требует использования Makefile и других знаний, которые будут объяснены в основах приложения позже.

2.5.1 Используйте Source Insight для написания hello.c

Стартовый источник Insight,Нажмите“File”->“New”,Создать новый файл,нравитьсякартина 2.9:

Рисунок 2.9 Новый файл SI

Далее напишите код и сохраните файл, как показано на рисунке 2.10:

Рисунок 2.10. SI записывает код и сохраняет его.

Исходный код hello.c выглядит следующим образом:

Язык кода:javascript
копировать
#include <stdio.h>
int main(int argc, char **argv)
{
	printf("hello, world!\n");
	return 0;
}
2.5.2 Используйте FileZilla для загрузки исходного кода

Работа, как показано на рисунке 2.11:

Рисунок 2.11 Перенос файлов из Windows в Ubuntu

1.1.1 Скомпилируйте и запустите программу

Как показано на рисунке 2.12, использование команды gcc будет подробно объяснено позже, когда мы обсудим основы разработки приложений. Вот лишь пример:

Рисунок 2.12. Опыт Hello World!

3.Основные операции платы разработки DongshanPI-Vision.

3.1 Знакомство с аппаратными ресурсами платы разработки DongshanPI-Vision

Плата разработки DongshanPI-Vision построена на базе чипа Canaan Kanzhi K510. Она использует 64-битную двухъядерную архитектуру RISC-V с основной частотой 800 МГц и поддерживает расширение FPU двойной точности. При использовании 64-битного расширения DSP основная частота составляет 800 МГц. Чип имеет встроенный механизм общей нейронной сети KPU, имеет вычислительную мощность 2,5 TFLOPS BF16/2,5TOPS INT8 и поддерживает библиотеки операторов TensorFlow, PyTorch, ONNX и других фреймворков.

особенность

описывать

процессор

Ханаан Канжи К510

Память

512MB LPDDR3

хранилище

4GB EMMC

ВАЙ-ФАЙ/Блютуз

Антенна: 2,4 ГГц

видеовыход

Дисплей MIPI (MIPI DSI)/дисплей HDMI (HDMI)/дисплей SPI (SPI DSI)

видеовход

Двухканальная камера MIPI (MIPI CSI *2)/камера DVP (DVP Canera)

Аудиовход

микрофон микрофон

аудиовыход

Колонки/наушники

Другие разъемы

·Слот для карт TF ·2 разъема USB ·Порт отладки JTAG ·Интерфейс батареи

Расположение состава макетной платы

В этой главе представлены ключевые компоненты и функции расположения макетной платы следующим образом. На плате указано оборудование, соответствующее каждой этикетке.

Макетная плата, вид спереди:

Макетная плата, вид сзади:

3.2 Знакомство с программными ресурсами платы разработки DongshanPI-Vision
3.2.1 Среда разработки

Рисунок 3.3 Среда разработки платы разработки

3.2.2 Основное программное обеспечение

Рисунок 3.4 Базовое программное обеспечение

3.2.3 Файловая система

Рисунок 3.5 Файловая система

3.3 Выбор режима запуска

DIP-переключатель на плате используется для установки режима запуска, который поддерживает три метода: запуск EMMC, запуск SD-карты и программирование последовательного порта. Метод запуска показан в Таблице 3-1:

BOOT MODEL

SW1(BOOT0)

SW2(BOOT1)

EMMC

OFF

OFF

SD

OFF

ON

Последовательный порт горит

ON

ON

Схема настройки 3.7 этих трех методов запуска выглядит следующим образом:

Рисунок 3.7 DIP-переключатель и способ запуска

Уведомление:настраиватьдля Последовательный порт горитчас,Карты SD и TF невозможно вставить; карты можно вставлять только после включения питания. Плата, только что выпущенная с завода, имеет систему, запрограммированную на EMMC.,ты можешьнастраиватьдляEMMCРежим запуска。

3.4 Подключение аппаратного обеспечения макетной платы
3.4.1 Подключение антенны

Чтобы использовать WIFI, вам необходимо подключить антенну 2,4 ГГц, входящую в комплект поставки DongshanPI-Vision. Ниже приведено руководство по подключению антенны к плате разработки DongshanPI-Vision.

3.4.2 Подключить камеру

​ Чтобы использовать камеру для получения данных изображения, если вы приобрели только плату разработки DongshanPI-Vision отдельно, вам может потребоваться приобрести дополнительную камеру MIPI. На рисунке ниже показано руководство по подключению камеры MIPI к плате разработки DongshanPI-Vision.

3.4.3 Подключите дисплей

Чтобы использовать экран дисплея для отображения изображений, полученных камерой, если вы приобрели только плату разработки DongshanPI-Vision отдельно, вам может потребоваться приобрести дополнительный экран дисплея MIPI или вы можете напрямую использовать кабель HDMI для подключения к монитор компьютера. Ниже приведено руководство по подключению дисплея MIPI к плате разработки DongshanPI-Vision.

3.4.4 Последовательный порт и подключение OTG

Подключите плату к ПК с помощью кабеля Type-C. Вы можете использовать два кабеля Type-C в коробке DongshanPI-Vision. Инструкция по подключению следующая:

Примечание. Подключите две линии передачи данных напрямую к компьютеру. Не используйте USB-концентратор для подключения двух линий передачи данных Type-C. Если на вашем компьютере нет дополнительного порта USB, вы можете использовать адаптер питания 5 В 1 А и подключить его к порту OTG для подачи питания.

После включения комплекта платы разработки на основной плате загорится красный индикатор. Положение красного индикатора показано синей стрелкой на рисунке ниже:

3.5 Проверьте номер последовательного порта

​ Подключите кабель передачи данных Type-C к последовательному порту компьютера. по развитиюназад,Откройте компьютерДиспетчер устройств,И разверните поверхность столбца «Порты (COM LPT)». Вы можете увидеть это под картинкой,Номер порта после подключения — COM37. Последовательный USB-чип на Совете по развитию может быть даCP210x или CH9102.,Их производительность одинакова. Серийный номер COM, отображаемый на вашем компьютере, может отличаться.,Запомните цифры, которые отображает ваш компьютер.

Если компьютер не отображает номер порта, необходимо установить драйвер вручную. Пакет установки драйвера помещен в информацию о сетевом диске:

Рисунок 3.10 Драйвер последовательного порта USB

Если драйвер не устанавливается автоматически в компьютер, в «Диспетчере устройств» будет стоять желтый восклицательный знак, указывающий, какой тип микросхемы последовательного порта в данный момент подключен. Выберите установку драйвера согласно подсказкам. Если в приглашении есть слово «CP210x», выберите «CP210x_Windows_Drivers.zip», в противном случае выберите другой драйвер для установки.

3.6 Используйте программное обеспечение MobaXterm, чтобы открыть последовательный порт.

Откройте MobaXterm, нажмите «Сессия» в левом верхнем углу, во всплывающем интерфейсе выберите «Последовательный» и выберите номер порта (номер порта COM17 или COM19, отображавшийся ранее в диспетчере устройств), скорость передачи данных (Скорость) ​115200), Управление потоком: нет и, наконец, нажмите «ОК». Этапы показаны на рисунке 3.11.

Уведомление:контроль потока(Flow Control) не следует выбирать «Нет», иначе вы не сможете вводить данные в последовательный порт в MobaXterm.

Затем отобразится черное окно. В это время включите питание платы, и вы получите данные, отправленные через последовательный порт платы, как показано на рисунке 3.12.

4. После входа в консоль отладки последовательного порта, если плата разработки запускает uboot или ядро, она будет продолжать распечатывать информацию до тех пор, пока система не будет полностью запущена. Если плата разработки была полностью запущена, никакая информация не будет распечатана. можно напрямую нажать клавишу Enter, чтобы войти в консоль разработки.

3.7 Управление платой разработки через последовательный порт

существовать Последовательный порт видитroot@canaanЭтот тип входаиз Подсказкачас,Просто введите и нажмите Enter,Однаконазад Сразу Может быть выполнено Различные заказы Linux, такие как картина Как показано в 3.14:

3.8 Автоматический запуск приложения после загрузки

При запуске системы, если вы подключите две камеры и экран дисплея в обычном режиме, на этапе запуска системы uboot система отобразит официальный логотип Canaan. Рендеринг выглядит следующим образом:

Когда система полностью запустится, автоматически запустится программа предварительного просмотра в реальном времени, использующая V4L2 для захвата изображений с камеры и отображения их на дисплее в реальном времени. Рендеринг выглядит следующим образом:

нравиться Если тыдумать Завершить процессилидуматьбегать Другие требуют использования камер.иэкран дисплеяпрограмма,ты Можетпроходитьсуществовать Последовательный терминалконтрольбашнявходитьpsПосмотреть все процессы,И найдите имя процесса. Номер процесса, соответствующий v4l2_drm.out.,Как показано ниже:

Язык кода:javascript
копировать
188 root      0:00 ./v4l2_drm.out -f video_drm_1920x1080.conf -e 1 -s

Вы можете видеть, что первый — это номер процесса. Возможно, ваш номер процесса отличается от моего. Мой номер процесса — 188. Сейчас мне следует ввести:

Язык кода:javascript
копировать
kill -9 188

Если ваш номер процесса не 188, вам необходимо изменить 188 на фактический номер процесса, чтобы нормально завершить приложение.

3.9 Обновление системы
3.9.1 Обновление системы EMMC

Требования к оборудованию:

  • DongshanPI-VisionСовет по развитию
  • Кабель для передачи данных типа C x2

Требования к программному обеспечению:

Пожалуйста, загрузите DongshanPI-VisionСовет перед началом работы. по развитиюИзображение EMMC и запомните, где он сохранен на вашем компьютере.

3.9.1.1 Работа оборудования

Включите DIP-переключатели boot0 и boot1, как показано на рисунке ниже, чтобы перевести плату разработки в режим загрузки. Используйте два кабеля Type-C для подключения платы разработки и компьютера для питания платы разработки и используйте последовательный порт для записи системы EMMC.

3.9.1.2 Установка драйвера последовательного порта
  • Серийный драйвер Установитьпрограмма:2_DongshanPI-Vision_Инструмент поддержки/[Windows] инструмент драйвера последовательного порта

Установитьвпередиллюстрировать:за компьютер Установитьтолько один раз。

Откройте драйвер последовательного порта. обеспечениеCH341SER.EXE,После открытия появится следующий интерфейс:

Нажмите, чтобы установить

Просто дождитесь завершения установки.

3.9.1.3 Запись изображения

скачать Изображение EMMCипомнитьэтосуществоватькомпьютерсерединаиз Расположение。ОткрытьKendryteBurningTool Горетьинструмент,ВходитьKendryteBurningTool\binв каталоге,двойной щелчок ОткрытьBurningTool.exe,Файл, показанный ниже.

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

ОткрытьBurningTool.exeпрограмманазадвстреча Входить Следующий интерфейс:

Нажмите «Выбрать файл» и выберите загруженный образ EMMC. После выбора нажмите «Сохранить». Действия следующие:

После сохранения вам необходимо выбрать номер последовательного порта платы разработки в выборе последовательного порта. После того, как мы подключим плату разработки и ПК через Type-C, вы можете щелкнуть красную стрелку в программном обеспечении BurningTool, чтобы просмотреть номер порта. моя плата разработки и выберите «Разработка». Номер последовательного порта платы. (Разработанный номер порта мы также можем подтвердить в диспетчере устройств)

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

Когда компьютер прожигается в первый раз, после того, как первый индикатор выполнения завершится, отобразится сообщение об ошибке, показанное на рисунке ниже. На этом этапе вам необходимо установить драйвер.

3.9.1.4 Установка драйвера записи
  • Установочный файл драйвера записи zadig-2.4: ``

Установитьвпередиллюстрировать:за компьютер Установитьтолько один раз。

Открытьzadig-2.4программное обеспечение,Входить Следующий интерфейс

НажмитеOptionвыбор вList All Devices(Список всех устройств),Конкретные операции показано ниже:

После завершения вышеуказанной операции вы увидите, что в пунктирном поле появилось имя устройства. Нам нужно переключить устройство на. Mass storage devices,Конкретные операции показано ниже:

НажмитеReplace DriverЗаменить драйверпрограмма,Появится окно подтверждения,Нажмитеда

Установить Заканчиватьназадпоявитсянижеокно Нажмитеclose

Драйвер записи теперь успешно установлен.

3.9.1.5 Полное запись образа

​ Установить Заканчивать Записать изображениеназад,снова ОткрытьBurningTool.exeГоретьинструментпрограммное обеспечение,в соответствии с1.3главасерединаиз Операция в процессе Гореть Вот и все。весь Горетьшаг Как показано ниже:

3.9.1.6 Запуск системы EMMC

Отключите оба DIP-переключателя boot0 и boot1, как показано на рисунке ниже, чтобы перевести плату разработки в режим запуска EMMC. Используйте два кабеля Type-C для подключения платы разработки и компьютера для подачи питания на плату разработки и войдите в консоль платы разработки, используя последовательный порт.

Используйте программное обеспечение последовательного порта для просмотра консоли последовательного порта. После успешного запуска вы войдете в консоль платы разработки.

3.9.2 Создание образа SD-карты

Требования к оборудованию:

  • DongshanPI-VisionСовет по развитию
  • Карта microSD (рекомендуется минимум 8G)
  • Кабель для передачи данных типа C x2

Требования к программному обеспечению:

Пожалуйста, загрузите DongshanPI-VisionСовет перед началом работы. по развитиюОбраз SD-картыи запомните, где он сохранен на вашем компьютере.

3.9.2.1 Форматирование карты microSD

Вставьте SD-карту в компьютер через USB-порт с помощью кард-ридера и используйте Инструмент. форматирования SD-картыSD Memory Card FormatterОтформатируйте свойSDКарта。Нажмите Внизкартина Положение среднего красного поля,Начните форматировать карту Память.

После нажатия кнопки «Готово» появится окно подсказки, показанное ниже.,Подсказка предупреждает нас, что форматирование сотрет все данные на карте.,Спросите нас, хотите ли вы продолжить,здесь Нажмитеда

Дождитесь завершения форматирования,Появится следующее диалоговое окно,Подскажите форматироватьназадизфайловая системадляFAT32а также Память Размер доступного пространства,Нажмите «ОК», чтобы завершить форматирование SD-карты.

3.9.2.2 Использование Etcher для записи изображения

Используйте Etcher для записи образа SD-карты платы разработки DongshanPI-Vision на карту microSD.

​ скачатьEtcherВспышкаинструменти Установитьэто。запускатьEtcherприложение,запускатьназадинтерфейс Как показано ниже:

НажмитеFlash from file,Как показано ниже,Нажмите на красную рамку под изображением.

Появится файловый менеджер. Выберите только что загруженный образ SD-карты платы разработки DongshanPI-Vision.

После завершения выбора,,Отобразите следующий интерфейс,Нажмите Внизкартина Средняя красная коробкаSelect target,Выберите целевую карту microSD для записи.

После нажатия кнопки «Готово» появится окно выбора. В это время выберите карту microSD, которую вы вставили в компьютер через устройство чтения карт.

После завершения выбора,Будет отображен следующий интерфейс,НажмитеFlashназад Вот и всеначинать Вспышка。

Просто дождитесь завершения программирования, как показано на рисунке ниже.

После использования Etcher для программирования,Windows может не знать, как прочитать вашу карту microSD,появится Как показано Ниже Предупреждение,НажмитеОтменаназадвытащитьmicroSDКарта Вот и все。

3.9.2.3 Запуск системы SD-карты

Поверните boot0 вниз и boot1 вверх на DIP-переключателе, как показано на рисунке ниже, чтобы перевести плату разработки в режим загрузки с SD-карты. Вставьте SD-карту в слот для карты макетной платы. Действия показаны на рисунке ниже:

Используйте два кабеля Type-C для подключения платы разработки и компьютера для подачи питания на плату разработки и войдите в консоль платы разработки, используя последовательный порт.

Используйте программное обеспечение последовательного порта для просмотра консоли последовательного порта. После успешного запуска вы войдете в консоль платы разработки.

3.10 Подключитесь к Интернету с помощью Wi-Fi.
3.10.1 Завершить сценарий запуска

Установитьзапускать Совет по После завершения разработки откройте серийный терминал Входить Совет. по консоль развития. Спасибо Совету по развитиюзапускатьназадвстречазапускатьсетевой скрипт,Наша первая сетевая дистрибуциячаснуждаться Завершить вручнуюсетевой скрипт。входитьps,Посмотреть прогресс,Найдите два процесса, показанных ниже.

Язык кода:javascript
копировать
  159 root      0:00 wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.
  178 root      0:00 udhcpc -R -n -p /var/run/udhcpc.eth0.pid -i eth0 -b

Из приведенной выше информации мы видим, что нам нужно вручную завершить два процесса 159 и 178. Ваш номер процесса может отличаться от моего. Пожалуйста, действуйте в соответствии с процессом на вашей плате разработки в прошлом веке. входить:

Язык кода:javascript
копировать
kill -9 <PID>

Предположим, я использую Совет по развитиюсерединаwpa_supplicantиudhcpcпроцесс Числосоответственнодля159и178,На этом этапе я должен ввести следующий заказ

Язык кода:javascript
копировать
kill -9 159
kill -9 178

Завершить вручнуюназадиспользоватьpsПроверятьда Оно все еще здесь?существоватьпереписыватьсяпроцесс。

3.10.2 Заполните информацию о WIFI

Исправлять/etc/wpa_supplicant.confдокумент,Введите имя и пароль Wi-Fi.,входить

Язык кода:javascript
копировать
vi /etc/wpa_supplicant.conf

ВходитьviРедакторназадвстреча显示нижеинформация

Язык кода:javascript
копировать
ctrl_interface=/var/run/wpa_supplicant
update_config=1
ap_scan=1

Добавьте информацию о сети в конец файла

Язык кода:javascript
копировать
network={
               ssid="<wifiимя>"
               psk="<пароль>"
        }

Предполагая, что мое имя Wi-Fi — «Программисты», а пароль — 123456, фактическая добавленная информация о сети будет следующей:

Язык кода:javascript
копировать
network={
               ssid="Programmers"
               psk="12345678"
        }

После добавления сохраните и выйдите из редактора vi.

3.10.3 Подключение к Wi-Fi

Чтобы подключиться к SSID, введите:

Язык кода:javascript
копировать
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf

После завершения выполнения, как показано ниже

Чтобы получить IP-адрес, введите:

Язык кода:javascript
копировать
udhcpc -i  wlan0

После завершения приобретения подключение к Интернету будет успешным.

тестWiFiда Могу ли я выйти в Интернет?,входитьping www.baidu.com,входитьназад Как показано ниже:

Язык кода:javascript
копировать
[root@canaan ~ ]$ ping www.baidu.com
PING www.baidu.com (14.119.104.189): 56 data bytes
64 bytes from 14.119.104.189: seq=0 ttl=55 time=10.241 ms
64 bytes from 14.119.104.189: seq=1 ttl=55 time=16.292 ms
64 bytes from 14.119.104.189: seq=2 ttl=55 time=15.699 ms
64 bytes from 14.119.104.189: seq=3 ttl=55 time=12.508 ms

При последующем запуске платы разработки она автоматически подключится к SSID, и вам нужно будет только повторно получить IP-адрес для доступа в Интернет.

3.11 Используйте службу TFTP для передачи файлов между Ubuntu и платой разработки.
3.11.1 Установка службы TFTP в Ubuntu

Выполните следующую команду, чтобы установить службу TFTP в Ubuntu:

Язык кода:javascript
копировать
sudo apt-get install tftp-hpa tftpd-hpa

Затем создайте рабочий каталог службы TFTP и откройте файл конфигурации службы TFTP следующим образом:

Язык кода:javascript
копировать
mkdir -p /home/ubuntu/tftpboot
chmod 777 /home/ubuntu/tftpboot
sudo gedit /etc/default/tftpd-hpa

В файле конфигурации /etc/default/tftpd-hpa удалите исходное содержимое и измените его следующим образом:

Язык кода:javascript
копировать
TFTP_USERNAME="tftp"
TFTP_ADDRESS=":69"
TFTP_DIRECTORY="/home/ubuntu/tftpboot"
TFTP_OPTIONS="-l -c -s"

Наконец, перезапустите службу TFTP:

Язык кода:javascript
копировать
sudo service tftpd-hpa restart

Проверьте, запущена ли служба tftp. Выполните следующую команду, чтобы проверить, работает ли она в фоновом режиме.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/Desktop$ ps -aux | grep “tftp”
ubuntu      4555  0.0  0.0   9040   652 pts/0    S+   02:33   0:00 grep --color=auto “tftp”
3.11.2 Макетная плата передает файлы через tftp

Сначала убедитесь, что в сервисном каталоге tftp Ubuntu или Windows есть файлы, которые необходимо загрузить на плату, например:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~$ ls /home/ubuntu/tftpboot/
object_detect

Подтвердите сетевой IP-адрес Ubuntu, например.

Например, загрузите zImage под сервер Ubuntu. документ,носуществоватьСовет по развитиюначальствоосуществлятьнравиться Вниз Заказ(Ubuntuизмостовая сеть КартаIPда192.168.0.197):

Язык кода:javascript
копировать
[root@canaan ~ ]$ tftp -g -r object_detect 192.168.0.197

Процесс загрузки выглядит следующим образом:

Язык кода:javascript
копировать
[root@canaan ~ ]$ tftp -r object_detect -g 192.168.0.197
object_detect        100% |********************************|  894k  0:00:00 ETA

После завершения загрузки файл можно будет найти в текущем каталоге.

Язык кода:javascript
копировать
[root@canaan ~ ]$ ls
data           emmc           object_detect

Как добраться от Совет по развитие Загрузить файлы в Ubuntu? Например, мы сейчас Совет по развитию Домв каталогесоздаватьодин1.txt изтекстдокумент,Однаконазадписать111111….

Язык кода:javascript
копировать
[root@100ask:~]$ tftp -p -l 1.txt  192.168.5.197
1.txt                100% |********************************|     8  0:00:00 ETA

В это время, когда мы проверяем каталог службы tftp сервера Ubuntu, мы видим ранее созданный на плате разработки файл 1.txt:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~$ ls /home/ubuntu/tftpboot/
1.txt  object_detect
3.12 Настройка функции SSH платы разработки
3.12.1 Изменение файла конфигурации ssh

Доступ к Совету с помощью терминального инструмента Mobaxterm по развитиюсерийная консоль,Подождите, пока система запустится,Входить/etc/sshв каталоге

Язык кода:javascript
копировать
[root@canaan ~ ]$ cd /etc/ssh/
[root@canaan /etc/ssh ]$ ls
moduli       ssh_config   sshd_config

В каталоге Входитьssh вы можете увидеть три файла.,тынуждаться Исправлятьsshd_config,Изменить с помощью viЗаказ

Язык кода:javascript
копировать
[root@canaan /etc/ssh ]$ vi sshd_config

После ввода войдите в редактор vi и измените два элемента в красном поле на рисунке ниже.

Настройте параметры входа по SSH

Поместите два предмета в красную коробку.Отмена Комментарий,ибудет параметрнастраиватьдляyes

Язык кода:javascript
копировать
PermitRootLogin yes
PermitEmptyPasswords yes

После завершения модификации она будет выглядеть следующим образом:

Настроить службу SFTP

Исправлятьsshd_configсерединаизsftpЭлементы конфигурации

До модификации:

Язык кода:javascript
копировать
Subsystem      sftp    /usr/libexec/sftp-server

После модификации:

Язык кода:javascript
копировать
Subsystem      sftp    internal-sftp

После завершения модификации,нажиматьesc,входить:wq,Сохраните и выйдите из редактора.

3.12.2 Запуск SSH

​ После изменения файла конфигурации,Необходимо вручную перезапустить ssh,существовать Терминалвходить/etc/init.d/S50sshd restart

Язык кода:javascript
копировать
[root@canaan ~ ]$ /etc/init.d/S50sshd restart
Stopping sshd: killall: sshd: no process killed
OK
Starting sshd: OK

После завершения ввода ssh перезапустится.

3.12.3 Подключиться по SSH

Прежде чем начать, обратите внимание:

  • Вашему ПК необходим компьютер и Совет по развитиюсоединятьтот же WI-FI

​ существовать Совет по развитию Последовательный терминалвходитьudhcpc -i wlan0,Получите свой Совет по развитиеIP-адрес для подключения к WIFI

Язык кода:javascript
копировать
[root@canaan ~ ]$ udhcpc -i wlan0
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending select for 192.168.0.154
udhcpc: lease of 192.168.0.154 obtained, lease time 122
deleting routers
adding dns 192.168.0.1
adding dns 192.168.0.1

После завершения приобретения,входитьifconfig wlan0 , проверьте IP-адрес Wi-Fi, подключенного к плате разработки.

Язык кода:javascript
копировать
[root@canaan ~ ]$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 8C:F7:10:47:9B:6E
          inet addr:192.168.0.154  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::8ef7:10ff:fe47:9b6e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:438 errors:0 dropped:2 overruns:0 frame:0
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:34571 (33.7 KiB)  TX bytes:2446 (2.3 KiB)

Вы можете видеть, что IP-адрес в опции wlan0: 192.168.0.154.

3.12.4 Передача файлов с помощью MobaXterm

Использование терминала MobaXterm,Нажмитевстреча话Session,Как показано в красном поле ниже.

После нажатия кнопки «Готово» появится следующий интерфейс.,НажмитеиспользоватьSSH,Как показано в красном поле ниже:

Входитьssh配置интерфейсназад,удаленный хостRemote hostкоробкавходить Совет по развитиюизIPадрес,Проверьте Указать имя пользователяSpecify usernameвпередкоробка,существоватьназад Заполните лицо Совет по развитиюизимя пользователяroot,После заполнения,НажмитеOKВот и все。Как показано ниже

После нажатия кнопки «Готово» откроется новый терминал, как показано на рисунке ниже:

Как видите, здесь также можно получить доступ к разработанному последовательному терминалу. Вы можете увидеть Совет в левой вкладке. по развитиюпереписыватьсяизфайловая система,примернравитьсяdata/emmc,тысуществовать Параметры Картасередина Можетвернодокументпапкасерединапрогресс контентаскачатьилизагрузить。Как показано ниже,здесь я Входить/root/emmc/p3/app/ai/exe/Оглавлениесередина,выбиратьface_detectдокумент,Панель параметров появляется после щелчка правой кнопкой мыши,Выберите «Загрузить», чтобы начать загрузку файла.

Если вы хотите загрузить файл в текущий каталог,В пустом месте левой вкладки,Щелкните правой кнопкой мыши,выбиратьUpload to current folderзагрузить Когда придет времявпереддокументпапка Вот и все。

4. Первый опыт системных функций и приложений ИИ

4.1 Руководство по использованию системных функций
4.1.1 демонстрационная программа AI

иллюстрировать

nncase изdemoпрограмма Исходный код находится по адресуSDKв каталогеизpackage/aiОглавление,Структура каталогов следующая:

Язык кода:javascript
копировать
$ tree -L 2 ai
ai
├── ai.hash
├── ai.mk
├── code
│   ├── build.sh
│   ├── cmake
│   ├── CMakeLists.txt
│   ├── common
│   ├── face_alignment
│   ├── face_detect
│   ├── face_expression
│   ├── face_landmarks
│   ├── face_recog
│   ├── hand_image_classify
│   ├── head_pose_estimation
│   ├── imx219_0.conf
│   ├── imx219_1.conf
│   ├── license_plate_recog
│   ├── object_detect
│   ├── object_detect_demo
│   ├── openpose
│   ├── person_detect
│   ├── retinaface_mb_320
│   ├── self_learning
│   ├── shell
│   ├── simple_pose
│   ├── video_192x320.conf
│   ├── video_object_detect_320.conf
│   ├── video_object_detect_320x320.conf
│   ├── video_object_detect_432x368.conf
│   ├── video_object_detect_512.conf
│   ├── video_object_detect_640.conf
│   └── video_object_detect_640x480.conf
└── Config.in

Можно обратиться кretinaface_mb_320из Исходный кодиCMakeLists.txtдобавить новыйизnncase демонстрационная программа.

Модельизкомпилировать Видетьnncase_demo.mkвнутреннее определениеизPOST_INSTALL_TARGET_HOOKS

Язык кода:javascript
копировать
NNCASE_DEMO_DEPENDENCIES += mediactl_lib nncase_linux_runtime opencv4 libdrm
define NNCASE_DEMO_COMPILE_MODEL
    mkdir -p $(TARGET_DIR)/app/ai/kmodel/kmodel_compile/retinaface_mb_320
    cd $(@D) && /usr/bin/python3 retinaface_mb_320/rf_onnx.py --quant_type uint8 --model ai_kmodel_data/model_file/retinaface/retinaface_mobile0.25_320.onnx
    cp $(@D)/rf.kmodel $(TARGET_DIR)/app/ai/kmodel/kmodel_compile/retinaface_mb_320/rf_uint8.kmodel
    cd $(@D) && /usr/bin/python3 retinaface_mb_320/rf_onnx.py --quant_type bf16 --model ai_kmodel_data/model_file/retinaface/retinaface_mobile0.25_320.onnx
    cp $(@D)/rf.kmodel $(TARGET_DIR)/app/ai/kmodel/kmodel_compile/retinaface_mb_320/rf_bf16.kmodel

NNCASE_DEMO_POST_INSTALL_TARGET_HOOKS += NNCASE_DEMO_COMPILE_MODEL

Для компиляции модели требуется среда nncase. Для создания среды nncase обратитесь к k510_nncase_Developer_Guides.md. Если nncase будет обновлен в будущем, SDK buildroot будет обновлен до nncase одновременно.

retinaface

Функция: обнаружение лица, обнаружение точки лица

Путь программы: /app/ai/shell запустить: выполнение неколичественных моделей,./retinaface_mb_320_bf16.sh Выполнить модель квантования uint8,./retinaface_mb_320_uint8.sh

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

Язык кода:javascript
копировать
#devmem phyaddr width value
devmem 0x970E00fc 32 0x0fffff00
devmem 0x970E0100 32 0x000000ff
devmem 0x970E00f4 32 0x00550000

При запуске демо-версии вам необходимо отдать приоритет обеспечению нормального отображения экрана, то есть настройке QoS, связанного с дисплеем, на высокий приоритет. QOS_CTRL0.ax25mp запись QoS = 5 QOS_CTRL0.ax25mp чтение QoS = 5 QOS_CTRL2.ispf2k запись QoS = 0xf QOS_CTRL2.ispf2k чтение QoS = 0xf QOS_CTRL2.ispr2k запись QoS = 0xf QOS_CTRL2.ispr2k чтение QoS = 0xf QOS_CTRL2.isp3dtof запись QoS = 0xf QOS_CTRL3.display чтение QoS = 0xf QOS_CTRL3.display запись QoS = 0xf

Смещение регистра управления QOS 0 (QOS_CTRL0) [0x00f4]

qos ctrl0
qos ctrl0

Смещение регистра управления QOS 1 (QOS_CTRL1) [0x00f8]

qos ctrl1
qos ctrl1

Смещение регистра управления QOS 2 (QOS_CTRL2) [0x00fc]

qos ctrl2
qos ctrl2

Смещение регистра управления QOS 3 (QOS_CTRL3) [0x0100]

qos ctrl3
qos ctrl3

Подробности по компиляции и установке модели смотрите в файле package/ai/ai.mk:

Скомпилировать путь скрипта: 100ask_base-aiApplication-demo/code/retinaface_mb_320/rf_onnx.py

object_detect

Функция: обнаружение классификации объектов, 80 категорий.

Путь программы: /app/ai/shell

запустить: выполнение неколичественных моделей,./object_detect_demo_bf16.sh Выполнить модель квантования uint8,./object_detect_demo_uint8.sh

Подробности по сборке и установке модели смотрите в файле package/ai/ai.mk.

Скомпилировать путь скрипта: 100ask_base-aiApplication-demo/code/object_detect_demo/od_onnx.py

4.1.2 ffmpeg

ffmpegсуществоватьffmpeg-4.4Портирование открытого исходного кода,0001-buildroot-ffmpeg-0.1.patchдляпакет патчей,Увеличивать Понятно

  • ff_k510_video_demuxer:контрольispвходить,Цитировать Понятноlibvideo.so
  • ff_libk510_h264_encoder:контрольh264аппаратное кодирование,Цитировать Понятноlibvenc.so

Настраиваемые параметры можно просмотреть с помощью команды справки.

Язык кода:javascript
копировать
ffmpeg -h encoder=libk510_h264 #Просмотр параметров энкодера к510
ffmpeg -h demuxer=libk510_video #Просмотр параметров конфигурации демультиплексора

подробныйбегатьиллюстрироватьссылкаK510_Multimedia_Developer_Guides.md

4.1.3 alsa_demo

alsa demoпрограммапомещатьсуществовать/app/alsa_demoв каталоге:

Подготовка к операции:

  1. подключить наушники

Используйте тестирование ALSA UTILS.

4.1.4 TWOD demo

Запустите использование ротации:

Язык кода:javascript
копировать
cd /app/twod_app
./twod-rotation-app

Скопируйте ouput.yuv на монитор yuv и установите размер 1080 x 1920 и формат отображения nv12. Результаты следующие.

Как пользоваться скалером

Язык кода:javascript
копировать
cd /app/twod_app
./twod-scaler-app

Скопируйте ouput.yuv на монитор yuv и установите размер 640x480 и формат отображения nv12. Результаты следующие.

Запустите использование rgb2yuv:

Язык кода:javascript
копировать
cd /app/twod_app
./twod-osd2yuv-app

Скопируйте ouput.yuv на монитор yuv и установите размер 320x240 и формат отображения nv12. Результаты следующие.

Запустите использование yuv2rgb:

Язык кода:javascript
копировать
cd /app/twod_app
./twod-scaler-output-rgb888-app

Скопируйте ouput.yuv на монитор rgb888 и установите размер 640x480, а формат отображения — rgb24. Результаты следующие.

Запускаем и накладываем osd на выходной юв. Как пользоваться:

Язык кода:javascript
копировать
cd /app/twod_app
./twod-scaler-overlay-osd-app

Скопируйте ouput.yuv на монитор и установите размер 640x480 и формат отображения nv12. Результаты следующие.

API:

Язык кода:javascript
копировать
/* создавать Память */
twod_create_fb()
/* Настройте исходные параметры изображения */   
twod_set_src_picture()
/* Настройте параметры среза выходного изображения */ 
twod_set_des_picture()
/* настраивать scaler */     
twod_set_scaler()
/* Дождитесь завершения операции */     
twod_wait_vsync()
/* Invali cache */   
twod_InvalidateCache()
/* flash cache */     
twod_flashdateCache()
/* выпускать Память*/     
twod_free_mem()
/* настраиватьвращать */  
twod_set_rot()
4.1.5 RTC demo

Драйвер RTC зарегистрирует и создаст узел устройства /dev/rtc0.

Уровень приложений использует стандартный метод программирования RTC в системах Linux для вызова драйвера. Перед запуском эталонной процедуры рекомендуется отключить печать информации о ядре через консоль оболочки.

Язык кода:javascript
копировать
echo 0 > /proc/sys/kernel/printk

Войдите в каталог /app/rtc и введите следующую команду, чтобы запустить приложение rtc.

Язык кода:javascript
копировать
cd /app/rtc
./rtc 2021-11-3 21:10:59

Результат выполнения программы:

Ниже приведены основные фрагменты кода демонстрационной программы RTC. Подробную информацию см. в коде в папке package/rtc.

Язык кода:javascript
копировать
/*Разбираем параметры и получаем текущий год, месяц, день, час, минуту и ​​секунду*/
if(argc !=3) {
    fprintf(stdout, "useage:\t ./rtc year-month-day hour:minute:second\n");
    fprintf(stdout, "example: ./rtc 2021-10-11 19:54:30\n");
    return -1;
}

sscanf(argv[1], "%d-%d-%d",  &year, &month, &day);
sscanf(argv[2], "%d:%d:%d",  &hour, &minute, &second);

/*Открываем устройство RTC, узел устройства да:/dev/rtc0 */
fd = open("/dev/rtc0", O_RDONLY);
if (fd == -1) {
    perror("/dev/rtc0");
    exit(errno);
}

/* настраиватьRTCчасмежду。*/
retval = ioctl(fd, RTC_SET_TIME, &rtc_tm);
if (retval == -1) {
    perror("ioctl");
    exit(errno);
}

/* впадать в спячку 2 секунды. */
sleep(2);

/* Прочтите текущее время RTC. */
retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
if (retval == -1) {
    perror("ioctl");
    exit(errno);
}

/* Распечатать Текущее время RTC. */
fprintf(stdout, "\nRTC date/time: %d/%d/%d %02d:%02d:%02d\n",
        rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
        rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
4.1.6 WDT demo

K510 имеет в общей сложности три сторожевых таймера. Драйвер WDT регистрирует и создает узлы устройств /dev/watchdog0, /dev/watchdog1 и /dev/watchdog2.

Уровень приложения использует стандартный метод программирования WDT в системе Linux для вызова драйвера. Первый параметр приложения сторожевого таймера может иметь значения 0 и 1, что представляет собой сторожевой таймер0 и сторожевой таймер1 соответственно. Второй параметр представляет настраиваемое время ожидания (в секундах). например, так: Команда означает запуск watchdog0, а время переполнения watchdog0 составляет 40 секунд.

Язык кода:javascript
копировать
cd /app/watchdog
./watchdog 0 40

После запуска программы сторожевой таймер будет кормить каждую 1 секунду. Когда в терминале оболочки будет введен символ остановки, приложение прекратит кормить собаку. Сторожевой таймер перезагрузит устройство и перезапустится по истечении установленного таймаута. , обратитесь к файлу пакета/сторожевого таймера. Вырежьте код ниже.

Результат выполнения программы:

Уведомление:когдавпередk510сторожевой модульиз Работачастактовая частотадля757575Hz,Таймаут в секундах необходимо преобразовать в таймаут на фактической рабочей тактовой частоте сторожевого таймера.,Формула расчета да2^n/757575,Так что на самом делеиздогонятьчасчасмеждувстреча大Вждать Ввходитьиздогонятьчасчасмежду。

Фактический процесс расчета тайм-аута:

  1. Введите 40, 2^25/757575=44. > 40,2^24/757575=22 < 40, поэтому установите значение 44 секунды;
  2. Введите 155, 2^27/757575=177. > 155, поэтому установите 177 секунд;
  3. Введите 2000, 2^31/757575=2834. > 2000, поэтому установлено 2834 секунды;
4.1.7 UART demo

K510 имеет всего 4 последовательных порта. Последовательные порты 2 и 3 не включены в текущем драйвере. Драйвер последовательного порта 0 зарегистрируется и создаст узел устройства /dev/ttyS0.

Прикладной уровень использует стандартный метод программирования UART в системах Linux для вызова драйвера. Первый параметр приложения uart может иметь значение 0 или 1, что соответствует uart0 и uart1 соответственно.

Подключите плату разработки к маршрутизатору с помощью проводной сети, чтобы плата разработки и компьютер для отладки находились в одной сети. При включении платы разработки она автоматически получит IP-адрес. Введите команду ifconfig в последовательном терминале оболочки. платы разработки для получения IP-адреса. Компьютер отладки использует этот IP-адрес для подключения к плате разработки через Telent и открывает окно Telent. Например, операция отладки ПК с помощью телента для подключения к макетной плате через MobaXterm показана ниже.

Введите следующую команду в окне терминала Telent, чтобы начать работу последовательного порта 0.

Язык кода:javascript
копировать
cd /app/uart
./uart 0

Введите содержимое для отправки в окно Telent, и вы сможете увидеть полученные данные в окне последовательного терминала оболочки. Подробную информацию см. в коде в папке package/crb_demo/uart. Например, введите в окно телента:

В соответствующем окне последовательного терминала Shell отображается:

4.1.8 ETH demo

Уровень приложения следует стандартному методу программирования ETH в системах Linux для вызова драйвера.

Client

В качестве клиента войдите в каталог /app/client и введите следующую команду, чтобы запустить клиентское приложение. Первый параметр приложения ETH указывает IP-адрес сервера для установки TCP-соединения. запустите программу ETH с 10.20.5.1. Сервер устанавливает связь.

Язык кода:javascript
копировать
cd /app/client
./client 10.20.1.13

Подключитесь к серверу для связи через протокол TCP и запустите серверную программу на другом компьютере с Ubuntu. Подробный код см. в содержимом папки package/app/client.

Устройство отображает журнал:

Server

Устройство выступает в качестве сервера и входит в каталог /app/server. Например, введите следующую команду, чтобы запустить серверную программу.

Язык кода:javascript
копировать
cd /app/server
./server

Запустите клиентскую программу на другом компьютере с Ubuntu и подключитесь к серверу через протокол TCP для связи. Подробный код см. в папке package/crb_demo/server.

Устройство отображает журнал:

4.1.9 SDMMC demo

K510 имеет в общей сложности 3 основных контроллера SDMMC. SDMMC0 на плате разработки используется для подключения к eMMC, SDMMC1 используется для подключения к модулю WIFI, а контроллер SDMMC2 используется для подключения к SD-карте.

Драйвер SDMMC зарегистрируется и сгенерирует /dev/mmcblk0, а драйвер EMMC зарегистрируется как узел устройства /dev/mmcblk1.

SD-карта будет автоматически подключена к /root/data после запуска системы и войдет в каталог /app/write_read_file. Первый параметр приложения SDMMC указывает файл, который необходимо прочитать и записать. Например, если SD-карта. смонтировано в /root/data. Вы можете читать и записывать файлы в каталоге /root/data/. Сначала запишите, а затем прочитайте. Введите следующую команду, чтобы запустить приложение SDMMC для чтения и записи SD-карты и расчета операций чтения и записи. скорость (единица м/с).

Язык кода:javascript
копировать
cd /app/write_read_file
./write_read_file /root/data/test.txt

Включите чтение и запись данных 1G с SD-карты. Код см. в папке package/app/write_read_file.

4.1.10 SHA/AES demo

SHA/AES demo Используйте Linux экспорт ядра AF_ALG тип Netlink Интерфейс для использования шифрования ядра в пользовательском пространстве API。подробныйинформация请ссылкаhttps://www.kernel.org/doc/html/latest/crypto/userspace-if.html

параметр: -h вывести справочную информацию -t тип алгоритма: хэш, skcipher -n имя алгоритма: sha256, ecb(aes), cbc(aes) -x операция расшифровки -k КЛЮЧ AES (шестнадцатеричная строка) -v AES IV (шестнадцатеричная строка)

sha256 test:

Язык кода:javascript
копировать
cd /app/crypto
echo -n "This is a test file, hello world" > plain.txt
./crypto -t hash -n "sha256" plain.txt sha256.txt
xxd -p -c 32 sha256.txt
sha256sum plain.txt

ecb(aes) 128 test:

Язык кода:javascript
копировать
cd /app/crypto
echo -n "This is a test file, hello world" > plain.txt
./crypto -t skcipher -n "ecb(aes)" -k 00112233445566778899aabbccddeeff plain.txt ecb_aes_en.bin
./crypto -t skcipher -n "ecb(aes)" -k 00112233445566778899aabbccddeeff  -x ecb_aes_en.bin ecb_aes_de.bin
cmp ecb_aes_de.bin plain.txt
cat ecb_aes_de.bin

cbc(aes) 128 test

Язык кода:javascript
копировать
cd /app/crypto
echo -n "This is a test file, hello world" > plain.txt
./crypto -t skcipher -n "cbc(aes)" -k 00112233445566778899aabbccddeeff -v 00112233445566778899aabbccddeeff plain.txt cbc_aes_en.bin
./crypto -t skcipher -n "cbc(aes)" -k 00112233445566778899aabbccddeeff -v 00112233445566778899aabbccddeeff -x cbc_aes_en.bin cbc_aes_de.bin
cmp cbc_aes_de.bin plain.txt
cat cbc_aes_de.bin

Когда aes-ecb-128 и aes-cbc-128 зашифрованы, открытый текст должен быть выровнен по 16 байтам, а любая нехватка будет автоматически заполняться нулями.

4.1.11 TRNG demo

Демо-версия TRNG генерирует случайные числа указанной длины путем чтения символьного устройства /dev/hwrng и выводит их в виде шестнадцатеричной строки.

Значение входных параметров ./trng следующее:

-h вывести справочную информацию

-b указывает длину выходного случайного числа, единица измерения — байт.

4.1.12 DRM demo

Демо-версия drm демонстрирует многоуровневые возможности аппаратного обеспечения VO.

VO имеет в общей сложности 8 слоев:

  1. Фоновый слой, настраиваемый цвет фона.
  2. Layer0 — это видеослой, поддерживает YUV422 и YUV420, поддерживает форматы NV12 и NV21, настраивается как для больших, так и для малых целей, а также поддерживает аппаратное масштабирование вверх и вниз.
  3. Layer1-layer3 — это видеослой, поддерживает YUV422 и YUV420, поддерживает форматы NV12 и NV21 и может быть настроен как на больших, так и на малых концах.
  4. Layer4-layer6 — это уровни OSD, поддерживающие несколько форматов ARGB.

После запуска платы разработки войдите в каталог /app/drm_demo и введите команду:

Язык кода:javascript
копировать
cd /app/drm_demo
./drm_demo
4.1.13 V4L2_DRM demo

Демонстрация v4l2_drm демонстрирует возможности ввода и отображения камеры.

После запуска платы разработки войдите в каталог /app/mediactl_lib и введите команду:

Язык кода:javascript
копировать
cd /app/mediactl_lib
./v4l2_drm.out -f video_drm_1080x1920.conf
или
./v4l2_drm.out -f video_drm_1920x1080.conf
или
./v4l2_drm.out -f imx385_video_1920x1080.conf  

демо imx385: Для этого необходимо изменить конфигурацию. Подробности см. в K510_V4l2_Developer_Guides.md. Выполните команду следующим образом:

Язык кода:javascript
копировать
./v4l2_drm.out -f imx385_video_1920x1080.conf  

Запустите приложение v4l2_drm.out, v4l2_drm.out отобразит эффект:

4.1.14 LVGL demo

Введите /app/lvgl и выполните следующую команду:

Язык кода:javascript
копировать
cd /app/lvgl
./lvgl

Эффект отображения следующий:

4.1.15 PWM demo

Драйвер ШИМ зарегистрирует и создаст узлы устройств /sys/class/pwm/pwmchip0 и /sys/class/pwm/pwmchip3.

Эта процедура может настроить и включить pwm0 и pwm1 соответственно и войти в каталог /app/pwm. Первый параметр приложения pwm указывает период установки ШИМ, единица измерения — нс, а второй параметр устанавливает «ВКЛ». ШИМ за один цикл. Время, единица измерения — нс. Третий параметр может иметь значения 0 и 1, обозначая pwm0 и pwm1 соответственно. Например, введите следующую команду, чтобы включить pwm0, период — 1 с, а рабочий цикл — 1000000000/500000000*100%. = 50%. Подробный код см. в содержимом папки package/app/pwm.

Язык кода:javascript
копировать
cd /app/pwm
./pwm 1000000000 500000000 0

Результат выполнения программы:

Подключите осциллограф к контакту 28 разъема J15 макетной платы K510 CRB5.1.2, и вы сможете наблюдать на осциллографе форму сигнала с периодом 1 секунда и коэффициентом заполнения 50%.

4.1.16 WIFI demo

После загрузки драйвера модуля Wi-Fi будет создана беспроводная сетевая карта wlan0, следуйте инструкциям стандартного драйвера сетевого порта и обратитесь к программированию сокетов TCP/IP для нормальной работы.

  1. Откройте «Мобильную точку доступа» на своем ноутбуке и установите имя и пароль точки доступа.
  2. Запустите NetAssist на ноутбуке, настройте тип протокола, IP-адрес локального хоста, порт локального хоста, настройки получения, настройки отправки и данные для отправки, как показано ниже:
  1. Формат параметров программы wifitest:
Язык кода:javascript
копировать
./wifi <AP name> <password> <local ip> <server ip>

Например, войдите в каталог /app/wifi и введите команду для запуска программы проверки Wi-Fi. Результат выполнения программы следующий:

4.1.17 GPIO_KEYS demo

Драйвер ключа использует общий драйвер gpio-keys на основе подсистемы ввода, встроенной в само ядро ​​Linux. После загрузки драйвера в каталоге /dev/input/devicesView создается узел мониторинга событий.

Процедура gpio-keys блокирует событие, сообщающее о клавише, и печатает информацию о событии. Информация включает кодировку клавиши и действие клавиши. Кодировка клавиши идентифицирует действие клавиши. При отпускании клавиши действие клавиши делится на нажатие. Программа рассчитает продолжительность нажатия клавиши.

Результат выполнения программы показан на рисунке ниже:

4.2 Руководство по использованию ИИ

В систему платы разработки встроено множество примеров приложений AI. Для каждого примера программы мы предоставляем соответствующий файл сценария. В файле сценария уже установлены прикладная программа AI и соответствующие параметры, которые необходимо запустить.

​ Прежде чем приступить к демонстрации руководства по применению ИИ, вам необходимо убедиться, что вы правильно подключили камеру и дисплей и включили макетную плату в нормальном режиме. После запуска платы разработки вы обнаружите, что камера автоматически запустится для получения изображений и предварительного просмотра программы на дисплее в реальном времени. Вам необходимо закрыть приложение вручную. Как его использовать:

входитьpsПроверятьприложение Посмотреть прогресс Число,Например, номер порта процесса программы предварительного просмотра в реальном времени — 189.

Язык кода:javascript
копировать
189 root      0:01 ./v4l2_drm.out -f video_drm_1920x1080.conf -e 1 -s

входитьkill -9 <процесс Число>,Завершите процесс предварительного просмотра в реальном времени.,Например, номер порта, который я проверил, — 189.,тогда это должновходить

Язык кода:javascript
копировать
kill -9 189

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

В этой главе представлены советы по развитиювстроенныйизAIприложениебегать Скрипты находятся по адресу/app/ai/shell/Оглавлениесередина。Входить Должен Оглавление,Проверьте, есть ли у да соответствующий файл сценария.

Язык кода:javascript
копировать
[root@canaan ~ ]$ cd /app/ai/shell/
[root@canaan /app/ai/shell ]$ ls
face_alignment.sh            object_detect_demo_bf16.sh
face_detect.sh               object_detect_demo_uint8.sh
face_expression.sh           open_pose.sh
face_landmarks.sh            person_detect.sh
face_recog.sh                retinaface_mb_320_bf16.sh
hand_image_classify.sh       retinaface_mb_320_uint8.sh
head_pose_estimation.sh      self_learning.sh
license_recog.sh             simple_pose.sh
object_detect.sh

Ниже приводится руководство по разработке приложения AI, соответствующего каждому сценарию.,существоватьруководитьниже Демочаснуждаться确保тыиз Последовательный терминалконтрольбашня已Входить/app/ai/shell/в каталоге。

4.2.1 Выравнивание лица

Выравнивание лица позволяет получить приблизительную глубину или информацию о pncc каждого лица на изображении или видео. Информация pncc — это вершина трехмерной формы лица, которая не только содержит информацию о трехмерных координатах этой точки, но также содержит здесь значение RGB.

Ссылка на документ: https://sci-hub.et-fine.com/10.1109/TPAMI.2017.2778152.

Координаты вершин и значения RGB 3D-среднего лица нормализуются, что является операцией NCC. Как показано на рисунке ниже, рисунок ниже взят со снимка экрана в статье.

Face Alignment Задача выравнивания лица да основана на определенном объеме обучающего набора и получает модель, которая позволяет модели отмечать точку (ориентир) на входном изображении лица в любой позе. Лицо Alignment Общий метод предъявления задания – обнаружение и обозначение лицевых точек.

Чтобы запустить демонстрационный пример выравнивания лица, введите в терминале:

Язык кода:javascript
копировать
./face_alignment.sh

Рендеринг выглядит следующим образом:

4.2.2 Обнаружение лиц

Обнаружение лиц использует сетевую структуру сетчатки-лица, а магистральная сеть выбирает 0,25-мобильную сеть.

Бумажная ссылка:https://arxiv.org/pdf/1905.00641.pdf

GitHubСвязь:https://github.com/deepinsight/insightface

На рисунке ниже показан одноэтапный метод попиксельной плотной локализации лица.

При использовании этого приложения вы можете получить каждый кадр обнаружения лица на изображении или видео, а также пять ориентиров левого глазного яблока/правого глазного яблока/кончика носа/левого угла рта/правого угла рта каждого лица. Использование следующее: введите:

Язык кода:javascript
копировать
./face_detect.sh
Детектор лица-bf16

Внедряйте неколичественные модели. Использование следующее: введите:

Язык кода:javascript
копировать
./retinaface_mb_320_bf16.sh
детектор лица-uint8

Реализовать модель квантования uint8. Использование следующее: введите:

Язык кода:javascript
копировать
./retinaface_mb_320_uint8.sh
4.2.3 Распознавание выражения лица

Для распознавания выражений лица необходимы две модели: одна модель используется для распознавания лиц; одна модель используется для распознавания выражений лица. Распознавание выражений лиц использует классификацию выражений лиц. С помощью этого приложения вы можете получить вероятность того, что каждое лицо на изображении или видео принадлежит к следующим выражениям. Использование следующее: введите:

Язык кода:javascript
копировать
./face_expression.sh
4.2.4 Обнаружение ключевых точек лица

PFLD (практическое обнаружение ориентиров лица) используется для обнаружения ключевых точек лица.

Бумажная ссылка:https://arxiv.org/pdf/1902.10859.pdf

С помощью этого приложения вы можете получить 106 ключевых точек для каждого контура лица на изображении или видео. Использование следующее: введите:

Язык кода:javascript
копировать
./face_landmarks.sh
4.2.5 Распознавание лиц

Распознавание лиц использует метод извлечения и сравнения лиц.,Результаты одного и того же человека будут максимально похожими,Будут большие различия в поведении разных людей.,Используйте это приложение, чтобы получить сходство между каждым лицом на изображении или видео и лицом на заднем плане.,для задач распознавания лиц. Использование следующего: введите:

Язык кода:javascript
копировать
./face_recog.sh

После завершения выполнения будет введен режим обнаружения лица. Когда камера обнаружит лицо, нажмите кнопку 1 на плате разработки. Положение следующее:

После нажатия вы увидите следующую выходную информацию в последовательной консоли.

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
total took 55.4448 ms
total took 56.2784 ms
Please Enter Your Name to Register:
>>>>> key code: 30, action: released <<<<<

Приведенная выше выходная информация предлагает вам ввести регистрационное имя лица на терминале последовательного порта. Вы можете напрямую ввести информацию о лице и нажать Enter после завершения ввода. Примечание. В настоящее время регистрационную информацию можно вводить только на английском языке. Предположим, я ввожу регистрационное имя как A, как показано ниже:

После завершения ввода он продолжит переход в режим обнаружения лиц. В это время, если только что зарегистрированное лицо будет обнаружено снова, регистрационная информация о лице будет отмечена во время обнаружения. Вы можете повторно зарегистрировать информацию о лице. После регистрации вы можете выполнить распознавание лиц в режиме обнаружения лиц, чтобы различать лица, зарегистрированные с различной информацией. Однако при обнаружении незарегистрированной информации о лице информация о лице не будет отмечена во время обнаружения.

5.2.6 Обнаружение гуманоидов

При использовании этого приложения вы можете получить кадры обнаружения человеческих тел в изображениях или видео. Использование следующее: введите:

Язык кода:javascript
копировать
./person_detect.sh
Обнаружение ключевых точек человеческого тела-открытое положение

Существует два основных метода обнаружения ключевых точек человеческого тела: один — сверху вниз, другой — снизу вверх. В этом приложении используется восходящая модель openpose. С помощью этого приложения вы можете получить 17 ключевых точек для каждого человеческого тела на изображении или видео. Использование следующее: введите:

Язык кода:javascript
копировать
./open_pose.sh
Обнаружение ключевых точек человеческого тела-YOLOV5S

Существует два основных метода обнаружения ключевых точек человеческого тела: один — сверху вниз, другой — снизу вверх. Это приложение использует нисходящую модель с использованием YOLOV5S для обнаружения человеческого тела, а затем использует простую позу для регрессии ключевых точек. С помощью этого приложения вы можете получить 17 ключевых точек для каждого человеческого тела на изображении или видео. Использование следующее: введите:

Язык кода:javascript
копировать
./simple_pose.sh
4.2.7 Распознавание обозначенной области кончиком пальца

Распознавание обозначенной области кончика пальца в основном включает в себя три процесса: обнаружение ладони + обнаружение ключевых точек ладони + распознавание изображений. Среди них tiny-yolov3 с разрешением 512x512 использовался для обнаружения ладоней; compressnet1.1 с разрешением 256x256 использовался для обнаружения ключевых точек ладони, а mobilenetv2, обученный на основе imagenet, использовался для распознавания изображений. При обнаружении ключевых точек руки кончики двух указательных пальцев используются для обрамления области, которую необходимо идентифицировать. Используйте модель классификации imagenet, чтобы определить область, которую необходимо идентифицировать. Использование следующее: введите:

Язык кода:javascript
копировать
./hand_image_classify.sh
4.2.8 Оценка угла наклона головы

Оценка угла головы позволяет получить данные о крене/рыскании/наклоне каждого лица на изображении или видео. Крен представляет собой степень наклона головы; рыскание представляет собой степень поворота головы влево и вправо; наклон представляет собой степень, в которой голова опускает и поднимает голову. Использование следующее: введите:

Язык кода:javascript
копировать
./head_pose_estimation.sh
4.2.9 Распознавание номерного знака

Общий процесс распознавания номеров фактически включает в себя два процесса: обнаружение номеров + распознавание номеров. Retinanet используется для обнаружения номерных знаков, а lprnet — для распознавания номерных знаков. Используя это приложение, вы можете получить содержимое каждого номерного знака в изображении или видео. Использование следующее: введите:

Язык кода:javascript
копировать
./license_recog.sh
4.2.10Обнаружение цели YOLOV5

Для обнаружения целей используется YOLOV5. С помощью этого приложения вы можете получить кадры обнаружения целей, принадлежащих следующим меткам, на изображениях или видео.

Язык кода:javascript
копировать
"person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck",
"boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat",
"dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe",
"backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard",
"sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle",
"wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple",
"sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake",
"chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop",
"mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink",
"refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"

Использование следующее: введите:

Язык кода:javascript
копировать
./object_detect.sh
Обнаружение целей YOLOV5-bf16

осуществлять Нет Количественная модель,Использование следующее: введите:

Язык кода:javascript
копировать
./object_detect_demo_bf16.sh
Обнаружение цели YOLOV5-uint8

Реализовать модель квантования uint8. Использование следующее: введите:

Язык кода:javascript
копировать
./object_detect_demo_uint8.sh
4.2.11 Самообучающийся алгоритм KNN

Самообучение опирается на KNN (k-Nearest Соседи) идеи. Идея этого алгоритма заключается в следующем: Выборка наиболее похожа на k выборок в наборе данных, Если большинство из этих k выборок относятся к определенной категории, то образец также относится к этой категории. Использование следующее: введите:

Язык кода:javascript
копировать
./self_learning.sh

После завершения выполнения на дисплее появится зеленое поле.

В этом примере AI требуется использование ключей (Ключ 1) и ключей (Ключ 2). Положения двух ключей следующие:

Поместите объект, который необходимо идентифицировать, в область действия камеры, чтобы объект можно было отобразить в центре зеленого поля. В это время вам необходимо вручную отметить его, нажав клавишу 1, чтобы начать отмечать класс 0. нажата, терминал последовательного порта запросит следующую информацию:

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
Please press UP or DOWN button, UP: confirm, DOWN: switch!
>>>>> key code: 30, action: released <<<<<

Приведенная выше информация напоминает вам, что если вы нажмете клавишу 1, изображение будет отмечено, а если вы нажмете клавишу 2, произойдет переключение режимов.

Продолжайте нажимать кнопку 1, чтобы начать автоматическое маркирование объекта. В это время последовательный терминал выведет следующую информацию:

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
Pressed UP button!
class_0 : 1
>>>>> key code: 30, action: released <<<<<

Повторное нажатие клавиши 1 в это время позволит вам продолжить аннотирование изображения или переключиться.

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
Please press UP or DOWN button, UP: confirm, DOWN: switch!
>>>>> key code: 30, action: released <<<<<

Если вам нужно несколько раз отметить несколько изображений, вы можете продолжать нажимать клавишу 1, чтобы отметить объект. Как показано ниже:

После маркировки категории 1 (класс 0) и нажатия клавиши 2 терминал последовательного порта выведет следующее содержимое:

Язык кода:javascript
копировать
>>>>> key code: 48, action: released <<<<<
>>>>> key code: 48, action: pressed <<<<<
Pressed DOWN button!
switch to class_1

В это время будет переключена категория маркировки 1 (класс 1). Продолжайте нажимать кнопку 1, чтобы обозначить категорию 1, и выберите функцию.

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
Please press UP or DOWN button, UP: confirm, DOWN: switch!
>>>>> key code: 30, action: released <<<<<

Продолжайте нажимать кнопку 1, чтобы отметить объекты категории 1.

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
Pressed UP button!
class_1 : 1
>>>>> key code: 30, action: released <<<<<

Если вам нужно несколько раз пометить несколько изображений, вы можете продолжать нажимать клавишу 1, чтобы пометить объект, так же, как метод маркировки класса 0 (класс 0), описанный выше.

После завершения аннотации, не входя в выбор функции, нажмите клавишу 2, чтобы завершить аннотацию, как показано на рисунке ниже.

Язык кода:javascript
копировать
>>>>> key code: 30, action: pressed <<<<<
Pressed UP button!
class_1 : 8
>>>>> key code: 30, action: released <<<<<
>>>>> key code: 48, action: released <<<<<
>>>>> key code: 48, action: pressed <<<<<
Pressed DOWN button!
Enter recog!

Поместите объект, только что отмеченный в зеленом поле. В это время плата разработки автоматически обнаружит распознанный объект на дисплее. Когда объект распознается, в левом верхнем углу отобразится категория соответствующего объекта и точность обнаружения. угол.

5. Напишите простую программу helloword.

5.1 Написание приложения helloword

​ Откройте виртуальную машину Ubuntu, откройте терминал и войдите в домашний каталог, создайте новую папку helloword.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~$ mkdir helloword

Войдите в папку helloword и создайте новую программу hello.c.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~$ cd helloword/
ubuntu@ubuntu2004:~/helloword$ touch helloword.c

В терминале инструмент gedit откроет текстовый редактор. Войдите в текстовый редактор и вставьте в него код программы helloword. После вставки нажмите Ctrl + s, чтобы сохранить, и, наконец, нажмите x в правом верхнем углу, чтобы закрыть. текстовый редактор:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/helloword$ gedit helloword.c 

программный код helloword:

Язык кода:javascript
копировать
#include <stdio.h>
int main (void)
{ 
 printf("hello word!\n");
 return 0;
} 

После написания сохраните в helloword.c после. Нам нужно указать папку, в которой хранятся заголовочные файлы библиотеки, необходимые для кросс-компиляции. Если вам нужно использовать цепочку инструментов кросс-компиляции в любом месте или терминале, вам необходимо отдельно Увеличивать Путь к корзине инструментальной цепочки: ubuntu В переменной среды PATH вы можете добавить ее в ~/.bashrcтакже Можетсуществовать每один Терминал单独配置。существовать Терминальное выполнениениже Заказ:

Язык кода:javascript
копировать
export PATH=$PATH:~/100ask_base-aiApplication-demo/riscv64-buildroot-linux-gnu_sdk-buildroot/bin/

После завершения ввода необходимо проверить, прошло ли добавление успешно. Введите в терминал:

Язык кода:javascript
копировать
riscv64-linux-gcc -v

входитьназад Можетнормальный Распечататьgcc version 7.3.0 (2019-11-20_nds64le-linux-glibc-v5d-6c120106e03)Вот и все。

5.2.Написание правил компиляции Makefile
Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/helloword$ touch Makefile
ubuntu@ubuntu2004:~/helloword$ gedit Makefile

Скопируйте следующую программу в Makefile

Язык кода:javascript
копировать
CC := riscv64-linux-gcc
helloword:  helloword.c
	${CC} -o helloword helloword.c
clean:
	rm helloword

После заполнения нажмите Crtl+s, чтобы сохранить Makefile.

5.3 Кросс-компиляция программы hellowrod

Проверьте, существуют ли helloword.c и Makefile в текущем каталоге:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/helloword$ ls
helloword.c  Makefile

Конечнодокументжитьсуществоватьназадосуществлятькомпилировать Заказmakeкомпилировать,Как показано ниже:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/helloword$ make
riscv64-linux-gcc -o helloword helloword.c

компилировать Заканчиватьназадвстреча生成可осуществлятьдокументhellword

Может быть выполнено file hellword Заказ Чтобы просмотреть тип скомпилированного файла будь то riscv Тип схемы.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/helloword$ file helloword
helloword: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, for GNU/Linux 4.15.0, with debug_info, not stripped
5.2 Загрузите программу на макетную плату и запустите ее

Скопируйте файл приветствия, созданный в результате компиляции, на плату разработки через ssh или TFTP и запустите его. Здесь передача TFTP используется для копирования сгенерированной программы приветствия в каталог tftpboot:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/helloword$ cp helloword /home/ubuntu/tftpboot

После завершения копирования,Посмотреть текущий IP-адрес Ubuntu,входитьifconfigназад,получатьIPадресдля192.168.0.163

Войдите в последовательный интерфейс терминала платы разработки и получите файл helloword в каталоге tftpboot.

Язык кода:javascript
копировать
[root@canaan ~ ]$ tftp -g -r helloword 192.168.0.163
helloword            100% |********************************| 11680  0:00:00 ETA

Разрешения на исполняемые файлы программы hellowordУвеличивать

Язык кода:javascript
копировать
[root@canaan ~ ]$ chmod 777 helloword

Запустите программу helloword на плате разработки.

Язык кода:javascript
копировать
[root@canaan ~ ]$ ./helloword
hello word!

6. Составьте простую демонстрационную программу искусственного интеллекта.

6.1. Скомпилируйте демонстрационную программу hello AI.

Получите привет с помощью терминала в любом каталоге AIизdemoпрограмма,входитьниже Заказполучать

Язык кода:javascript
копировать
git clone https://e.coding.net/weidongshan/dongsahnpi-vision/100ask_hello-ai_demo.git

Например:

Если вы не можете скачать,Может получить доступ к данным сетевого диска Baiduсерединаиз<Совет по развитиюимя>/5_DongshanPI-Vision_ВстроенныйAIМатериалы по разработке приложений/2.Hello-AI_demoпрограмма,Этот каталог содержит сжатый пакет демонстрационной программы.,Просто перенесите его в Ubuntu и разархивируйте.

скачать Заканчиватьназад Входить/home/ubuntu/100ask_base-aiApplication-demo/code,Новыйhello_ai_demoдокументпапка

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~$ cd /home/ubuntu/100ask_base-aiApplication-demo/code/
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code$ mkdir hello_ai_demo

Войдите в каталог hello_ai_demo и скопируйте демонстрационную программу Hello AI в текущий каталог hello_ai_demo.

Язык кода:javascript
копировать
cp /home/ubuntu/100ask_hello-ai_demo/* ./ -rf

После завершения копирования вы сможете увидеть файлы в папке hello-ai-demo следующим образом:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code/hello_ai_demo$ ls
CMakeFiles           cv2_utils.cc  format   main.cc           object_detect.h
cmake_install.cmake  cv2_utils.h   images   Makefile          README.md
CMakeLists.txt       file          include  object_detect.cc

После завершения копирования вернитесь в каталог кода предыдущего уровня и измените файл CMakeLists.txt в каталоге кода.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/ai_demo/100ask_base-aiApplication-demo/code/hello_ai_demo$ cd ../
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code$ gedit CMakeLists.txt

существоватьдокументконец Увеличиватьодно предложениеadd_subdirectory(hello_ai_demo),ИсправлятьназадизCMakeLists.txtКак показано ниже:

Язык кода:javascript
копировать
cmake_minimum_required(VERSION 3.2)
project(ai C CXX)

#set(DEMO_ROOT "${PROJECT_SOURCE_DIR}/../crb_demo")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3")
set(CMAKE_C_FLAGS_RELEASE "-O2 -s")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -s")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")

set(input imx219_1080x1920_0.conf imx219_0.conf imx219_1.conf video_192x320.conf video_object_detect_320.conf video_object_detect_432x368.conf video_object_detect_512.conf video_object_detect_640x480.conf video_object_detect_320x320.conf video_object_detect_480x640.conf video_object_detect_640.conf)
install(PROGRAMS ${input} DESTINATION exe)

add_subdirectory(face_detect)
add_subdirectory(face_landmarks)
add_subdirectory(object_detect)
add_subdirectory(face_alignment)
add_subdirectory(face_expression)
add_subdirectory(head_pose_estimation)
add_subdirectory(face_recog)
add_subdirectory(simple_pose)
add_subdirectory(openpose)
add_subdirectory(person_detect)
add_subdirectory(hand_image_classify)
add_subdirectory(license_plate_recog)
add_subdirectory(self_learning)
add_subdirectory(object_detect_demo)
add_subdirectory(retinaface_mb_320)
add_subdirectory(hello_ai_demo)

После завершения модификации,нажиматьCrtl+s保жить Исправлятьназадиздокумент。

Активируйте среду в терминале каталога кода и введите:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code$ source build.sh

После завершения среды активации войдите в каталог hello_ai_demo и начните компилировать демонстрационную программу Hello AI.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code$ cd hello_ai_demo/
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code/hello_ai_demo$ make

После завершения компиляции вы можете просмотреть скомпилированную исполняемую программу в каталоге hello_ai_demo, как показано в красном поле на следующем рисунке:

6.2 Загрузите программу на макетную плату и запустите ее

Скопируйте файл hello, созданный в результате компиляции, на плату разработки через ssh или TFTP и запустите его. Здесь передача TFTP используется для копирования сгенерированной программы hello_ai_demo в каталог tftpboot:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code/hello_ai_demo$ cp hello_ai_demo ~/tftpboot/

Передайте изображение для тестирования на плату разработки. Изображение для тестирования было подготовлено в папке images в каталоге hello_ai_demo.

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code/hello_ai_demo$ cd images/
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code/hello_ai_demo/images$ ls
01_person.bmp  02_cat.bmp

Скопируйте два образа в каталог tftpboot:

Язык кода:javascript
копировать
ubuntu@ubuntu2004:~/100ask_base-aiApplication-demo/code/hello_ai_demo/images$ cp ./* ~/tftpboot/

После завершения копирования,Посмотреть текущий IP-адрес Ubuntu,входитьifconfigназад,получатьIPадресдля192.168.0.163

Войдите в последовательный интерфейс терминала платы разработки и получите файл helloword в каталоге tftpboot.

Язык кода:javascript
копировать
[root@canaan ~ ]$ tftp -g -r hello_ai_demo  192.168.0.163
hello_ai_demo        100% |********************************|  818k  0:00:00 ETA
[root@canaan ~ ]$ tftp -g -r 01_person.bmp  192.168.0.163
01_person.bmp        100% |********************************|  300k  0:00:00 ETA
[root@canaan ~ ]$ tftp -g -r 02_cat.bmp  192.168.0.163
02_cat.bmp           100% |********************************|  300k  0:00:00 ETA

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

Язык кода:javascript
копировать
[root@canaan ~ ]$ cp /app/ai/kmodel/kmodel_release/object_detect/yolov5s_320/yol
ov5s_320_sigmoid_bf16_with_preprocess_output_nhwc.kmodel ./

После завершения копирования вы сможете увидеть соответствующие файлы в текущем каталоге.

Язык кода:javascript
копировать
[root@canaan ~ ]$ ls
01_person.bmp
02_cat.bmp
data
emmc
hello_ai_demo
yolov5s_320_sigmoid_bf16_with_preprocess_output_nhwc.kmodel

Разрешения на исполнение программы hello_ai_demoУвеличить

Язык кода:javascript
копировать
[root@canaan ~ ]$ chmod 777 hello_ai_demo

Запустите программу hello_ai_demo на плате разработки.

Язык кода:javascript
копировать
./hello_ai_demo ./yolov5s_320_sigmoid_bf16_with_preprocess_output_nhwc.kmodel ./01_person.bmp

Результат выполнения следующий:

Пример 1:

Язык кода:javascript
копировать
[root@canaan ~ ]$ ./hello_ai_demo ./yolov5s_320_sigmoid_bf16_with_preprocess_out
put_nhwc.kmodel ./01_person.bmp
hello 100ask AI demo!
==> run inference finished!
image inference result: person:0.89

Программа определяет наличие человека в файле 01_person.bmp с вероятностью 0,89.

Пример 2:

Язык кода:javascript
копировать
[root@canaan ~ ]$ ./hello_ai_demo ./yolov5s_320_sigmoid_bf16_with_preprocess_out
put_nhwc.kmodel ./02_cat.bmp
hello 100ask AI demo!
==> run inference finished!
image inference result: cat:0.86

Он распознает наличие кошки в файле изображения 02_cat.bmp с вероятностью 0,86.

Примечание. Для прогнозирования можно передать собственное изображение. Необходимо убедиться, что формат изображения — bmp, а размер — 320x320.

6.3 объяснение программы hello AI
6.3.1 Структура программы
6.3.2 Объяснение программы

Извлечение компонентов RGB из файлов BMP

Язык кода:javascript
копировать
int get_rgb_from_bmp(char *file, uint8_t *rbuf, uint8_t *gbuf, uint8_t *bbuf)
{	
    int err;
	unsigned int *p;
	unsigned int rgb32;
	int r_pos = 0, g_pos = 0, b_pos = 0;

	/* данные точечной матрицы */
	T_PixelDatas bmpPixelDatas;

	/* Разбирать BMP-файлы */
	err = GetPixelDatasForIcon(file, &bmpPixelDatas);
	if (err)
	{
		DebugPrint("Can not get digit bmp file: %s\n", file);
		return -1;
	}

	/* Вынимаем RGB внутри отдельно */
	for (int y = 0; y < MIN(320, bmpPixelDatas.iHeight); y++)
	{
		p = (unsigned int *)(bmpPixelDatas.aucPixelDatas + y * bmpPixelDatas.iLineBytes);
		r_pos = g_pos = b_pos = y*320;
		
		for (int x = 0; x < MIN(320, bmpPixelDatas.iWidth); x++)
		{
			rgb32 = p[x];
			/*Сохраняем данные трех каналов RGB в 3 буфера соответственно*/
			rbuf[r_pos++] = (rgb32 >> 16) & 0xff;
			gbuf[g_pos++] = (rgb32 >> 8)  & 0xff;
			bbuf[b_pos++] = (rgb32 >> 0)  & 0xff;
		}
	}

	return 0;
	
}

Инициализировать модель

Язык кода:javascript
копировать
objectDetect od(0.5, 0.45, 320, {320, 320});//Достоверность, порог нм, размер модели, размер изображения
od.load_model(argv[1]); //Загрузка модели yolov5s_320_sigmoid_bf16_with_preprocess_output_nhwc.kmodel
od.prepare_memory(); // memory allocation Подготовить Память

Использовать модель

Язык кода:javascript
копировать
	/* Поместите данные RGB скопировать в od */
	od_r = (uint8_t *)od.virtual_addr_input[0]; 
	od_g = od_r + 320*320;
	od_b = od_g + 320*320;

	memcpy(od_r, rbuf, 320*320);
	memcpy(od_g, gbuf, 320*320);
	memcpy(od_b, bbuf, 320*320);


	od.set_input(0);//настраиватьвходить
	od.set_output();//Выход объекта
	
	od.run();//бегатьрассуждение
	
	od.get_output(); //Получаем результаты вывода

Постобработка

Язык кода:javascript
копировать
	/*Постобработка: Преобразование результатов вывода в полезные данные*/
	std::vector<BoxInfo> result;
	od.post_process(result);//бегать Постобработка	

	for (auto r : result)
	{
		std::string text = od.labels[r.label] + ":" + std::to_string(round(r.score * 100) / 100.0).substr(0,4);
		cout<<"image inference result: ";
		cout<<text<<endl;
	}

7.Встроенная разработка

7.1 Цепочка инструментов компиляции

цепочка инструментовдагруппаинструменты программирования,для развитияпрограммное обеспечение、создаватьпрограммное обеспечениепродукт。цепочка Инструменты обычно представляют собой другую компьютерную программу или группу этапов закрывания программы. Обычно цепочка инструментов Есть несколько винструмент,Результат работы предыдущего инструмента,да Ввод следующего инструмента,Другими словами, да сказал, что предыдущий инструмент был обработан.,Затем оставьте это следующему инструменту.

Простая цепочка инструментов Может состоять из трех частей:компиляторикомпоновщик(Преобразование исходного кодадляисполняемая программа)、Библиотека(дляОперационная системапоставлятьинтерфейс)иотладчик(используется длятестиотлаживатьсоздаватьизпрограмма)。один复杂изпрограммное обеспечениепродукт,нравитьсявидеоигры,нуждаться ПодготовитьЗвуковые эффекты、музыка、текстура3 трехмерная модельианимированныйинструмент,и дополнительный инструмент, который объединяет эти ресурсы в готовый продукт.

**GNU ** цепочка инструментов даодин广泛收集из、Соблюдать лицензию GNU、многочисленныеинструменты программирования。Этиинструментсформироватьцепочка инструментов,для развитияприложениеиОперационная система

GNU цепочка инструментовсуществоватьLinux、НекоторыйBSDсистемаивстроенная системапрограммное Обеспечение играет жизненно важную роль в развитии закрытия.

7.2 Цепочка инструментов кросс-компиляции

**Кросс-компилятор:** Используйте это на платформе A для создания программы.,Эта программа находится на платформе B. Например,существоватьPCначальствобегатьпрограмма,ноэтотпрограммадасуществоватьAndroid Смартфонначальствобегатьиз,этоткомпилятор Сразудакресткомпилятор。

При компиляции кода для других платформ (целевых платформ) на ПК необходим кросс-компилятор. Можно ли скомпилировать программу непосредственно на целевой платформе? Например, скомпилировать программу на ARM плате? В большинстве случаев это невозможно, поскольку ресурсы платы ARM, скорее всего, будут ограничены.

Основная цель кросс-компилятора — отделить среду сборки от целевой среды. Это полезно в нескольких ситуациях:

  • Ресурсы оборудования крайне ограниченыизвстроенный компьютер。примернравиться,У микроволновой печи будет очень маленький компьютер, который сможет считывать информацию с клавиатуры и датчика двери.,Вывод на цифровой дисплей и динамик,и управляет машинами, которые готовят еду. Этот компьютер обычно недостаточно мощный,Не могущийбегатькомпилятор、файловая система или среда разработки.
  • Компилируйте для мультитаргетинга. Например, компания может захотеть использовать один и тот же код для поддержки нескольких различных операционных систем. система。проходитьиспользоватькресткомпилятор,Можетнастраиватьединая среда сборки,Скомпилируйте программу отдельно для каждой целевой системы.
  • существоватьна серверекомпилировать。Мощная производительность сервера,Многие компании являютсядасуществоватьна Программа компилирует программу для других платформ.
  • гидна новую платформу。существоватьдля新平башня开发программное обеспечения, люди используют кросс-компилятор для компиляции необходимого инструмента, например Операционная системаиместныйкомпилятор。
7.3. Получите подходящую цепочку инструментов кросс-компиляции.
  • Получите готовый
    • Из системы распределения: Ubuntu и Debian Существует множество готовых кроссов компилятора.
  • Из разных организаций:
    • Кросс-компиляция оригинального производителя чипов по содержаниюцепочка инструменты (обычно включаются в соответствующий BSP).
    • Различные архитектуры сообщества Bootlin создают цепочку инструментов 。
    • ARM Официально предоставлен aarch32 aarch64цепочка инструментов。
    • Linaro поставлять ARM и AArch64 цепочка инструменты и некоторые более ранние версиицепочка инструментов。
    • gnutoolchains позволяет выполнить кросс-компиляцию проекта на цепочке Windows инструментов。
    • riscv-collab поставлятьизriscv GNU цепочка инструментов。
  • Скомпилируйте и создайте сами
    • Crosstool-NG, специально созданная для кросс-компиляции цепочка инструментовизинструмент。 Имеет, безусловно, наиболее настраиваемые параметры и поддерживает множество функций.
    • Интегрированные системы сборки Linux обычно умеют собирать цепочку кросс-компиляции. инструментов:Yocto/OpenEmbedded、Buildroot、OpenWRT.
  • Справочная документация
    • Crosstool-NG Документация, https://github.com/crosstool-ng/crosstool-ng/blob/master/docs/.
    • GCC Документация, https://gcc.gnu.org/onlinedocs/.
    • Binutils Документация, https://sourceware.org/binutils/docs/.
7.4 Инструменты создания Makefile
7. Инструмент сборки 5 CMake

CMake — это кроссплатформенное семейство инструментов с открытым исходным кодом, предназначенное для создания, тестирования и упаковки программного обеспечения. CMake используется для управления процессом компиляции программного обеспечения с использованием простых файлов конфигурации, независимых от платформы и компилятора, а также для создания собственных make-файлов и рабочих пространств, которые можно использовать в среде компилятора по вашему выбору. Набор инструментов CMake был создан компанией Kitware в ответ на потребность в мощной кроссплатформенной среде сборки на основе проектов с открытым исходным кодом, таких как ITK и VTK.

CMake является частью коллекции коммерчески поддерживаемых платформ разработки программного обеспечения с открытым исходным кодом Kitware.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода