Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

windows vs2019 编译报错 #219

Closed
Alvazz opened this issue Mar 2, 2022 · 27 comments
Closed

windows vs2019 编译报错 #219

Alvazz opened this issue Mar 2, 2022 · 27 comments
Assignees
Labels
bug Something isn't working High Priority

Comments

@Alvazz
Copy link

Alvazz commented Mar 2, 2022

如下图,onnx和opencv的库都放在lib下面了

error2

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

windows下的配置,请先看以下教程,lite.ai.toolkit目前还没有windows的预编译库:

同时也可以考虑使用MacOS或Linux下的预编译库。

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

er3
我下载了opencv官方编译好的库,但是并没有opencv_core.lib这个文件,只有一个opencv_world453d.lib和opencv_world453.lib的文件

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

上面那个问题调整opencv的cmake就好了,又出了一个新问题,啊,这个库。。。。。
e4

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

我还没有时间做windows的兼容🤣,比较建议你在Mac或Linux下跑,Windows下的配置比较复杂,当前可以考虑看下我发的参考链接。

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

FaceLandmark1000.onnx 这个文件在哪啊?

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

FaceLandmark1000.onnx 这个文件在哪啊?

看README文档,所有的模型文件都需要下载,README文档有说明

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

嗯嗯,请问一下,能针对摄像头做检测吗?目前只看到可以针对图片进行操作。

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

我把代码改了一下,变成这样了 :D:D

static void test_default()
{
  std::string onnx_path = "E://githubcode//lite.ai.toolkit//hub//onnx//cv//FaceLandmark1000.onnx";
  //std::string test_img_path = "E://githubcode//lite.ai.toolkit//examples//lite//resources//test_lite_face_landmarks_0.png";
  //std::string save_img_path = "E://githubcode//lite.ai.toolkit//logs//test_lite_face_landmarks_1000.jpg";

  lite::cv::face::align::FaceLandmark1000 *face_landmarks_1000 =
      new lite::cv::face::align::FaceLandmark1000(onnx_path);

  lite::types::Landmarks landmarks;

  cv::VideoCapture cap(0);
  //判断摄像头是否打开
  if (!cap.isOpened())
  {
      std::cout << "摄像头未成功打开" << std::endl;
  }

  //创建窗口
  cv::namedWindow("打开摄像头", 1);

  while (true)
  {
	  //创建Mat对象
	  cv::Mat frame;
	  //从cap中读取一帧存到frame中
	  bool res = cap.read(frame);
	  if (!res)
	  {
		  break;
	  }

	  //判断是否读取到
	  if (frame.empty())
	  {
		  break;
	  }

	  //深拷贝
	  cv::Mat copyMat;

	  frame.copyTo(copyMat);
	  face_landmarks_1000->detect(copyMat, landmarks);
	  lite::utils::draw_landmarks_inplace(copyMat, landmarks);

	  imshow("打开摄像头", copyMat);

	  //等待1毫秒,如果按键则退出循环
	  if (cv::waitKey(1) >= 0)
	  {
		  break;
	  }
  }

  cap.release();
  cv::destroyAllWindows();

  std::cout << "Default Version Done! Detected Landmarks Num: "
            << landmarks.points.size() << std::endl;

  delete face_landmarks_1000;
}

e5

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

是的,这个库的定位是只提供原子级别的能力,不提供复杂的操作流程。针对视频检测需要你自己按照自己的逻辑写。可以看下这个issue:

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

landmarks不要全局,并且要先做人脸检测啊兄弟🤣

@DefTruth DefTruth self-assigned this Mar 2, 2022
@DefTruth DefTruth added bug Something isn't working High Priority labels Mar 2, 2022
@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

好的呢,老哥。我多玩玩

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

老哥,好像你这库里就有人脸检测的?把他们组合在一起?会不会很棒,哈哈哈哈

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

老哥,好像你这库里就有人脸检测的?把他们组合在一起?会不会很棒,哈哈哈哈

是的啊,可以组合的,lite.ai.toolkit现在已经有一些基础的功能了。

