这个项目是也有参考了很多开源项目,借鉴了他们的架构和数据处理流程。将有用的功能做了缝合,基于 C++ 开发,性能是非常强的💪🏻,比 GPUimage 还要好一丢丢, 并且支持安卓, iOS 和 Mac 。Win 端和鸿蒙未来也计划支持一下。
调用非常简单,Readme 中有示例,很容为直播和视频通信场景添加美颜和滤镜效果。 个人的第一个做的比较认真的项目,库稳定性和效果已经大量用户(万级别)验证,用到的朋友可以尝试一下,希望大家多多支持,给个 Star👏😬
👉项目地址:https://github.com/pixpark/gpupixel
GPUPixel 是一个高性能的图像和视频处理库,用 C++11 编写。非常容易编译和集成,库的大小非常小。
它基于 GPU ,并且内置了可以达到商业级效果的美颜效果滤镜。
它支持包括 iOS 、Mac 、Android 在内的各种平台,并且理论上可以移植到任何支持 OpenGL/ES 的平台。
当前人脸关键点检测使用了 Face++ 库,但将来将会用 VNN 替代。
美白 & 磨皮:
sample.jpg
arch.jpg
This table compares the features supported by GPUPixel and GPUImage:
✅: 支持
❌: 不支持
✏️: 计划中
| GPUPixel | GPUImage | |
|---|---|---|
| Filters: | ✅ | ❌ |
| 磨皮 | ✅ | ❌ |
| 美白 | ✅ | ❌ |
| 瘦脸 | ✅ | ❌ |
| 大眼 | ✅ | ❌ |
| 口红 | ✅ | ❌ |
| 腮红 | ✅ | ❌ |
| 自定义滤镜 | ✅ | ✅ |
| 输入格式: | ||
| 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 Meta30 | Vivo | SAMSUNG | Google Pixel |
|---|---|---|---|---|---|
| CPU | 3% | 5% | - | - | - |
| Time Taken | 6ms | 5ms | - | - | - |
Open objc/gpupixel.xcodeproj or objc/demo/PixDemo.xcodeproj Xcode project and select the corresponding platform for compilation
Open the directory ./android in Android Studio and configure NDK r21+
| iOS(.framework) | MacOS(.framework) | Android(.aar) | |
|---|---|---|---|
| Size | 2.4 MB | 2.6 MB | 2.1 MB |
Refer to ./objc/demo or ./android demo
.h file
// video data input
std::shared_ptr<SourceRawDataInput> source_raw_input_;
// beauty filter
std::shared_ptr<FaceBeautyFilter> face_beauty_filter_;
// video data output
std::shared_ptr<TargetRawDataOutput> target_raw_output_;
Create Filter, .c++ file
GPUPixel::GPUPixelContext::getInstance()->runSync([&] {
// Create filter
source_raw_input_ = SourceRawDataInput::create();
target_raw_output_ = TargetRawDataOutput::create();
// Face Beauty Filter
face_beauty_filter_ = FaceBeautyFilter::create();
// Add filter
source_raw_input_->addTarget(face_beauty_filter_)->addTarget(target_raw_output_);
}
Input Image Data I420 or 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);
Output Data Callback
// 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
1
chancat 2024-01-14 04:40:17 +08:00 via Android
牛哇,op.
|
2
guotie 2024-01-14 14:01:53 +08:00
大佬
|
3
lizhenda 2024-01-14 14:48:41 +08:00
厉害哦,star 了,后面看是否用得上
|
4
Seawalker 2024-01-14 16:02:14 +08:00 via Android
性能消耗怎么样,cpu 、gpu
|
5
bihui 2024-01-14 18:47:06 +08:00
有没有可以翘臀丰胸的
|
6
coreki 2024-01-14 18:49:38 +08:00
这个厉害
|
7
devzhaoyou OP @bihui 配合关键点识别库,理论上都是可以做的
|
8
devzhaoyou OP @lizhenda 感谢支持👏
|
9
devzhaoyou OP @Seawalker 刨去人脸识别,图像处理消耗很小,参考 Readme 中性能章节🍻
|
10
waylife 2024-01-14 20:35:39 +08:00
真大佬
|
11
bihui 2024-01-14 20:45:44 +08:00
niubi
star 了 |
12
gongfuxiongmao 261 天前
人脸识别用的是什么库
|