模型适配HiLens Studio
由于HiLens Studio开发工具包升级至新版本C7X,使得目前HiLens Studio仅支持C7X版本的模型,即输出的模型是NHWC格式。而HiLens Kit设备支持C3X版本模型,即输出的模型是NCHW格式。如果您使用旧版本的开发工具包在HiLens Studio上开发技能,该技能将不能在最新版本的HiLens Studio上正常运行,同时新版本Studio将OpenCV的版本从3.4.2升级到4.2.0,因此需要对技能进行适配。适配工作如表1所示。
准备工作
由于新版本使用模型配置文件兼容不同版本的模型,端侧固件版本需要升级至1.3.0,固件升级请参见升级HiLens_Device_Agent固件版本。
如果端侧固件版本低于1.3.0,可能会导致技能无法运行。
修改技能文件
需要对“CMakeLists.txt”、“prebuild.sh”、“build.sh”、“clean.sh”文件进行修改。
- CMakeLists.txt
project(main) # 使用C++11标准 set(CMAKE_CXX_STANDARD 11) # 头文件 include_directories(${CMAKE_SOURCE_DIR}/../src/main/cpp/include) include_directories(/home/hilens/hilens_studio_sdk/include) # framework lib库 link_directories(/home/hilens/hilens_studio_sdk/lib) # 源文件 file(GLOB_RECURSE SRC_LIST "${CMAKE_SOURCE_DIR}/../src/main/cpp/*.cpp") set(lib_srcs ${SRC_LIST}) # 调试设置 if(STUDIO) # DEBUG版本 message("debug 设置") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") else() # release版本设置 message("release 设置") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") endif() set(LIBS hilens_m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_calib3d opencv_videoio opencv_features2d opencv_flann opencv_photo opencv_video jsoncpp_noabi)# libm-2.24.so) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 可执行程序(不携带so) if(STUDIO) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../) else() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/output/kit/bin) endif() add_executable(main ${lib_srcs} ${CMAKE_SOURCE_DIR}/../src/main/cpp/main.cpp) target_link_libraries(main ${LIBS})
- prebuild.sh
current_workspace=`pwd` echo "cmake..." bash build/build.sh cd $current_workspace filename=.hilens if [ ! -d $filename ];then mkdir $filename fi uuid=`cat /proc/sys/kernel/random/uuid` echo -n $uuid > ./$filename/rtmp.txt vid_src=`cat ./.hilens/rtmp_source` current_workspace=`pwd` echo "cd $current_workspace" > ~/.gdbinit echo "set environment RTMP_PATH rtmp://127.0.0.1/live/$uuid" >> ~/.gdbinit echo "set environment VID_SRC $vid_src" >> ~/.gdbinit echo "handle SIG32 nostop noprint pass" >> ~/.gdbinit
- build.sh
#!/bin/sh echo "cmake..." cd build # 清理build if [ ! -d output ]; then mkdir output fi cd output if [ ! -d studio ]; then mkdir studio fi cd studio echo "studio build..." export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH cmake ../../ -DCMAKE_BUILD_TYPE=Debug -DSTUDIO=ON && make -j cp compile_commands.json ../../../ echo "kit cmake... " cd .. if [ ! -d kit ]; then mkdir kit fi cd kit cmake ../../ -DCMAKE_BUILD_TYPE=Release -DSTUDIO=OFF && make -j
- clean.sh
cd build/output export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH # 清理kit BUILD_DIR="kit" if [ -d ${BUILD_DIR} ];then echo " clean and remove build..." cd $BUILD_DIR make clean cd .. rm -rf ${BUILD_DIR} fi # 清理studio BUILD_DIR="studio" if [ -d ${BUILD_DIR} ];then echo "clean and remove build..." cd $BUILD_DIR make clean cd .. rm -rf ${BUILD_DIR} fi
修改模型配置文件
模型配置文件是一个json文件,模型在加载的时候将会根据这个文件自动加载合适的模型并进行输入的预处理。建议将模型配置文件放在“model”文件夹中。模型路径为相对于当前模型配置文件的相对路径。
模型配置文件修改示例如下。配置参数设置请见模型配置文件。
{ "ModelCfgs" : [ { "DeviceType" : "D310_C3X", "ModelPath": "./mask_det_c3x.om", "FrameWorkInput": "BGR", "ModelInput": "BGR", "NetworkWidth": 512, "NetworkHeight": 288, "NetworkChannel": 2, "ScaleMeanEnable": false }, { "DeviceType" : "D310_C7X", "ModelPath": "./mask_det_c7x.om", "FrameWorkInput": "BGR", "ModelInput": "BGR", "NetworkWidth": 512, "NetworkHeight": 288, "NetworkChannel": 2, "ScaleMeanEnable": false } ] }
如果开发语言使用Python,修改如下内容:
model = hilens.Model(model_config_path) # 创建模型时传入模型配置文件的路径