@DefTruth DefTruth closed this as completed Mar 2, 2022
@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

但是试了一下,好像不准确,明明就是我一个人,但是检测出2张脸。。。
我用的是 lite_scrfd和scrfd_2.5g_bnkps_shape640x640.onnx测试的。

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

但是试了一下,好像不准确,明明就是我一个人,但是检测出2张脸。。。 我用的是 lite_scrfd和scrfd_2.5g_bnkps_shape640x640.onnx测试的。

应该不至于,SCRFD效果还挺好的。你可以修改一下detect接口的score_threshold的阈值,可以调大一点,去掉置信度低的。

public:
    void detect(const cv::Mat &mat, std::vector<types::BoxfWithLandmarks> &detected_boxes_kps,
                float score_threshold = 0.3f, float iou_threshold = 0.45f,
                unsigned int topk = 400);

建议多测一些图片试试。另外,retinaface、ultraface、yolo5face也可以试试。还有就是像types::BoxfWithLandmarks这种不要轻易用全局变量啊,用局部变量,每张图片检测到的都是不一样的,你用了全局变量,可能就把所有帧的结果都累积到一起了,这是C++的用法问题,像你之前的landmarks那样用就不太对。

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

嗯嗯,landmarks已经放在while里去了,感谢老哥指正,我现在用yolo5face,感觉还行,剩下一个问题就是,我咋把用yolo5face检测出来的数据,传给FaceLandmark1000里面去呢?老哥给点指导,谢谢哈。要不是深圳疫情严重,我要请你去洗脚,你是这么的屌:D:D

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

看一下我在这个issue的回答,拿到框后裁剪人脸送进去做关键点检测。

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

我看了,但是问题是我现在不知道该如何裁剪,给段代码呗

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

是采用cv::crop方法吗

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

兄弟,你自己查一下opencv怎么从图像中裁剪吧.....,已经拿到框的坐标了....,我不可能手把手教啊,这些都是opencv的基本用法了🤣🤣🤣;类似的问题,我就不再回复了哈~

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

嗯嗯,我自己去搞定裁剪吧,坐标的框通过哪个函数拿到啊?

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

坐标框就保存在lite::types::BoxfWithLandmarks里面,你跳转进去看一下数据结构,挺简单的。

typedef struct LITE_EXPORTS BoxfWithLandmarksType
    {
      Boxf box;
      Landmarks landmarks;
      bool flag;

      BoxfWithLandmarksType() : flag(false)
      {};
    } BoxfWithLandmarks;

也可以看一下YOLO5Face示例工程里面的说明:

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

噢噢,谢谢,了解到了

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

嗯嗯,我自己去搞定裁剪吧,坐标的框通过哪个函数拿到啊?

你调用detect接口就会检测到结果了

@Alvazz
Copy link
Author

Alvazz commented Mar 2, 2022

嗯嗯,我搞定啦,对了,我想把框架支持ncnn,我该咋编译啊,windows10环境。

@DefTruth
Copy link
Owner

DefTruth commented Mar 2, 2022

嗯嗯,我搞定啦,对了,我想把框架支持ncnn,我该咋编译啊,windows10环境。

nice~ 👍👍,支持ncnn也还是看这个教程,里面这位同学已经编译了支持onnxruntime、MNN、NCNN和TNN的lite.ai.toolkit。编译时,通过cmake指定编译选项-DENABLE_NCNN=ON,或者在cmake-gui中勾选,也可以直接修改CMakeLists.txt

其实我测试过...pc端(win/linux/mac),NCNN的性能是不如onnxruntime和MNN的,onnxruntime是最快的,毕竟是微软专门搞来给windows用的。所以pc端,不太建议用ncnn,手机端则可以考虑ncnn

@falldew
Copy link

falldew commented Jun 28, 2023

上面那个问题调整opencv的cmake就好了,又出了一个新问题,啊,这个库。。。。。 e4

这个问题解决了吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working High Priority
Projects
None yet
Development

No branches or pull requests

3 participants