From cc715bef706c14febb814d3e7b6bda9dcdb61d5e Mon Sep 17 00:00:00 2001 From: jario Date: Mon, 1 Jan 2024 15:03:31 +0800 Subject: [PATCH] add MJPG --- .gitignore | 6 ++++ algorithm/sv_algorithm_base.cpp | 2 +- include/sv_video_base.h | 5 +++- samples/demo/aruco_detection.cpp | 9 +++--- samples/demo/camera_reading.cpp | 6 ++-- samples/demo/color_line_detect.cpp | 9 +++--- samples/demo/common_object_detection.cpp | 9 +++--- .../demo/detection_with_clicked_tracking.cpp | 12 ++++---- samples/demo/ellipse_detection.cpp | 9 +++--- ...gimbal_detection_with_clicked_tracking.cpp | 8 ++++-- .../demo/gimbal_landing_marker_detection.cpp | 5 ++-- .../demo/gimbal_udp_detection_info_sender.cpp | 3 +- samples/demo/landing_marker_detection.cpp | 9 +++--- samples/demo/multiple_object_tracking.cpp | 12 ++++---- samples/demo/single_object_tracking.cpp | 10 +++---- samples/demo/udp_detection_info_sender.cpp | 6 ++-- samples/demo/veri.cpp | 12 ++++---- samples/demo/video_saving.cpp | 13 +++++---- scripts/common/configs-downloading.sh | 0 scripts/common/download_test_videos.sh | 0 scripts/common/ffmpeg425-install.sh | 0 scripts/common/gst-install-orin.sh | 0 scripts/common/gst-install.sh | 0 scripts/common/models-converting.sh | 0 scripts/common/models-downloading.sh | 28 ------------------- scripts/common/opencv470-install.sh | 0 scripts/jetson/configs-downloading.sh | 0 scripts/jetson/gst-install-orin.sh | 2 +- scripts/jetson/gst-install.sh | 2 +- .../opencv470-jetpack511-cuda-install.sh | 0 .../jetson/opencv470-jetpack511-install.sh | 0 scripts/x86-cuda/configs-downloading.sh | 0 scripts/x86-cuda/ffmpeg425-install.sh | 2 +- .../x86-cuda/ubuntu1804-cuda-cudnn-11-1.sh | 0 scripts/x86-intel/configs-downloading.sh | 0 scripts/x86-intel/ffmpeg-install.sh | 1 + video_io/sv_video_base.cpp | 9 ++++++ video_io/sv_video_input.cpp | 6 +++- 38 files changed, 103 insertions(+), 92 deletions(-) mode change 100644 => 100755 scripts/common/configs-downloading.sh mode change 100644 => 100755 scripts/common/download_test_videos.sh mode change 100644 => 100755 scripts/common/ffmpeg425-install.sh mode change 100644 => 100755 scripts/common/gst-install-orin.sh mode change 100644 => 100755 scripts/common/gst-install.sh mode change 100644 => 100755 scripts/common/models-converting.sh mode change 100644 => 100755 scripts/common/models-downloading.sh mode change 100644 => 100755 scripts/common/opencv470-install.sh mode change 100644 => 100755 scripts/jetson/configs-downloading.sh mode change 100644 => 100755 scripts/jetson/gst-install-orin.sh mode change 100644 => 100755 scripts/jetson/gst-install.sh mode change 100644 => 100755 scripts/jetson/opencv470-jetpack511-cuda-install.sh mode change 100644 => 100755 scripts/jetson/opencv470-jetpack511-install.sh mode change 100644 => 100755 scripts/x86-cuda/configs-downloading.sh mode change 100644 => 100755 scripts/x86-cuda/ffmpeg425-install.sh mode change 100644 => 100755 scripts/x86-cuda/ubuntu1804-cuda-cudnn-11-1.sh mode change 100644 => 100755 scripts/x86-intel/configs-downloading.sh diff --git a/.gitignore b/.gitignore index 9eecb33..56bd62a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .Python build/ models/ +confs/ ZLM/ ZLMediaKit/ ffmpeg-4.2.5/ @@ -21,6 +22,11 @@ share/python-wheels/ *.egg MANIFEST .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 *.d diff --git a/algorithm/sv_algorithm_base.cpp b/algorithm/sv_algorithm_base.cpp index a543579..7bf4863 100644 --- a/algorithm/sv_algorithm_base.cpp +++ b/algorithm/sv_algorithm_base.cpp @@ -32,7 +32,7 @@ CameraAlgorithm::CameraAlgorithm() // this->_allocator = NULL; 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; // if (_is_file_exist(params_fn)) // this->loadAlgorithmParams(params_fn); diff --git a/include/sv_video_base.h b/include/sv_video_base.h index 4dbcb18..674c9fb 100644 --- a/include/sv_video_base.h +++ b/include/sv_video_base.h @@ -333,7 +333,7 @@ class CameraBase { public: CameraBase(CameraType type=CameraType::NONE, int id=0); ~CameraBase(); - void open(CameraType type=CameraType::WEBCAM, int id=0); + void open(CameraType type=CameraType::V4L2CAM, int id=0); bool read(cv::Mat& image); void release(); @@ -347,7 +347,9 @@ public: double getSaturation(); double getHue(); double getExposure(); + std::string getFourcc(); bool isRunning(); + void setFourcc(std::string fourcc); void setWH(int width, int height); void setFps(int fps); void setIp(std::string ip); @@ -383,6 +385,7 @@ protected: double _saturation; double _hue; double _exposure; + std::string _fourcc; }; diff --git a/samples/demo/aruco_detection.cpp b/samples/demo/aruco_detection.cpp index 0229400..1e2cb7a 100644 --- a/samples/demo/aruco_detection.cpp +++ b/samples/demo/aruco_detection.cpp @@ -9,13 +9,14 @@ int main(int argc, char *argv[]) { // 实例化Aruco检测器类 sv::ArucoDetector ad; // 手动导入相机参数,如果使用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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(ad.image_width, ad.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/camera_reading.cpp b/samples/demo/camera_reading.cpp index e3ac844..ab19a80 100644 --- a/samples/demo/camera_reading.cpp +++ b/samples/demo/camera_reading.cpp @@ -8,9 +8,9 @@ using namespace std; int main(int argc, char *argv[]) { // 打开摄像头 sv::Camera cap; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(1280, 720); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; while (1) diff --git a/samples/demo/color_line_detect.cpp b/samples/demo/color_line_detect.cpp index 36c72b2..693b169 100644 --- a/samples/demo/color_line_detect.cpp +++ b/samples/demo/color_line_detect.cpp @@ -11,13 +11,14 @@ int main(int argc, char *argv[]) // 实例化 color line detection 检测器类 sv::ColorLineDetector cld; // 手动导入相机参数,如果使用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; - cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(cld.image_width, cld.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/common_object_detection.cpp b/samples/demo/common_object_detection.cpp index f051756..a486549 100644 --- a/samples/demo/common_object_detection.cpp +++ b/samples/demo/common_object_detection.cpp @@ -9,13 +9,14 @@ int main(int argc, char *argv[]) { // 实例化 通用目标 检测器类 sv::CommonObjectDetector cod; // 手动导入相机参数,如果使用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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(cod.image_width, cod.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/detection_with_clicked_tracking.cpp b/samples/demo/detection_with_clicked_tracking.cpp index 7a779a4..5134de2 100644 --- a/samples/demo/detection_with_clicked_tracking.cpp +++ b/samples/demo/detection_with_clicked_tracking.cpp @@ -40,18 +40,20 @@ int main(int argc, char *argv[]) { // 实例化 框选目标跟踪类 sv::SingleObjectTracker sot; // 手动导入相机参数,如果使用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; - 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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(cod.image_width, cod.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; diff --git a/samples/demo/ellipse_detection.cpp b/samples/demo/ellipse_detection.cpp index 596bf2f..b21e1ec 100644 --- a/samples/demo/ellipse_detection.cpp +++ b/samples/demo/ellipse_detection.cpp @@ -9,13 +9,14 @@ int main(int argc, char *argv[]) { // 实例化 椭圆 检测器类 sv::EllipseDetector ed; // 手动导入相机参数,如果使用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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(ed.image_width, ed.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/gimbal_detection_with_clicked_tracking.cpp b/samples/demo/gimbal_detection_with_clicked_tracking.cpp index a7c6623..d4829cf 100644 --- a/samples/demo/gimbal_detection_with_clicked_tracking.cpp +++ b/samples/demo/gimbal_detection_with_clicked_tracking.cpp @@ -58,10 +58,12 @@ int main(int argc, char *argv[]) // 实例化 框选目标跟踪类 sv::SingleObjectTracker sot; // 手动导入相机参数,如果使用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; - 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类,用于内存单帧图像 cv::Mat img; @@ -256,4 +258,4 @@ void GimableCallback(double &frame_ang_r, double &frame_ang_p, double &frame_ang count = 0; } count++; -} \ No newline at end of file +} diff --git a/samples/demo/gimbal_landing_marker_detection.cpp b/samples/demo/gimbal_landing_marker_detection.cpp index f6e0357..eea188a 100644 --- a/samples/demo/gimbal_landing_marker_detection.cpp +++ b/samples/demo/gimbal_landing_marker_detection.cpp @@ -58,7 +58,8 @@ int main(int argc, char *argv[]) // 实例化 圆形降落标志 检测器类 sv::LandingMarkerDetector lmd; // 手动导入相机参数,如果使用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类,用于内存单帧图像 cv::Mat img; @@ -144,4 +145,4 @@ void GimableCallback(double &frame_ang_r, double &frame_ang_p, double &frame_ang count = 0; } count++; -} \ No newline at end of file +} diff --git a/samples/demo/gimbal_udp_detection_info_sender.cpp b/samples/demo/gimbal_udp_detection_info_sender.cpp index f9ee0a8..0bf402b 100644 --- a/samples/demo/gimbal_udp_detection_info_sender.cpp +++ b/samples/demo/gimbal_udp_detection_info_sender.cpp @@ -67,7 +67,8 @@ int main(int argc, char *argv[]) // 实例化Aruco检测器类 sv::ArucoDetector ad; // 手动导入相机参数,如果使用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; // 实例化OpenCV的Mat类,用于内存单帧图像 diff --git a/samples/demo/landing_marker_detection.cpp b/samples/demo/landing_marker_detection.cpp index ab36c2d..9f9e0ff 100644 --- a/samples/demo/landing_marker_detection.cpp +++ b/samples/demo/landing_marker_detection.cpp @@ -9,13 +9,14 @@ int main(int argc, char *argv[]) { // 实例化 圆形降落标志 检测器类 sv::LandingMarkerDetector lmd; // 手动导入相机参数,如果使用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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(lmd.image_width, lmd.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/multiple_object_tracking.cpp b/samples/demo/multiple_object_tracking.cpp index a61e5f0..aa7a4b9 100644 --- a/samples/demo/multiple_object_tracking.cpp +++ b/samples/demo/multiple_object_tracking.cpp @@ -9,17 +9,19 @@ int main(int argc, char *argv[]) { // 实例化 sv::CommonObjectDetector cod; // 手动导入相机参数,如果使用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; // 手动导入相机参数,如果使用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); // 打开摄像头 sv::Camera cap; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(mot.image_width, mot.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/single_object_tracking.cpp b/samples/demo/single_object_tracking.cpp index ee4741f..f47462d 100644 --- a/samples/demo/single_object_tracking.cpp +++ b/samples/demo/single_object_tracking.cpp @@ -28,15 +28,15 @@ int main(int argc, char *argv[]) { // 实例化 框选目标跟踪类 sv::SingleObjectTracker sot; // 手动导入相机参数,如果使用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/confs/calib_webcam_1280x720.yaml"); + sot.loadAlgorithmParams(sv::get_home() + "/SpireCV/confs/sv_algorithm_params.json"); // 打开摄像头 sv::Camera cap; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(sot.image_width, sot.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // cv::VideoCapture cap("/home/amov/SpireCV/test/tracking_1280x720.mp4"); // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; diff --git a/samples/demo/udp_detection_info_sender.cpp b/samples/demo/udp_detection_info_sender.cpp index cd25812..043fffb 100644 --- a/samples/demo/udp_detection_info_sender.cpp +++ b/samples/demo/udp_detection_info_sender.cpp @@ -9,13 +9,13 @@ int main(int argc, char *argv[]) { // 实例化Aruco检测器类 sv::ArucoDetector ad; // 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件 - ad.loadCameraParams("/home/amov/SpireCV/calib_webcam_640x480.yaml"); + ad.loadCameraParams("/home/amov/SpireCV/calib_webcam_1280x720.yaml"); // 打开摄像头 sv::Camera cap; - cap.setWH(640, 480); + cap.setWH(ad.image_width, ad.image_height); cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 sv::UDPServer udp; // 实例化OpenCV的Mat类,用于内存单帧图像 diff --git a/samples/demo/veri.cpp b/samples/demo/veri.cpp index 96caf74..d653f49 100644 --- a/samples/demo/veri.cpp +++ b/samples/demo/veri.cpp @@ -20,16 +20,18 @@ int main(int argc, char *argv[]) // 实例化 框选目标跟踪类 sv::VeriDetector veri; // 手动导入相机参数,如果使用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; - 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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(cod.image_width, cod.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; diff --git a/samples/demo/video_saving.cpp b/samples/demo/video_saving.cpp index d4f7414..229b308 100644 --- a/samples/demo/video_saving.cpp +++ b/samples/demo/video_saving.cpp @@ -9,13 +9,14 @@ int main(int argc, char *argv[]) { // 实例化 通用目标 检测器类 sv::CommonObjectDetector cod; // 手动导入相机参数,如果使用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; - // cap.setWH(640, 480); - // cap.setFps(30); - cap.open(sv::CameraType::WEBCAM, 0); // CameraID 0 + cap.setWH(cod.image_width, cod.image_height); + cap.setFps(30); + cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 // 实例化OpenCV的Mat类,用于内存单帧图像 cv::Mat img; int frame_id = 0; @@ -23,7 +24,7 @@ int main(int argc, char *argv[]) { // 实例化视频保存类 sv::VideoWriter vw; // 设置保存路径"/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) { @@ -31,7 +32,7 @@ int main(int argc, char *argv[]) { sv::TargetsInFrame tgts(frame_id++); // 读取一帧图像到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); diff --git a/scripts/common/configs-downloading.sh b/scripts/common/configs-downloading.sh old mode 100644 new mode 100755 diff --git a/scripts/common/download_test_videos.sh b/scripts/common/download_test_videos.sh old mode 100644 new mode 100755 diff --git a/scripts/common/ffmpeg425-install.sh b/scripts/common/ffmpeg425-install.sh old mode 100644 new mode 100755 diff --git a/scripts/common/gst-install-orin.sh b/scripts/common/gst-install-orin.sh old mode 100644 new mode 100755 diff --git a/scripts/common/gst-install.sh b/scripts/common/gst-install.sh old mode 100644 new mode 100755 diff --git a/scripts/common/models-converting.sh b/scripts/common/models-converting.sh old mode 100644 new mode 100755 diff --git a/scripts/common/models-downloading.sh b/scripts/common/models-downloading.sh old mode 100644 new mode 100755 index f884534..e50ada7 --- a/scripts/common/models-downloading.sh +++ b/scripts/common/models-downloading.sh @@ -3,12 +3,6 @@ root_dir=${HOME}"/SpireCV/models" 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_model2="COCO-yolov5s6.wts" coco_model3="COCO-yolov5s-seg.wts" @@ -46,28 +40,6 @@ if [ ! -d ${root_dir} ]; then mkdir -p ${root_dir} 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 echo -e "\033[32m[INFO]: ${coco_model1_fn} not exist, downloading ... \033[0m" wget -O ${coco_model1_fn} ${root_server}/install/${coco_model1} diff --git a/scripts/common/opencv470-install.sh b/scripts/common/opencv470-install.sh old mode 100644 new mode 100755 diff --git a/scripts/jetson/configs-downloading.sh b/scripts/jetson/configs-downloading.sh old mode 100644 new mode 100755 diff --git a/scripts/jetson/gst-install-orin.sh b/scripts/jetson/gst-install-orin.sh old mode 100644 new mode 100755 index e1ca0e1..3bdf309 --- a/scripts/jetson/gst-install-orin.sh +++ b/scripts/jetson/gst-install-orin.sh @@ -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-pulseaudio 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 libtool diff --git a/scripts/jetson/gst-install.sh b/scripts/jetson/gst-install.sh old mode 100644 new mode 100755 index a21e4b6..c002f58 --- a/scripts/jetson/gst-install.sh +++ b/scripts/jetson/gst-install.sh @@ -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-pulseaudio 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 cd gst-rtsp-server-b18 diff --git a/scripts/jetson/opencv470-jetpack511-cuda-install.sh b/scripts/jetson/opencv470-jetpack511-cuda-install.sh old mode 100644 new mode 100755 diff --git a/scripts/jetson/opencv470-jetpack511-install.sh b/scripts/jetson/opencv470-jetpack511-install.sh old mode 100644 new mode 100755 diff --git a/scripts/x86-cuda/configs-downloading.sh b/scripts/x86-cuda/configs-downloading.sh old mode 100644 new mode 100755 diff --git a/scripts/x86-cuda/ffmpeg425-install.sh b/scripts/x86-cuda/ffmpeg425-install.sh old mode 100644 new mode 100755 index ded13bb..36299dd --- a/scripts/x86-cuda/ffmpeg425-install.sh +++ b/scripts/x86-cuda/ffmpeg425-install.sh @@ -3,7 +3,7 @@ sudo apt install -y \ 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) root_dir=${HOME}"/SpireCV" diff --git a/scripts/x86-cuda/ubuntu1804-cuda-cudnn-11-1.sh b/scripts/x86-cuda/ubuntu1804-cuda-cudnn-11-1.sh old mode 100644 new mode 100755 diff --git a/scripts/x86-intel/configs-downloading.sh b/scripts/x86-intel/configs-downloading.sh old mode 100644 new mode 100755 diff --git a/scripts/x86-intel/ffmpeg-install.sh b/scripts/x86-intel/ffmpeg-install.sh index 52ad44a..9f54631 100755 --- a/scripts/x86-intel/ffmpeg-install.sh +++ b/scripts/x86-intel/ffmpeg-install.sh @@ -1,5 +1,6 @@ #!/bin/sh +sudo apt install -y v4l-utils wget https://ffmpeg.org/releases/ffmpeg-4.2.5.tar.bz2 tar -xjf ffmpeg-4.2.5.tar.bz2 cd ffmpeg-4.2.5 diff --git a/video_io/sv_video_base.cpp b/video_io/sv_video_base.cpp index 39f59a4..168e358 100644 --- a/video_io/sv_video_base.cpp +++ b/video_io/sv_video_base.cpp @@ -1059,6 +1059,7 @@ CameraBase::CameraBase(CameraType type, int id) this->_saturation = -1; this->_hue = -1; this->_exposure = -1; + this->_fourcc = "MJPG"; this->open(type, id); } @@ -1067,6 +1068,14 @@ CameraBase::~CameraBase() this->_is_running = false; // 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) { this->_width = width; diff --git a/video_io/sv_video_input.cpp b/video_io/sv_video_input.cpp index 2937b48..61c00d7 100644 --- a/video_io/sv_video_input.cpp +++ b/video_io/sv_video_input.cpp @@ -19,12 +19,16 @@ void Camera::openImpl() if (this->_type == CameraType::V4L2CAM) { 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) { 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) { this->_cap.set(cv::CAP_PROP_FRAME_WIDTH, this->_width);