欢迎大家参与,使得 GPUPixel 更好,通过讨论 discussions, 提交 issues, 提交 PRs.
📢 人脸关键点检测从 v1.2.0开始已经由 Face++ 替换为 VNN, 不需要联网认证(不需要交钱了),并且支持了全端,欢迎各位客观品尝食用 👏
⛰️ GPUPixel是一个使用C++11编写的高性能图像和视频AI美颜效果库,非常容易编译和集成,并且库文件非常小。
🔑 它是基于GPU的,并且带有内置的美颜效果滤镜,可以实现商业级别的效果。
🔌 它支持的平台包括iOS、Mac和Android,理论上可以移植到任何支持OpenGL/ES的平台。
| 原图 | 磨皮 | 美白 | ThinFace |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 大眼 | 口红 | 腮红 | **开 |
![]() |
![]() |
![]() |
![]() |
✅: 支持 | ❌: 不支持 | ✏️: 计划中
| GPUPixel | GPUImage | |
|---|---|---|
| 🍎滤镜: | ✅ | ❌ |
| 磨皮 | ✅ | ❌ |
| 美白 | ✅ | ❌ |
| 瘦脸 | ✅ | ❌ |
| 大眼 | ✅ | ❌ |
| 口红 | ✅ | ❌ |
| 腮红 | ✅ | ❌ |
| 内建滤镜 | ✅ | ✅ |
| 🍓输入格式: | ||
| YUV420P(I420) | ✅ | ❌ |
| RGBA | ✅ | ✅ |
| JPEG | ✅ | ✅ |
| PNG | ✅ | ✅ |
| NV21(for Android) | ✏️ | ❌ |
| 🍉输出格式 : | ||
| RGBA | ✅ | ✅ |
| YUV420P(I420) | ✅ | ❌ |
| 🥑平台系统: | ||
| iOS | ✅ | ✅ |
| Mac | ✅ | ✅ |
| Android | ✅ | ❌ |
| Win | ✅ | ❌ |
| Linux | ✅ | ❌ |
| OS | iOS | OSX | Android | Windows | Linux |
|---|---|---|---|---|---|
| Min Support OS Version | 10.0 | 10.13 | 5.0 (API 21) | - | - |
| - | iPhone 6P | iPhone 8 | iPhone X | iPhone 11 | iPhone 14 pro |
|---|---|---|---|---|---|
| CPU | 5% | 5% | 3% | 3% | 3% |
| Time Taken | 10ms | 4ms | 3ms | 3ms | 3ms |
| - | Xiaomi 10 | Huawei Mate30 | Vivo | SAMSUNG | Google Pixel |
|---|---|---|---|---|---|
| CPU | 3% | 5% | - | - | - |
| Time Taken | 6ms | 5ms | - | - | - |
| iOS(.framework) | MacOS(.framework) | Android(.aar) | |
|---|---|---|---|
| Size | 2.4 MB | 2.6 MB | 2.1 MB |
⭐️ 老铁给个星星,求点赞!
从 v1.1.0开始使用 cmake 编译, 请自行搜索下cmake的安装配置. 库和生成的 demo 程序会在项目根目录的 output 目录
# Generate project
## for iOS arm64
cmake -G Xcode -B build -S src -DCMAKE_TOOLCHAIN_FILE=toolchain/ios.toolchain.cmake -DPLATFORM=OS64
# Build
cmake --build build --config Debug #or Release# Generate project
## for Mac Apple Silicon
cmake -G Xcode -B build -S src -DCMAKE_TOOLCHAIN_FILE=toolchain/ios.toolchain.cmake -DPLATFORM=MAC_ARM64
## for Mac Intel
cmake -G Xcode -B build -S src -DCMAKE_TOOLCHAIN_FILE=toolchain/ios.toolchain.cmake -DPLATFORM=MAC
# Build
cmake --build build --config Debug #or ReleaseOpen the directory src/android/java in Android Studio.
需提前安装 Cmake and MinGW64
# Generate project
cmake -G "MinGW Makefiles" -B build -S src
# Build
cmake --build build -DCMAKE_BUILD_TYPE=Debug #or Release# install cmake
sudo apt-get install cmake pkg-config
# install dependent lib
sudo apt-get install mesa-utils libglu1-mesa-dev freeglut3-dev mesa-common-dev libglfw3-dev
# Generate project
cmake -B build -S src
# Build
cmake --build build -DCMAKE_BUILD_TYPE=Debug #or Release 参考 examples/ios and examples/mac
参考 src/android/java
参考 examples/desktop
# Generate project
cmake -G "MinGW Makefiles" -B examples/build -S examples
# Build
cmake --build build -DCMAKE_BUILD_TYPE=Debug #or Release A S D F G H - 增加 smooth, white, thin face, big eye, lipstick, blusher 的值.
Z X C V B N - 减小 smooth, white, thin face, big eye, lipstick, blusher 的值.
声明 filters
// video data input
std::shared_ptr<SourceRawDataInput> source_raw_input_;
// beauty filter
std::shared_ptr<BeautyFaceFilter> beauty_face_filter_;
// video data output
std::shared_ptr<TargetRawDataOutput> target_raw_output_;创建和串联 filters
gpupixel::GPUPixelContext::getInstance()->runSync([&] {
// Create filter
source_raw_input_ = SourceRawDataInput::create();
target_raw_output_ = TargetRawDataOutput::create();
// Face Beauty Filter
beauty_face_filter_ = BeautyFaceFilter::create();
// Add filter
source_raw_input_->addTarget(beauty_face_filter_)
->addTarget(target_raw_output_);
}输入 YUV420P 或 RGBA数据
// ...
// YUVI420
source_raw_input_->uploadBytes(width,
height,
bufferY,
strideY,
bufferU,
strideU,
bufferV,
strideV);
// ...
// bytes: RGBA data
source_raw_input_->uploadBytes(bytes,
width,
height,
stride);获取输出数据
// I420 callback
target_raw_output_->setI420Callbck([=](const uint8_t *data,
int width,
int height,
int64_t ts) {
size_t y_size = width * height;
const uint8_t *uData = data + y_size;
const uint8_t *vData = data + y_size + y_size / 4;
// Do something you want
});
// RGBA callback->
target_raw_output_->setPixelsCallbck([=](const uint8_t *data,
int width,
int height,
int64_t ts) {
size_t rgba_size = width * height*4;
// Do something you want
});
// Output data callbck欢迎参与此项目,贡献代码,同时希望通过在社交媒体分享 GPUPixel 项目来支持本项目 👏🏻.
This repository is available under the MIT License.










