注意解码时,硬件对图像的宽度和高度存在对齐的要求,在视频解码和图片解码,要求不一致,可以参考官方的功能及约束说明
https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC3alpha001/apiref/appdevgapi/aclpythondevg_01_0337.html
昇腾 310b1 对应 Atlas 200I A2 加速模块
Atlas 200I A2 加速模块集成了昇腾310系列AI处理器,可以实现图像、视频等多种数. 据分析与推理计算,可广泛用于智能监控、机器人、无人机、视频服务器等

宽2对齐

高2对齐

宽Stride为宽16对齐后的值。

如果用户设置的输出图片宽度小于16,则宽Stride最小为32。

高Stride为高2对齐后的值。

内存大小(单位Byte)≥ 宽Stride 高Stride 3/2

cv::Mat ImageDataToMat(const ImageData &imgData)
{

// 确保图像格式是 YUV420SP
if (imgData.format != PIXEL_FORMAT_YUV_SEMIPLANAR_420)
{
    throw std::invalid_argument("Unsupported image format");
}
std::cout << imgData.width << std::endl;
std::cout << imgData.height << std::endl;

// 创建 YUV420SP 的 cv::Mat
cv::Mat yuv420spMat(imgData.height + imgData.height / 2, imgData.width, CV_8UC1, imgData.data.get());

// 将 YUV420SP 转换为 BGR
cv::Mat bgrMat;
cv::cvtColor(yuv420spMat, bgrMat, cv::COLOR_YUV2BGR_NV12);

return bgrMat;

}

基本命令格式
以下是使用 tcpdump 抓包指定端口(9110)并保存到文件的基本命令:

tcpdump -w output.pcap port 9110

解释:
tcpdump:这是抓包工具的命令。
-w:这个选项用于指定将抓包结果输出到文件。output.pcap是输出文件名,你可以将其替换为你想要的文件名,.pcap是一种常用的数据包捕获文件格式,方便后续使用 Wireshark 等工具进行分析。
port 9110:这是过滤条件,用于指定只抓取与端口 9110 相关的数据包。
可选参数以获取更详细的信息
如果你想获取更详细的数据包信息,比如时间戳、协议、源地址、目的地址等,可以添加-v(详细信息)或-vv(更详细信息)选项。
例如:tcpdump -v -w output.pcap port 9110
或者,如果你还想同时看到数据包的内容(以十六进制和 ASCII 格式),可以使用-X选项:

tcpdump -X -w output.pcap port 9110

指定网络接口进行抓包
如果你的机器有多个网络接口(如以太网接口 eth0、无线接口 wlan0 等),你可能需要指定从哪个接口进行抓包。
假设你想从 eth0 接口抓包,可以使用-i选项:

tcpdump -i eth0 -w output.pcap port 9110

限制抓包数量或抓包时间
如果你只想抓取一定数量的数据包,可以使用-c选项。例如,只想抓取 100 个与端口 9110 相关的数据包:

tcpdump -c 100 -w output.pcap port 9110

或者,如果你想限制抓包的时间,可以使用-G和-W选项组合。-G用于指定每个文件的保存时间间隔(以秒为单位),-W用于指定总共要保存的文件数量。例如,每 60 秒保存一个文件,共保存 3 个文件:

tcpdump -G 60 -W 3 -w output%M.pcap port 9110

这里output%M.pcap中的%M是一个时间格式化字符串,表示以分钟为单位进行编号,这样每个文件的名字会根据时间(分钟)不同而不同,方便区分不同时间段的抓包文件。

apt update
apt -y install wget vim unzip cmake build-essential
apt -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
apt -y install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
apt -y install libgtk-3-dev libfreeimage3 libfreeimage-dev
apt -y install libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev libdc1394-dev
apt -y install pkg-config libfreetype-dev libharfbuzz-dev

