#include "UVCGrabber/UVCDeviceManager.h" // #include "RTSPGrabber/InfraredManager.hpp" #include "MppDecoder/MppManager.h" #include "AIManager/RKNNManager.h" #include "LogRecorder/LogOutput.h" #include "DataManager/DataManager.h" #include "DataManager/DataPackage.h" #include "ThreadGuardian/ThreadGuardian.h" #include "ImageTest/ImageTest.h" #include #include #include #include #define DEVICE_NUM 3 int main(int argc, char **argv) { // set usbfs memory to 64MB std::system("echo 64 > /sys/module/usbcore/parameters/usbfs_memory_mb"); std::system("rm ./TimeLog.txt"); // use json to read config file nlohmann::json config; try { std::ifstream config_file("./configure/config.json"); config_file >> config; config_file.close(); } catch (std::exception &e) { std::cerr << "Error reading config file: " << e.what() << std::endl; return 1; } UsbTest::TimeRecorder::getInstance().init(); UsbTest::GlobalResolutionTimer::getInstance().start(); UsbTest::SimulateTrigger::getInstance().startTrigger(); LogConfiguration LogConfig; // 日志结构体 LogConfig.FromFile("./configure/log.json"); LOG_INIT("UsbDevice", LogConfig); if (OmniLoger::CLoger::get_instance().log_sink != nullptr) { std::cout << "Log initialized successfully" << std::endl; // OmniLoger::CLoger::get_instance().log_sink->error("Error occurred during initialization"); } // Initialize the UVC manager UVCManager::getInstance().init(int(config["usb_grab_waiting_time"])); ThreadGuardian::getInstance().startMonitoring(); UVCManager::getInstance().setDeviceNumber(0, config["usb_device_number"][0]); UVCManager::getInstance().setDeviceNumber(1, config["usb_device_number"][1]); UVCManager::getInstance().setDeviceNumber(2, config["usb_device_number"][2]); MppManager::getInstance().addMppDecode(); RKNNManager::getInstance().setGrpcServerAddress(config["grpc_server_address"]); RKNNManager::getInstance().addRknnTask(config["rknn_model_path"]); // Start all streaming UVCManager::getInstance().startAllStreaming(); OmniLoger::CLoger::get_instance().log_sink->info("All streaming started successfully"); // Wait for the user to press a key while (true) { std::this_thread::sleep_for(std::chrono::seconds(1)); } // std::cin.get(); std::cout << "Stopping all streaming..." << std::endl; RKNNManager::getInstance().StopProcessData(); // Stop all streaming UVCManager::getInstance().stopAllStreaming(); return 0; }