开源个自己开发的 C++跨平台美颜滤镜库,方便集成为直播和 WebRTC 等提供美颜能力 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
devzhaoyou
V2EX    分享创造

开源个自己开发的 C++跨平台美颜滤镜库,方便集成为直播和 WebRTC 等提供美颜能力

  •  4
     
  •   devzhaoyou 2024-01-13 20:46:51 +08:00 2831 次点击
    这是一个创建于 636 天前的主题,其中的信息可能已经有所发展或是发生改变。

    王婆卖下瓜

    这个项目是也有参考了很多开源项目,借鉴了他们的架构和数据处理流程。将有用的功能做了缝合,基于 C++ 开发,性能是非常强的,比 GPUimage 还要好一丢丢, 并且支持安卓, iOS 和 Mac 。Win 端和鸿蒙未来也计划支持一下。

    调用非常简单,Readme 中有示例,很容为直播和视频通信场景添加美颜和滤镜效果。 个人的第一个做的比较认真的项目,库稳定性和效果已经大量用户(万级别)验证,用到的朋友可以尝试一下,希望大家多多支持,给个 Star

    项目地址:https://github.com/pixpark/gpupixel

    以下为项目 Readme:


    English | 简体中文

    GPUPixel @ PixPark

    GitHub Stars Release Static Badge GitHub

    简介

    GPUPixel 是一个高性能的图像和视频处理库,用 C++11 编写。非常容易编译和集成,库的大小非常小。

    它基于 GPU ,并且内置了可以达到商业级效果的美颜效果滤镜。

    它支持包括 iOS 、Mac 、Android 在内的各种平台,并且理论上可以移植到任何支持 OpenGL/ES 的平台。

    当前人脸关键点检测使用了 Face++ 库,但将来将会用 VNN 替代。

    效果预览

    美白 & 磨皮:

    sample.jpg

    Pipeline

    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

    - iPhone 6P iPhone 8 iPhone X iPhone 11 iPhone 14 pro
    CPU 5% 5% 3% 3% 3%
    Time Taken 10ms 4ms 3ms 3ms 3ms

    Android

    - Xiaomi 10 Huawei Meta30 Vivo SAMSUNG Google Pixel
    CPU 3% 5% - - -
    Time Taken 6ms 5ms - - -

    编译

    iOS

    Open objc/gpupixel.xcodeproj or objc/demo/PixDemo.xcodeproj Xcode project and select the corresponding platform for compilation

    Android

    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 

    Star History

    Star History Chart

    12 条回复    2025-02-17 18:12:13 +08:00
    chancat
        1
    chancat  
       2024-01-14 04:40:17 +08:00 via Android
    牛哇,op.
    guotie
        2
    guotie  
       2024-01-14 14:01:53 +08:00
    大佬
    lizhenda
        3
    lizhenda  
       2024-01-14 14:48:41 +08:00
    厉害哦,star 了,后面看是否用得上
    Seawalker
        4
    Seawalker  
       2024-01-14 16:02:14 +08:00 via Android
    性能消耗怎么样,cpu 、gpu
    bihui
        5
    bihui  
       2024-01-14 18:47:06 +08:00
    有没有可以翘臀丰胸的
    coreki
        6
    coreki  
       2024-01-14 18:49:38 +08:00
    这个厉害
    /tr>
    devzhaoyou
        7
    devzhaoyou  
    OP
       2024-01-14 18:56:29 +08:00
    @bihui 配合关键点识别库,理论上都是可以做的
    devzhaoyou
        8
    devzhaoyou  
    OP
       2024-01-14 18:57:50 +08:00
    @lizhenda 感谢支持
    devzhaoyou
        9
    devzhaoyou  
    OP
       2024-01-14 19:00:05 +08:00
    @Seawalker 刨去人脸识别,图像处理消耗很小,参考 Readme 中性能章节
    waylife
        10
    waylife  
       2024-01-14 20:35:39 +08:00
    真大佬
    bihui
        11
    bihui  
       2024-01-14 20:45:44 +08:00
    niubi
    star 了
    gongfuxiongmao
        12
    gongfuxiongmao  
       235 天前
    人脸识别用的是什么库
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2742 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 14:38 PVG 22:38 LAX 07:38 JFK 10:38
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86