mkdir -p /home/hesy/opencv && cd /home/hesy/opencv
wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.10.0.zip
unzip 4.10.0.zip
tar xvf 4.10.0.tar.gz
cd opencv-4.10.0
mkdir build && cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_IPP=OFF -D WITH_OPENGL=OFF -D WITH_QT=OFF -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=/home/hesy/opencv/opencv_contrib-4.10.0/modules -D BUILD_EXAMPLES=OFF -D WITH_JASPER=OFF -D BUILD_DOCS=OFF -D BUILD_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -DWITH_FREETYPE=ON -DBUILD_png=ON ..


make -j6
make install

tar czvf opencv-dev-4.10.0.tar.gz /usr/local/include usr/local/lib

配置输出内容

--   OpenCV modules:
--     To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot quality rapid reg rgbd saliency shape signal stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    python3 world
--     Disabled by dependency:      -
--     Unavailable:                 cannops cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java julia matlab ovis python2 sfm viz
--     Applications:                perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         YES
-- 
--   GUI:                           GTK3
--     GTK+:                        YES (ver 3.24.33)
--       GThread :                  YES (ver 2.72.4)
--       GtkGlExt:                  NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        /usr/lib/aarch64-linux-gnu/libwebp.so (ver encoder: 0x020f)
--     PNG:                         build (ver 1.6.43)
--       SIMD Support Request:      YES
--       SIMD Support:              YES (Arm NEON)
--     TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.3.0)
--     JPEG 2000:                   build (ver 2.5.0)
--     OpenEXR:                     /usr/lib/aarch64-linux-gnu/libImath-2_5.so /usr/lib/aarch64-linux-gnu/libIlmImf-2_5.so /usr/lib/aarch64-linux-gnu/libIex-2_5.so /usr/lib/aarch64-linux-gnu/libHalf-2_5.so /usr/lib/aarch64-linux-gnu/libIlmThread-2_5.so (ver 2_5)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     DC1394:                      YES (2.2.6)
--     FFMPEG:                      YES
--       avcodec:                   YES (58.134.100)
--       avformat:                  YES (58.76.100)
--       avutil:                    YES (56.70.100)
--       swscale:                   YES (5.9.100)
--       avresample:                NO
--     GStreamer:                   YES (1.20.3)
--     v4l/v4l2:                    YES (linux/videodev2.h)
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.4.0)
--     Custom HAL:                  YES (carotene (ver 0.0.1, Auto detected))
--     Protobuf:                    build (3.19.1)
--     Flatbuffers:                 builtin/3rdparty (23.5.9)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/hesy/opencv/opencv-4.10.0/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python (for build):            /usr/bin/python3
-- 
--   Java:                          
--     ant:                         NO
--     Java:                        NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done

提高员工积极性是管理者和组织面临的一个重要挑战。以下是一些有效的方法:

  1. 提供明确的目标和方向
    设定清晰的目标:确保员工清楚理解他们的工作目标和如何实现这些目标。

沟通战略愿景:让员工明白他们的工作如何与公司的整体战略相结合。

  1. 认可与反馈
    及时认可:对员工的成绩和努力给予及时、具体的认可,比如表扬、奖励、提升等。

建设性反馈:提供正面的反馈,同时指出改进之处,帮助员工成长。

  1. 职业发展与培训
    提供培训机会:支持员工的持续学习和发展,提供专业技能培训。

职业路径规划:制定清晰的职业发展路径,让员工看到未来的晋升和发展机会。

  1. 工作环境优化
    改善工作环境:创造一个舒适、安全、激励人心的工作场所。

工作生活平衡:支持员工实现工作与生活的平衡,如灵活工作时间、远程工作选项等。

  1. 参与与自主性
    增加自主权:给予员工在工作中更多自主决定的权力,增强他们的主人翁感。

参与决策:鼓励员工参与与他们工作相关的决策过程,让他们感到被重视。

  1. 团队合作与文化
    培养团队精神:通过团队建设活动和项目增强团队凝聚力。

积极的企业文化:培养一种开放、支持创新和学习的企业文化。

  1. 激励机制
    物质激励:竞争性的薪酬、奖金、福利等。

