add MJPG
This commit is contained in:
parent
4e7762631d
commit
cc715bef70
|
@ -2,6 +2,7 @@
|
||||||
.Python
|
.Python
|
||||||
build/
|
build/
|
||||||
models/
|
models/
|
||||||
|
confs/
|
||||||
ZLM/
|
ZLM/
|
||||||
ZLMediaKit/
|
ZLMediaKit/
|
||||||
ffmpeg-4.2.5/
|
ffmpeg-4.2.5/
|
||||||
|
@ -21,6 +22,11 @@ share/python-wheels/
|
||||||
*.egg
|
*.egg
|
||||||
MANIFEST
|
MANIFEST
|
||||||
.idea/
|
.idea/
|
||||||
|
calib_webcam_1280x720.yaml
|
||||||
|
calib_webcam_640x480.yaml
|
||||||
|
sv_algorithm_params.json
|
||||||
|
sv_algorithm_params_coco_1280.json
|
||||||
|
sv_algorithm_params_coco_640.json
|
||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
*.d
|
*.d
|
||||||
|
|
|
@ -32,7 +32,7 @@ CameraAlgorithm::CameraAlgorithm()
|
||||||
// this->_allocator = NULL;
|
// this->_allocator = NULL;
|
||||||
this->_t0 = std::chrono::system_clock::now();
|
this->_t0 = std::chrono::system_clock::now();
|
||||||
|
|
||||||
this->alg_params_fn = _get_home() + SV_ROOT_DIR + "sv_algorithm_params.json";
|
this->alg_params_fn = _get_home() + SV_ROOT_DIR + "params/a-params/sv_algorithm_params.json";
|
||||||
// std::cout << "CameraAlgorithm->alg_params_fn: " << this->alg_params_fn << std::endl;
|
// std::cout << "CameraAlgorithm->alg_params_fn: " << this->alg_params_fn << std::endl;
|
||||||
// if (_is_file_exist(params_fn))
|
// if (_is_file_exist(params_fn))
|
||||||
// this->loadAlgorithmParams(params_fn);
|
// this->loadAlgorithmParams(params_fn);
|
||||||
|
|
|
@ -333,7 +333,7 @@ class CameraBase {
|
||||||
public:
|
public:
|
||||||
CameraBase(CameraType type=CameraType::NONE, int id=0);
|
CameraBase(CameraType type=CameraType::NONE, int id=0);
|
||||||
~CameraBase();
|
~CameraBase();
|
||||||
void open(CameraType type=CameraType::WEBCAM, int id=0);
|
void open(CameraType type=CameraType::V4L2CAM, int id=0);
|
||||||
bool read(cv::Mat& image);
|
bool read(cv::Mat& image);
|
||||||
void release();
|
void release();
|
||||||
|
|
||||||
|
@ -347,7 +347,9 @@ public:
|
||||||
double getSaturation();
|
double getSaturation();
|
||||||
double getHue();
|
double getHue();
|
||||||
double getExposure();
|
double getExposure();
|
||||||
|
std::string getFourcc();
|
||||||
bool isRunning();
|
bool isRunning();
|
||||||
|
void setFourcc(std::string fourcc);
|
||||||
void setWH(int width, int height);
|
void setWH(int width, int height);
|
||||||
void setFps(int fps);
|
void setFps(int fps);
|
||||||
void setIp(std::string ip);
|
void setIp(std::string ip);
|
||||||
|
@ -383,6 +385,7 @@ protected:
|
||||||
double _saturation;
|
double _saturation;
|
||||||
double _hue;
|
double _hue;
|
||||||
double _exposure;
|
double _exposure;
|
||||||
|
std::string _fourcc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,14 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化Aruco检测器类
|
// 实例化Aruco检测器类
|
||||||
sv::ArucoDetector ad;
|
sv::ArucoDetector ad;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
ad.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
ad.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
ad.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(ad.image_width, ad.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -8,9 +8,9 @@ using namespace std;
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(1280, 720);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -11,13 +11,14 @@ int main(int argc, char *argv[])
|
||||||
// 实例化 color line detection 检测器类
|
// 实例化 color line detection 检测器类
|
||||||
sv::ColorLineDetector cld;
|
sv::ColorLineDetector cld;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
cld.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
cld.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cld.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
cap.setWH(640, 480);
|
cap.setWH(cld.image_width, cld.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -9,13 +9,14 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化 通用目标 检测器类
|
// 实例化 通用目标 检测器类
|
||||||
sv::CommonObjectDetector cod;
|
sv::CommonObjectDetector cod;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
cod.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
cod.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cod.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(cod.image_width, cod.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -40,18 +40,20 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化 框选目标跟踪类
|
// 实例化 框选目标跟踪类
|
||||||
sv::SingleObjectTracker sot;
|
sv::SingleObjectTracker sot;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
sot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
sot.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
sot.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
|
|
||||||
sv::CommonObjectDetector cod;
|
sv::CommonObjectDetector cod;
|
||||||
cod.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
cod.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cod.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(cod.image_width, cod.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
|
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
|
|
|
@ -9,13 +9,14 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化 椭圆 检测器类
|
// 实例化 椭圆 检测器类
|
||||||
sv::EllipseDetector ed;
|
sv::EllipseDetector ed;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
ed.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
ed.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
ed.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(ed.image_width, ed.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -58,10 +58,12 @@ int main(int argc, char *argv[])
|
||||||
// 实例化 框选目标跟踪类
|
// 实例化 框选目标跟踪类
|
||||||
sv::SingleObjectTracker sot;
|
sv::SingleObjectTracker sot;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
sot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1280x720.yaml");
|
sot.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
sot.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
sv::CommonObjectDetector cod;
|
sv::CommonObjectDetector cod;
|
||||||
cod.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1280x720.yaml");
|
cod.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cod.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
|
@ -256,4 +258,4 @@ void GimableCallback(double &frame_ang_r, double &frame_ang_p, double &frame_ang
|
||||||
count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,8 @@ int main(int argc, char *argv[])
|
||||||
// 实例化 圆形降落标志 检测器类
|
// 实例化 圆形降落标志 检测器类
|
||||||
sv::LandingMarkerDetector lmd;
|
sv::LandingMarkerDetector lmd;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
lmd.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1280x720.yaml");
|
lmd.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
lmd.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
|
@ -144,4 +145,4 @@ void GimableCallback(double &frame_ang_r, double &frame_ang_p, double &frame_ang
|
||||||
count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,8 @@ int main(int argc, char *argv[])
|
||||||
// 实例化Aruco检测器类
|
// 实例化Aruco检测器类
|
||||||
sv::ArucoDetector ad;
|
sv::ArucoDetector ad;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
ad.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1280x720.yaml");
|
ad.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
ad.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
sv::UDPServer udp;
|
sv::UDPServer udp;
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
|
|
|
@ -9,13 +9,14 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化 圆形降落标志 检测器类
|
// 实例化 圆形降落标志 检测器类
|
||||||
sv::LandingMarkerDetector lmd;
|
sv::LandingMarkerDetector lmd;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
lmd.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
lmd.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
lmd.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(lmd.image_width, lmd.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -9,17 +9,19 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化
|
// 实例化
|
||||||
sv::CommonObjectDetector cod;
|
sv::CommonObjectDetector cod;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
cod.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
cod.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cod.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
sv::MultipleObjectTracker mot;
|
sv::MultipleObjectTracker mot;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
mot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
mot.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
mot.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
mot.init(&cod);
|
mot.init(&cod);
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(mot.image_width, mot.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -28,15 +28,15 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化 框选目标跟踪类
|
// 实例化 框选目标跟踪类
|
||||||
sv::SingleObjectTracker sot;
|
sv::SingleObjectTracker sot;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
sot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
|
||||||
// sot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1280x720.yaml");
|
|
||||||
// sot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1920x1080.yaml");
|
// sot.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_1920x1080.yaml");
|
||||||
|
sot.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
sot.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(sot.image_width, sot.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// cv::VideoCapture cap("/home/amov/SpireCV/test/tracking_1280x720.mp4");
|
// cv::VideoCapture cap("/home/amov/SpireCV/test/tracking_1280x720.mp4");
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
|
|
|
@ -9,13 +9,13 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化Aruco检测器类
|
// 实例化Aruco检测器类
|
||||||
sv::ArucoDetector ad;
|
sv::ArucoDetector ad;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
ad.loadCameraParams("/home/amov/SpireCV/calib_webcam_640x480.yaml");
|
ad.loadCameraParams("/home/amov/SpireCV/calib_webcam_1280x720.yaml");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
cap.setWH(640, 480);
|
cap.setWH(ad.image_width, ad.image_height);
|
||||||
cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
|
|
||||||
sv::UDPServer udp;
|
sv::UDPServer udp;
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
|
|
|
@ -20,16 +20,18 @@ int main(int argc, char *argv[])
|
||||||
// 实例化 框选目标跟踪类
|
// 实例化 框选目标跟踪类
|
||||||
sv::VeriDetector veri;
|
sv::VeriDetector veri;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
veri.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
veri.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
veri.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
sv::CommonObjectDetector cod;
|
sv::CommonObjectDetector cod;
|
||||||
cod.loadCameraParams(sv::get_home() + "/SpireCV/calib_webcam_640x480.yaml");
|
cod.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cod.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(cod.image_width, cod.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
|
|
@ -9,13 +9,14 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化 通用目标 检测器类
|
// 实例化 通用目标 检测器类
|
||||||
sv::CommonObjectDetector cod;
|
sv::CommonObjectDetector cod;
|
||||||
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件
|
||||||
cod.loadCameraParams("/home/amov/SpireCV/calib_webcam_640x480.yaml");
|
cod.loadCameraParams(sv::get_home() + "/SpireCV/confs/calib_webcam_1280x720.yaml");
|
||||||
|
cod.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json");
|
||||||
|
|
||||||
// 打开摄像头
|
// 打开摄像头
|
||||||
sv::Camera cap;
|
sv::Camera cap;
|
||||||
// cap.setWH(640, 480);
|
cap.setWH(cod.image_width, cod.image_height);
|
||||||
// cap.setFps(30);
|
cap.setFps(30);
|
||||||
cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0
|
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0
|
||||||
// 实例化OpenCV的Mat类,用于内存单帧图像
|
// 实例化OpenCV的Mat类,用于内存单帧图像
|
||||||
cv::Mat img;
|
cv::Mat img;
|
||||||
int frame_id = 0;
|
int frame_id = 0;
|
||||||
|
@ -23,7 +24,7 @@ int main(int argc, char *argv[]) {
|
||||||
// 实例化视频保存类
|
// 实例化视频保存类
|
||||||
sv::VideoWriter vw;
|
sv::VideoWriter vw;
|
||||||
// 设置保存路径"/home/amov/Videos",保存图像尺寸(640,480),帧频25Hz,同步保存检测结果(.svj)
|
// 设置保存路径"/home/amov/Videos",保存图像尺寸(640,480),帧频25Hz,同步保存检测结果(.svj)
|
||||||
vw.setup("/home/amov/Videos", cv::Size(640, 480), 25, true);
|
vw.setup(sv::get_home() + "/Videos", cv::Size(cod.image_width, cod.image_height), 25, true);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -31,7 +32,7 @@ int main(int argc, char *argv[]) {
|
||||||
sv::TargetsInFrame tgts(frame_id++);
|
sv::TargetsInFrame tgts(frame_id++);
|
||||||
// 读取一帧图像到img
|
// 读取一帧图像到img
|
||||||
cap.read(img);
|
cap.read(img);
|
||||||
cv::resize(img, img, cv::Size(640, 480));
|
cv::resize(img, img, cv::Size(cod.image_width, cod.image_height));
|
||||||
|
|
||||||
// 执行通用目标检测
|
// 执行通用目标检测
|
||||||
cod.detect(img, tgts);
|
cod.detect(img, tgts);
|
||||||
|
|
|
@ -3,12 +3,6 @@
|
||||||
root_dir=${HOME}"/SpireCV/models"
|
root_dir=${HOME}"/SpireCV/models"
|
||||||
root_server="https://download.amovlab.com/model"
|
root_server="https://download.amovlab.com/model"
|
||||||
|
|
||||||
sv_params1=${HOME}"/SpireCV/sv_algorithm_params.json"
|
|
||||||
sv_params2=${HOME}"/SpireCV/sv_algorithm_params_coco_640.json"
|
|
||||||
sv_params3=${HOME}"/SpireCV/sv_algorithm_params_coco_1280.json"
|
|
||||||
camera_params1=${HOME}"/SpireCV/calib_webcam_640x480.yaml"
|
|
||||||
camera_params2=${HOME}"/SpireCV/calib_webcam_1280x720.yaml"
|
|
||||||
|
|
||||||
coco_model1="COCO-yolov5s.wts"
|
coco_model1="COCO-yolov5s.wts"
|
||||||
coco_model2="COCO-yolov5s6.wts"
|
coco_model2="COCO-yolov5s6.wts"
|
||||||
coco_model3="COCO-yolov5s-seg.wts"
|
coco_model3="COCO-yolov5s-seg.wts"
|
||||||
|
@ -46,28 +40,6 @@ if [ ! -d ${root_dir} ]; then
|
||||||
mkdir -p ${root_dir}
|
mkdir -p ${root_dir}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f ${sv_params1} ]; then
|
|
||||||
echo -e "\033[32m[INFO]: ${sv_params1} not exist, downloading ... \033[0m"
|
|
||||||
wget -O ${sv_params1} ${root_server}/install/a-params/sv_algorithm_params.json
|
|
||||||
fi
|
|
||||||
if [ ! -f ${sv_params2} ]; then
|
|
||||||
echo -e "\033[32m[INFO]: ${sv_params2} not exist, downloading ... \033[0m"
|
|
||||||
wget -O ${sv_params2} ${root_server}/install/a-params/sv_algorithm_params_coco_640.json
|
|
||||||
fi
|
|
||||||
if [ ! -f ${sv_params3} ]; then
|
|
||||||
echo -e "\033[32m[INFO]: ${sv_params3} not exist, downloading ... \033[0m"
|
|
||||||
wget -O ${sv_params3} ${root_server}/install/a-params/sv_algorithm_params_coco_1280.json
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f ${camera_params1} ]; then
|
|
||||||
echo -e "\033[32m[INFO]: ${camera_params1} not exist, downloading ... \033[0m"
|
|
||||||
wget -O ${camera_params1} ${root_server}/install/c-params/calib_webcam_640x480.yaml
|
|
||||||
fi
|
|
||||||
if [ ! -f ${camera_params2} ]; then
|
|
||||||
echo -e "\033[32m[INFO]: ${camera_params2} not exist, downloading ... \033[0m"
|
|
||||||
wget -O ${camera_params2} ${root_server}/install/c-params/calib_webcam_1280x720.yaml
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f ${coco_model1_fn} ]; then
|
if [ ! -f ${coco_model1_fn} ]; then
|
||||||
echo -e "\033[32m[INFO]: ${coco_model1_fn} not exist, downloading ... \033[0m"
|
echo -e "\033[32m[INFO]: ${coco_model1_fn} not exist, downloading ... \033[0m"
|
||||||
wget -O ${coco_model1_fn} ${root_server}/install/${coco_model1}
|
wget -O ${coco_model1_fn} ${root_server}/install/${coco_model1}
|
||||||
|
|
|
@ -8,7 +8,7 @@ sudo apt install -y gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa
|
||||||
sudo apt install -y gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5
|
sudo apt install -y gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5
|
||||||
sudo apt install -y gstreamer1.0-pulseaudio
|
sudo apt install -y gstreamer1.0-pulseaudio
|
||||||
sudo apt install -y gtk-doc-tools
|
sudo apt install -y gtk-doc-tools
|
||||||
sudo apt install -y libeigen3-dev libfmt-dev
|
sudo apt install -y libeigen3-dev libfmt-dev v4l-utils
|
||||||
|
|
||||||
sudo apt -y install autotools-dev automake m4 perl
|
sudo apt -y install autotools-dev automake m4 perl
|
||||||
sudo apt -y install libtool
|
sudo apt -y install libtool
|
||||||
|
|
|
@ -8,7 +8,7 @@ sudo apt install -y gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa
|
||||||
sudo apt install -y gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5
|
sudo apt install -y gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5
|
||||||
sudo apt install -y gstreamer1.0-pulseaudio
|
sudo apt install -y gstreamer1.0-pulseaudio
|
||||||
sudo apt install -y gtk-doc-tools
|
sudo apt install -y gtk-doc-tools
|
||||||
sudo apt install -y libeigen3-dev libfmt-dev
|
sudo apt install -y libeigen3-dev libfmt-dev v4l-utils
|
||||||
|
|
||||||
git clone https://gitee.com/jario-jin/gst-rtsp-server-b18.git
|
git clone https://gitee.com/jario-jin/gst-rtsp-server-b18.git
|
||||||
cd gst-rtsp-server-b18
|
cd gst-rtsp-server-b18
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
sudo apt install -y \
|
sudo apt install -y \
|
||||||
build-essential yasm cmake libtool libc6 libc6-dev unzip wget libeigen3-dev libfmt-dev \
|
build-essential yasm cmake libtool libc6 libc6-dev unzip wget libeigen3-dev libfmt-dev \
|
||||||
libnuma1 libnuma-dev libx264-dev libx265-dev libfaac-dev libssl-dev
|
libnuma1 libnuma-dev libx264-dev libx265-dev libfaac-dev libssl-dev v4l-utils
|
||||||
|
|
||||||
current_dir=$(pwd)
|
current_dir=$(pwd)
|
||||||
root_dir=${HOME}"/SpireCV"
|
root_dir=${HOME}"/SpireCV"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
sudo apt install -y v4l-utils
|
||||||
wget https://ffmpeg.org/releases/ffmpeg-4.2.5.tar.bz2
|
wget https://ffmpeg.org/releases/ffmpeg-4.2.5.tar.bz2
|
||||||
tar -xjf ffmpeg-4.2.5.tar.bz2
|
tar -xjf ffmpeg-4.2.5.tar.bz2
|
||||||
cd ffmpeg-4.2.5
|
cd ffmpeg-4.2.5
|
||||||
|
|
|
@ -1059,6 +1059,7 @@ CameraBase::CameraBase(CameraType type, int id)
|
||||||
this->_saturation = -1;
|
this->_saturation = -1;
|
||||||
this->_hue = -1;
|
this->_hue = -1;
|
||||||
this->_exposure = -1;
|
this->_exposure = -1;
|
||||||
|
this->_fourcc = "MJPG";
|
||||||
|
|
||||||
this->open(type, id);
|
this->open(type, id);
|
||||||
}
|
}
|
||||||
|
@ -1067,6 +1068,14 @@ CameraBase::~CameraBase()
|
||||||
this->_is_running = false;
|
this->_is_running = false;
|
||||||
// this->_tt.join();
|
// this->_tt.join();
|
||||||
}
|
}
|
||||||
|
std::string CameraBase::getFourcc()
|
||||||
|
{
|
||||||
|
return this->_fourcc;
|
||||||
|
}
|
||||||
|
void CameraBase::setFourcc(std::string fourcc)
|
||||||
|
{
|
||||||
|
this->_fourcc = fourcc;
|
||||||
|
}
|
||||||
void CameraBase::setWH(int width, int height)
|
void CameraBase::setWH(int width, int height)
|
||||||
{
|
{
|
||||||
this->_width = width;
|
this->_width = width;
|
||||||
|
|
|
@ -19,12 +19,16 @@ void Camera::openImpl()
|
||||||
if (this->_type == CameraType::V4L2CAM)
|
if (this->_type == CameraType::V4L2CAM)
|
||||||
{
|
{
|
||||||
this->_cap.open(this->_camera_id, cv::CAP_V4L2);
|
this->_cap.open(this->_camera_id, cv::CAP_V4L2);
|
||||||
// this->_cap.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('Y', 'U', 'Y', 'V'));
|
|
||||||
}
|
}
|
||||||
if (this->_type == CameraType::WEBCAM)
|
if (this->_type == CameraType::WEBCAM)
|
||||||
{
|
{
|
||||||
this->_cap.open(this->_camera_id);
|
this->_cap.open(this->_camera_id);
|
||||||
}
|
}
|
||||||
|
if (_fourcc.size() >= 4)
|
||||||
|
{
|
||||||
|
const char *fourcc_cstr = _fourcc.c_str();
|
||||||
|
this->_cap.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc(fourcc_cstr[0], fourcc_cstr[1], fourcc_cstr[2], fourcc_cstr[3]));
|
||||||
|
}
|
||||||
if (this->_width > 0 && this->_height > 0)
|
if (this->_width > 0 && this->_height > 0)
|
||||||
{
|
{
|
||||||
this->_cap.set(cv::CAP_PROP_FRAME_WIDTH, this->_width);
|
this->_cap.set(cv::CAP_PROP_FRAME_WIDTH, this->_width);
|
||||||
|
|
Loading…
Reference in New Issue