Skip to content

Beauty Effects

Advanced Filter Chain Example

For more complex effects, you can create multiple filters and chain them together:

cpp
   // Create source
   gpuPixelRawInput = SourceRawData::Create();
   
   // Create sink
   target_raw_output_ = SinkRawData::Create();
   
   // Create filters
   lipstick_filter_ = LipstickFilter::Create();
   blusher_filter_ = BlusherFilter::Create();
   face_reshape_filter_ = FaceReshapeFilter::Create();
   beauty_face_filter_ = BeautyFaceFilter::Create();
   
   // Create face detector (requires GPUPIXEL_ENABLE_FACE_DETECTOR)
   face_detector_ = FaceDetector::Create();
   
   // Link the filter chain
   gpuPixelRawInput->AddSink(lipstick_filter_)
                  ->AddSink(blusher_filter_)
                  ->AddSink(face_reshape_filter_)
                  ->AddSink(beauty_face_filter_)
                  ->AddSink(target_raw_output_);

Before processing each frame, run face detection and pass the landmarks to filters that need facial features:

cpp
   // Get current frame image data (width, height, stride, etc.)
   const uint8_t* buffer = ...;  // e.g. from camera or other input
   int width = ..., height = ..., stride = ...;

   std::vector<float> landmarks = face_detector_->Detect(
       buffer, width, height, stride,
       GPUPIXEL_MODE_FMT_PICTURE, GPUPIXEL_FRAME_TYPE_RGBA);

   if (!landmarks.empty()) {
      lipstick_filter_->SetFaceLandmarks(landmarks);
      blusher_filter_->SetFaceLandmarks(landmarks);
      face_reshape_filter_->SetFaceLandmarks(landmarks);
   }

   // Then run the filter pipeline: with SourceRawData call ProcessData to feed
   // the frame and trigger rendering; with SourceImage use GetRgbaImageBuffer()
   // then source->Render()
   gpuPixelRawInput->ProcessData(buffer, width, height, stride,
                                GPUPIXEL_FRAME_TYPE_RGBA);

Adjusting Filter Parameters

Each filter has specific parameters that can be adjusted:

Beauty Face Filter

cpp
// Set smoothing level (0.0-1.0)
beauty_face_filter_->SetBlurAlpha(value/10);

// Set whitening level (0.0-1.0)
beauty_face_filter_->SetWhite(value/20);

Face Reshape Filter

cpp
// Set face slimming level (0.0-1.0)
face_reshape_filter_->SetFaceSlimLevel(value/100);

// Set eye enlargement level (0.0-1.0)
face_reshape_filter_->SetEyeZoomLevel(value/50);

Makeup Filters

cpp
// Set lipstick intensity (0.0-1.0)
lipstick_filter_->SetBlendLevel(value/10);

// Set blusher intensity (0.0-1.0)
blusher_filter_->SetBlendLevel(value/10);

Released under the Apache-2.0 License.