IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> day39:opencv与深度神经网络应用实例 -> 正文阅读

[人工智能]day39:opencv与深度神经网络应用实例

1.加载深度学习模型

?

void visionagin:: Myreadnet()
{
	String model = "C:\\Users\\86176\\Downloads\\visionimage\\bvlc_googlenet.caffemodel";
	String config = "C:\\Users\\86176\\Downloads\\visionimage\\bvlc_googlenet.prototxt";
	dnn::Net net = dnn::readNet(model, config);
	if (net.empty())
	{
		cout << "read failed !" << endl;
	}
	vector<String> layernames;
	layernames=net.getLayerNames();
	for (int i = 0; i < layernames.size(); ++i)
	{
		int id = net.getLayerId(layernames[i]);
		Ptr<dnn::Layer> layer = net.getLayer(id);
		cout << "第" << to_string(id) << "层网络名:" << layernames[i] << " ,网络类型:" << layer->type.c_str() << endl;
	}
}

2.图像识别

void visionagin:: Myimagedetect()
{
	Mat img = imread("C:\\Users\\86176\\Downloads\\visionimage\\plane.jpeg");
	if (!img.data)
	{
		cout << "picture read failed!" << endl;
	}
	String model = "C:\\Users\\86176\\Downloads\\visionimage\\image_pattern\\tensorflow_inception_graph.pb";
	//字符串数组存放读出来的分类表
	vector<String>typelist;
	String txt= "C:\\Users\\86176\\Downloads\\visionimage\\image_pattern\\imagenet_comp_graph_label_strings.txt";
	//创建文件流
	ifstream file(txt);
	if (!file.is_open())
	{
		cout << "文件流打开失败!" << endl;
	}
	String type;
	while (!file.eof())
	{
		getline(file, type);
		typelist.push_back(type);
	}
	file.close();
	dnn::Net net = dnn::readNet(model);
	if (net.empty())
	{
		cout << "模型读取失败!" << endl;
	}
	//变换尺寸
	Mat blob=dnn::blobFromImage(img, 1.0f, Size(224, 224));
	//进行图像预测
	net.setInput(blob,"input");
	Mat prob;
	prob = net.forward("softmax2");

	Mat result = prob.reshape(1, 1);
	double maxval;//匹配的最大可能性
	Point maxp;//最大可能性坐标
	minMaxLoc(result, NULL, &maxval, NULL, &maxp);
	String outtype = typelist[maxp.x].c_str();
	cout << "识别结果是:" << outtype << endl;
	cout << "最大可能性:" << maxval << endl;

}

3.风格迁移

void visionagin:: MyneuralStyle()
{
	Mat img = imread("C:\\Users\\86176\\Downloads\\visionimage\\women.jfif");
	imshow("原图", img);
	//计算图像各通道均值
	Scalar meanimg = mean(img);
	Mat blob=dnn::blobFromImage(img, 1.0f, Size(256, 256), meanimg);
	String temp = "C:\\Users\\86176\\Downloads\\visionimage\\fast_style\\";
	String neuralstyle[] = { "the_wave.t7","mosaic.t7","feathers.t7","candy.t7","udnie.t7" };
	for (int i = 0; i < size(neuralstyle); ++i)
	{
		dnn::Net net = dnn::readNet(temp + neuralstyle[i]);
		net.setInput(blob);
		Mat out;//预测结果
		net.forward(out);
		int outchannels = out.size[1];
		int	outrows = out.size[2];
		int outcols=out.size[3];
		Mat result = Mat::zeros(outrows, outcols, CV_32FC3);//绘制结果的画布
		float* data = out.ptr<float>();
		for (int k = 0; k < outchannels; ++k)
		{
			for (int m = 0; m < outrows; ++m)
			{
				for (int n = 0; n < outcols; ++n)
				{
					result.at<Vec3f>(m, n)[k] = *data++;

				}
			}
		}
		//加上减去的均值
		result += meanimg;
		//result /= 255;//result为cv_32f类型,需归一化到0-1;
		result.convertTo(result, CV_8UC3);
		resize(result, result, Size(img.cols, img.rows));
		imshow("迁移后图" + to_string(i), result);
	}
}

?

4.性别检测

?

void visionagin:: Myfaceandgenderdetect()
{
	Mat image = imread("C:\\Users\\86176\\Downloads\\visionimage\\faces.jpg");
	resize(image, image, Size(800, 600));
	GaussianBlur(image, image, Size(3, 3),20);
	dnn::Net net = dnn::readNet("C:\\Users\\86176\\Downloads\\visionimage\\ch12_face_age\\opencv_face_detector_uint8.pb", "C:\\Users\\86176\\Downloads\\visionimage\\ch12_face_age\\opencv_face_detector.pbtxt");
	Mat inputimg = dnn::blobFromImage(image, 1.0f, Size(300, 300));
	Mat output1;
	net.setInput(inputimg,"data");//输入数据
	net.forward(output1,"detection_out");//进行预测
	//检测出人脸的区域的位置
	Mat facearea = Mat(output1.size[2], output1.size[3], CV_32F, output1.ptr<float>());
	//读取性别检测模型
	dnn::Net gendermodel = dnn::readNet("C:\\Users\\86176\\Downloads\\visionimage\\ch12_face_age\\gender_net.caffemodel", "C:\\Users\\86176\\Downloads\\visionimage\\ch12_face_age\\gender_deploy.prototxt");
	String gender[2] = { "boy","girl" };
	//对每个检测出的人脸
	for (int i = 0; i < facearea.rows; ++i)
	{
		double rate = facearea.at<float>(i, 2);//人脸的概率
		if (rate > 0.5)
		{
			int top_x = facearea.at<float>(i, 3) * image.cols;//facearea每行的第2列是概率,3,4,5,6是坐标位置,以比例表示
			int top_y = facearea.at<float>(i, 4) * image.rows;
			int down_x = facearea.at<float>(i, 5) * image.cols;
			int down_y = facearea.at<float>(i, 6) * image.rows;
			Rect rect = Rect(top_x, top_y, down_x - top_x, down_y - top_y);
			//对检测出的图像进行扩充,防止尺寸在真实图像之外
			Rect rectagin;
			rectagin.x = max(0, rect.x - 25);
			rectagin.y = max(0, rect.y - 25);
			rectagin.width = min(rect.width + 25, image.cols - 1);
			rectagin.height = min(rect.height+ 25, image.rows - 1);
			//人脸区域
			Mat face = image(rectagin);
			//对每个人脸变换尺寸
			Mat inputface = dnn::blobFromImage(face, 1.0, Size(227, 227));
			gendermodel.setInput(inputface);
			//预测性别男女概率,是2*1的矩阵
			Mat outputgenderrate=gendermodel.forward();
			float boy,girl;
			boy = outputgenderrate.at<float>(0);
			girl = outputgenderrate.at<float>(1);
			cout << boy << "-" << girl << endl;
			int num=0;
			if (boy > girl)
			{
				num=0;
			}
			else
			{
				num=1;
			}
			String gen = gender[num];
			//画框
			rectangle(image, rect, Scalar(0, 200, 0), 2, 8);
			putText(image, gen.c_str(), rect.tl(), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 200));


		}
	}
	imshow("result", image);
	
	
	
	
}

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:28:52  更:2021-12-24 18:30:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 23:24:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码