模式识别 - 恐怖视频特征训练器 部分实现
恐怖视频特征训练器 部分实现
本文地址: http://blog.csdn.net/caroline_wendy/article/details/23763003
本程序已开发完成, 需授权使用, 如有需要, 请站内联系.
恐怖视频特征训练器(HorrorVideoFeatureTrainer), 提取视频的特征, 存储入相应的文本.
实现代码:
ExportInterface.h:
/*! @file
********************************************************************************
模块名 : 导出接口
文件名 : ExportInterface.h
相关文件 : ExportInterface.cpp
文件实现功能 : 导出接口类声明
作者 : C.L.Wang
Email: morndragon@126.com
版本 : 1.0
--------------------------------------------------------------------------------
多线程安全性 : 是
异常时安全性 : 是
--------------------------------------------------------------------------------
备注 : 无
--------------------------------------------------------------------------------
修改记录 :
日 期 版本 修改人 修改内容
2014/03/27 1.0 C.L.Wang Create
********************************************************************************* 版权所有(c) C.L.Wang, 保留所有权利*******************************************************************************/#pragma once#include
#include
#include
#include
#include
#include #include #include "VideoTraining.h"/*! @function
********************************************************************************
函数名 : trainVideoSet
功能 : 训练视频集
参数 :
const string& _featureName, 存储特征文件;
const int _label, 视频标签;
const string& _videoSetPath, 视频集合路径;
const size_t _shotInterval = 100, 镜头;
const size_t _sceneNum = 20, 镜头数;
返回值 : const bool, 是否成功
抛出异常 : 无
--------------------------------------------------------------------------------
复杂度 : 无
备注 : 无
典型用法 : isOK = trainVideoSet (featureName, label, videoSetPath, shotInterval, sceneNum);
--------------------------------------------------------------------------------
作者 : C.L.Wang
*******************************************************************************/
const bool trainVideoSet (const std::string& _featureName, /*存储特征文件*/const int _label, /*视频标签*/const std::string& _videoSetPath, /*视频集合路径*/const std::size_t _shotInterval = 100, /*镜头*/const std::size_t _sceneNum = 20 /*镜头数*/
);
ExportInterface.cpp:
/*! @file
********************************************************************************
模块名 : 导出接口
文件名 : ExportInterface.cpp
相关文件 : ExportInterface.h
文件实现功能 : 导出接口类实现
作者 : C.L.Wang
Email: morndragon@126.com
版本 : 1.0
--------------------------------------------------------------------------------
多线程安全性 : 是
异常时安全性 : 是
--------------------------------------------------------------------------------
备注 : 无
--------------------------------------------------------------------------------
修改记录 :
日 期 版本 修改人 修改内容
2014/03/27 1.0 C.L.Wang Create
********************************************************************************* 版权所有(c) C.L.Wang, 保留所有权利*******************************************************************************/#include "stdafx.h"#undef UNICODE#include "ExportInterface.h"using namespace std;
using namespace cv;
using namespace vd;//遍历文件夹
std::shared_ptr > dfsFileList(const std::string& _folderPath)
{static std::shared_ptr > folderFiles(new std::vector); //返回指针, 需要迭代使用WIN32_FIND_DATA FindData;HANDLE hError;int file_count(0);std::string filePath(_folderPath); //路径名std::string fullFilePath; //全路径名 filePath.append("/*.*");hError = FindFirstFile(filePath.c_str(), &FindData);if (hError == INVALID_HANDLE_VALUE) {std::cout << "failed to search files." << std::endl;return nullptr;}while(FindNextFile(hError, &FindData)){//过虑".", "..", "-q"if (0 == strcmp(FindData.cFileName, ".") || 0 == strcmp(FindData.cFileName, "..") || 0 == strcmp(FindData.cFileName, "-q")){continue;}//完整路径fullFilePath.append(_folderPath);fullFilePath.append("/");fullFilePath.append(FindData.cFileName);++file_count;if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){//std::cout << file_count << " " << full_file_path << "" << std::endl;dfsFileList(fullFilePath);}else{folderFiles->push_back(fullFilePath);//std::cout << file_count << " " << full_file_path << std::endl;}fullFilePath.clear(); //清空目录}return folderFiles;
}//训练视频
const bool transVideo(const std::string& _featureName, /*存储特征文件*/const int _label, /*视频标签*/const std::string& _videoName, /*视频名称*/const std::size_t _shotInterval = 100, /*镜头*/const std::size_t _sceneInterval = 2000 /*镜头数*/
)
{const std::string& featureName(_featureName);const int label(_label);const std::string videoName(_videoName);const unsigned int shotInterval(_shotInterval);const unsigned int sceneInterval(_sceneInterval);VideoTraining iVT(featureName, label, videoName, shotInterval, sceneInterval);if (!iVT.trainVideoFeatures()) {std::cout << "Failed to train video : " << _videoName << std::endl;return false;}return true;
}//训练视频集合
const bool trainVideoSet (const std::string& _featureName, /*存储特征文件*/const int _label, /*视频标签*/const std::string& _videoSetPath, /*视频集合路径*/const std::size_t _shotInterval, /*镜头*/const std::size_t _sceneNum /*镜头数*/
)
{const std::string& featureName(_featureName);const int label(_label);const std::string videoSetPath(_videoSetPath);const unsigned int shotInterval(_shotInterval);const unsigned int sceneInterval(_shotInterval*_sceneNum);std::shared_ptr > folderFiles;folderFiles = dfsFileList(videoSetPath);if (folderFiles) {for (size_t i=0; i != folderFiles->size(); ++i) {std::cout << i+1 << " : " << (*folderFiles)[i] << std::endl;clock_t start = clock();if (!transVideo(featureName, label, (*folderFiles)[i], shotInterval, sceneInterval)){return false;}clock_t end = clock(); double time = static_cast(end-start)/CLOCKS_PER_SEC; std::cout << " time = " << time << std::endl;}}return true;
}
main.cpp:
/*! @file
********************************************************************************
模块名 : 主函数
文件名 : main.cpp
相关文件 : 无
文件实现功能 : 主函数实现
作者 : C.L.Wang
Email: morndragon@126.com
版本 : 1.0
--------------------------------------------------------------------------------
多线程安全性 : 是
异常时安全性 : 是
--------------------------------------------------------------------------------
备注 : 无
--------------------------------------------------------------------------------
修改记录 :
日期 版本 修改人 修改内容
2014/04/02 1.0 C.L.Wang Create
********************************************************************************* 版权所有(c) C.L.Wang, 保留所有权利*******************************************************************************/#include "stdafx.h"#include
#include
#include #include "ExportInterface.h"void help()
{std::cout << "版权归C.L.Wang所有, 未经授权, 严禁使用, 如有需要, 请邮件联系." << std::endl;std::cout << "Email: morndragon@126.com " << std::endl;std::cout << "Usage: HorrorVideoFeatureTrainer [feature_file(txt)] ";std::cout << "[video_label(number)] [video_folder(path)] ";std::cout << "[shot_interval(number-default)] [scene_num(number-default)]" << std::endl;std::cout << "[feature_file(txt)]: 存储特征的文本名, 可以使用txt类型, 如\"feature.txt\". " << std::endl;std::cout << "[video_label(number)] : 视频的标签, 整数, 如\"0\"(建议: 0, 负样本; 1, 正样本). " << std::endl;std::cout << "[video_folder(path)]: 视频的文件夹, 路径, 如\"X:/negative\". " << std::endl;std::cout << "[shot_interval(number-default)]: 镜头间隔, 整数, 默认100, 可以使用缺省值. " << std::endl;std::cout << "[scene_num(number-default)]: 场景镜头数, 整数, 默认20, 可以使用缺省值. " << std::endl;
}int main(int argc, char** argv)
{help();if (argc < 4) {std::cerr << std::endl << "*****Sorry, Lack of parameters! *****" << std::endl << std::endl;;help();return -1;}const std::string& featureName(argv[1]);const int label(atoi(argv[2]));const std::string& videoSetPath(argv[3]); std::size_t shotInterval = 100; /*镜头*/std::size_t sceneNum = 20; /*镜头数*/if (argc == 5) {shotInterval = atoi(argv[4]);}if (argc == 6) {sceneNum = atoi(argv[5]);}//const std::string& featureName("NegtiveFeatureFile.txt"); /*存储特征文件*///const int label(0); /*视频标签*///const std::string& videoSetPath("E:/Work/violence/负样本切割"); /*视频集合路径*///const std::size_t shotInterval = 100; /*镜头*///const std::size_t sceneNum = 20; /*镜头数*/if (!trainVideoSet (featureName, label, videoSetPath, shotInterval, sceneNum)) {std::cout << "Trainer Error! " << std::endl;} else {std::cout << "Trainer Over! " << std::endl;}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
