接入FaceMesh 美颜渲染 70%

This commit is contained in:
Wang.Renzhu 2022-07-27 14:20:50 +08:00
parent 3437d9fd73
commit 6bd85ac487
13 changed files with 5936 additions and 5474 deletions

View File

@ -1,4 +1,8 @@
#include "face_mesh_beauty_render.h" #include "face_mesh_beauty_render.h"
#include "mediapipe/render/core/CVFramebuffer.hpp"
#if defined(__APPLE__)
#import <Foundation/Foundation.h>
#endif
namespace Opipe namespace Opipe
{ {
@ -10,10 +14,38 @@ namespace Opipe
_outputFilter = OlaShareTextureFilter::create(context); _outputFilter = OlaShareTextureFilter::create(context);
_olaBeautyFilter->addTarget(_outputFilter); _olaBeautyFilter->addTarget(_outputFilter);
#if defined(__APPLE__)
NSBundle *bundle = [NSBundle bundleForClass:NSClassFromString(@"OlaFaceUnity")];
NSURL *lutURL = [bundle URLForResource:@"whiten" withExtension:@"png"];
_lutImage = SourceImage::create(context, lutURL);
#endif
_olaBeautyFilter->setLUTImage(_lutImage);
} }
FaceMeshBeautyRender::~FaceMeshBeautyRender() FaceMeshBeautyRender::~FaceMeshBeautyRender()
{ {
if (_lutImage)
{
_lutImage->release();
_lutImage = nullptr;
}
_olaBeautyFilter->removeAllTargets();
if (_olaBeautyFilter)
{
_olaBeautyFilter->release();
_olaBeautyFilter = nullptr;
}
if (_outputFilter)
{
_outputFilter->release();
_outputFilter = nullptr;
}
} }
void FaceMeshBeautyRender::suspend() void FaceMeshBeautyRender::suspend()
@ -29,7 +61,7 @@ namespace Opipe
TextureInfo FaceMeshBeautyRender::renderTexture(TextureInfo inputTexture) TextureInfo FaceMeshBeautyRender::renderTexture(TextureInfo inputTexture)
{ {
TextureInfo outputTexture; TextureInfo outputTexture;
outputTexture.frameTime = inputTexture.frameTime;
if (!_inputFramebuffer) if (!_inputFramebuffer)
{ {
_inputFramebuffer = new Framebuffer(_context, inputTexture.width, inputTexture.height, _inputFramebuffer = new Framebuffer(_context, inputTexture.width, inputTexture.height,
@ -46,6 +78,27 @@ namespace Opipe
inputTexture.textureId); inputTexture.textureId);
} }
_olaBeautyFilter->setInputFramebuffer(_inputFramebuffer);
_olaBeautyFilter->update(inputTexture.frameTime);
auto *outputFramebuffer = _outputFilter->getFramebuffer();
if (outputFramebuffer) {
outputTexture.width = outputFramebuffer->getWidth();
outputTexture.height = outputFramebuffer->getHeight();
outputTexture.textureId = outputFramebuffer->getTexture();
#if defined(__APPLE__)
auto *cvFramebuffer = dynamic_cast<CVFramebuffer *>(outputFramebuffer);
IOSurfaceRef surface = cvFramebuffer->renderIOSurface;
outputTexture.ioSurfaceId = IOSurfaceGetID(surface);
#endif
} else {
outputTexture.width = inputTexture.width;
outputTexture.height = inputTexture.height;
outputTexture.textureId = inputTexture.textureId;
outputTexture.ioSurfaceId = inputTexture.ioSurfaceId;
}
return outputTexture; return outputTexture;
} }
@ -62,11 +115,19 @@ namespace Opipe
void FaceMeshBeautyRender::setSmoothing(float smoothing) void FaceMeshBeautyRender::setSmoothing(float smoothing)
{ {
_smoothing = smoothing; _smoothing = smoothing;
if (_olaBeautyFilter)
{
_olaBeautyFilter->setSmoothing(smoothing);
}
} }
void FaceMeshBeautyRender::setWhitening(float whitening) void FaceMeshBeautyRender::setWhitening(float whitening)
{ {
_whitening = whitening; _whitening = whitening;
if (_olaBeautyFilter)
{
_olaBeautyFilter->setWhitening(whitening);
}
} }
} }

