Ошибка загрузки моделей face-api.js: несоответствие формы тензора в iOS приложении с React и Capacitor

Вопрос или проблема

Я разрабатываю iOS-приложение с использованием React и Capacitor, которое использует face-api.js для распознавания лиц. Приложение работает нормально в веб-среде как локально, так и на проде для Windows и iOS. Однако я сталкиваюсь с проблемами при загрузке моделей face-api.js в Xcode в режиме разработки. В частности, я получаю ошибку несовпадения формы тензора, которую не могу разрешить.

Ошибка:

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

Ошибка при загрузке моделей face-api.js:
Ошибка: На основе предоставленной формы [1,1,512,9] тензор должен иметь 4608 значений, но имеет 1324
    на lt — util.ts:108
    на $r — tensor_ops.ts:87
    на o — io_utils.ts:175
    на Yd — io_utils.ts:116
    ...
    на AddEmployeePage.js:38

Что я пробовал:

1- Код загрузки модели:

Я использую следующий код для загрузки моделей с CDN. Это отлично работает в веб- и Android-приложениях, но вызывает ошибку выше на iOS.

const loadModels = async () => {
    try {
        const modelUrl = "https://cdn.jsdelivr.net/gh/justadudewhohacks/[email protected]/weights";
        await faceapi.nets.ssdMobilenetv1.loadFromUri(modelUrl);
        await faceapi.nets.faceRecognitionNet.loadFromUri(modelUrl);
        await faceapi.nets.faceLandmark68Net.loadFromUri(modelUrl);
        console.log("Модели загружены успешно");
    } catch (err) {
        console.error("Ошибка загрузки моделей face-api.js:", err.message);
    }
};

2- Загрузка из локальных файлов:

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

3- Альтернативные методы загрузки:

Я также пытался загрузить модели через оффлайн CDN, но результата это не дало.

Дополнительная информация:

Среда:

  • React (с Capacitor для сборки нативного iOS)

  • Версия face-api.js: 0.22.2

  • Успешно размещено веб-версия на Vercel.

Цель:

Мне нужно, чтобы распознавание лиц работало оффлайн, а также в веб-средах. Приложение будет развернуто на нескольких устройствах iOS и должно эффективно обрабатывать распознавание лиц в реальном времени.

Если у вас есть вопросы ко мне, пожалуйста, не стесняйтесь спрашивать!

Буду признателен за любые идеи или обходные пути!

Итак, похоже, что есть два способа исправить это. Первое — длинный путь (не рекомендуется), который заключается в использовании FileZilla для преобразования ваших моделей в бинарный формат, но это довольно хлопотно, так как вам нужно подключиться к вашему серверу; предоставить хост, имя пользователя, пароль и порт. И при этом необходимо установить само приложение.

Вместо этого вы можете просто переименовать ваши «шарды» моделей, добавив .bin в конце.

Например, вместо того чтобы называть его "face_recognition_model-shard1", вы называете его "face_recognition_model-shard1.bin".

Что вы можете забыть сделать, так это изменить пути в ваших .json файлах на:

paths": ["face_landmark_68_model-shard1.bin"]

Спасибо за чтение, надеюсь, это поможет!

Ответ или решение

Ошибка загрузки моделей face-api.js: Несоответствие формы тензора в приложении для iOS с использованием React и Capacitor

Ваша проблема с загрузкой моделей face-api.js на iOS, сопровождающаяся ошибкой несоответствия формы тензора, может быть решена, следуя следующим рекомендациям. Опишем детально возможные причины возникновения ошибки и пути её решения.

Причина проблемы

Ошибка, которую вы наблюдаете, указывает на то, что формы тензоров, загружаемые из вашего источника, не совпадают с ожидаемыми. В вашем случае сообщение об ошибке указывает, что тензор должен содержать 4608 значений, но содержал только 1324. Это может происходить по следующим причинам:

  1. Необходимость в корректных весах модели: Модели face-api.js требуют правильно именованных файлов весов, и, если эти файлы не соответствуют тому, что ожидает система, это приводит к ошибкам загрузки.

  2. Загрузка моделей из локального или удаленного источника: Разные источники могут иметь уникальные требования к структуре имен и форматов файлов.

Рекомендации по решению проблемы

  1. Переименование файлов моделей: Как Вы упомянули в своем запросе, одно из решений заключается в добавлении расширения .bin к именам "шард" моделей. Проверьте, что все шардовые файлы моделей, такие как face_recognition_model-shard1, были переименованы в face_recognition_model-shard1.bin. Это изменение должно быть выполнено для всех шардов моделей.

  2. Обновление файлов JSON: После переименования файлов убедитесь, что пути, указанные в ваших JSON-файлах, обновлены. Например, вместо:

    "paths": ["face_landmark_68_model-shard1"]

    Используйте:

    "paths": ["face_landmark_68_model-shard1.bin"]
  3. Проверка структуры директорий: Убедитесь, что все файлы моделей правильно расположены в вашей файловой структуре. Когда вы обращаетесь к ним, пути должны быть корректными и соответствовать структуре папок, используемой в вашем проекте.

  4. Тестирование на Simulator и реальных устройствах: Даже если все работает в веб-среде и на Android, обязательно протестируйте ваше приложение на реальном iOS-устройстве, так как эмуляторы могут вести себя иначе по сравнению с физическими устройствами.

  5. Минимизация использования внешних CDNs: Если возможно, загрузите модели локально и убедитесь, что приложение работает корректно с ними онлайн и в оффлайн-режиме.

Дополнительные советы

  • Драйверы и зависимости: Проверьте, что у вас установлены все необходимые зависимости и драйверы для работы face-api.js в вашем приложении. Это может включать в себя использование совместимых версий библиотек.

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

  • Обновление библиотек: Если вы используете устаревшую версию face-api.js, рассмотрите возможность обновления до последней версии библиотеки, так как возможные исправления ошибок могли быть внедрены разработчиками.

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

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

Капча загружается...