commit
7afc14d0eb
22 changed files with 1405 additions and 0 deletions
@ -0,0 +1,89 @@ |
|||||
|
#.gitignore is a file which makes git ignore files which should |
||||
|
# not go into version control in the first place |
||||
|
# Questions? See |
||||
|
# http://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files |
||||
|
# http://git-scm.com/docs/gitignore |
||||
|
|
||||
|
########################### |
||||
|
# ignore generated binaries |
||||
|
# but not the data folder |
||||
|
########################### |
||||
|
|
||||
|
/bin/* |
||||
|
!/bin/data/ |
||||
|
|
||||
|
######### |
||||
|
# general |
||||
|
######### |
||||
|
|
||||
|
[Bb]uild/ |
||||
|
[Oo]bj/ |
||||
|
*.o |
||||
|
[Dd]ebug*/ |
||||
|
[Rr]elease*/ |
||||
|
*.mode* |
||||
|
*.app/ |
||||
|
*.pyc |
||||
|
.svn/ |
||||
|
*.log |
||||
|
|
||||
|
######################## |
||||
|
# IDE files which should |
||||
|
# be ignored |
||||
|
######################## |
||||
|
|
||||
|
# XCode |
||||
|
*.pbxuser |
||||
|
*.perspective |
||||
|
*.perspectivev3 |
||||
|
*.mode1v3 |
||||
|
*.mode2v3 |
||||
|
# XCode 4 |
||||
|
*.xccheckout |
||||
|
xcuserdata/ |
||||
|
|
||||
|
# Visual Studio |
||||
|
*.sdf |
||||
|
*.opensdf |
||||
|
*.suo |
||||
|
*.pdb |
||||
|
*.ilk |
||||
|
*.aps |
||||
|
ipch/ |
||||
|
|
||||
|
# Eclipse |
||||
|
.metadata |
||||
|
local.properties |
||||
|
.externalToolBuilders |
||||
|
|
||||
|
# Android Studio |
||||
|
.gradle |
||||
|
/local.properties |
||||
|
/.idea/workspace.xml |
||||
|
/.idea/libraries |
||||
|
|
||||
|
################## |
||||
|
# operating system |
||||
|
################## |
||||
|
|
||||
|
# Linux |
||||
|
*~ |
||||
|
# KDE |
||||
|
.directory |
||||
|
.AppleDouble |
||||
|
|
||||
|
# OSX |
||||
|
.DS_Store |
||||
|
*.swp |
||||
|
*~.nib |
||||
|
# Thumbnails |
||||
|
._* |
||||
|
|
||||
|
# Windows |
||||
|
# Image file caches |
||||
|
Thumbs.db |
||||
|
# Folder config file |
||||
|
Desktop.ini |
||||
|
|
||||
|
# Android |
||||
|
.csettings |
@ -0,0 +1,260 @@ |
|||||
|
{ |
||||
|
"configurations": [ |
||||
|
{ |
||||
|
"browse": { |
||||
|
"databaseFilename": "${workspaceRoot}/.vscode/browse.db", |
||||
|
"limitSymbolsToIncludedHeaders": true, |
||||
|
"path": [ |
||||
|
"/usr/local/include", |
||||
|
"/System/Library/Frameworks", |
||||
|
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/", |
||||
|
"${workspaceFolder}/src/**", |
||||
|
"${OF_INCLUDE}", |
||||
|
"${OF_LIBS_INCLUDE}", |
||||
|
"${PROJECT_ADDON_INCLUDES}", |
||||
|
"${PROJECT_EXTRA_INCLUDES}" |
||||
|
] |
||||
|
}, |
||||
|
"cStandard": "c17", |
||||
|
"compilerPath": "/usr/bin/gcc", |
||||
|
"configurationProvider": "ms-vscode.makefile-tools", |
||||
|
"cppStandard": "c++17", |
||||
|
"includePath": [ |
||||
|
"/usr/local/include", |
||||
|
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/", |
||||
|
"${OF_INCLUDE}", |
||||
|
"${OF_LIBS_INCLUDE}", |
||||
|
"${workspaceFolder}/src/**", |
||||
|
"${PROJECT_ADDON_INCLUDES}", |
||||
|
"${PROJECT_EXTRA_INCLUDES}" |
||||
|
], |
||||
|
"intelliSenseMode": "${default}", |
||||
|
"macFrameworkPath": [ |
||||
|
"/System/Library/Frameworks", |
||||
|
"/Library/Frameworks" |
||||
|
], |
||||
|
"mergeConfigurations": true, |
||||
|
"name": "Mac" |
||||
|
}, |
||||
|
{ |
||||
|
"browse": { |
||||
|
"databaseFilename": "", |
||||
|
"limitSymbolsToIncludedHeaders": true, |
||||
|
"path": [ |
||||
|
"/usr/local/include", |
||||
|
"/usr/include", |
||||
|
"${workspaceFolder}/src/**", |
||||
|
"${OF_INCLUDE}", |
||||
|
"${OF_LIBS_INCLUDE}", |
||||
|
"${PROJECT_ADDON_INCLUDES}", |
||||
|
"${PROJECT_EXTRA_INCLUDES}" |
||||
|
] |
||||
|
}, |
||||
|
"cStandard": "c17", |
||||
|
"compilerPath": "/usr/bin/gcc", |
||||
|
"configurationProvider": "ms-vscode.makefile-tools", |
||||
|
"cppStandard": "c++17", |
||||
|
"includePath": [ |
||||
|
"/usr/include", |
||||
|
"/usr/local/include", |
||||
|
"/usr/include/c++/*", |
||||
|
"/usr/lib/gcc/x86_64-linux-gnu/*", |
||||
|
"/usr/lib/x86_64-linux-gnu/glib-2.0/include", |
||||
|
"/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include", |
||||
|
"/usr/local/include", |
||||
|
"/usr/include/x86_64-linux-gnu", |
||||
|
"${OF_INCLUDE}", |
||||
|
"${OF_LIBS_INCLUDE}", |
||||
|
"${workspaceRoot}/../../../libs/kiss/include", |
||||
|
"/usr/include/x86_64-linux-gnu/c++/*", |
||||
|
"/usr/include/pulse", |
||||
|
"/usr/include/cairo", |
||||
|
"/usr/include/gstreamer-1.0", |
||||
|
"/usr/include/glib-2.0", |
||||
|
"${workspaceRoot}", |
||||
|
"${workspaceFolder}/src/**", |
||||
|
"${PROJECT_ADDON_INCLUDES}", |
||||
|
"${PROJECT_EXTRA_INCLUDES}" |
||||
|
], |
||||
|
"intelliSenseMode": "${default}", |
||||
|
"mergeConfigurations": true, |
||||
|
"name": "Linux" |
||||
|
}, |
||||
|
{ |
||||
|
"browse": { |
||||
|
"databaseFilename": "", |
||||
|
"limitSymbolsToIncludedHeaders": true, |
||||
|
"path": [ |
||||
|
"${workspaceFolder}/src/**", |
||||
|
"${OF_INCLUDE}", |
||||
|
"${OF_LIBS_INCLUDE}", |
||||
|
"${PROJECT_ADDON_INCLUDES}", |
||||
|
"${PROJECT_EXTRA_INCLUDES}" |
||||
|
] |
||||
|
}, |
||||
|
"cStandard": "c17", |
||||
|
"compilerPath": "C:/msys64/mingw64/bin/g++.exe", |
||||
|
"configurationProvider": "ms-vscode.makefile-tools", |
||||
|
"cppStandard": "c++17", |
||||
|
"includePath": [ |
||||
|
"C:/msys64/mingw64/include/c++/**", |
||||
|
"C:/msys64/mingw64/i686-w64-mingw64/include", |
||||
|
"${OF_INCLUDE}", |
||||
|
"${OF_LIBS_INCLUDE}", |
||||
|
"${workspaceFolder}/src/**", |
||||
|
"${PROJECT_ADDON_INCLUDES}", |
||||
|
"${PROJECT_EXTRA_INCLUDES}" |
||||
|
], |
||||
|
"intelliSenseMode": "clang-x64", |
||||
|
"mergeConfigurations": true, |
||||
|
"name": "Win32" |
||||
|
} |
||||
|
], |
||||
|
"env": { |
||||
|
"OF_INCLUDE": [ |
||||
|
"${OF_LIBS_ROOT}/openFrameworks/**" |
||||
|
], |
||||
|
"OF_LIBS_INCLUDE": [ |
||||
|
"${OF_LIBS_ROOT}/cairo/include/cairo", |
||||
|
"${OF_LIBS_ROOT}/curl/include", |
||||
|
"${OF_LIBS_ROOT}/fmod/include", |
||||
|
"${OF_LIBS_ROOT}/FreeImage/include", |
||||
|
"${OF_LIBS_ROOT}/freetype/include", |
||||
|
"${OF_LIBS_ROOT}/glew/include", |
||||
|
"${OF_LIBS_ROOT}/glfw/include", |
||||
|
"${OF_LIBS_ROOT}/glm/include", |
||||
|
"${OF_LIBS_ROOT}/json/include", |
||||
|
"${OF_LIBS_ROOT}/pugixml/include", |
||||
|
"${OF_LIBS_ROOT}/rtAudio/include", |
||||
|
"${OF_LIBS_ROOT}/tess2/include", |
||||
|
"${OF_LIBS_ROOT}/uriparser/include", |
||||
|
"${OF_LIBS_ROOT}/utf8/include" |
||||
|
], |
||||
|
"OF_LIBS_ROOT": "${OF_ROOT}/libs", |
||||
|
"OF_ROOT": "${workspaceFolder}/../../..", |
||||
|
"PROJECT_ADDON_INCLUDES": [], |
||||
|
"PROJECT_EXTRA_INCLUDES": [ |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxGui\\src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxNetwork\\src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOnnxRuntime\\libs\\onnxruntime\\include", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOnnxRuntime\\src", |
||||
|
"${workspaceRoot}/src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxGui\\src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxNetwork\\src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\etc", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\aruco", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\bioinspired", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\calib3d", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\cuda", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\cuda\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\hal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\opencl", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\opencl\\runtime", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\opencl\\runtime\\autogenerated", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\parallel", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\parallel\\backend", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\core\\utils", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\dnn", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\dnn\\utils", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\features2d", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\features2d\\hal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\flann", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\fuzzy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\img_hash", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\imgcodecs", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\imgcodecs\\legacy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\imgproc", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\imgproc\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\imgproc\\hal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\line_descriptor", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\mcc", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\objdetect", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\optflow", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\phase_unwrapping", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\reg", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\saliency", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\signal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\stereo", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\structured_light", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\surface_matching", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\tracking", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\video", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\video\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\video\\legacy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\xfeatures2d", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\include\\opencv4\\opencv2\\ximgproc", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\calib3d", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\cuda", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\cuda\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\hal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\llapi", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\opencl", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\opencl\\runtime", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\opencl\\runtime\\autogenerated", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\openvx", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\parallel", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\parallel\\backend", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\private", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\core\\utils", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\dnn", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\dnn\\utils", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\features2d", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\features2d\\hal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\flann", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\cpu", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\fluid", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\gpu", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\infer", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\oak", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\ocl", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\own", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\plaidml", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\python", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\render", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\s11n", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\streaming", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\streaming\\gstreamer", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\streaming\\onevpl", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\gapi\\util", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\highgui", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\imgcodecs", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\imgcodecs\\legacy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\imgproc", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\imgproc\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\imgproc\\hal", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\ml", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\objdetect", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\photo", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\photo\\legacy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\stitching", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\stitching\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\ts", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\video", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\video\\detail", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\video\\legacy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\videoio", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\videoio\\doc", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\include\\opencv2\\videoio\\legacy", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\lib", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\libs\\opencv\\license", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOpenCv\\src", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOnnxRuntime\\libs\\onnxruntime\\include", |
||||
|
"${workspaceRoot}/..\\..\\..\\addons\\ofxOnnxRuntime\\src" |
||||
|
] |
||||
|
}, |
||||
|
"version": 4 |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
{ |
||||
|
"recommendations": [ |
||||
|
"ms-vscode.makefile-tools", |
||||
|
"ms-vscode.cpptools" |
||||
|
] |
||||
|
} |
@ -0,0 +1,72 @@ |
|||||
|
{ |
||||
|
"version": "0.2.0", |
||||
|
"configurations": [ |
||||
|
{ |
||||
|
"name": "C++ Launch", |
||||
|
"type": "cppdbg", |
||||
|
"request": "launch", |
||||
|
"args": [], |
||||
|
"stopAtEntry": false, |
||||
|
"cwd": "${workspaceRoot}", |
||||
|
"environment": [], |
||||
|
"externalConsole": false, |
||||
|
"linux": { |
||||
|
"MIMode": "gdb", |
||||
|
"setupCommands": [ |
||||
|
{ |
||||
|
"description": "Enable pretty-printing for gdb", |
||||
|
"text": "-enable-pretty-printing", |
||||
|
"ignoreFailures": true |
||||
|
} |
||||
|
], |
||||
|
"program": "${workspaceRoot}/bin/${workspaceFolderBasename}_debug" |
||||
|
}, |
||||
|
"osx": { |
||||
|
"MIMode": "lldb", |
||||
|
"program": "${workspaceRoot}/bin/${workspaceFolderBasename}_debug.app/Contents/MacOS/${workspaceFolderBasename}_debug" |
||||
|
}, |
||||
|
"windows": { |
||||
|
"MIMode": "gdb", |
||||
|
"miDebuggerPath": "gdb.exe", |
||||
|
"setupCommands": [ |
||||
|
{ |
||||
|
"description": "Enable pretty-printing for gdb", |
||||
|
"text": "-enable-pretty-printing", |
||||
|
"ignoreFailures": true |
||||
|
} |
||||
|
], |
||||
|
"program": "${workspaceRoot}/bin/${workspaceFolderBasename}_debug" |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"name": "C++ Attach", |
||||
|
"type": "cppdbg", |
||||
|
"request": "attach", |
||||
|
"program": "enter program name, for example ${workspaceRoot}/a.out", |
||||
|
"processId": "${command:pickProcess}", |
||||
|
"linux": { |
||||
|
"MIMode": "gdb", |
||||
|
"setupCommands": [ |
||||
|
{ |
||||
|
"description": "Enable pretty-printing for gdb", |
||||
|
"text": "-enable-pretty-printing", |
||||
|
"ignoreFailures": true |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"osx": { |
||||
|
"MIMode": "lldb" |
||||
|
}, |
||||
|
"windows": { |
||||
|
"MIMode": "gdb", |
||||
|
"setupCommands": [ |
||||
|
{ |
||||
|
"description": "Enable pretty-printing for gdb", |
||||
|
"text": "-enable-pretty-printing", |
||||
|
"ignoreFailures": true |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
} |
@ -0,0 +1,92 @@ |
|||||
|
{ |
||||
|
|
||||
|
"version": "2.0.0", |
||||
|
"shell":{ |
||||
|
"task": true |
||||
|
}, |
||||
|
"windows" : { |
||||
|
"options": { |
||||
|
"shell": { |
||||
|
"executable": "C:\\msys64\\msys2_shell.cmd", |
||||
|
"args": [ |
||||
|
"-defterm", |
||||
|
"-mingw64", |
||||
|
"-no-start", |
||||
|
"-here", |
||||
|
"-shell bash -c" |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
"problemMatcher": { |
||||
|
"owner": "cpp", |
||||
|
"fileLocation": ["relative", "${workspaceFolder}"], |
||||
|
"pattern": { |
||||
|
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", |
||||
|
"file": 1, |
||||
|
"line": 2, |
||||
|
"column": 3, |
||||
|
"severity": 4, |
||||
|
"message": 5 |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
"group": { |
||||
|
"kind": "build", |
||||
|
}, |
||||
|
|
||||
|
"presentation": { |
||||
|
"reveal": "always", |
||||
|
"panel": "shared" |
||||
|
}, |
||||
|
|
||||
|
"tasks": [ |
||||
|
{ |
||||
|
"type": "shell", |
||||
|
"label": "Build RELEASE", |
||||
|
"command": "make -j -s 2>&1" |
||||
|
// "windows" : { |
||||
|
// "command" : "msbuild" |
||||
|
// } |
||||
|
}, |
||||
|
{ |
||||
|
"type": "shell", |
||||
|
"label": "Run RELEASE", |
||||
|
"command": "make RunRelease >&1", |
||||
|
"windows" : { |
||||
|
"command" : "bin/*.exe" |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"label": "Build and Run Release", |
||||
|
"dependsOn": ["Build RELEASE", "Run RELEASE"], |
||||
|
"dependsOrder": "sequence", |
||||
|
"group": { |
||||
|
"kind": "build", |
||||
|
"isDefault": true |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
"type": "shell", |
||||
|
"label": "Build DEBUG", |
||||
|
"command": "make Debug -j -s 2>&1 || exit 1" |
||||
|
}, |
||||
|
|
||||
|
{ |
||||
|
"type": "shell", |
||||
|
"label": "Clean DEBUG", |
||||
|
"command": "make CleanDebug" |
||||
|
}, |
||||
|
|
||||
|
{ |
||||
|
"type": "shell", |
||||
|
"label": "Clean RELEASE", |
||||
|
"command": "make CleanRelease" |
||||
|
}, |
||||
|
{ |
||||
|
"type": "shell", |
||||
|
"label": "Clean ALL", |
||||
|
"command": "make clean" |
||||
|
} |
||||
|
] |
||||
|
} |
@ -0,0 +1,143 @@ |
|||||
|
{ |
||||
|
"folders": [ |
||||
|
{ |
||||
|
"path": "." |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../../../../libs/openFrameworks" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxGui" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxNetwork" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxOpenCv" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxOnnxRuntime" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxGui" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxNetwork" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxOpenCv" |
||||
|
}, |
||||
|
{ |
||||
|
"path": "${workspaceRoot}/../..\\..\\..\\addons\\ofxOnnxRuntime" |
||||
|
} |
||||
|
], |
||||
|
"openFrameworksProjectGeneratorVersion": "0.103.0", |
||||
|
"settings": { |
||||
|
"files.associations": { |
||||
|
"algorithm": "cpp", |
||||
|
"any": "cpp", |
||||
|
"array": "cpp", |
||||
|
"atomic": "cpp", |
||||
|
"bit": "cpp", |
||||
|
"bitset": "cpp", |
||||
|
"cctype": "cpp", |
||||
|
"cfenv": "cpp", |
||||
|
"charconv": "cpp", |
||||
|
"chrono": "cpp", |
||||
|
"cinttypes": "cpp", |
||||
|
"clocale": "cpp", |
||||
|
"cmath": "cpp", |
||||
|
"codecvt": "cpp", |
||||
|
"compare": "cpp", |
||||
|
"complex": "cpp", |
||||
|
"concepts": "cpp", |
||||
|
"condition_variable": "cpp", |
||||
|
"coroutine": "cpp", |
||||
|
"csignal": "cpp", |
||||
|
"cstdarg": "cpp", |
||||
|
"cstddef": "cpp", |
||||
|
"cstdint": "cpp", |
||||
|
"cstdio": "cpp", |
||||
|
"cstdlib": "cpp", |
||||
|
"cstring": "cpp", |
||||
|
"ctime": "cpp", |
||||
|
"cwchar": "cpp", |
||||
|
"cwctype": "cpp", |
||||
|
"deque": "cpp", |
||||
|
"exception": "cpp", |
||||
|
"filesystem": "cpp", |
||||
|
"format": "cpp", |
||||
|
"forward_list": "cpp", |
||||
|
"fstream": "cpp", |
||||
|
"functional": "cpp", |
||||
|
"future": "cpp", |
||||
|
"initializer_list": "cpp", |
||||
|
"iomanip": "cpp", |
||||
|
"ios": "cpp", |
||||
|
"iosfwd": "cpp", |
||||
|
"iostream": "cpp", |
||||
|
"istream": "cpp", |
||||
|
"iterator": "cpp", |
||||
|
"limits": "cpp", |
||||
|
"list": "cpp", |
||||
|
"locale": "cpp", |
||||
|
"map": "cpp", |
||||
|
"memory": "cpp", |
||||
|
"memory_resource": "cpp", |
||||
|
"mutex": "cpp", |
||||
|
"new": "cpp", |
||||
|
"numbers": "cpp", |
||||
|
"numeric": "cpp", |
||||
|
"optional": "cpp", |
||||
|
"ostream": "cpp", |
||||
|
"queue": "cpp", |
||||
|
"random": "cpp", |
||||
|
"ranges": "cpp", |
||||
|
"ratio": "cpp", |
||||
|
"regex": "cpp", |
||||
|
"semaphore": "cpp", |
||||
|
"set": "cpp", |
||||
|
"shared_mutex": "cpp", |
||||
|
"source_location": "cpp", |
||||
|
"span": "cpp", |
||||
|
"sstream": "cpp", |
||||
|
"stack": "cpp", |
||||
|
"stdexcept": "cpp", |
||||
|
"stop_token": "cpp", |
||||
|
"streambuf": "cpp", |
||||
|
"string": "cpp", |
||||
|
"strstream": "cpp", |
||||
|
"system_error": "cpp", |
||||
|
"thread": "cpp", |
||||
|
"tuple": "cpp", |
||||
|
"type_traits": "cpp", |
||||
|
"typeindex": "cpp", |
||||
|
"typeinfo": "cpp", |
||||
|
"unordered_map": "cpp", |
||||
|
"unordered_set": "cpp", |
||||
|
"utility": "cpp", |
||||
|
"valarray": "cpp", |
||||
|
"variant": "cpp", |
||||
|
"vector": "cpp", |
||||
|
"xfacet": "cpp", |
||||
|
"xhash": "cpp", |
||||
|
"xiosbase": "cpp", |
||||
|
"xlocale": "cpp", |
||||
|
"xlocbuf": "cpp", |
||||
|
"xlocinfo": "cpp", |
||||
|
"xlocmes": "cpp", |
||||
|
"xlocmon": "cpp", |
||||
|
"xlocnum": "cpp", |
||||
|
"xloctime": "cpp", |
||||
|
"xmemory": "cpp", |
||||
|
"xstddef": "cpp", |
||||
|
"xstring": "cpp", |
||||
|
"xtr1common": "cpp", |
||||
|
"xtree": "cpp", |
||||
|
"xutility": "cpp", |
||||
|
"string_view": "cpp", |
||||
|
"stdfloat": "cpp", |
||||
|
"text_encoding": "cpp" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
# Attempt to load a config.make file.
|
||||
|
# If none is found, project defaults in config.project.make will be used.
|
||||
|
ifneq ($(wildcard config.make),) |
||||
|
include config.make |
||||
|
endif |
||||
|
|
||||
|
# make sure the the OF_ROOT location is defined
|
||||
|
ifndef OF_ROOT |
||||
|
OF_ROOT=../../.. |
||||
|
endif |
||||
|
|
||||
|
# call the project makefile!
|
||||
|
include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk |
@ -0,0 +1,4 @@ |
|||||
|
ofxGui |
||||
|
ofxNetwork |
||||
|
ofxOpenCv |
||||
|
ofxOnnxRuntime |
@ -0,0 +1 @@ |
|||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,145 @@ |
|||||
|
################################################################################ |
||||
|
# CONFIGURE PROJECT MAKEFILE (optional) |
||||
|
# This file is where we make project specific configurations. |
||||
|
################################################################################ |
||||
|
|
||||
|
################################################################################ |
||||
|
# OF ROOT |
||||
|
# The location of your root openFrameworks installation |
||||
|
# (default) OF_ROOT = ../../.. |
||||
|
################################################################################ |
||||
|
OF_ROOT = ../../.. |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT ROOT |
||||
|
# The location of the project - a starting place for searching for files |
||||
|
# (default) PROJECT_ROOT = . (this directory) |
||||
|
# |
||||
|
################################################################################ |
||||
|
# PROJECT_ROOT = . |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT SPECIFIC CHECKS |
||||
|
# This is a project defined section to create internal makefile flags to |
||||
|
# conditionally enable or disable the addition of various features within |
||||
|
# this makefile. For instance, if you want to make changes based on whether |
||||
|
# GTK is installed, one might test that here and create a variable to check. |
||||
|
################################################################################ |
||||
|
# None |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT EXTERNAL SOURCE PATHS |
||||
|
# These are fully qualified paths that are not within the PROJECT_ROOT folder. |
||||
|
# Like source folders in the PROJECT_ROOT, these paths are subject to |
||||
|
# exlclusion via the PROJECT_EXLCUSIONS list. |
||||
|
# |
||||
|
# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) |
||||
|
# |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
# PROJECT_EXTERNAL_SOURCE_PATHS = |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT EXCLUSIONS |
||||
|
# These makefiles assume that all folders in your current project directory |
||||
|
# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations |
||||
|
# to look for source code. The any folders or files that match any of the |
||||
|
# items in the PROJECT_EXCLUSIONS list below will be ignored. |
||||
|
# |
||||
|
# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete |
||||
|
# string unless teh user adds a wildcard (%) operator to match subdirectories. |
||||
|
# GNU make only allows one wildcard for matching. The second wildcard (%) is |
||||
|
# treated literally. |
||||
|
# |
||||
|
# (default) PROJECT_EXCLUSIONS = (blank) |
||||
|
# |
||||
|
# Will automatically exclude the following: |
||||
|
# |
||||
|
# $(PROJECT_ROOT)/bin% |
||||
|
# $(PROJECT_ROOT)/obj% |
||||
|
# $(PROJECT_ROOT)/%.xcodeproj |
||||
|
# |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
# PROJECT_EXCLUSIONS = |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT LINKER FLAGS |
||||
|
# These flags will be sent to the linker when compiling the executable. |
||||
|
# |
||||
|
# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs |
||||
|
# |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
|
||||
|
# Currently, shared libraries that are needed are copied to the |
||||
|
# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to |
||||
|
# add a runtime path to search for those shared libraries, since they aren't |
||||
|
# incorporated directly into the final executable application binary. |
||||
|
# TODO: should this be a default setting? |
||||
|
# PROJECT_LDFLAGS=-Wl,-rpath=./libs |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT DEFINES |
||||
|
# Create a space-delimited list of DEFINES. The list will be converted into |
||||
|
# CFLAGS with the "-D" flag later in the makefile. |
||||
|
# |
||||
|
# (default) PROJECT_DEFINES = (blank) |
||||
|
# |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
# PROJECT_DEFINES = |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT CFLAGS |
||||
|
# This is a list of fully qualified CFLAGS required when compiling for this |
||||
|
# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS |
||||
|
# defined in your platform specific core configuration files. These flags are |
||||
|
# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. |
||||
|
# |
||||
|
# (default) PROJECT_CFLAGS = (blank) |
||||
|
# |
||||
|
# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in |
||||
|
# your platform specific configuration file will be applied by default and |
||||
|
# further flags here may not be needed. |
||||
|
# |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
# PROJECT_CFLAGS = |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT OPTIMIZATION CFLAGS |
||||
|
# These are lists of CFLAGS that are target-specific. While any flags could |
||||
|
# be conditionally added, they are usually limited to optimization flags. |
||||
|
# These flags are added BEFORE the PROJECT_CFLAGS. |
||||
|
# |
||||
|
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. |
||||
|
# |
||||
|
# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) |
||||
|
# |
||||
|
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. |
||||
|
# |
||||
|
# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) |
||||
|
# |
||||
|
# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the |
||||
|
# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration |
||||
|
# file will be applied by default and further optimization flags here may not |
||||
|
# be needed. |
||||
|
# |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = |
||||
|
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = |
||||
|
|
||||
|
################################################################################ |
||||
|
# PROJECT COMPILERS |
||||
|
# Custom compilers can be set for CC and CXX |
||||
|
# (default) PROJECT_CXX = (blank) |
||||
|
# (default) PROJECT_CC = (blank) |
||||
|
# Note: Leave a leading space when adding list items with the += operator |
||||
|
################################################################################ |
||||
|
# PROJECT_CXX = |
||||
|
# PROJECT_CC = |
||||
|
|
||||
|
# vscode template |
||||
|
|
@ -0,0 +1,17 @@ |
|||||
|
#include "ofMain.h" |
||||
|
#include "ofApp.h" |
||||
|
|
||||
|
//========================================================================
|
||||
|
int main( ){ |
||||
|
|
||||
|
//Use ofGLFWWindowSettings for more options like multi-monitor fullscreen
|
||||
|
ofGLWindowSettings settings; |
||||
|
settings.setSize(1920, 1080); |
||||
|
settings.windowMode = OF_WINDOW; //can also be OF_FULLSCREEN
|
||||
|
|
||||
|
auto window = ofCreateWindow(settings); |
||||
|
|
||||
|
ofRunApp(window, std::make_shared<ofApp>()); |
||||
|
ofRunMainLoop(); |
||||
|
|
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
#include "ofApp.h" |
||||
|
|
||||
|
//--------------------------------------------------------------
|
||||
|
void ofApp::setup(){ |
||||
|
ofSetFrameRate(60); |
||||
|
|
||||
|
videoPlayer.load(videoPath); |
||||
|
videoPlayer.setLoopState(OF_LOOP_NORMAL); |
||||
|
videoPlayer.play(); |
||||
|
|
||||
|
inputImage.allocate(640, 640, OF_IMAGE_COLOR); // Allocate image, so we don't get any issues when processing on the thread
|
||||
|
videoFrame.allocate(1920, 1080, OF_IMAGE_COLOR); |
||||
|
|
||||
|
onnx.setup(&inputImage); // setup onnx -> will need to pass in a pointer to the two fbos?
|
||||
|
} |
||||
|
|
||||
|
//--------------------------------------------------------------
|
||||
|
void ofApp::update(){ |
||||
|
videoPlayer.update(); |
||||
|
if(videoPlayer.isFrameNew()) { |
||||
|
ofPixels & p = videoPlayer.getPixels(); |
||||
|
videoFrame.setFromPixels(p); |
||||
|
} |
||||
|
onnx.update(videoFrame); |
||||
|
} |
||||
|
|
||||
|
//--------------------------------------------------------------
|
||||
|
void ofApp::draw(){ |
||||
|
//videoPlayer.draw(0, 0, 1920, 1080);
|
||||
|
onnx.draw(); |
||||
|
} |
||||
|
|
||||
|
//--------------------------------------------------------------
|
||||
|
void ofApp::exit(){ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
//--------------------------------------------------------------
|
||||
|
void ofApp::keyPressed(int key){ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
//--------------------------------------------------------------
|
||||
|
void ofApp::keyReleased(int key){ |
||||
|
|
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "ofMain.h" |
||||
|
#include "onxProcess.h" |
||||
|
|
||||
|
class ofApp : public ofBaseApp{ |
||||
|
|
||||
|
public: |
||||
|
void setup() override; |
||||
|
void update() override; |
||||
|
void draw() override; |
||||
|
void exit() override; |
||||
|
|
||||
|
void keyPressed(int key) override; |
||||
|
void keyReleased(int key) override; |
||||
|
|
||||
|
ofVideoPlayer videoPlayer; |
||||
|
std::string videoPath = "compressed-test-video.mp4"; |
||||
|
onxProcess onnx; |
||||
|
|
||||
|
ofImage inputImage; |
||||
|
ofImage videoFrame; |
||||
|
}; |
@ -0,0 +1,175 @@ |
|||||
|
#include "ofYolo.h" |
||||
|
|
||||
|
// Takes output tensor data, processes that data, and returns an array of BoxfWithLandmarks (detected_faces)
|
||||
|
void ofYolo::ParseOutput(float* &output_tensors, std::vector<BoxfWithLandmarks> &sorted_faces, unsigned int num_anchors) { |
||||
|
|
||||
|
std::vector<BoxfWithLandmarks> detected_faces; |
||||
|
|
||||
|
for (unsigned int i = 0; i < num_anchors; ++i) { |
||||
|
const float *row_ptr = output_tensors + i * 16; // Each row contains 16 values
|
||||
|
float obj_conf = row_ptr[4]; // Objectness confidence
|
||||
|
|
||||
|
if (obj_conf < 0.5) continue; // Filter out low-confidence detections
|
||||
|
|
||||
|
// Extract bounding box, confidence, and landmarks
|
||||
|
float cx = row_ptr[0]; |
||||
|
float cy = row_ptr[1]; |
||||
|
float w = row_ptr[2]; |
||||
|
float h = row_ptr[3]; |
||||
|
float cls_conf = row_ptr[15]; // Face confidence score
|
||||
|
|
||||
|
if (cls_conf < 0.5) continue; // Filter by class confidence
|
||||
|
|
||||
|
BoxfWithLandmarks face; |
||||
|
face.box.x1 = cx - w / 2; |
||||
|
face.box.y1 = cy - h / 2; |
||||
|
face.box.x2 = cx + w / 2; |
||||
|
face.box.y2 = cy + h / 2; |
||||
|
face.box.score = cls_conf; |
||||
|
face.box.label_text = "face"; |
||||
|
|
||||
|
// Extract landmarks
|
||||
|
for (int j = 0; j < 10; j += 2) { |
||||
|
face.landmarks.points.push_back(cv::Point2f(row_ptr[5 + j], row_ptr[5 + j + 1])); |
||||
|
} |
||||
|
|
||||
|
detected_faces.push_back(face); // Store the detected face with landmarks
|
||||
|
} |
||||
|
|
||||
|
// Apply NMS to detected faces list to remove any overlapping bounding boxes.
|
||||
|
NonMaximumSuppression(detected_faces, sorted_faces, 0.5); |
||||
|
|
||||
|
// Sort faces based on confidence value
|
||||
|
SortDetectedFaces(sorted_faces); |
||||
|
} |
||||
|
|
||||
|
// Simple helper for drawing boxes given x1, y1, x2, y2 coordinates.
|
||||
|
void ofYolo::DrawBox(std::vector<BoxfWithLandmarks> &detected_faces){ |
||||
|
for (const auto &face : detected_faces) { |
||||
|
ofPushStyle(); |
||||
|
ofNoFill(); |
||||
|
ofSetColor(ofColor::cyan); |
||||
|
ofDrawRectangle(face.box.x1, face.box.y1, ((face.box.x2) - (face.box.x1)), face.box.y2 - face.box.y1); |
||||
|
ofPopStyle(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Simple helper to draw boxes at the center of the detected face.
|
||||
|
void ofYolo::DrawCenter(std::vector<BoxfWithLandmarks> &detected_faces){ |
||||
|
ofNoFill(); |
||||
|
glm::vec2 position = detected_faces[0].box.center; |
||||
|
ofDrawCircle(position.x + ofGetWindowWidth() / 2, position.y, 5); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// Applies NMS to an array of BoxfWithLandmarks.face.boxes, to remove any overlapping bounding boxes.
|
||||
|
void ofYolo::NonMaximumSuppression(std::vector<BoxfWithLandmarks> &input_faces, std::vector<BoxfWithLandmarks> &output_faces, float iou_threshold) |
||||
|
{ |
||||
|
// Sort the boxes by their confidence scores (highest to lowest)
|
||||
|
std::sort(input_faces.begin(), input_faces.end(), |
||||
|
[](const BoxfWithLandmarks &a, const BoxfWithLandmarks &b) { |
||||
|
return a.box.score > b.box.score; |
||||
|
}); |
||||
|
|
||||
|
std::vector<int> suppressed(input_faces.size(), 0); // Suppression mask
|
||||
|
|
||||
|
// Iterate through the boxes
|
||||
|
for (size_t i = 0; i < input_faces.size(); ++i) { |
||||
|
if (suppressed[i]) continue; // Skip already suppressed boxes
|
||||
|
|
||||
|
// Add this box to the output
|
||||
|
output_faces.push_back(input_faces[i]); |
||||
|
|
||||
|
for (size_t j = i + 1; j < input_faces.size(); ++j) { |
||||
|
if (suppressed[j]) continue; |
||||
|
|
||||
|
// Calculate IoU between box i and box j
|
||||
|
float iou = input_faces[i].box.iou_of(input_faces[j].box); |
||||
|
|
||||
|
// Suppress box j if IoU is greater than the threshold
|
||||
|
if (iou > iou_threshold) { |
||||
|
suppressed[j] = 1; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Scales the coordinates of detected faces from the model output dimensions -> the original input image dimensions.
|
||||
|
void ofYolo::ConvertBoxCoordsToOriginalSize(std::vector<BoxfWithLandmarks> &detected_faces, size_t original_width, size_t original_height){ |
||||
|
float width_scale = static_cast<float>(original_width) / modelSize; |
||||
|
float height_scale = static_cast<float>(original_height) / modelSize; |
||||
|
|
||||
|
for (auto &face : detected_faces) { |
||||
|
// Convert bounding box coordinates
|
||||
|
face.box.x1 *= width_scale; |
||||
|
face.box.y1 *= height_scale; |
||||
|
face.box.x2 *= width_scale; |
||||
|
face.box.y2 *= height_scale; |
||||
|
face.box.UpdateCenter(); |
||||
|
|
||||
|
// Expansion factor
|
||||
|
float expansion_factor = 1.0f; |
||||
|
|
||||
|
// Find current dimensions
|
||||
|
float current_width = face.box.x2 - face.box.x1; |
||||
|
float current_height = face.box.y2 - face.box.y1; |
||||
|
|
||||
|
// Use width as the base for the 1:1.5 ratio
|
||||
|
float base_width = max(current_width, current_height); |
||||
|
float new_width = base_width; |
||||
|
float new_height = base_width * 1.5f; // Make height 1.5 times the width
|
||||
|
|
||||
|
// Apply expansion
|
||||
|
new_width *= expansion_factor; |
||||
|
new_height *= expansion_factor; |
||||
|
|
||||
|
// Recalculate coordinates maintaining the center
|
||||
|
face.box.x1 = face.box.center.x - (new_width / 2.0f); |
||||
|
face.box.x2 = face.box.center.x + (new_width / 2.0f); |
||||
|
face.box.y1 = face.box.center.y - (new_height / 2.0f); |
||||
|
face.box.y2 = face.box.center.y + (new_height / 2.0f); |
||||
|
} |
||||
|
SortDetectedFaces(detected_faces); |
||||
|
} |
||||
|
|
||||
|
void ofYolo::CropFaceToImage(ofImage &inputImage, BoxfWithLandmarks &face, ofImage &colorImage, int imageSize){ |
||||
|
|
||||
|
//colorImage.resetROI();
|
||||
|
|
||||
|
// Calculate the coordinates and dimensions of the face box
|
||||
|
float x1 = face.box.x1; |
||||
|
float y1 = face.box.y1; |
||||
|
float x2 = face.box.x2; |
||||
|
float y2 = face.box.y2; |
||||
|
|
||||
|
// Ensure coordinates are within the input image bounds
|
||||
|
x1 = ofClamp(x1, 0.0f, (float)inputImage.getWidth()); |
||||
|
y1 = ofClamp(y1, 0.0f, (float)inputImage.getHeight()); |
||||
|
x2 = ofClamp(x2, 0.0f, (float)inputImage.getWidth()); |
||||
|
y2 = ofClamp(y2, 0.0f, (float)inputImage.getHeight()); |
||||
|
|
||||
|
// Calculate width and height of the cropped area
|
||||
|
float cropWidth = x2 - x1; |
||||
|
float cropHeight = y2 - y1; |
||||
|
|
||||
|
// Create cropped section, defined by the box coords
|
||||
|
ofFbo tempFbo; |
||||
|
tempFbo.allocate(cropWidth, cropHeight, GL_RGB); |
||||
|
|
||||
|
tempFbo.begin(); |
||||
|
ofClear(0); |
||||
|
inputImage.getTexture().drawSubsection(0, 0, cropWidth, cropHeight, x1, y1); |
||||
|
tempFbo.end(); |
||||
|
|
||||
|
ofPixels pix; |
||||
|
tempFbo.readToPixels(pix); |
||||
|
face.img.setFromPixels(pix); |
||||
|
face.img.resize(imageSize, imageSize); |
||||
|
} |
||||
|
|
||||
|
void ofYolo::SortDetectedFaces(std::vector<BoxfWithLandmarks> &detectedFaces){ |
||||
|
std::sort(detectedFaces.begin(), detectedFaces.end(), |
||||
|
[](const BoxfWithLandmarks &a, const BoxfWithLandmarks &b) { |
||||
|
return a.box.center.x > b.box.center.x; // Sort in descending order
|
||||
|
}); |
||||
|
} |
@ -0,0 +1,130 @@ |
|||||
|
#ifndef YOLO |
||||
|
#define YOLO |
||||
|
|
||||
|
#include "ofMain.h" |
||||
|
#include "ofxOpenCv.h" |
||||
|
#include "ofxOnnxRuntime.h" |
||||
|
#include <algorithm> |
||||
|
|
||||
|
|
||||
|
|
||||
|
/*
|
||||
|
Struct for storing information about detetced faces. |
||||
|
*/ |
||||
|
struct Emotion { |
||||
|
float anger; |
||||
|
float disgust; |
||||
|
float fear; |
||||
|
float happiness; |
||||
|
float neutral; |
||||
|
float sadness; |
||||
|
float surprise; |
||||
|
|
||||
|
void applySoftmax() { |
||||
|
float values[7] = {anger, disgust, fear, happiness, neutral, sadness, surprise}; |
||||
|
|
||||
|
// Find max value for numerical stability
|
||||
|
float maxVal = values[0]; |
||||
|
for(int i = 1; i < 7; i++) { |
||||
|
maxVal = std::max(maxVal, values[i]); |
||||
|
} |
||||
|
|
||||
|
// Calculate exp(x - max) and sum
|
||||
|
float sum = 0.0f; |
||||
|
for(int i = 0; i < 7; i++) { |
||||
|
values[i] = std::exp(values[i] - maxVal); |
||||
|
sum += values[i]; |
||||
|
} |
||||
|
|
||||
|
// Normalize
|
||||
|
anger = values[0] / sum; |
||||
|
disgust = values[1] / sum; |
||||
|
fear = values[2] / sum; |
||||
|
happiness = values[3] / sum; |
||||
|
neutral = values[4] / sum; |
||||
|
sadness = values[5] / sum; |
||||
|
surprise = values[6] / sum; |
||||
|
} |
||||
|
|
||||
|
std::string getDominantEmotion() const { |
||||
|
float values[7] = {anger, disgust, fear, happiness, neutral, sadness, surprise}; |
||||
|
const char* names[7] = {"anger", "disgust", "fear", "happiness", "neutral", "sadness", "surprise"}; |
||||
|
|
||||
|
int maxIndex = 0; |
||||
|
float maxValue = values[0]; |
||||
|
|
||||
|
for(int i = 1; i < 7; i++) { |
||||
|
if(values[i] > maxValue) { |
||||
|
maxValue = values[i]; |
||||
|
maxIndex = i; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return std::string(names[maxIndex]); |
||||
|
} |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
struct Boxf { |
||||
|
float x1, y1, x2, y2; // Coordinates of the bounding box
|
||||
|
float score; // Confidence score
|
||||
|
glm::vec2 center; |
||||
|
int label; // Class label (e.g., "face")
|
||||
|
std::string label_text; |
||||
|
|
||||
|
// Calculate Intersection over Union (IoU) with another box
|
||||
|
float iou_of(const Boxf &other) const { |
||||
|
float intersection_x1 = std::max(x1, other.x1); |
||||
|
float intersection_y1 = std::max(y1, other.y1); |
||||
|
float intersection_x2 = std::min(x2, other.x2); |
||||
|
float intersection_y2 = std::min(y2, other.y2); |
||||
|
|
||||
|
float intersection_area = std::max(0.0f, intersection_x2 - intersection_x1) * |
||||
|
std::max(0.0f, intersection_y2 - intersection_y1); |
||||
|
|
||||
|
float this_area = (x2 - x1) * (y2 - y1); |
||||
|
float other_area = (other.x2 - other.x1) * (other.y2 - other.y1); |
||||
|
|
||||
|
float union_area = this_area + other_area - intersection_area; |
||||
|
|
||||
|
return intersection_area / union_area; |
||||
|
} |
||||
|
|
||||
|
void UpdateCenter(){ |
||||
|
center.x = (x1 + x2) / 2; |
||||
|
center.y = (y1 + y2) / 2; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
struct Landmarks { |
||||
|
std::vector<cv::Point2f> points; // Facial landmarks points (e.g., eyes, nose, mouth)
|
||||
|
bool flag = false; // Indicator if landmarks are available
|
||||
|
}; |
||||
|
|
||||
|
struct BoxfWithLandmarks { |
||||
|
Boxf box; // Bounding box for the face
|
||||
|
Landmarks landmarks; // Landmark points for the face
|
||||
|
bool flag = false; // Indicator if this detection is valid
|
||||
|
ofImage img; |
||||
|
Emotion emotion; |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
class ofYolo{ |
||||
|
public: |
||||
|
ofYolo(){}; |
||||
|
void ParseOutput(float* &out_ptr, std::vector<BoxfWithLandmarks> &sorted_faces, unsigned int num_anchors); |
||||
|
void DrawBox(std::vector<BoxfWithLandmarks> &detected_faces); |
||||
|
void DrawCenter(std::vector<BoxfWithLandmarks> &detected_faces); |
||||
|
void NonMaximumSuppression(std::vector<BoxfWithLandmarks> &input_faces, std::vector<BoxfWithLandmarks> &output_faces, float iou_threshold); |
||||
|
void ConvertBoxCoordsToOriginalSize(std::vector<BoxfWithLandmarks> &detected_faces, size_t original_width, size_t original_height); |
||||
|
void CropFaceToImage(ofImage &inputImage, BoxfWithLandmarks &face, ofImage &colorImage, int imageSize); |
||||
|
void SortDetectedFaces(std::vector<BoxfWithLandmarks> &detectedFaces); |
||||
|
private: |
||||
|
// Input dimenions of the model -- used for coordinate scaling.
|
||||
|
size_t modelSize = 640; |
||||
|
}; |
||||
|
|
||||
|
#endif |
@ -0,0 +1,145 @@ |
|||||
|
#include "onxProcess.h" |
||||
|
|
||||
|
void onxProcess::setup(ofImage* img) { |
||||
|
// Setup code here
|
||||
|
this->inputImage = img; |
||||
|
modelInput.emplace_back(inputImage); |
||||
|
|
||||
|
// Need to allocate ofImage objects & point to them
|
||||
|
for(size_t i = 0; i < batchSizeFer; i++) { |
||||
|
ofImage t; |
||||
|
t.allocate(modelInputDimensionsFer, modelInputDimensionsFer, OF_IMAGE_COLOR); |
||||
|
inputImagesFer.push_back(t); |
||||
|
} |
||||
|
|
||||
|
for(auto & i : inputImagesFer) { |
||||
|
modelInputFer.emplace_back(&i); |
||||
|
} |
||||
|
|
||||
|
std::cout << "ONNX Runtime version: " << ORT_API_VERSION << std::endl; |
||||
|
onxFaceDetection.setup(modelPath, ofxOnnxRuntime::BaseSetting{ ofxOnnxRuntime::INFER_CUDA, 0, ofxOnnxRuntime::FLOAT32, ofxOnnxRuntime::FLOAT32, modelInputWidth, modelInputHeight, true}, 1, false, false); |
||||
|
onxFaceDetection.setInputs(modelInput); |
||||
|
|
||||
|
onxFER.setup(modelPathFer, ofxOnnxRuntime::BaseSetting{ ofxOnnxRuntime::INFER_CUDA, 0, ofxOnnxRuntime::FLOAT32, ofxOnnxRuntime::FLOAT32, modelInputDimensionsFer, modelInputDimensionsFer, true}, batchSizeFer, false, false); |
||||
|
onxFER.setInputs(modelInputFer); |
||||
|
|
||||
|
fdThread.setup(&onxFaceDetection); |
||||
|
fdThread.start(); |
||||
|
} |
||||
|
|
||||
|
void onxProcess::update(ofImage& frame) { |
||||
|
// Update frame (the current video frame)
|
||||
|
videoFrame = frame; |
||||
|
|
||||
|
// Getthe number of anchors and output tensor -> processes that with some helper functions given an array to fill wil detected faces
|
||||
|
if(fdThread.checkInferenceComplete()) { |
||||
|
// Update input image when thread is not busy
|
||||
|
ofPixels & p = videoFrame.getPixels(); |
||||
|
inputImage[0].setFromPixels(p); |
||||
|
|
||||
|
auto output = fdThread.getResult(); |
||||
|
auto outputShape = output->front().GetTensorTypeAndShapeInfo().GetShape(); |
||||
|
unsigned int numAnchors = outputShape[1]; |
||||
|
float* tensor = output->front().GetTensorMutableData<float>(); |
||||
|
|
||||
|
detectedFaces.clear(); |
||||
|
yolo.ParseOutput(tensor, detectedFaces, numAnchors); |
||||
|
yolo.ConvertBoxCoordsToOriginalSize(detectedFaces, 1920, 1080); |
||||
|
|
||||
|
fdThread.resetInferenceFlag(); |
||||
|
fdThread.shouldRunInference = true; |
||||
|
} |
||||
|
|
||||
|
cropFaces(); |
||||
|
|
||||
|
updateEmotions(); |
||||
|
|
||||
|
try{ |
||||
|
fdThread.update(); |
||||
|
} catch (_exception e) { |
||||
|
ofLogError() << "Model Thread did not run ) :"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void onxProcess::cropFaces() { |
||||
|
inputImagesFerTemp.clear(); |
||||
|
|
||||
|
// Populate a list of images with cropped faces. Set for model input!
|
||||
|
// Makes sure I do not exceed batchsize, even if more faces are detected
|
||||
|
ofImage temp; |
||||
|
for(size_t i = 0; i < detectedFaces.size() && i < inputImagesFer.size(); i++) { |
||||
|
// Adds the cropped image to the boxf object
|
||||
|
yolo.CropFaceToImage(videoFrame, detectedFaces[i], temp, modelInputDimensionsFer); |
||||
|
inputImagesFer[i].setFromPixels(detectedFaces[i].img.getPixels()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void onxProcess::updateEmotions() { |
||||
|
//Run model!
|
||||
|
auto out = onxFER.run(); |
||||
|
float* tensor = out->front().GetTensorMutableData<float>(); |
||||
|
|
||||
|
// Makes sure I do not exceed batchsize, even if more faces are detected
|
||||
|
for(size_t i = 0; i < detectedFaces.size() && i < inputImagesFer.size(); i++) { |
||||
|
Emotion emotion; |
||||
|
emotion.anger = tensor[i * 7]; |
||||
|
emotion.disgust = tensor[i * 7 + 1]; |
||||
|
emotion.fear = tensor[i * 7 + 2]; |
||||
|
emotion.happiness = tensor[i * 7 + 3]; |
||||
|
emotion.neutral = tensor[i * 7 + 4]; |
||||
|
emotion.sadness = tensor[i * 7 + 5]; |
||||
|
emotion.surprise = tensor[i * 7 + 6]; |
||||
|
|
||||
|
// Normalises values between 0-1
|
||||
|
emotion.applySoftmax(); |
||||
|
|
||||
|
detectedFaces[i].emotion = emotion; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void onxProcess::draw() { |
||||
|
// Drawing code here
|
||||
|
//videoFrame.draw(0, 0);
|
||||
|
//yolo.DrawBox(detectedFaces);
|
||||
|
|
||||
|
int faceSize = modelInputDimensionsFer; |
||||
|
int facesPerRow = ofGetWindowWidth() / faceSize; |
||||
|
|
||||
|
for (size_t i = 0; i < modelInputFer.size(); i++) { |
||||
|
int col = i % facesPerRow; |
||||
|
int row = i / facesPerRow; |
||||
|
|
||||
|
int x = col * faceSize; |
||||
|
int y = 640 + (row * faceSize); |
||||
|
|
||||
|
modelInputFer[i]->draw(x, y); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void onxProcess::drawGrid() { |
||||
|
ofImage temp; |
||||
|
int faceSize = 384; |
||||
|
int facesPerRow = ofGetWindowWidth() / faceSize; |
||||
|
int totalRows = (detectedFaces.size() + facesPerRow - 1) / facesPerRow; |
||||
|
|
||||
|
for (int row = 0; row < totalRows; ++row) { |
||||
|
// Calculate number of faces in this row
|
||||
|
int startIdx = row * facesPerRow; |
||||
|
int endIdx = std::min(startIdx + facesPerRow, (int)detectedFaces.size()); |
||||
|
int facesInThisRow = endIdx - startIdx; |
||||
|
|
||||
|
// Calculate horizontal offset to center faces in this row
|
||||
|
int rowWidth = facesInThisRow * faceSize; |
||||
|
int xOffset = (ofGetWindowWidth() - rowWidth) / 2; |
||||
|
|
||||
|
for (int i = 0; i < facesInThisRow; ++i) { |
||||
|
int idx = startIdx + i; |
||||
|
yolo.CropFaceToImage(videoFrame, detectedFaces[idx], temp, faceSize); |
||||
|
|
||||
|
int x = xOffset + i * faceSize; |
||||
|
int y = row * faceSize; |
||||
|
|
||||
|
temp.draw(x, y); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "ofMain.h" |
||||
|
#include "ofxOnnxRuntime.h" |
||||
|
#include "ofxOnnxRuntimeThread.h" |
||||
|
#include "ofYolo.h" |
||||
|
|
||||
|
class onxProcess { |
||||
|
public: |
||||
|
void setup(ofImage* img); |
||||
|
void update(ofImage& frame); |
||||
|
void cropFaces(); |
||||
|
void updateEmotions(); |
||||
|
void draw(); |
||||
|
void drawGrid(); |
||||
|
|
||||
|
ofxOnnxRuntime::BaseHandler onxFaceDetection; |
||||
|
ofxOnnxRuntime::OnnxThread fdThread; |
||||
|
|
||||
|
ofxOnnxRuntime::BaseHandler onxFER; |
||||
|
ofxOnnxRuntime::OnnxThread ferThread; |
||||
|
|
||||
|
ofYolo yolo; |
||||
|
|
||||
|
std::vector<ofImage*> modelInput; |
||||
|
std::vector<ofImage*> modelInputFer; |
||||
|
ofImage* inputImage; |
||||
|
|
||||
|
std::vector<ofImage> inputImagesFer; |
||||
|
std::vector<ofImage> inputImagesFerTemp; |
||||
|
|
||||
|
int modelInputWidth = 640; |
||||
|
int modelInputHeight = 640; |
||||
|
|
||||
|
int modelInputDimensionsFer = 260; |
||||
|
int batchSizeFer = 2; |
||||
|
|
||||
|
std::string modelPath = "yolov5s-face.onnx"; |
||||
|
std::string modelPathFer = "fer.onnx"; |
||||
|
|
||||
|
std::vector<BoxfWithLandmarks> detectedFaces; |
||||
|
|
||||
|
ofImage videoFrame; |
||||
|
}; |
Loading…
Reference in new issue