使用caffe训练的深度学习做目标检测(车辆检测)

来源:互联网 发布:下载手机淘宝最新版 编辑:程序博客网 时间:2024/06/05 08:54
#include "opencv2/core/core.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/dnn/dnn.hpp"#include "opencv2/ml/ml.hpp"#include "opencv2/objdetect/objdetect.hpp"#include <string>#include <iostream>#include <stdio.h>#include <time.h>#include <vector>int main(int argc,char* argv[]){//init time paramclock_t t_start,t_end;//init dnncv::Ptr<cv::dnn::Importer> importer;std::string modelTxt = "./deploy.prototxt";std::string modelBin = "./googlenet_finetune_web_car_iter_10000.caffemodel";importer = cv::dnn::createCaffeImporter(modelTxt,modelBin);        if(!importer){std::cerr << "Can't load network by using the following files: " << std::endl;std::cerr << "prototxt:   " << modelTxt << std::endl;std::cerr << "caffemodel: " << modelBin << std::endl;exit(-1);}cv::dnn::Net net;importer->populateNet(net);importer.release();//init cascadesstd::string cascadeModel = "./cars.xml";cv::CascadeClassifier cascade;if( !cascade.load(cascadeModel) ){std::cerr << "Can't load cascade model:" << std::endl;std::cerr << "cascade:   " << cascadeModel << std::endl;exit(-1);}cv::Mat frame;char image_path[32];//int i = atoi(argv[1]);for(int i=1;i<=1700;i++){t_start = clock();sprintf(image_path,"/home/xyl/caffe/lesson4/cars_input/cars_input/in%06d.jpg",i);std::cout<<image_path<<std::endl;frame = cv::imread(image_path);std::vector<cv::Rect> cars;cascade.detectMultiScale(frame,cars,1.1,2,0);for(int j=0;j<cars.size();j++){cv::Mat car_candidate = frame(cars[j]);cv::resize(car_candidate,car_candidate,cv::Size(224,224));cv::dnn::Blob inputBlob = cv::dnn::Blob(car_candidate);net.setBlob(".data",inputBlob);net.forward();cv::dnn::Blob prob = net.getBlob("prob");cv::Mat probMat = prob.matRefConst().reshape(1,1);double classProb;cv::minMaxLoc(probMat,NULL,&classProb);char temp[10];sprintf(temp, "%lf", classProb);std::string s(temp);cv::putText(frame,s,cv::Point(cars[j].x,cars[j].y-10),cv::FONT_HERSHEY_SCRIPT_SIMPLEX,0.5,cv::Scalar::all(255),1,8);cv::rectangle(frame,cars[j],cv::Scalar(255,0,0));}t_end = clock();//show processing timestd::cout<<"time:"<<double(t_end-t_start)/CLOCKS_PER_SEC<<std::endl;//show resultcv::imshow("frame",frame);cv::waitKey(1);} //--end for loop}

运行之后,结果是这样的:



2 0
原创粉丝点击