示例#1
0
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;
}
示例#2
0
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;
    }
}
示例#3
0
    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();
    }
示例#4
0
    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();
    }
示例#5
0
	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);
						}
					}
				}

			}

		}

	}
示例#6
0
	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);
				}
			}
		}
	
	}