Запуск приложений компьютерного зрения (или приложений ИИ в целом) может создать нагрузку на пограничное устройство, особенно при объединении моделей. Использование радиатора в сочетании с вентилятором, вероятно, достаточно, чтобы предотвратить дросселирование устройства, но было бы полезно получить уведомление до того, как ваше устройство станет таким горячим. Предупреждение о потенциально небезопасной температуре позволяет вам остановить приложение до того, как устройство сгорит, и продолжить следить за температурой, давая вам возможность перезапустить программу, когда устройство достаточно остынет.

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

В этом руководстве используется Raspberry Pi 4 и пакет gpiozero, который по умолчанию установлен в образе ОС Raspbian. Подробнее об этом пакете смотрите по следующей ссылке.

Чтобы пройти обучение, у вас должны быть:

  1. Аккаунт AlwaysAI (бесплатно!)
  2. alwaysAI настроить на вашу машину (также бесплатно)
  3. Текстовый редактор, такой как sublime, или IDE, такая как PyCharm, или что-то еще, что вы предпочитаете кодировать.

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

Весь код из этого руководства доступен на GitHub.

Этот урок будет состоять из двух основных частей:

  1. Добавление требований GPIO Zero
  2. Инициализация трекера температуры в файле app.py

Начнем!

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

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

  1. Добавление нулевых требований GPIO:
  • Сначала добавьте в папку файл requirements.txt.
  • Добавьте содержимое gpiozero в файл requirements.txt. Это будет установлено при развертывании вашего приложения. См. документацию alwaysAI для получения дополнительной информации о зависимостях.

ПРИМЕЧАНИЕ: если ваш Pi не подключен к Wi-Fi, он не сможет загрузить требования в файле requirements.txt

2. Обновление файла app.py для использования TemperatureTracker:

  • Импортируйте код TemperatureTracker, добавив следующую строку в самый верх app.py:
from temperature_tracker import TemperatureTracker
  • После операторов печати, описывающих модель, движок, ускоритель и метки, мы создадим экземпляр TemperatureTracker. Добавьте следующую строку кода:
temperature_tracker = TemperatureTracker()
  • Теперь нам нужно отметить время начала записи данных о температуре. Внутри блока try/with, но перед циклом while, добавьте следующий код сразу после запуска экземпляра FPS:
temperature_tracker.start()
  • Чтобы получить данные о температуре, вызовите метод update. Поместите следующий код внутрь цикла while:
temperature_tracker.update()

ПРИМЕЧАНИЕ. Я добавил пустую строку для удобства чтения после цикла «для предсказания в предсказаниях» и перед операторами температуры. Это можно сделать в любое время, когда вы хотите повысить читабельность вывода текста стримера с помощью ‘text.append(“”)’.

  • Чтобы получить только текущие показания, а не изменять сохраненные данные, вы можете использовать метод «сейчас». Это вернет температуру и соответствующую метку времени. Сделайте это, добавив следующую строку сразу после вызова обновления, который вы добавили на предыдущем шаге:
now = temperature_tracker.now()
  • Мы можем дополнить текст, отправленный стримеру, текущей температурой, а также проверить, была ли возвращенная температура безопасной (по крайней мере, для Raspberry Pi 4). Добавьте следующий код под изменениями, которые вы сделали на предыдущих двух шагах:
# log block showing current temperature
text.append(“{:1.2f}C/{:1.2f}F at time {}\n”.format(now[0], ((now[0]*(9 / 5)) + 32),time.strftime(‘%Y-%m-%d %H:%M:%S’, now[1])))
# details whether the temperature is safe for a Raspberry Pi 4
if now[0] < temperature_tracker.MAX_TEMP_RASP4:
    text.append(“Temperature is safe”)
else:
    text.append(“TEMPERATURE IS NO LONGER SAFE”)

ПРИМЕЧАНИЕ. Если вы не видите предупреждающее сообщение на стримере до остановки приложения, это означает, что лента браузера не обновлялась до остановки приложения. Вы по-прежнему будете видеть это предупреждающее сообщение на консоли после остановки программы.

  • После вызова fps.update() добавьте следующую проверку:
if now[0] >= temperature_tracker.MAX_TEMP_RASP4:
    print(“Maximum safe temperature reached, stopping program”)
    break
  • Наконец, в последнем блоке отметьте время, когда вы остановили трекер после остановки экземпляра FPS, добавив:
temperature_tracker.stop()
  • Соберите и распечатайте сводные данные о температуре, добавив следующие строки непосредственно перед оператором печати «Окончание программы»:
summary = temperature_tracker.summary()
print(summary)

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

aai app configure

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

aai app deploy

И как только сборка будет завершена, запустите приложение с помощью команды:

aai app start

Откройте в браузере адрес localhost:5000, чтобы увидеть приложение в действии, и посмотрите на консоль после закрытия программы, чтобы просмотреть сводку данных о температуре, как показано ниже.