使用共享文件夹实现上位机和下位机的信息传输

使用共享文件夹实现上位机和下位机信息之间的传输

最近实验室要做一个关于移动摄影的项目,具体工作就是利用相机进行人脸偏移相机角度的计算,再将角度信息传给运动控制器来实现相机对移动人脸的自瞄。
运动控制器采用的是GUI-400-TPV-M23-L2-F4G,在运动控制器上安装xp系统(原因:1.xp系统对运动控制较为稳定 2.运动控制器的储存空间有限)。我们以笔记本电脑作为上位机完成图像的分析计算,运动控制器作为下位机接收角度信息控制电机转动。
本篇文章主要对于上位机和下位机的通讯进行讲解:
先贴一下上位机的代码:

#include "conio.h"
#include<iomanip>
using namespace std;
using namespace cv;

int main(){
	CascadeClassifier ccf;//定义级联分类器
	Mat frame,gray;
	vector<Rect> faceBox;//定义向量存储面部信息
	if (!ccf.load("D:\\Installation package\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml")){//级联分类器文件.xml的存储位置
		cerr << "ERROR:Load XML file failed!" << endl;
	}
	VideoCapture cap(0);//打开摄像头
	while (1)
	{
		cap.read(frame);//从视频流中读取帧
		resize(frame, frame,Size(0,0),0.5,0.5, INTER_AREA);//帧的大小减小为原来的一半,提高识别速度
		cvtColor(frame, gray, COLOR_BGR2GRAY, 1);//转化为灰度图片来提高识别速度
		ccf.detectMultiScale(gray, faceBox, 1.1, 3, 0, Size(20, 20), Size(400, 400));
		//printf("%d/n", faceBox.size());
		for (int i = 0; i < faceBox.size(); i++)
		{
			rectangle(frame, Point(faceBox[i].x, faceBox[i].y),Point(faceBox[i].x + faceBox[i].width, faceBox[i].y + faceBox[i].height), Scalar(0, 255, 0),3,0);//在人脸周围画上矩形
			//printf("[%d,%d,%d,%d]\n", faceBox[i].x, faceBox[i].y, faceBox[i].width, faceBox[i].height);
			int x = 320 - (faceBox[i].x + faceBox[i].width / 2);
			int y = 240 - (faceBox[i].y + faceBox[i].height / 2);
			//printf("%d\n", 160 - (faceBox[i].x + faceBox[i].width / 2));
			//printf("%d\n", 120 - (faceBox[i].y + faceBox[i].height / 2));
			ofstream f1("E:\\share\\hahaha.txt");
			if (!f1) return 0;
			f1 << atan(x / 471.6611) / 3.14 * 180 << " ";//471.6611为相机焦距,可利用matlab工具进行相机标定
			f1 << atan(y / 471.9549) / 3.14 * 180;
			cout << atan(x / 471.6611) / 3.14 * 180 << " ";
			cout << atan(y / 471.9549) / 3.14 * 180;
			//waitKey(5000);
			printf("\n");
		}
		imshow("face", frame);
		waitKey(10);
		if (_kbhit()) // 如果有按键被按下
		{
			if (_getch() == 'q') //如果按下了q键则跳出循环
			{
				break;
			}

		}
	}
	//ccf.detectMultiScale(src, faceBox, 1.1, 3, 0, Size(30, 30), Size(200, 200));
	//for (vector<Rect>::const_iterator iter = faceBox.begin(); iter != faceBox.end(); iter++){
		//rectangle(src, *iter, Scalar(0, 255, 255), 3, 0);
	//}
	//imshow("face", src);
	//waitKey(0);
	cap.release();
	destroyAllWindows();
	return 0;
}

程序在配置OpenCV3上的vs2013上进行编译。
上位机为win10系统,下位机为windows xp系统,上位机与上位机连接到同一WiFi下进行共享文件夹的建立。上位机为笔记本电脑,直接进行WiFi链接就好,下位机为PC端,使用型号为TL-WN23N 1.0无线网卡(百度下载安装驱动程序)对WiFi进行连接。
下面介绍一下win10与xp共享文件夹的建立过程:
1.win10同时在命令窗口中输入命令ipconfig查询自己电脑在无线网络下的IP地址,注意是无线网络下!!!,我的电脑在实验室的局域网下IP地址为:192.168.0.199
在这里插入图片描述2.在win10电脑下建立一个文件夹share,文件夹share中新建一TXT档作为信息的传输平台。右键点击文件夹属性,选择共享,添加everyone。
在这里插入图片描述点击共享
在这里插入图片描述添加everyone,点击确定,过一小会,共享文件夹就建好了。
3.解决xp系统对win10共享文件夹访问的问题:
如果是两个win10系统,这时就可以直接对共享文件夹进行访问了,但对于xp和win10由于系统的原因我们还需进一步操作:
打开控制面板-》程序-》程序与功能
在这里插入图片描述点击启用或关闭Windows功能,勾选在这里插入图片描述再点击确定。
在这里插入图片描述4.在xp电脑点击运行,输入\192.168.0.199,点击确定就可以看到共享文件夹了(为了方便,直接在win10电脑上进行截图了,在xp系统上同理)
在这里插入图片描述在这里插入图片描述下面贴一下下位机的代码:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	double x,y;
	double m = 0;
	while (1)
	{
		ifstream in("\\\\192.168.0.199\\share\\haha.txt");//读文件
		in >> x >> y;
		if(x != m)
		cout << x << " " << y << endl;
		m = x;
	}
	return 0;
}

最终运行效果如下图所示:
上位机:
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20190828213733294.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvZmFuemhlbmc=,size_16,color_FFFFFF,t_70下位机:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值