需要训练一个神经网络模型,可能需要用到很多视频数据,所以我想把手头的工控机设置为上电自启动,再借助opencv编译一个可执行文件,放在windows开机启动文件夹里,这样只要连接好摄像头和工控机以及电源,一旦工控机通电,自动启动windows,随后自动调用录像,我只要定时去拷数据就可以了。
首先将工控机设置为开机自启动:
我用的工控机为研华工控机,参考这个文档将工控机设置为上电启动。做法:(1)开机按delete,进入BIOS系统;(2)左右选择到chipset>PCIH-IO…(3)将restore ac power loss改为“power on”;(4)保存设置并重启。
然后我在工控机上用VS编译了下面的代码:
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace cv;
using namespace std; int main()
{
//open the camera
VideoCapture cap(); if(!cap.isOpened()){
system("pause");
return -;
} //设定帧率
double rate= 20.0;
cout << "Video rate: " << rate << "fps" << endl; Mat frame;
cap>>frame;
imshow("Video",frame); cout<<"Image size: "<<frame.size()<<endl; string filename="Video";
string extension=".avi";
stringstream outputfile;
int digits=; //两分钟一个视频
int num_frame=(int)(rate**); //连续录三个
for(int i=;i<;)
{
outputfile.str("");
outputfile<<filename<<setfill('')<<setw(digits)<<i++<<extension;
VideoWriter writer;
writer.open(outputfile.str(),CV_FOURCC('X', 'V', 'I', 'D'),rate,frame.size()); bool stop(false);
int delay= /rate;
int num=; while (!stop)
{
cap>>frame;
writer.write(frame);
imshow("Video",frame);
num++; //达到指定帧数,停止录像
if(num>num_frame)
{
stop=true;
writer.release();
cout<<"Save "<<outputfile.str()<<endl;
} //按ESC退出录像
if(waitKey(delay)==)
{
stop=true;
writer.release();
cout<<"Save "<<outputfile.str()<<endl;
i=;
} }
} cap.release();
system("pause");
return ; }
得到了.exe可执行文件,并将可执行文件放在了windows的启动文件下,这样就可以了。
windows7的启动文件在哪里