非物质激励:如额外的假期、个人发展机会、荣誉称号等。

  1. 挑战与成长
    提供挑战:给员工分配具有挑战性的任务,促使他们超越现有能力水平。

支持失败:允许员工在安全的环境中尝试新的方法,即使失败,也能从中学习。

  1. 员工健康与福祉
    关注员工健康:提供健康计划、心理健康支持等,确保员工的身心健康。
  2. 透明度与沟通
    信息透明:保持公司政策、目标和变化的透明度。

开放沟通:建立开放的沟通渠道,鼓励员工表达意见和反馈。

  1. 多样性与包容
    推动多样性:创建一个多样化和包容的环境,尊重和利用多样性的优势。

提高员工积极性需要综合考虑各个方面,结合员工的个体需求和公司文化进行定制化调整。最重要的是,管理者需要真正关心员工的感受和需求,建立信任和尊重,这才是激励员工最持久的力量。

常见的 NAL 单元类型及其含义
未指定(Unspecified):
NAL Type 0:未指定的类型,在标准中未定义其具体用途,通常不应该使用。
片层(Slice Layer):
NAL Type 1:非 IDR 图像的片(Non-IDR Slice),包含图像的一部分,是非关键帧的一部分,需要参考前面的图像帧进行解码。
NAL Type 2:片数据分区 A(Slice Data Partition A),是片数据的一种分区,用于将片数据划分为不同部分以适应不同的传输特性或处理需求。
NAL Type 3:片数据分区 B(Slice Data Partition B),也是片数据的一种分区。
NAL Type 4:片数据分区 C(Slice Data Partition C),同样是片数据的一种分区。
NAL Type 5:IDR 图像的片(IDR Slice),是关键帧的一部分,属于可独立解码的片,可作为解码的起始点,不需要参考其他帧。
序列参数集(Sequence Parameter Set,SPS):
NAL Type 7:包含了关于整个视频序列的参数信息,如视频的分辨率、帧率、图像格式(如 YUV 格式)等。SPS 对于解码过程非常重要,因为解码器需要这些信息来设置初始解码参数。在 H.264 流中,通常会在视频开始时发送一个或多个 SPS。
图像参数集(Picture Parameter Set,PPS):
NAL Type 8:包含了关于单个图像的参数信息,例如图像的量化参数、熵编码模式等。PPS 通常在 SPS 之后发送,并且每个图像可能有自己的 PPS,解码器需要 PPS 来正确解码相应的图像。
补充增强信息(Supplemental Enhancement Information,SEI):
NAL Type 6:包含了一些辅助信息,这些信息可以用来提供额外的增强功能,例如时间码、版权信息、画面的显示信息等。SEI 是非必需的,但是可以为解码或显示过程提供有用的补充信息。
序列结束(End of Sequence):
NAL Type 10:表示一个序列的结束,用于通知解码器当前视频序列的结束,后续可能会有新的序列开始。
码流结束(End of Stream):
NAL Type 11:表示整个码流的结束,告诉解码器整个视频码流已经结束。

uint8_t nalType = nalHeader & 0x1F; // 获取 NAL 类型
std::cout << "NAL Type: " << static_cast<int>(nalType) << " ";
switch (nalType) {
            case 0: std::cout << "Unspecified"; break;
            case 1: std::cout << "Non-IDR Slice"; break;
            case 2: std::cout << "Slice Data Partition A"; break;
            case 3: std::cout << "Slice Data Partition B"; break;
            case 4: std::cout << "Slice Data Partition C"; break;
            case 5: std::cout << "IDR Slice"; break;
            case 6: std::cout << "Supplemental Enhancement Information (SEI)"; break;
            case 7: std::cout << "Sequence Parameter Set (SPS)"; break;
            case 8: std::cout << "Picture Parameter Set (PPS)"; break;
            case 9: std::cout << "Access Unit Delimiter"; break;
            case 10: std::cout << "End of Sequence"; break;
            case 11: std::cout << "End of Stream"; break;
            default: std::cout << "Other"; break;
        }