基于caffe的鉴黄图片分类c++代码

本文介绍了如何使用C++调用Caffe库进行鉴黄图片分类。提供了icity.cpp源代码,以及makefile用于编译。运行脚本run.sh中设置了环境变量并执行程序,将分类结果输出到out.log。
摘要由CSDN通过智能技术生成

基于caffe的鉴黄图片分类c++代码

icity.cpp:

#include <cstring>
#include <map>
#include <string>
#include <vector>

#include "caffe/caffe.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
#include "sys/time.h"

#include <dlib/dir_nav.h>
#include <iostream>
#include <fstream>
#include <string>
#include<unistd.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<fcntl.h>

using caffe::Blob;
using caffe::Caffe;
using caffe::Net;
using caffe::Layer;
using caffe::vector;

int copyfile(std::string original,std::string destination){
	int length=0;
	char originalname[100];
	length=original.copy(originalname, original.size());
	originalname[length]='\0';
	
	int length2=0;
	char destinationname[100];
	length2=destination.copy(destinationname, destination.size());
	destinationname[length2]='\0';
	
	char c = '\0';  
    int in = -1, out = -1;  
      
    //以只读方式打开数据文件  
    in = open(originalname, O_RDONLY);  
    //以只写方式创建文件,如果文件不存在就创建一个新的文件  
    //文件属主具有读和写的权限  
    out = open(destinationname, O_WRONLY|O_CREAT,  S_IRUSR| S_IWUSR);  
    while(read(in, &c, 1) == 1)//读一个字节的数据  
        write(out, &c, 1);//写一个字节的数据  
  
    //关闭文件描述符  
    close(in);  
    close(out);  
    return 0;  
	
}

int main(int argc, char** argv) {
	std::string FLAGS_weights;
	std::string net_config;
	int model_tag=0;
	for(int model=0;model<=1;model++){
		std::cout<<"print model"<<model<<std::endl;
		if(model==0){
			std::cout<<"AAA"<<std::endl;
			//定义模型
			FLAGS_weights = "nsfw.caffemodel";
			//网络定义
			net_config="deploy.prototxt";
			model_tag=0;
		}else{
			//定义模型
			std::cout<<"BBB"<<std::endl;
			FLAGS_weights = "jianhuang.caffemodel";
			//网络定义
			net_config="deploy_my.prototxt";
			model_tag=1;
		}
	//获取现在的时间
	timeval start,end;
    gettimeofday(&start, NULL);
	
	Net<float> net(net_config, caffe::TEST);
	
	net.CopyTrainedLayersFrom(FLAGS_weights);
	vector<Blob<float>* > input_blobs = net.input_blobs();
	vector<Blob<float>* > output_blobs = net.output_blobs();

	//define the map from labels to output
	int num_outputs = output_blobs[0]->count();

	//turn to new
	dlib::directory test("/opt/jiangjiangchu/jianhuang/test_picture/");
	std::vector<dlib::directory> dirs= test.get_dirs();
	sort(dirs.begin(),dirs.end());
	int num_class= dirs.size();//统计下有多少个文件夹可以读图片
	std::string fname;
	std::string filename;
	int ttotal=0;
	int tcorr = 0;
	for(int i=0;i<dirs.size();i++)
	{
		int total=0;
		int correct=0;
		std::vector<dlib::file> files = dirs[i].get_files();
		for(int j=0; j<files.size();j++)//读取每个文件夹下的图片
		{
			total = total + 1;
			timeval start,end;
			gettimeofday(&start, NULL);
			//读取每张图片预处理
			fname = files[j].full_name();
			filename=files[j].name();
			cv::Mat src= cv::imread(fname);
                        std::cout<<"fname:"<<fname<<std::endl;
			int widthOrigin = src.cols;
			int heightOrigin = src.rows;
			if(widthOrigin=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值