Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 23.10.2013 | Доступ: свободный | Студентов: 1765 / 617 | Длительность: 09:26:00
Специальности: Программист
Лекция 5:

Модуль анализа мимики лица Intel Perceptual Computing SDK

Данные отслеживания лица

Приложение может использовать функцию QueryData интерфейса PXCFaceAnalysis::Detection для нахождения данных по отслеживанию лица. Также это может быть множество лиц на любом изображении. Приложение может использовать функцию QueryFace для нахождения определителей доступных лиц на изображении, как показано в примере 8.6.

PXCFaceAnalysis::Detection *detector=face->DynamicCast
            <PXCFaceAnalysis::Detection>();
for (int i=0;;i++) {
  pxcUID fid; pxcU64 ts;
  if (face->QueryFace(i,&fid,&ts)<PXC_STATUS_NO_ERROR) break;
  PXCFaceAnalysis::Detection::Data data;
  detector->QueryData (fid, &data);
  // Process data
}
8.6. Нахождение данных отслеживания для всех лиц

Данные контрольных точек лица

При нахождении данных по контрольным точкам подобно как и при отслеживании лица приложение может использовать функции QueryLandmarkData и QueryPoseData интерфейса PXCFaceAnalysis::Landmark для нахождения данных связанных с контрольными точками, как показано в примере 8.7. Структура LandmarkData предоставляет данные о позиции для каждой определенной контрольной точки (или характерных чертах лица). Структура PoseData предоставляет информацию об ориентации головы.

PXCFaceAnalysis::Landmark *landmark=face->DynamicCast
            <PXCFaceAnalysis::Landmark>();
for (int i=0;;i++) {
  pxcUID fid; pxcU64 ts;
  if (face->QueryFace(i,&fid,&ts)<PXC_STATUS_NO_ERROR) break;
  PXCFaceAnalysis::Landmark::LandmarkData ldata;
  landmark->QueryLandmarkData (fid,
        PXCFaceAnalysis::Landmark::LABEL_NOSE_TIP, 
        0, &data);
  PXCFaceAnalysis::Landmark::PoseData pdata; 
  landmark->QueryPoseData (fid,&pdata);
  // Process data
}
8.7. Нахождение данных по определению контрольных точек для всех лиц

Распознавание лица

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

Пример 8.8 демонстрирует простой пример вычисления сходства двух неподвижных изображений. Приложение создает два экземпляра Model из двух входных изображений, выполнив функцию ProcessImageAsync, а затем функцию CreateModel. Здесь экземпляр Model является выделением главных признаков набора данных, которые представляют лицо на изображении для сравнения. Затем приложение использует функцию Compare для вычисления сходства между этими двумя моделями.

В более сложных сценариях приложение может обрабатывать эталонные изображения в рабочем порядке и сохранять эталонные данные в базу данных. Во время выполнения приложение получает эталонные данные из базы данных и воссоздает эталонный список. Две функции Serialize и DeserializeModel предназначены для такого использования.

PXCFaceAnalysis::Recognition::Model *createModelFromImage(PXCImage *image) {
  PXCSmartSP sp;
  face->ProcessImageAsync(&image,&sp);
  sp->Synchronize();
  pxcUID fid;
  face->QueryFace(0,&fid);
  PXCFaceAnalysis::Recognition::Model *ml=0;
  face->DynamicCast<PXCFaceAnalysis::Recognition>()->CreateModel(fid,&ml);
  return ml;
}
bool IsSimilar(PXCImage *imagel, PXCImage *image2) {
  PXCFaceAnalysis::Recognition::Model *ref=createModelFromImage(image1);
  PXCFaceAnalysis::Recognition::Model *cur=createModelFronInage(image2);
  pxcU32 index;
  return cur->Conpare(&ref,1,0,&index)>=PXC STATUS NO ERROR;
}
8.8. Вычисление схожести двух лиц
Гульзия Калымова
Гульзия Калымова
Александр Радченко
Александр Радченко