View File

@ -3,6 +3,7 @@
#include "face_mesh_common.h" #include "face_mesh_common.h"
#include "mediapipe/render/module/beauty/filters/OlaBeautyFilter.hpp" #include "mediapipe/render/module/beauty/filters/OlaBeautyFilter.hpp"
#include "mediapipe/render/core/OlaShareTextureFilter.hpp" #include "mediapipe/render/core/OlaShareTextureFilter.hpp"
#include "mediapipe/render/core/SourceImage.hpp"
namespace Opipe { namespace Opipe {
class FaceMeshBeautyRender { class FaceMeshBeautyRender {
@ -39,6 +40,7 @@ namespace Opipe {
float _whitening = 0.0; float _whitening = 0.0;
bool _isRendering = false; bool _isRendering = false;
Context *_context = nullptr; Context *_context = nullptr;
SourceImage *_lutImage = nullptr;
}; };

View File

@ -118,6 +118,16 @@ namespace Opipe {
FilterGroup::update(frameTime); FilterGroup::update(frameTime);
} }
void OlaBeautyFilter::setLUTImage(SourceImage *lutImage) {
_lutImage = lutImage;
if (_lutFilter) {
auto *framebuffer = _lutFilter->getFramebuffer();
framebuffer->resetRetainCount();
_lutImage->retain();
_lutImage->addTarget(_lutFilter, 1, true);
}
}
void OlaBeautyFilter::setInputFramebuffer(Framebuffer *framebuffer, void OlaBeautyFilter::setInputFramebuffer(Framebuffer *framebuffer,
RotationMode rotationMode, RotationMode rotationMode,

View File

@ -98,7 +98,7 @@ namespace Opipe {
_blurFilter = GaussianBlurFilter::create(context); _blurFilter = GaussianBlurFilter::create(context);
addFilter(_blurFilter); addFilter(_blurFilter);
_unsharpMaskFilter = UnSharpMaskFilter::create(context); _unsharpMaskFilter = UnSharpFilter::create(context);
addFilter(_unsharpMaskFilter); addFilter(_unsharpMaskFilter);
_blurFilter->addTarget(_unsharpMaskFilter,1); _blurFilter->addTarget(_unsharpMaskFilter,1);

View File

@ -249,6 +249,7 @@ AVCaptureAudioDataOutputSampleBufferDelegate> {
{ {
[[OlaFaceUnity sharedInstance] processVideoFrame:onScreenTexture.renderTarget timeStamp:frameTime]; [[OlaFaceUnity sharedInstance] processVideoFrame:onScreenTexture.renderTarget timeStamp:frameTime];
return onScreenTexture.surfaceID; return onScreenTexture.surfaceID;
} }

View File

@ -3,13 +3,13 @@ load("@build_bazel_rules_apple//apple:ios.bzl", "ios_framework", "ios_static_fra
# 用上面这条指令build # 用上面这条指令build
ios_static_framework( ios_framework(
name = "OlaFaceUnityFramework", name = "OlaFaceUnityFramework",
hdrs = [ hdrs = [
"OlaFaceUnity.h", "OlaFaceUnity.h",
], ],
# infoplists = ["Info.plist"], infoplists = ["Info.plist"],
# bundle_id = "com.ola.olarender.develop", bundle_id = "com.ola.olarender.develop",
families = ["iphone", "ipad"], families = ["iphone", "ipad"],
minimum_os_version = "11.0", minimum_os_version = "11.0",
deps = [ deps = [

View File

@ -1,29 +1,29 @@
<Scheme version="1.3" LastUpgradeVersion="1000"> <Scheme LastUpgradeVersion="1000" version="1.3">
<BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES"> <BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry buildForTesting="YES" buildForRunning="YES" buildForProfiling="YES" buildForArchiving="YES" buildForAnalyzing="YES"> <BuildActionEntry buildForArchiving="YES" buildForAnalyzing="YES" buildForRunning="YES" buildForProfiling="YES" buildForTesting="YES">
<BuildableReference BuildableName="OlaFaceUnityFramework.framework" BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" BlueprintName="OlaFaceUnityFramework" ReferencedContainer="container:FaceUnityFramework.xcodeproj"></BuildableReference> <BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BuildableName="OlaFaceUnityFramework.framework" BlueprintName="OlaFaceUnityFramework"></BuildableReference>
</BuildActionEntry> </BuildActionEntry>
</BuildActionEntries> </BuildActionEntries>
</BuildAction> </BuildAction>
<TestAction buildConfiguration="__TulsiTestRunner_Debug" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv="YES" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit"> <TestAction shouldUseLaunchSchemeArgsEnv="YES" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit" buildConfiguration="__TulsiTestRunner_Debug" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB">
<Testables></Testables> <Testables></Testables>
<BuildableProductRunnable runnableDebuggingMode="0"> <BuildableProductRunnable runnableDebuggingMode="0">
<BuildableReference BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" BlueprintName="OlaFaceUnityFramework" BuildableName="OlaFaceUnityFramework.framework" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BuildableIdentifier="primary"></BuildableReference> <BuildableReference BlueprintName="OlaFaceUnityFramework" BuildableName="OlaFaceUnityFramework.framework" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000"></BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
</TestAction> </TestAction>
<LaunchAction launchStyle="0" buildConfiguration="Debug" allowLocationSimulation="YES" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" useCustomWorkingDirectory="NO" ignoresPersistentStateOnLaunch="NO" debugDocumentVersioning="YES" debugServiceExtension="internal" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit"> <LaunchAction debugDocumentVersioning="YES" launchStyle="0" ignoresPersistentStateOnLaunch="NO" allowLocationSimulation="YES" debugServiceExtension="internal" useCustomWorkingDirectory="NO" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" buildConfiguration="Debug" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB">
<EnvironmentVariables></EnvironmentVariables> <EnvironmentVariables></EnvironmentVariables>
<BuildableProductRunnable runnableDebuggingMode="0"> <BuildableProductRunnable runnableDebuggingMode="0">
<BuildableReference BuildableName="OlaFaceUnityFramework.framework" BuildableIdentifier="primary" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" BlueprintName="OlaFaceUnityFramework"></BuildableReference> <BuildableReference BuildableName="OlaFaceUnityFramework.framework" BlueprintName="OlaFaceUnityFramework" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" BuildableIdentifier="primary"></BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
</LaunchAction> </LaunchAction>
<ProfileAction useCustomWorkingDirectory="NO" buildConfiguration="__TulsiTestRunner_Release" shouldUseLaunchSchemeArgsEnv="YES" debugDocumentVersioning="YES"> <ProfileAction useCustomWorkingDirectory="NO" debugDocumentVersioning="YES" shouldUseLaunchSchemeArgsEnv="YES" buildConfiguration="__TulsiTestRunner_Release">
<BuildableProductRunnable runnableDebuggingMode="0"> <BuildableProductRunnable runnableDebuggingMode="0">
<BuildableReference BlueprintName="OlaFaceUnityFramework" BuildableIdentifier="primary" BuildableName="OlaFaceUnityFramework.framework" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" ReferencedContainer="container:FaceUnityFramework.xcodeproj"></BuildableReference> <BuildableReference BuildableName="OlaFaceUnityFramework.framework" BuildableIdentifier="primary" BlueprintName="OlaFaceUnityFramework" BlueprintIdentifier="F2FE34CE0C5C7AFE00000000" ReferencedContainer="container:FaceUnityFramework.xcodeproj"></BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
</ProfileAction> </ProfileAction>
<AnalyzeAction buildConfiguration="Debug"></AnalyzeAction> <AnalyzeAction buildConfiguration="Debug"></AnalyzeAction>
<ArchiveAction buildConfiguration="Release" revealArchiveInOrganizer="YES"></ArchiveAction> <ArchiveAction revealArchiveInOrganizer="YES" buildConfiguration="Release"></ArchiveAction>
</Scheme> </Scheme>

View File

@ -2,26 +2,26 @@
<Scheme version="1.3" LastUpgradeVersion="1000"> <Scheme version="1.3" LastUpgradeVersion="1000">
<BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES"> <BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry buildForProfiling="YES" buildForRunning="YES" buildForTesting="YES" buildForAnalyzing="YES" buildForArchiving="YES"> <BuildActionEntry buildForProfiling="YES" buildForTesting="YES" buildForRunning="YES" buildForAnalyzing="YES" buildForArchiving="YES">
<BuildableReference BlueprintIdentifier="F2FE34CED4660C9200000000" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a" BuildableIdentifier="primary"></BuildableReference> <BuildableReference BuildableIdentifier="primary" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BlueprintIdentifier="F2FE34CED4660C9200000000" BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a"></BuildableReference>
</BuildActionEntry> </BuildActionEntry>
</BuildActionEntries> </BuildActionEntries>
</BuildAction> </BuildAction>
<TestAction buildConfiguration="__TulsiTestRunner_Debug" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv="YES"> <TestAction selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit" buildConfiguration="__TulsiTestRunner_Debug" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" shouldUseLaunchSchemeArgsEnv="YES">
<Testables></Testables> <Testables></Testables>
<BuildableProductRunnable runnableDebuggingMode="0"> <BuildableProductRunnable runnableDebuggingMode="0">
<BuildableReference BuildableIdentifier="primary" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" BlueprintIdentifier="F2FE34CED4660C9200000000" BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a"></BuildableReference> <BuildableReference BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CED4660C9200000000" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary"></BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
</TestAction> </TestAction>
<LaunchAction ignoresPersistentStateOnLaunch="NO" debugDocumentVersioning="YES" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" allowLocationSimulation="YES" launchStyle="0" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" useCustomWorkingDirectory="NO" debugServiceExtension="internal" buildConfiguration="Debug" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit"> <LaunchAction debugDocumentVersioning="YES" allowLocationSimulation="YES" debugServiceExtension="internal" useCustomWorkingDirectory="NO" launchStyle="0" buildConfiguration="Debug" customLLDBInitFile="$(PROJECT_FILE_PATH)/.tulsi/Utils/lldbinit" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" ignoresPersistentStateOnLaunch="NO">
<EnvironmentVariables></EnvironmentVariables> <EnvironmentVariables></EnvironmentVariables>
<MacroExpansion> <MacroExpansion>
<BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CED4660C9200000000" BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" ReferencedContainer="container:FaceUnityFramework.xcodeproj"></BuildableReference> <BuildableReference BlueprintIdentifier="F2FE34CED4660C9200000000" BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" BuildableIdentifier="primary" ReferencedContainer="container:FaceUnityFramework.xcodeproj"></BuildableReference>
</MacroExpansion> </MacroExpansion>
</LaunchAction> </LaunchAction>
<ProfileAction debugDocumentVersioning="YES" buildConfiguration="__TulsiTestRunner_Release" useCustomWorkingDirectory="NO" shouldUseLaunchSchemeArgsEnv="YES"> <ProfileAction shouldUseLaunchSchemeArgsEnv="YES" buildConfiguration="__TulsiTestRunner_Release" useCustomWorkingDirectory="NO" debugDocumentVersioning="YES">
<MacroExpansion> <MacroExpansion>
<BuildableReference BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" ReferencedContainer="container:FaceUnityFramework.xcodeproj" BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CED4660C9200000000" BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a"></BuildableReference> <BuildableReference BuildableName="libmediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary.a" BlueprintName="mediapipe-render-module-beauty-ios-framework-OlaFaceUnityLibrary" BuildableIdentifier="primary" BlueprintIdentifier="F2FE34CED4660C9200000000" ReferencedContainer="container:FaceUnityFramework.xcodeproj"></BuildableReference>
</MacroExpansion> </MacroExpansion>
</ProfileAction> </ProfileAction>
<AnalyzeAction buildConfiguration="Debug"></AnalyzeAction> <AnalyzeAction buildConfiguration="Debug"></AnalyzeAction>