基于opencv4和Yolo-Fastest,实现PC和单片机通信,控制步进电机捕获目标

该博客介绍了如何使用OpenCV4和YOLO在PC端实现目标检测,通过串口通信将目标位置信息传递给单片机,进而控制步进电机调整摄像头捕获目标。代码详细展示了视频流处理、YOLO模型应用、物体中心点获取及串口通信过程,并提供了单片机接收数据后的步进电机控制逻辑。

效果视频

基于opencv4和yolo,实现PC和单片机通信,控制步进电机捕获目标

PC端代码

//
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include <opencv2/dnn.hpp>

#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string> 
#include <assert.h>

#include "CSerialPort.h"
int port;
CSerialPort mySerialPort;
#define HEAD_FRAME 0XFD
#define secomd_FRAME 0XDE
unsigned char pData[9] = {
   
    0 };



using namespace cv;
using namespace cv::dnn;
using namespace std;

void PortOpen() {
   
   
	cout << "Please insert your port number : " << endl;
	cin >> port;

	if (!mySerialPort.InitPort(port, 115200, 'N', 8, 1, EV_RXCHAR))
	{
   
   
		std::cout << "initPort fail !" << std::endl;
		PortOpen();
	}
	else
	{
   
   
		std::cout << "initPort success !" << std::endl;
	}
}

int main(int argc, char** argv)
{
   
   
	//串口的一些配置
	PortOpen();
	if (!mySerialPort.OpenListenThread()) {
   
   
		std::cout << "OpenListenThread fail !" << std::endl;
	}
	else {
   
   
		std::cout << "OpenListenThread success !" << std::endl;
	}

	pData[0] = 'a';
	pData[1] = 'b';
	
	
	
	string _cfg = "H:/VS/Opencv/program/opencv_yolov4_c++/opencv_yolov4_c++/opencv_yolov4_c++/WZX/wzx.cfg";
	string _model = "H:/VS/Opencv/program/opencv_yolov4_c++/opencv_yolov4_c++/opencv_yolov4_c++/WZX/yolo-fastest_7000.weights";
	string _labels = "H:/VS/Opencv/program/opencv_yolov4_c++/opencv_yolov4_c++/opencv_yolov4_c++/WZX/wzx.names";

	//string _cfg = "H:/VS/Opencv/program/opencv_yolov4_c++/opencv_yolov4_c++/opencv_yolov4_c++/COCO/yolo-fastest.cfg";
	//string _model = "H:/VS/Opencv/program/opencv_yolov4_c++/opencv_yolov4_c++/opencv_yolov4_c++/COCO/yolo-fastest.weights";
	//string _labels = "H:/VS/Opencv/program/opencv_yolov4_c++/opencv_yolov4_c++/opencv_yolov4_c++/COCO/coco.names";

	Net net = readNetFromDarknet(_cfg, _model);

	net.setPreferableBackend(DNN_BACKEND_CUDA);
	net.setPreferableTarget(DNN_TARGET_CUDA);

	vector<string>outputLayerName = net.getUnconnectedOutLayersNames();
	for (int i = 0; i < outputLayerName.size(); i++)
	{
   
   
		cout << outputLayerName[i] << endl;
	}

	ifstream labels_file(_labels);		//_labels	labels_txt_file
	if (!labels_file.is_open())
	{
   
   
		cout << "can't open labels file" << endl;
		exit(-1);
	}



	string label;
	vector<string&g
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Orange--Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值