Раз уж Вы заинтересовались данной статьёй, то ожидается, что Вы умеете программировать на с++ с использованием библиотеки Qt  и разрабатывать нейросети на Python c использованием библиотеки tensorflow.Соответственно остаётся только понять как использовать обученные Вами нейросетевые модели в Qt проектах. А сделать нужно следующее: Скачать и откомпилировать для нужной платформы tensorflow Скачать и откомпилировать для нужной платформы opencv Скачать android SDK и настроить Qt для работы с ним В pro файле Qt указать местоположение директории с заголовочными файлами и сами откомпилированные библиотеки Написать программу Для Android задействовать аппаратное ускорение Скачать исходные коды можно с официального сайта.Для этого в папке, в которой Вы планируете хранить проекты, выполните (в консоли, конечно) git clone https://github.com/tensorflow/tensorflow.git и командойgit checkout branch_name выберите нужную версию tensorflow. Для компиляции tensorflow Вам понадобится bazel. Но каждая версия tensorflow требует своей версии basel. Чтобы не париться самому с версиями, стоит установить bazelisk. Для чего скачиваем бинарник с https://github.com/bazelbuild/bazelisk/releases, переименовываем в bazelisk и кладём в системную папку с программами, например в /usr/local/bin (для linux), после чего в командах компиляции вместо bazel пишем bazelisk. Есть два варианта использования tensorflow: используя оригинальный tensorflow используя tensorflow lite Плюсы: Использование оригинального файла сохранения модели Возможность обучать модель Минусы: Сложный интерфейс. Тут именно tensorflow без keras, то есть Вы оперируете не понятиями модель, слой, а понятиями вычислительный граф, вычислительная операция Огромный размер библиотеки около 300 MB Нет настроек для компиляции под мобильные ОС Плюсы: Простой интерфейс, хоть и не такой как keras Маленький размер библиотеки - несколько мегабайт Есть настройки компиляции под мобильные ОС Минусы: Необходимость преобразовывать формат ".h5" в формат ".tflite" (делается одной командой на python). Могут поддерживаться не все операции (в моей модели таких не было). Для компиляции необходимо выполнить следующие команды:Устанавливаем protobuf: Добавить googleprotobuf*; в tensorflow/tensorflow/tf_version_script.lds После чего: Следует отметить, что версия protobuf должна соответствовать версии tensorflow. Я нашёл соответствие по выдаваемой при компиляции tensorflow ошибке. Для компиляции необходимо выполнить следующие команды: ./confugure в интерактивном режиме настроит сборку, если настройка для компиляции под android, Вам потребуется указать местоположение Android NDK, которую вы скачали в составе Android studio.Здесь android_arm64 - настройки для компиляции под 64 битную версию android.Замените на android_arm для компиляции под 32 битную версию android.Уберите --config=android_arm64 для компиляции под ту ОС, в которой Вы ведёте разработку.Ссылка по теме на официальный сайт https://www.tensorflow.org/lite/android/development После компиляции появится директория bazel-bin, в которой скомпилированная библиотека будет находится в директории tensorflow/lite В команду компиляции можно добавить следующие флаги оптимизации, что процентов на 20 может повысить быстродействие: Набор инструкций Флаги AVX --copt=-mavx AVX2 --copt=-mavx2 FMA --copt=-mfma SSE 4.1 --copt=-msse4.1 SSE 4.2 --copt=-msse4.2 Все поддерживаемые процессором --copt=-march=native но в таком случае на некоторых компьютерах ПО может не работать. В pro файле проекта на Qt для android следует добавить следующие строки: Выполнить git clone https://github.com/opencv/opencv.gitПерейти на нужную версию git checkout "Ветка", для каждой версии opencv есть ветка.Рядом с директорией opencv создать директорию, например opencv_build, в которой для каждой платформы создать свою директорию.В директории opencv_build для платформы Android 64 создавать скрипты следующего содержания, заменяя "Папка куда будет вестись компиляция под конкретную ОС""Папка с конкретной версией android NDK""Папка с результатом сборки",Вашими названиями папок. Для 32-битной  Android платформы нужно arm64-v8a заменить на armeabi-v7a Для desktop платформы скрипт будет следующий: В pro файле проекта следует добавить для desktop следующее: В pro файле проекта следует добавить для android следующее: Установим его в систему глобально следующими командами: Вы можете установить flatbuffers локально заменивsudo make installcmake --install . --prefix "Папка с результатом сборки",а затем с помощью INCLUDEPATH += и LIBS += добавить к проекту Qt Здесь я опишу работу с tensorflow lite Для работы с tensorflow lite преобразуем модель в его формат: Теперь подключим необходимые библиотеки: Теперь загрузим модель: Если status == kTfLiteOk, то можем выполнять инференс модели.К сожалению, я не нашёл как получить размерности входного и выходного слоя из самой модели, поэтому их нужно просто знать. В данном примере вход берётся видеофрейм cv:Mat , выходом же будет массив из 9 чисел (вероятностей конкретного класса). Очень часто распознавать требуется кадры из видео-потока  веб камеры или камеры смартфона, что программно одно и тоже.  Захват можно делать либо средствами opencv, либо средствами Qt.  Делать захват средствами opencv заманчиво, так как с полученным кадром можно удобно делать  множество операций, например, вырезать заданную область, но у меня так и не получилось заставить работать захват через opencv под android. Поэтому я сделал захват и вывод видео-потока средствами Qt, а преобразования кадров средствами opencv. Так работает под все платформы. Для захвата камеры нужно создать 3 объекта:   После чего выбрать камеру (например, камеру по умолчанию) и связать данные объекты:  После чего периодически  опрашивать видео-поток и преобразовывать изображение в cv:Mat: Вот функции преобразования из QImage в cv::Mat и обратно: Кроме своих моделей полезно использовать чужие, уже обученные, например, в opencv встроена модель детекции лиц cv::dnn::Net, вот пример: Правда под Android модели opencv у меня работали крайне неэффективно, раз в 40 хуже, чем обученные мной tensorflow модели. Если кто-то знает как это исправить пишите, буду рад. Tensorflow предоставляет кучу готовых, обученных моделей компьютерного зрения в проекте mediapipe и под python их можно удобно использовать, но под с++ планируется, что Вы интегрируетесь в mediapipe, а не наоборот, так как планируется, что если Вы используете с++, то Вам необходим минимальный объём приложения.  Идея mediapipe заключается в том, что пишется текстовый файл в специальном формате, в котором описывается путь данных от ввода, например, с камеры, до вывода на экран устройства этот файл подаётся на вход программе, реализующей общий код приложения. Если какое-то преобразование не существует в mediapipe, то пишется класс наследуемый от mediapipe::CalculatorBase, в котором реализуется данное преобразование. Подробнее можно прочитать по ссылке. Но это уже тема отдельной статьи. Вот ссылка на готовый проект В нём есть ветки с разными реализациями. Для использования аппаратного ускорения нужно применять делегаты. Ссылка по ним на сайте tensorflow https://www.tensorflow.org/lite/performance/delegates?hl=ruВ данном примере добавим nnapi и gpu делегаты, делается это следующим образом : Подключаем библиотеки(только под android) При создании модели создаём делегатов и указываем их модели После этого пользуемся моделью как обычно. Однако для того чтобы библиотеки с делегатами были доступны необходимо перед компиляцией tensorflow добавить их в проект, делается это следующим образом: В директории с tensorflow заходим в tensorflow/lite/там находим файл BUILDв нём по ключевому слову tensorflowlite ищем раздел tflite_cc_shared_object в котором name = "tensorflowlite" вот пример: В нём в раздел deps добавляем следующие строки После чего компилируем библиотеку.Если при создании модели после добавления делегатов ваша программа стала крашится, возможно ваша модель слишком велика для аппаратного ускорения на данном устройстве, у меня было именно так, после того как я её уменьшил всё стало хорошо.