Look for files in different paths
Models and other supporting files can now be in different directories instead of the working directory.
This commit is contained in:
parent
ef534eb51f
commit
f72c81b79b
|
@ -30,5 +30,5 @@ if (APPLE)
|
||||||
DESTINATION
|
DESTINATION
|
||||||
$ {PROJECT_BINARY_DIR} )
|
$ {PROJECT_BINARY_DIR} )
|
||||||
endif (APPLE)
|
endif (APPLE)
|
||||||
add_executable( fc2d src/main.cpp src/graphics.cpp src/modelpart.cpp src/cv.cpp )
|
add_executable( fc2d src/main.cpp src/graphics.cpp src/modelpart.cpp src/cv.cpp src/paths.cpp )
|
||||||
target_link_libraries( fc2d ${OpenCV_LIBS} ${OPENGL_LIBRARIES} FreeGLUT::freeglut GLEW::glew )
|
target_link_libraries( fc2d ${OpenCV_LIBS} ${OPENGL_LIBRARIES} FreeGLUT::freeglut GLEW::glew )
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
#include <opencv2/opencv.hpp>
|
#include <opencv2/opencv.hpp>
|
||||||
#include <opencv2/face.hpp>
|
#include <opencv2/face.hpp>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include <graphics.hpp>
|
#include <graphics.hpp>
|
||||||
|
#include <paths.hpp>
|
||||||
|
|
||||||
cv::Ptr<cv::face::Facemark> facemark;
|
cv::Ptr<cv::face::Facemark> facemark;
|
||||||
cv::CascadeClassifier faceDetector;
|
cv::CascadeClassifier faceDetector;
|
||||||
|
@ -10,10 +13,10 @@ cv::Mat frame, gray, small;
|
||||||
|
|
||||||
void initCV() {
|
void initCV() {
|
||||||
//TODO: switch to DNN face detection
|
//TODO: switch to DNN face detection
|
||||||
faceDetector = cv::CascadeClassifier ("cvdata/haarcascade_frontalface_alt2.xml");
|
faceDetector = cv::CascadeClassifier (resolvePath("cvdata/haarcascade_frontalface_alt2.xml"));
|
||||||
|
|
||||||
facemark = cv::face::FacemarkLBF::create();
|
facemark = cv::face::FacemarkLBF::create();
|
||||||
facemark->loadModel ("cvdata/lbfmodel.yaml");
|
facemark->loadModel (resolvePath("cvdata/lbfmodel.yaml"));
|
||||||
|
|
||||||
vid = cv::VideoCapture (0);
|
vid = cv::VideoCapture (0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include <graphics.hpp>
|
#include <graphics.hpp>
|
||||||
#include <modelpart.hpp>
|
#include <modelpart.hpp>
|
||||||
|
#include <paths.hpp>
|
||||||
|
|
||||||
GLuint shader; //standard shader program used for all elements
|
GLuint shader; //standard shader program used for all elements
|
||||||
GLuint transUniform; //location of the "transMatrix" transformation matrix uniform in the shader
|
GLuint transUniform; //location of the "transMatrix" transformation matrix uniform in the shader
|
||||||
|
@ -80,10 +81,10 @@ void initGraphics () {
|
||||||
|
|
||||||
initShader();
|
initShader();
|
||||||
|
|
||||||
parts[0] = ModelPart("models/test/head-base.png", transUniform);
|
parts[0] = ModelPart(resolvePath("models/test/head-base.png").c_str(), transUniform);
|
||||||
parts[1] = ModelPart("models/test/face-eyes.png", transUniform);
|
parts[1] = ModelPart(resolvePath("models/test/face-eyes.png").c_str(), transUniform);
|
||||||
parts[2] = ModelPart("models/test/face-mouth-closed.png", transUniform);
|
parts[2] = ModelPart(resolvePath("models/test/face-mouth-closed.png").c_str(), transUniform);
|
||||||
parts[2].addTexture("models/test/face-mouth-open.png", 1);
|
parts[2].addTexture(resolvePath("models/test/face-mouth-open.png").c_str(), 1);
|
||||||
|
|
||||||
//enable blending for alpha textures
|
//enable blending for alpha textures
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
#include <graphics.hpp>
|
#include <graphics.hpp>
|
||||||
#include <cv.hpp>
|
#include <cv.hpp>
|
||||||
|
#include <paths.hpp>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
int main () {
|
int main () {
|
||||||
|
std::cout << "Facecam2D is starting..." << std::endl;
|
||||||
|
|
||||||
|
initPrefixes();
|
||||||
|
std::cout << "Custom asset prefix: " << prefixCustom << std::endl;
|
||||||
|
std::cout << "Default asset prefix: " << prefixDefault << std::endl;
|
||||||
|
|
||||||
initGraphics();
|
initGraphics();
|
||||||
initCV();
|
initCV();
|
||||||
|
|
||||||
|
|
47
src/paths.cpp
Normal file
47
src/paths.cpp
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <paths.hpp>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define READABLE(p) _access(p.c_str(),R_OK)==0
|
||||||
|
#else
|
||||||
|
#define READABLE(p) access(p.c_str(),R_OK)==0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::string prefixCustom;
|
||||||
|
std::string prefixDefault;
|
||||||
|
|
||||||
|
void initPrefixes() {
|
||||||
|
#if defined (__gnu_linux__)
|
||||||
|
prefixCustom = getenv("HOME") + std::string("/.local/facecam2d/");
|
||||||
|
prefixDefault = "/usr/share/facecam2d/";
|
||||||
|
#elif defined (__APPLE__)
|
||||||
|
prefixCustom = getenv("HOME") + std::string("/Library/Facecam2D/");
|
||||||
|
prefixDefault = "/Applications/Facecam2D.app/";
|
||||||
|
#elif defined (_WIN32)
|
||||||
|
prefixCustom = getenv("AppData") + std::string("\\Facecam2D\\");
|
||||||
|
prefixDefault = getenv("ProgramFiles") + std::string("\\Facecam2D\\");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string resolvePath(const char* path) {
|
||||||
|
std::string customString = prefixCustom + path;
|
||||||
|
std::string defaultString = prefixDefault + path;
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
if (READABLE(customString)) {
|
||||||
|
result = customString;
|
||||||
|
} else if (READABLE(defaultString)) {
|
||||||
|
result = defaultString;
|
||||||
|
} else {
|
||||||
|
result = path;
|
||||||
|
|
||||||
|
if(!(READABLE(std::string(path)))) {
|
||||||
|
std::cerr << path << " not found!" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
13
src/paths.hpp
Normal file
13
src/paths.hpp
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef PATHS_HPP
|
||||||
|
#define PATHS_HPP
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
extern std::string prefixCustom;
|
||||||
|
extern std::string prefixDefault;
|
||||||
|
|
||||||
|
void initPrefixes();
|
||||||
|
|
||||||
|
std::string resolvePath(const char* path);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue