- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 Dlib 中的 mmod_dnn 模型在视频中跟踪 self 训练的猫检测器。我已经使用 dnn_mmod_train_find_cars_example 训练了自己的网络形成blog post .使用 dnn_mmod_face_detector 可以很好地检测图像中的猫例如,但我希望在视频中跟踪猫。我尝试使用 webcam_face_pose示例作为起点,但我似乎无法弄清楚如何应用我自己的网络而不是人脸检测器。非常感谢任何帮助。
代码:
#include <dlib/opencv.h>
#include <opencv2/highgui/highgui.hpp>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>
#include <iostream>
#include <dlib/dnn.h>
#include <dlib/data_io.h>
using namespace dlib;
using namespace std;
// network ----------------------
template <long num_filters, typename SUBNET> using con5d = con<num_filters,
5, 5, 2, 2, SUBNET>;
template <long num_filters, typename SUBNET> using con5 = con<num_filters,
5, 5, 1, 1, SUBNET>;
template <typename SUBNET> using downsampler = relu<bn_con<con5d<32,
relu<bn_con<con5d<32, relu<bn_con<con5d<16, SUBNET>>>>>>>>>;
template <typename SUBNET> using rcon5 = relu<bn_con<con5<55, SUBNET>>>;
using net_type = loss_mmod<con<1, 9, 9, 1, 1, rcon5<rcon5<rcon5<downsampler<input_rgb_image_pyramid<pyramid_down<6>>>>>>>>;
----------------------------------
int main()
{
try
{
cv::VideoCapture cap("cat.avi");
if (!cap.isOpened())
{
cerr << "Unable to connect to camera" << endl;
return 1;
}
image_window win;
net_type net;
deserialize("cat_detector.dat") >> net;
// Grab and process frames until the main window is closed by the user.
while(!win.is_closed())
{
// Grab a frame
cv::Mat temp;
if (!cap.read(temp))
{
break;
}
cv_image<bgr_pixel> cimg(temp);
// This is where I get an error (error message below):
std::vector<rectangle> dets = net(cimg);
-------------------
// Display it all on the screen
win.clear_overlay();
win.set_image(temp);
win.add_overlay(dets, rgb_pixel(255, 0, 0));
}
}
catch(serialization_error& e)
{
cout << endl << e.what() << endl;
}
catch(exception& e)
{
cout << e.what() << endl;
}
}
错误:error C2440: 'initializing': cannot convert from 'std::vector<std::vector<dlib::mmod_rect,std::allocator<_Ty>>,std::allocator<std::vector<_Ty,std::allocator<_Ty>>>>' to 'std::vector<dlib::rectangle,std::allocator<_Ty>>'
我似乎有错误的 vector 类型,即使 webcam_face_pose例子使用这个 vector ,除了我不在例子中使用面部模型。我也试过std::vector<full_object_detection>
如示例中所示,但我认为我不了解如何正确应用我自己的网络。有什么建议吗?在此先感谢您的帮助。
最佳答案
如果您仍然遇到这个问题,我一直在研究类似的问题并找到了一些解决方案。
这里的主要问题是对于 mmod_dnn 模型,net(cimg)
不返回矩形 vector 。它返回如下内容:vector<mmod_rect>
或 vector<vector<mmod_rect>>
,取决于你给它的是单张图片还是多张图片。 face detector example code你链接使用auto dets = net(img)
.然后,您必须将它们转换为 dlib 矩形以尝试计算姿势。
您可能遇到的其他问题是 mmod_dnn 网络需要 matrix<rgb_pixel>
或 vector<matrix<rgb_pixel>>
类型,所以你必须转换成那些。 Dlib 有一些功能可以帮助解决这个问题:
cv_image<bgr_pixel> cimg(temp);
matrix<rgb_pixel> matrix;
assign_image(matrix, cimg)
关于c++ - Dlib 将自训练检测器应用于视频 (mmod_dnn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47636919/
我正在尝试使用 Dlib 中的 mmod_dnn 模型在视频中跟踪 self 训练的猫检测器。我已经使用 dnn_mmod_train_find_cars_example 训练了自己的网络形成blog
我是一名优秀的程序员,十分优秀!