C# установка e рабочего Background. Результат в DoWork и возвращающий значение в WorkCompleted

  1. Новый ARCore Augmented Faces API , который работает на фронтальной камере без датчика глубины, предлагает высококачественную 468-point 3D-сетку, которая позволяет пользователям добавлять такие эффекты на их лица в виде анимированных масок, очков, ретуши кожи и т. д. Сетка предоставляет координаты и привязки к региону , которые позволяют добавлять эти эффекты.

Я твердо верю, что обнаружение лицевых ориентиров генерируется с помощью алгоритмов компьютерного зрения под капотом ARCore 1.7 . Также важно сказать, что вы можете начать работу в Unity или в Sceneform, создав сеанс ARCore с включенным режимом «фронтальная камера» и «Расширенные грани». Обратите внимание, что другие функции AR, такие как определение плоскости, в настоящее время недоступны при использовании фронтальной камеры. AugmentedFace расширяет Trackable, поэтому лица обнаруживаются и обновляются точно так же, как плоскости, дополненные изображения и другие отслеживаемые объекты .

blockquote>

enter image description here

Как вы знаете, 2+ года назад Google выпустила Face API, которая выполняет обнаружение лица, которое находит лица в фотографии, а также их положение (где они на картинке) и ориентация (в какую сторону они смотрят, относительно камеры). API Face позволяет вам определять ориентиры (точки интереса на лице) и выполнять классификацию, чтобы определить, являются ли глаза открытыми или закрытыми, и является ли лицо улыбающимся. Face API также обнаруживает и отслеживает лица в движущихся изображениях, что называется отслеживанием лиц.

blockquote>

Итак, ARCore 1.7 только что позаимствовал некоторые архитектурные элементы из Face API, и теперь он не только обнаруживает лицевые ориентиры и генерирует для них 468 точек, но и отслеживает их в в режиме реального времени со скоростью 60 кадров в секунду и придерживается трехмерной геометрии лица .

См. Google Обзор концепций распознавания лиц .

enter image description here

  1. Рассчитать канал глубины в видео, снятом движущейся RGB-камерой, не является ракетостроением. Вам просто нужно применить формулу параллакса к отслеживаемым функциям. Таким образом, если амплитуда трансляции объекта на статическом объекте достаточно высока - отслеживаемый объект находится ближе к камере, а если амплитуда объекта на статическом объекте достаточно низкая - отслеживаемый объект находится дальше от камеры. Эти подходы для расчета глубинного канала вполне обычны для таких приложений композитинга, как The Foundry NUKE и Blackmagic Fusion более 10 лет. Теперь те же принципы доступны в ARCore.

  2. Вы не можете отклонить алгоритм обнаружения / отслеживания лиц для пользовательского объекта или другой части тела, например руки. API Augmented Faces разработан только для лиц.

Вот как выглядит Java-код для активации функции Augmented Faces:

// Create ARCore session that supports Augmented Faces
public Session createAugmentedFacesSession(Activity activity) throws 
                                                      UnavailableException {

    // Use selfie camera
    Session session = new Session(activity, 
                                  EnumSet.of(Session.Feature.FRONT_CAMERA));

    // Enabling Augmented Faces
    Config config = session.getConfig();
    config.setAugmentedFaceMode(Config.AugmentedFaceMode.MESH3D);
    session.configure(config);
    return session;
}

Затем получите список обнаруженных лиц:

Collection faceList = session.getAllTrackables(AugmentedFace.class);

И, наконец, рендеринг эффекта :

for (AugmentedFace face : faceList) {

    // Create a face node and add it to the scene.
    AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
    faceNode.setParent(scene);

    // Overlay the 3D assets on the face
    faceNode.setFaceRegionsRenderable(faceRegionsRenderable);

    // Overlay a texture on the face
    faceNode.setFaceMeshTexture(faceMeshTexture);

    // .......
}

Надеюсь, это поможет.

17
задан ant2009 13 May 2009 в 06:07
поделиться

3 ответа

Из MSDN :

Если операция завершена успешно и его результат назначается в обработчике событий DoWork, вы можете получить доступ к результату через RunWorkerCompletedEventArgs.Result свойство.

и :

Ваш обработчик событий RunWorkerCompleted. всегда следует проверять ошибку и Отмененные свойства до доступа Свойство Result. Если исключение был поднят или если операция была отменено, доступ к Результату свойство вызывает исключение.

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

27
ответ дан 30 November 2019 в 10:50
поделиться

Скорее всего, потому что код отменяет работу, а не завершает ее. Поэтому попробуйте получить доступ к результату в ветке if (! E.Cancel).

2
ответ дан 30 November 2019 в 10:50
поделиться

Свойство Результат предназначено для представления результата завершенной операции. Вы установили для параметра Отмена значение true, что означает, что операция была отменена, поэтому результата не должно быть.

Похоже, вы должны закодировать «Я прервал, потому что что-то пошло не так» в свой result, или выбросить исключение, которое будет установлено как свойство Error в результате - Отмена предназначена для установки, если рабочий заметил, что вызов был отменен извне.

В документации для RunWorkerCompletedEventArgs.Result указано:

Ваш обработчик событий RunWorkerCompleted всегда следует проверять ошибку и Отмененные свойства до доступа Свойство Result. Если исключение был поднят или если операция была отменено, доступ к Результату свойство вызывает исключение.

В части документации «Исключения» также указано, что оно вызовет исключение, если Cancelled истинно.

19
ответ дан 30 November 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: