板子
配置新环境


地平线X3



/home/ccxwyyjy/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/include
/home/ccxwyyjy/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/lib/dbus-1.0/include
-I ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include -I ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/dbus-1.0/include
-I ~/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/include -I ~/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/lib/dbus-1.0/include

cd /
df -h
fdisk -l
mount /dev/mmcblk0p1 /sd






将文件拷贝到板子上:







CMakeLists.txt
cmake_minimum_required(VERSION 3.14) project(untitled1) set(CMAKE_CXX_STANDARD 14) add_executable(untitled1 main.cpp) set(HOST_PACKAGE_DIR /home/hcl/.horizon/ddk/xj3_aarch64) include_directories( # xstream ${HOST_PACKAGE_DIR}/xstream/include/ ) link_directories( # xstream ${HOST_PACKAGE_DIR}/xstream/lib/ ) # 设置头文件搜索路径 include_directories(./) set(BASE_LIBRARIES xstream pthread rt) add_executable(untitled1 main.cpp ${SOURCE_FILES}) target_link_libraries(untitled1 ${BASE_LIBRARIES}) #SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
XStream算法SDK开发框架
#include <iostream> #include <string> #include <unistd.h> #include <assert.h> #include <deque> #include "xstream/xstream_world.h" #include using xstream::InputParam; using xstream::InputParamPtr; using xstream::BaseData; using xstream::BaseDataPtr; using xstream::BaseDataVector; using xstream::InputData; using xstream::InputDataPtr; using xstream::SimpleMethod; using namespace std; struct FloatArray : public BaseData { std::vector<float> float_array_; }; struct FloatValue : public BaseData { FloatValue() {} FloatValue(float x) { value_ = x; } float value_ = 0; }; // 平均值计算 class AverageMethod : public SimpleMethod { public: int Init(const std::string &config_file_path) { return 0; } std::vector<BaseDataPtr> DoProcess( const std::vector<BaseDataPtr> &input, const xstream::InputParamPtr ¶m) override { // 强制对输入类型进行检查和转换 // 每个method实现都是面向特定数据类型; assert(input.size() == 1); auto in_datas = std::static_pointer_cast<FloatArray>(input[0]); // 计算逻辑的实现 float sum = 0; for (auto &one_float : in_datas->float_array_) { sum += one_float; } float avg = sum / in_datas->float_array_.size(); // 输出结果的组装并直接返回 // 返回的数据可以被框架传递给下一个Method进行处理 auto float_value = std::make_shared<FloatValue>(avg); std::vector<BaseDataPtr> output; output.push_back(float_value); // 输出也只有一个值 return output; }; }; // 最大值计算 class MaxMethod : public SimpleMethod { public: int Init(const std::string &config_file_path) { return 0; } std::vector<BaseDataPtr> DoProcess( const std::vector<BaseDataPtr> &input, const xstream::InputParamPtr ¶m) override { // 强制对输入类型进行检查和转换 // 每个method实现都是面向特定数据类型; assert (input.size() == 1); auto in_datas = std::static_pointer_cast<FloatArray>(input[0]); // 计算逻辑的实现 float max_value = in_datas->float_array_[0]; for (int i = 1; i < in_datas->float_array_.size(); ++i) { if (max_value < in_datas->float_array_[i]) { max_value = in_datas->float_array_[i]; } } // 输出结果的组装并直接返回 // 返回的数据可以被框架传递给下一个Method进行处理 auto float_value = std::make_shared<FloatValue>(max_value); std::vector<BaseDataPtr> output; output.push_back(float_value); // 输出也只有一个值 return output; }; }; class Callback { public: void OnCallback(xstream::OutputDataPtr output) { float the_average = 0; float the_max = 0; for (auto data : output->datas_) { // 这里name_需要和json workflow配置的名字一致 if (data->name_ == "average") { auto average = std::static_pointer_cast<FloatValue>(data); the_average = average->value_; } else if (data->name_ == "max") { auto max = std::static_pointer_cast<FloatValue>(data); the_max = max->value_; } } } }; int main(int argc, char const *argv[]) { // 创建一个XStream执行环境 xstream::XStreamSDK *workflow_instance = xstream::XStreamSDK::CreateSDK(); // 设置Workflow配置文件 workflow_instance->SetConfig("config_file", "workflow.json"); // 初始化执行环境 workflow_instance->Init(); // 设置Workflow执行回调函数(本例我们采用Workflow异步推理接口) Callback callback; workflow_instance->SetCallback( std::bind(&Callback::OnCallback, &callback, std::placeholders::_1)); // Workflow的循环执行。 for (int i = 0; i < 2; i++) { // 准备单次推理的输入输出。 auto float_array = std::make_shared<FloatArray>(); for (int i = 0; i < 10; i++) { float_array->float_array_.push_back(i); } float_array->name_ = "input_array"; // name需要和workflow配置中的一致 InputDataPtr inputdata(new InputData()); inputdata->datas_.push_back(BaseDataPtr(float_array)); //异步推理计算 workflow_instance->AsyncPredict(inputdata); } sleep(2); delete workflow_instance; return 0; }
10YLSYS出现的问题

video_test()
#include "video_test.h" #include "opencv2/opencv.hpp" #include "iostream" #define Image_Width 1920 #define Image_Height 1000 void image_take(const char* string); void btn1_event_cb(lv_event_t* event); void btn2_event_cb(lv_event_t* event); void btn3_event_cb(lv_event_t* event); void out_queue(lv_timer_t* timer); uint8_t* show01_data; extern horizon::vision::BlockingQueue<std::shared_ptr<mytest::GUIVideoData>> in_queue_; static lv_img_dsc_t my_lv_img_dsc; void videoTest() { lv_obj_t* obj = lv_obj_create(lv_scr_act()); lv_obj_set_size(obj, 1920, 80); lv_obj_align(obj, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_t* btn1 = lv_btn_create(obj); lv_obj_set_size(btn1, 1920 / 3 - 50, 60); lv_obj_align(btn1, LV_ALIGN_CENTER, -600, 0); lv_obj_t* label1 = lv_label_create(btn1); lv_label_set_text(label1, "MENU"); lv_obj_center(label1); lv_obj_t* btn2 = lv_btn_create(obj); lv_obj_set_size(btn2, 1920 / 3 - 50, 60); lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 0); lv_obj_t* label2 = lv_label_create(btn2); lv_label_set_text(label2, "HOME"); lv_obj_center(label2); lv_obj_t* btn3 = lv_btn_create(obj); lv_obj_set_size(btn3, 1920 / 3 - 50, 60); lv_obj_align(btn3, LV_ALIGN_CENTER, 600, 0); lv_obj_t* label3 = lv_label_create(btn3); lv_label_set_text(label3, "BACK"); lv_obj_center(label3); lv_style_t style2;//修改滑块的样式 lv_style_init(&style2); lv_style_set_bg_color(&style2, lv_color_hex(0xf5e8a9)); lv_style_set_border_width(&style2, 2); lv_obj_add_style(btn1, &style2, LV_STATE_PRESSED); lv_obj_add_style(btn2, &style2, LV_STATE_PRESSED); lv_obj_add_style(btn3, &style2, LV_STATE_PRESSED); lv_obj_t* icon = lv_img_create(lv_scr_act()); my_lv_img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR; my_lv_img_dsc.data_size = Image_Width * Image_Height * LV_COLOR_DEPTH / 8; my_lv_img_dsc.header.always_zero = 0; my_lv_img_dsc.header.w = Image_Width; my_lv_img_dsc.header.h = Image_Height; show01_data = (uint8_t*)malloc(sizeof(uchar) * my_lv_img_dsc.data_size); image_take("111.png"); lv_img_set_src(icon, &my_lv_img_dsc); lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_CLICKED, icon); lv_obj_add_event_cb(btn2, btn2_event_cb, LV_EVENT_CLICKED, icon); lv_obj_add_event_cb(btn3, btn3_event_cb, LV_EVENT_CLICKED, icon); lv_timer_t* timer1 = lv_timer_create(out_queue, 30, icon); } void out_queue(lv_timer_t* timer) { lv_obj_t* icon = (lv_obj_t*)timer->user_data; std::shared_ptr<mytest::GUIVideoData> guiVideoData; // std::lock_guard<std::mutex> lk(cache_mtx_); auto is_getitem = in_queue_.try_pop(&guiVideoData, std::chrono::microseconds(10)); if(!is_getitem) { return; } memcpy(show01_data,guiVideoData->buffer,my_lv_img_dsc.data_size); //free(guiVideoData->buffer);会报错 my_lv_img_dsc.data = (uint8_t*)show01_data; lv_img_set_src(icon, &my_lv_img_dsc); } void btn1_event_cb(lv_event_t* event) { lv_obj_t* icon = (lv_obj_t*)event->user_data; image_take("111.png"); lv_img_set_src(icon, &my_lv_img_dsc); } void btn2_event_cb(lv_event_t* event) { lv_obj_t* icon = (lv_obj_t*)event->user_data; image_take("333.jpg"); lv_img_set_src(icon, &my_lv_img_dsc); } void btn3_event_cb(lv_event_t* event) { lv_obj_t* icon = (lv_obj_t*)event->user_data; image_take("444.jpg"); lv_img_set_src(icon, &my_lv_img_dsc); } void image_take(const char* string) { cv::Mat in_image, out_image; in_image = cv::imread(string); cv::resize(in_image, out_image, cv::Size(Image_Width, Image_Height)); uchar* buff = out_image.data; int* data32 = (int*)show01_data; for(int i = 0; i < Image_Width * Image_Height; i++) { int color = 0xff000000; color |= (buff[i * 3 + 0]) | (buff[i * 3 + 1] << 8) | (buff[i * 3 + 2] << 16); data32[i] = color; } my_lv_img_dsc.data = (uint8_t*)data32; }
page_test()
#include "page_test.h" #include "opencv2/opencv.hpp" #include "iostream" #include <stdio.h> LV_IMG_DECLARE(my_picture) typedef enum { DISP_SMALL, DISP_MEDIUM, DISP_LARGE, } disp_size_t; static void profile_create(lv_obj_t* parent); static void profile_create2(lv_obj_t* parent); static void chart_event_cb(lv_event_t* e); static disp_size_t disp_size; static lv_obj_t* tv; static lv_obj_t* calendar; static lv_style_t style_text_muted; static lv_style_t style_title; static lv_style_t style_icon; static lv_style_t style_bullet; static const lv_font_t* font_large; static const lv_font_t* font_normal; void out_queue(lv_timer_t* timer); extern horizon::vision::BlockingQueue<std::shared_ptr<mytest::GUIVideoData>> in_queue_; static lv_img_dsc_t my_lv_img_dsc; //uint8_t* show1_data; void lv_page(void) { if (LV_HOR_RES <= 320) disp_size = DISP_SMALL; else if (LV_HOR_RES < 720) disp_size = DISP_MEDIUM; else disp_size = DISP_LARGE; font_large = LV_FONT_DEFAULT; font_normal = LV_FONT_DEFAULT; lv_coord_t tab_h; if (disp_size == DISP_LARGE) { tab_h = 70; #if LV_FONT_MONTSERRAT_24 font_large = &lv_font_montserrat_24; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_24 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_16 font_normal = &lv_font_montserrat_16; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } else if (disp_size == DISP_MEDIUM) { tab_h = 45; #if LV_FONT_MONTSERRAT_20 font_large = &lv_font_montserrat_20; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_20 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_14 font_normal = &lv_font_montserrat_14; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } else { /* disp_size == DISP_SMALL */ tab_h = 45; #if LV_FONT_MONTSERRAT_18 font_large = &lv_font_montserrat_18; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_12 font_normal = &lv_font_montserrat_12; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } #if LV_USE_THEME_DEFAULT lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, font_normal); #endif lv_style_init(&style_text_muted); lv_style_set_text_opa(&style_text_muted, LV_OPA_50); lv_style_init(&style_title); lv_style_set_text_font(&style_title, font_large); lv_style_init(&style_icon); lv_style_set_text_color(&style_icon, lv_theme_get_color_primary(NULL)); lv_style_set_text_font(&style_icon, font_large); lv_style_init(&style_bullet); lv_style_set_border_width(&style_bullet, 0); lv_style_set_radius(&style_bullet, LV_RADIUS_CIRCLE); tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h); lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0); if (disp_size == DISP_LARGE) { lv_obj_t* tab_btns = lv_tabview_get_tab_btns(tv); lv_obj_set_style_pad_left(tab_btns, LV_HOR_RES / 2, 0); lv_obj_t* logo = lv_img_create(tab_btns); } lv_obj_t* t1 = lv_tabview_add_tab(tv, "SCENE1"); lv_obj_t* t2 = lv_tabview_add_tab(tv, "SCENE2"); profile_create(t1); profile_create2(t2); } /********************** * STATIC FUNCTIONS **********************/ static void profile_create(lv_obj_t* parent) { lv_obj_t* panel1 = lv_obj_create(parent); //lv_obj_set_height(panel1, LV_SIZE_CONTENT); lv_obj_t* panel_title = lv_label_create(panel1); lv_label_set_text(panel_title, "Wristband"); lv_obj_add_style(panel_title, &style_title, 0); //视频显示 lv_obj_t* icon = lv_img_create(lv_scr_act()); //show1_data = (uint8_t*)malloc(sizeof(uchar) * my_lv_img_dsc.data_size); lv_img_set_src(icon, &my_lv_img_dsc); lv_timer_t* timer1 = lv_timer_create(out_queue, 30, icon); /*Create a keyboard*/ /*Create the second panel*/ lv_obj_t* panel2 = lv_obj_create(parent); //lv_obj_set_height(panel2, LV_SIZE_CONTENT); lv_obj_t* panel2_title = lv_label_create(panel2); lv_label_set_text(panel2_title, "Body posture"); lv_obj_add_style(panel2_title, &style_title, 0); /*Create the third panel*/ lv_obj_t* panel3 = lv_obj_create(parent); //lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_t* panel3_title = lv_label_create(panel3); lv_label_set_text(panel3_title, " Board environment"); lv_obj_add_style(panel3_title, &style_title, 0); /*Create the fourth panel*/ lv_obj_t* panel4 = lv_obj_create(parent); //lv_obj_set_height(panel4, LV_SIZE_CONTENT); lv_obj_t* panel4_title = lv_label_create(panel4); lv_label_set_text(panel4_title, LV_SYMBOL_LEFT " Voice " LV_SYMBOL_RIGHT); lv_obj_add_style(panel4_title, &style_title, 0); //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT ); if (disp_size == DISP_LARGE) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 4); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_CENTER, 2, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_MEDIUM) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ -20, LV_GRID_CONTENT, /*Phone*/ LV_GRID_CONTENT, /*Buttons*/ LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_SMALL) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/ LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ LV_GRID_CONTENT, /*Phone number*/ LV_GRID_CONTENT, /*Button1*/ LV_GRID_CONTENT, /*Button2*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, LV_GRID_TEMPLATE_LAST /*Box*/ }; lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); } } /*void out_queue(lv_timer_t* timer) { lv_obj_t* icon = (lv_obj_t*)timer->user_data; std::shared_ptr<mytest::GUIVideoData> guiVideoData; // std::lock_guard<std::mutex> lk(cache_mtx_); auto is_getitem = in_queue_.try_pop(&guiVideoData, std::chrono::microseconds(10)); if(!is_getitem) { return; } memcpy(show1_data,guiVideoData->buffer,my_lv_img_dsc.data_size); //free(guiVideoData->buffer);会报错 my_lv_img_dsc.data = (uint8_t*)show1_data; lv_img_set_src(icon, &my_lv_img_dsc); }*/ static void profile_create2(lv_obj_t* parent) { lv_obj_t* panel1 = lv_obj_create(parent); //lv_obj_set_height(panel1, LV_SIZE_CONTENT); lv_obj_t* panel_title = lv_label_create(panel1); lv_label_set_text(panel_title, "Each other's camera"); lv_obj_add_style(panel_title, &style_title, 0); ////图片 /*lv_obj_t* img1 = lv_img_create(lv_scr_act()); lv_img_set_src(img1, &my_picture); lv_obj_align(img1, LV_ALIGN_OUT_LEFT_BOTTOM, 25, 100);*/ /*Create the second panel*/ lv_obj_t* panel2 = lv_obj_create(parent); //lv_obj_set_height(panel2, LV_SIZE_CONTENT); lv_obj_t* panel2_title = lv_label_create(panel2); lv_label_set_text(panel2_title, "Our camera"); lv_obj_add_style(panel2_title, &style_title, 0); /*Create the third panel*/ lv_obj_t* panel3 = lv_obj_create(parent); //lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_t* panel3_title = lv_label_create(panel3); lv_label_set_text(panel3_title, "Video chat"); lv_obj_add_style(panel3_title, &style_title, 0); /*Create the fourth panel*/ lv_obj_t* panel4 = lv_obj_create(parent); //lv_obj_set_height(panel4, LV_SIZE_CONTENT); lv_obj_t* panel4_title = lv_label_create(panel4); lv_label_set_text(panel4_title, LV_SYMBOL_LEFT " Voice " LV_SYMBOL_RIGHT); lv_obj_add_style(panel4_title, &style_title, 0); //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT ); if (disp_size == DISP_LARGE) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 2); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 2, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_MEDIUM) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ -20, LV_GRID_CONTENT, /*Phone*/ LV_GRID_CONTENT, /*Buttons*/ LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_SMALL) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/ LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ LV_GRID_CONTENT, /*Phone number*/ LV_GRID_CONTENT, /*Button1*/ LV_GRID_CONTENT, /*Button2*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, LV_GRID_TEMPLATE_LAST /*Box*/ }; lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); } }
cd /userdata/01hcl/01myapp/10YLSYS
scp -r ./untitled3 root@192.168.1.10:/userdata/01hcl/01myapp/10YLSYS
video_test改进代码(有问题)
#include "page_test.h" #include "opencv2/opencv.hpp" #include "iostream" #include <stdio.h> LV_IMG_DECLARE(my_picture) #define Image_Width 1920 #define Image_Height 1000 typedef enum { DISP_SMALL, DISP_MEDIUM, DISP_LARGE, } disp_size_t; static void profile_create(lv_obj_t* parent); static void profile_create2(lv_obj_t* parent); static void chart_event_cb(lv_event_t* e); static disp_size_t disp_size; static lv_obj_t* tv; static lv_obj_t* calendar; static lv_style_t style_text_muted; static lv_style_t style_title; static lv_style_t style_icon; static lv_style_t style_bullet; static const lv_font_t* font_large; static const lv_font_t* font_normal; void out_queue2(lv_timer_t* timer); uint8_t* show2_data; extern horizon::vision::BlockingQueue<std::shared_ptr<mytest::GUIVideoData>> in_queue_; static lv_img_dsc_t my_lv_img_dsc; void image_take2(const char* string); void lv_page(void) { if (LV_HOR_RES <= 320) disp_size = DISP_SMALL; else if (LV_HOR_RES < 720) disp_size = DISP_MEDIUM; else disp_size = DISP_LARGE; font_large = LV_FONT_DEFAULT; font_normal = LV_FONT_DEFAULT; lv_coord_t tab_h; if (disp_size == DISP_LARGE) { tab_h = 70; #if LV_FONT_MONTSERRAT_24 font_large = &lv_font_montserrat_24; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_24 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_16 font_normal = &lv_font_montserrat_16; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } else if (disp_size == DISP_MEDIUM) { tab_h = 45; #if LV_FONT_MONTSERRAT_20 font_large = &lv_font_montserrat_20; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_20 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_14 font_normal = &lv_font_montserrat_14; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } else { /* disp_size == DISP_SMALL */ tab_h = 45; #if LV_FONT_MONTSERRAT_18 font_large = &lv_font_montserrat_18; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_12 font_normal = &lv_font_montserrat_12; #else LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } #if LV_USE_THEME_DEFAULT lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, font_normal); #endif lv_style_init(&style_text_muted); lv_style_set_text_opa(&style_text_muted, LV_OPA_50); lv_style_init(&style_title); lv_style_set_text_font(&style_title, font_large); lv_style_init(&style_icon); lv_style_set_text_color(&style_icon, lv_theme_get_color_primary(NULL)); lv_style_set_text_font(&style_icon, font_large); lv_style_init(&style_bullet); lv_style_set_border_width(&style_bullet, 0); lv_style_set_radius(&style_bullet, LV_RADIUS_CIRCLE); tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h); lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0); if (disp_size == DISP_LARGE) { lv_obj_t* tab_btns = lv_tabview_get_tab_btns(tv); lv_obj_set_style_pad_left(tab_btns, LV_HOR_RES / 2, 0); lv_obj_t* logo = lv_img_create(tab_btns); } lv_obj_t* t1 = lv_tabview_add_tab(tv, "SCENE1"); lv_obj_t* t2 = lv_tabview_add_tab(tv, "SCENE2"); profile_create(t1); profile_create2(t2); } void out_queue2(lv_timer_t* timer) { lv_obj_t* icon = (lv_obj_t*)timer->user_data; std::shared_ptr<mytest::GUIVideoData> guiVideoData; // std::lock_guard<std::mutex> lk(cache_mtx_); auto is_getitem = in_queue_.try_pop(&guiVideoData, std::chrono::microseconds(10)); if(!is_getitem) { return; } memcpy(show2_data,guiVideoData->buffer,my_lv_img_dsc.data_size); //free(guiVideoData->buffer);会报错 my_lv_img_dsc.data = (uint8_t*)show2_data; lv_img_set_src(icon, &my_lv_img_dsc); } /********************** * STATIC FUNCTIONS **********************/ static void profile_create(lv_obj_t* parent) { lv_obj_t* panel1 = lv_obj_create(parent); //lv_obj_set_height(panel1, LV_SIZE_CONTENT); //lv_obj_t* panel_title = lv_label_create(panel1); //lv_label_set_text(panel_title, "Wristband"); //lv_obj_add_style(panel_title, &style_title, 0); //视频显示 lv_obj_t* icon = lv_img_create(panel1); lv_obj_set_size(icon,800,700); lv_obj_move_foreground(icon); //lv_obj_add_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE); //lv_obj_move_background(panel1); my_lv_img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR; my_lv_img_dsc.data_size = Image_Width * Image_Height * LV_COLOR_DEPTH / 80; my_lv_img_dsc.header.always_zero = 0; my_lv_img_dsc.header.w = Image_Width; my_lv_img_dsc.header.h = Image_Height; show2_data = (uint8_t*)malloc(sizeof(uchar) * my_lv_img_dsc.data_size); //image_take2("111.png"); lv_img_set_src(icon, &my_lv_img_dsc); lv_timer_t* timer1 = lv_timer_create(out_queue2, 30, icon); /*Create a keyboard*/ /*Create the second panel*/ lv_obj_t* panel2 = lv_obj_create(parent); //lv_obj_set_height(panel2, LV_SIZE_CONTENT); lv_obj_t* panel2_title = lv_label_create(panel2); lv_label_set_text(panel2_title, "Body posture"); lv_obj_add_style(panel2_title, &style_title, 0); /*Create the third panel*/ lv_obj_t* panel3 = lv_obj_create(parent); //lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_t* panel3_title = lv_label_create(panel3); lv_label_set_text(panel3_title, " Board environment"); lv_obj_add_style(panel3_title, &style_title, 0); /*Create the fourth panel*/ lv_obj_t* panel4 = lv_obj_create(parent); //lv_obj_set_height(panel4, LV_SIZE_CONTENT); lv_obj_t* panel4_title = lv_label_create(panel4); lv_label_set_text(panel4_title, LV_SYMBOL_LEFT " Voice " LV_SYMBOL_RIGHT); lv_obj_add_style(panel4_title, &style_title, 0); //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT ); if (disp_size == DISP_LARGE) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 3); //lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_CENTER, 2, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_MEDIUM) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ -20, LV_GRID_CONTENT, /*Phone*/ LV_GRID_CONTENT, /*Buttons*/ LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_SMALL) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/ LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ LV_GRID_CONTENT, /*Phone number*/ LV_GRID_CONTENT, /*Button1*/ LV_GRID_CONTENT, /*Button2*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, LV_GRID_TEMPLATE_LAST /*Box*/ }; lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); } } void image_take2(const char* string) { cv::Mat in_image, out_image; in_image = cv::imread(string); cv::resize(in_image, out_image, cv::Size(Image_Width, Image_Height)); uchar* buff = out_image.data; int* data32 = (int*)show2_data; for(int i = 0; i < Image_Width * Image_Height; i++) { int color = 0xff000000; color |= (buff[i * 3 + 0]) | (buff[i * 3 + 1] << 8) | (buff[i * 3 + 2] << 16); data32[i] = color; } my_lv_img_dsc.data = (uint8_t*)data32; } static void profile_create2(lv_obj_t* parent) { lv_obj_t* panel1 = lv_obj_create(parent); //lv_obj_set_height(panel1, LV_SIZE_CONTENT); lv_obj_t* panel_title = lv_label_create(panel1); lv_label_set_text(panel_title, "Each other's camera"); lv_obj_add_style(panel_title, &style_title, 0); ////图片 /*lv_obj_t* img1 = lv_img_create(lv_scr_act()); lv_img_set_src(img1, &my_picture); lv_obj_align(img1, LV_ALIGN_OUT_LEFT_BOTTOM, 25, 100);*/ /*Create the second panel*/ lv_obj_t* panel2 = lv_obj_create(parent); //lv_obj_set_height(panel2, LV_SIZE_CONTENT); lv_obj_t* panel2_title = lv_label_create(panel2); lv_label_set_text(panel2_title, "Our camera"); lv_obj_add_style(panel2_title, &style_title, 0); /*Create the third panel*/ lv_obj_t* panel3 = lv_obj_create(parent); //lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_t* panel3_title = lv_label_create(panel3); lv_label_set_text(panel3_title, "Video chat"); lv_obj_add_style(panel3_title, &style_title, 0); /*Create the fourth panel*/ lv_obj_t* panel4 = lv_obj_create(parent); //lv_obj_set_height(panel4, LV_SIZE_CONTENT); lv_obj_t* panel4_title = lv_label_create(panel4); lv_label_set_text(panel4_title, LV_SYMBOL_LEFT " Voice " LV_SYMBOL_RIGHT); lv_obj_add_style(panel4_title, &style_title, 0); //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT ); if (disp_size == DISP_LARGE) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 30, /*Boxes*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 2); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 2, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_MEDIUM) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ -20, LV_GRID_CONTENT, /*Phone*/ LV_GRID_CONTENT, /*Buttons*/ LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc); } else if (disp_size == DISP_SMALL) { static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/ LV_GRID_CONTENT, /*Name*/ LV_GRID_CONTENT, /*Description*/ LV_GRID_CONTENT, /*Email*/ LV_GRID_CONTENT, /*Phone number*/ LV_GRID_CONTENT, /*Button1*/ LV_GRID_CONTENT, /*Button2*/ LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; static lv_coord_t grid_2_row_dsc[] = { LV_GRID_CONTENT, /*Title*/ 5, /*Separator*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, /*Box*/ LV_GRID_CONTENT, /*Box title*/ 40, LV_GRID_TEMPLATE_LAST /*Box*/ }; lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc); lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_height(panel3, LV_SIZE_CONTENT); lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1); lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); } }

X3 PI
docker run -it --rm -v "D:\Code\xj3\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer -v "D:\Code\Linux\datasets":/data/horizon_x3/data -v "D:\Code\xj3\BPUCodes":/data/horizon_x3/codes openexplorer/ai_toolchain_centos_7:v1.13.6
docker run -d -it --name x3pai -p 50001:22-v "D:\Code\xj3\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer -v "D:\Code\Linux\datasets":/data/horizon_x3/data -v "D:\Code\xj3\BPUCodes":/data/horizon_x3/codes --privileged=true openexplorer/ai_toolchain_centos_7:v1.13.6 /usr/sbin/init






AudioControlEngine audio_engine; // 获取语音识别结果,假设为cmd_word if (cmd_word == "打开日历") { QObject::connect(&audio_engine, &AudioControlEngine::signalOpenCalendar, w, &MainWindow::openCalendar); emit audio_engine.signalOpenCalendar(); }



在ROS中,实现话题需要创建发布者(Publisher)和订阅者(Subscriber)节点,并定义话题(Topic)以及消息类型(Message Type)等相关信息。以下是一个基本的话题实现流程:
1.定义消息类型
在ROS中,消息类型是指消息的数据结构和格式。每个话题都需要定义一个消息类型,以确保发布者和订阅者可以使用相同的数据格式进行通信。消息类型通常在ROS包中定义,包含一个.msg文件,其中包括消息的字段、类型和注释等信息。
例如,假设我们要实现一个名为/my_topic的话题,并且它将传递一个字符串类型的消息。为此,我们需要在一个ROS包中创建一个名为my_package的包,并在该包中创建一个名为MyMessage.msg的文件,其中包含以下内容:string message
2.创建发布者节点
创建发布者节点通常需要编写一个ROS节点,其中包括一个发布者对象和一个回调函数。在ROS中,发布者对象是由ros::Publisher类实现的,它负责将消息发布到特定的话题上。
例如,假设我们在C++中创建了一个名为my_publisher的节点,并且它要将消息发布到/my_topic话题上。为此,我们需要在节点的代码中包含以下内容:
#include <ros/ros.h> #include <my_package/MyMessage.h> int main(int argc, char **argv) { ros::init(argc, argv, "my_publisher"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<my_package::MyMessage>("/my_topic", 10); my_package::MyMessage msg; msg.message = "Hello, world!"; ros::Rate rate(10); while (ros::ok()) { pub.publish(msg); ros::spinOnce(); rate.sleep(); } return 0; }
在上述代码中,我们创建了一个名为pub的发布者对象,并使用nh.advertise()函数将它绑定到/my_topic话题上。在主循环中,我们定义了一个名为msg的消息对象,并将其发布到话题上。
- 创建订阅者节点
创建订阅者节点也需要编写一个ROS节点,其中包括一个订阅者对象和一个回调函数。在ROS中,订阅者对象是由ros::Subscriber类实现的,它负责从特定的话题上订阅消息。
例如,假设我们在C++中创建了一个名为my_subscriber的节点,并且它要从/my_topic话题上订阅消息。为此,我们需要在节点的代码中包含以下内容:
ros::NodeHandle nh; ros::Subscriber sub = nh.subscribe("my_topic", 1000, callback); void callback(const MyMsg::ConstPtr& msg) { ROS_INFO("Name: %s, Age: %d, Height: %.2f", msg->name.c_str(), msg->age, msg->height); }
上述代码创建了一个订阅者对象,用于订阅名为my_topic的话题,并定义了一个回调函数callback,用于处理接收到的消息。当订阅者接收到消息时,ROS会自动调用回调函数,并将接收到的消息作为参数传递给该函数。
- 运行节点
最后,需要运行发布者和订阅者节点,以便它们可以开始发布和订阅消息。可以使用ROS命令行工具或编写launch文件来启动节点。
总之,实现话题需要定义消息类型、创建发布者和订阅者对象,并编写相应的代码来发布和订阅消息。ROS库提供了一组简单的API,使得实现话题变得简单和方便。
这将启动ROS节点,并在话题“/my_topic”上传递消息。发布者节点将会定期发布包含“hello”字符串和一个计数器的自定义消息类型。订阅者节点将从话题上获取这些消息,并在收到消息时将其打印到终端上。
浙公网安备 33010602011771号