csSurface::csSurface() : QOpenGLFunctions() , _initRequired(false) , _paletteAxis() , _palette() , _meshInfo() , _surfaceData() , _surface(0) , _stripData() , _strip(0) , _meshYData() , _meshY(0) , _model() , _colorImage() , _colorTexture(0) { // Initialize (a Quite Simple) Palette ///////////////////////////////////// _paletteAxis << 0.0f << 0.5f << 1.0f; _palette << QColor(Qt::blue) << QColor(Qt::green) << QColor(Qt::red); updateColorImage(); // Trigger Initialization ////////////////////////////////////////////////// _initRequired = true; }
void Xtion::update() { int changedIndex = -1; openni::OpenNI::waitForAnyStream(&(streams[0]), (int)streams.size(), &changedIndex); switch (changedIndex) { case 0: updateColorImage(); // break; //case 1: updateDepthImage(); break; default: break; } }
void updateFrame() { // フレームを取得する pxcStatus sts = senseManager->AcquireFrame( false ); if ( sts < PXC_STATUS_NO_ERROR ) { return; } // フレームデータを取得する const PXCCapture::Sample *sample = senseManager->QuerySample(); if ( sample ) { // 各データを表示する updateColorImage( sample->color ); } // フレームを解放する senseManager->ReleaseFrame(); }
void updateFrame() { // フレームを取得する pxcStatus sts = senseManager->AcquireFrame( true ); if ( sts < PXC_STATUS_NO_ERROR ) { return; } // 画像を初期化 handImage = cv::Mat::zeros( COLOR_HEIGHT, COLOR_WIDTH, CV_8UC3 ); // フレームデータを取得する const PXCCapture::Sample *sample = senseManager->QuerySample(); if ( sample ) { // 各データを表示する updateColorImage( sample->color ); } // 手の更新 updateHandFrame(); // フレームを解放する senseManager->ReleaseFrame(); }
void updateFaceFrame(){ // フレームデータを取得する const PXCCapture::Sample *sample = senseManager->QuerySample(); if (sample) { // 各データを表示する updateColorImage(sample->color); } //SenceManagerモジュールの顔のデータを更新する faceData->Update(); //検出した顔の数を取得する const int numFaces = faceData->QueryNumberOfDetectedFaces(); //追加:顔のランドマーク(特徴点)のデータの入れ物を用意 PXCFaceData::LandmarksData *landmarkData[LANDMARK_MAXFACES]; PXCFaceData::LandmarkPoint* landmarkPoints; pxcI32 numPoints; //それぞれの顔ごとに情報取得および描画処理を行う for (int i = 0; i < numFaces; ++i) { auto face = faceData->QueryFaceByIndex(i); if (face == 0){ continue; } //顔の位置データの入れ物を用意 PXCRectI32 faceRect = { 0 }; //顔の位置を取得:Colorで取得する auto detection = face->QueryDetection(); if (detection != 0){ detection->QueryBoundingRect(&faceRect); } //追加:フェイスデータからランドマーク(特徴点群)についての情報を得る landmarkData[i] = face->QueryLandmarks(); if (landmarkData[i] != NULL) { //ランドマークデータから何個の特徴点が認識できたかを調べる numPoints = landmarkData[i]->QueryNumPoints(); //認識できた特徴点の数だけ、特徴点を格納するインスタンスを生成する landmarkPoints = new PXCFaceData::LandmarkPoint[numPoints]; //ランドマークデータから、特徴点の位置を取得、表示 if (landmarkData[i]->QueryPoints(landmarkPoints)){ for (int j = 0; j < numPoints; j++){ { std::stringstream ss; ss << j ; //ss << landmarkPoints[j].source.alias; //int z = landmarkPoints[j].source.alias; cv::putText(colorImage, ss.str(), cv::Point(landmarkPoints[j].image.x, landmarkPoints[j].image.y), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 255), 1, CV_AA); } } } } } }
void updateFaceFrame(){ // フレームデータを取得する const PXCCapture::Sample *sample = senseManager->QuerySample(); if (sample) { // 各データを表示する updateColorImage(sample->color); } //SenceManagerモジュールの顔のデータを更新する faceData->Update(); //検出した顔の数を取得する const int numFaces = faceData->QueryNumberOfDetectedFaces(); //顔の領域を示す四角形を用意する PXCRectI32 faceRect = { 0 }; //顔のの表出情報のデータ、および角度のデータの入れ物を用意 PXCFaceData::ExpressionsData *expressionData; PXCFaceData::ExpressionsData::FaceExpressionResult expressionResult; //それぞれの顔ごとに情報取得および描画処理を行う for (int i = 0; i < numFaces; ++i) { //顔の情報を取得する auto face = faceData->QueryFaceByIndex(i); if (face == 0){ continue; } // 顔の位置を取得:Colorで取得する auto detection = face->QueryDetection(); if (detection != 0){ //顔の大きさを取得する detection->QueryBoundingRect(&faceRect); } //顔の位置と大きさから、顔の領域を示す四角形を描画する cv::rectangle(colorImage, cv::Rect(faceRect.x, faceRect.y, faceRect.w, faceRect.h), cv::Scalar(255, 0, 0)); //追加:フェイスデータから顔の表情データの情報を得る expressionData = face->QueryExpressions(); if (expressionData != 0){ //追加:口の開き具合を取得、表示 if (expressionData->QueryExpression(PXCFaceData::ExpressionsData::EXPRESSION_MOUTH_OPEN, &expressionResult)){ //描画処理 { std::stringstream ss; ss << "Mouth_Open:" << expressionResult.intensity; cv::putText(colorImage, ss.str(), cv::Point(faceRect.x, faceRect.y - 65), cv::FONT_HERSHEY_SIMPLEX, 0.8, cv::Scalar(0, 0, 255), 2, CV_AA); } } //追加:舌の出し具合を取得、表示 if (expressionData->QueryExpression(PXCFaceData::ExpressionsData::EXPRESSION_TONGUE_OUT, &expressionResult)){ //描画処理 { std::stringstream ss; ss << "TONGUE_Out:" << expressionResult.intensity; cv::putText(colorImage, ss.str(), cv::Point(faceRect.x, faceRect.y - 40), cv::FONT_HERSHEY_SIMPLEX, 0.8, cv::Scalar(0, 0, 255), 2, CV_AA); } } //追加:笑顔の度合を取得、表示 if (expressionData->QueryExpression(PXCFaceData::ExpressionsData::EXPRESSION_SMILE, &expressionResult)){ //描画処理 { std::stringstream ss; ss << "SMILE:" << expressionResult.intensity; cv::putText(colorImage, ss.str(), cv::Point(faceRect.x, faceRect.y - 15), cv::FONT_HERSHEY_SIMPLEX, 0.8, cv::Scalar(0, 0, 255), 2, CV_AA); } } } else{ //描画処理 { std::stringstream ss; ss << "NO EXPRESSION"; cv::putText(colorImage, ss.str(), cv::Point(faceRect.x, faceRect.y - 40), cv::FONT_HERSHEY_SIMPLEX, 0.8, cv::Scalar(0, 0, 255), 2, CV_AA); } } } }