У меня нет опыта работы на C ++. И я должен использовать стазм для обнаружения лица. Я пытаюсь построить минимальный пример. На страница 4 этого урока Можно узнать, что нужно, чтобы это заработало. Но я эти две ошибки:
g++ -Wno-deprecated -o teste minimal.cpp `pkg-config opencv --cflags --libs` -I/home/caaarlos/workspace/StasmDesbravando/stasm
In file included from minimal.cpp:46:0:
/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/pinstart.cpp: In function ‘void stasm::CopyPoint(stasm::Shape&, const Shape&, int, int)’:
/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/pinstart.cpp:138:13: error: redefinition of ‘void stasm::CopyPoint(stasm::Shape&, const Shape&, int, int)’
static void CopyPoint( // copy a point from oldshape to shape
^
In file included from minimal.cpp:37:0:
/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/convshape.cpp:9:13: error: ‘void stasm::CopyPoint(stasm::Shape&, const Shape&, int, int)’ previously defined here
static void CopyPoint( // copy a point from oldshape to shape
Это мой код:
// minimal.cpp: Display the landmarks of a face in an image.
// This demonstrates stasm_search_single.
#include <stdio.h>
#include <stdlib.h>
#include "opencv/highgui.h"#include <opencv/cv.h>
//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm_lib.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/asm.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/atface.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/basedesc.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/classicdesc.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/convshape.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/err.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/eyedet.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/eyedist.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/faceroi.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/hat.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/hatdesc.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/landmarks.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/landtab_muct77.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/misc.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/pinstart.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/print.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/shape17.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/shapehacks.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/shapemod.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/startshape.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm_landmarks.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm_lib.h"//#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm_lib_ext.h"
#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/asm.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/classicdesc.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/convshape.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/err.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/eyedet.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/eyedist.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/faceroi.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/hat.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/hatdesc.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/landmarks.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/misc.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/pinstart.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/print.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/shape17.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/shapehacks.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/shapemod.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/startshape.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/stasm_lib.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/MOD_1/facedet.h"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/MOD_1/initasm.h"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/MOD_1/initasm.cpp"#include "/home/caaarlos/Documentos/TCC/stasm4.1.0/stasm/MOD_1/facedet.cpp"
using namespace cv;
using namespace std;
int main()
{
static const char* const path = "../data/testface.jpg";
cv::Mat_<unsigned char> img(cv::imread(path, CV_LOAD_IMAGE_GRAYSCALE));
if (!img.data)
{
printf("Cannot load %s\n", path);
exit(1);
}int foundface;
float landmarks[2 * stasm_NLANDMARKS]; // x,y coords (note the 2)
if (!stasm_search_single(&foundface, landmarks,
(const char*)img.data, img.cols, img.rows, path, "../data"))
{
printf("Error in stasm_search_single: %s\n", stasm_lasterr());
exit(1);
}
if (!foundface)
printf("No face found in %s\n", path);
else
{
// draw the landmarks on the image as white dots (image is monochrome)
stasm_force_points_into_image(landmarks, img.cols, img.rows);
for (int i = 0; i < stasm_NLANDMARKS; i++)
img(cvRound(landmarks[i*2+1]), cvRound(landmarks[i*2])) = 255;
}
cv::imwrite("minimal.bmp", img);
cv::imshow("stasm minimal", img);
cv::waitKey();
return 0;
}
Я компилирую свой код следующим образом:
g++ -Wno-deprecated -o teste minimal.cpp `pkg-config opencv --cflags --libs` -I/home/caaarlos/workspace/StasmDesbravando/stasm
Что я делаю неправильно? Кто-нибудь может мне помочь?
Благодарю.
Я нашел решение этой проблемы. Если у кого-то есть проблемы, как у меня, вы должны войти на этот сайт и используйте CMakeList.txt и CMake для сборки Stasm. Если вы получили какую-либо ошибку, вы можете попробовать инструкции по предоставлению readme.