如何判断嵌入式平台OpenCV在使用硬件编解码器?

01 涉及OpenCV编解码库的一个命令行工具

python3 -c 'import cv2; print(cv2.getBuildInformation())'

它可以打印输出详细的OpenCV编译参数和当前的媒体库相关参数,我的rk3588打印的信息是这样的:

cat@lubancat:~$ python3 -c 'import cv2; print(cv2.getBuildInformation())'

General configuration for OpenCV 4.5.1 =====================================
  Version control:               unknown


  Extra modules:
    Location (extra):            /build/opencv-fF3y1A/opencv-4.5.1+dfsg/contrib/modules
    Version control (extra):     unknown

  Platform:
    Timestamp:                   2021-06-16T12:09:47Z
    Host:                        Linux 4.19.0-17-arm64 aarch64
    CMake:                       3.18.4
    CMake generator:             Ninja
    CMake build tool:            /usr/bin/ninja
    Configuration:               Release

  CPU/HW features:
    Baseline:                    NEON FP16

  C/C++:
    Built as dynamic libs?:      YES
    C++ standard:                11
    C++ Compiler:                /usr/bin/c++  (ver 10.2.1)
    C++ flags (Release):         -g -O2 -ffile-prefix-map=/build/opencv-fF3y1A/opencv-4.5.1+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -g -O2 -ffile-prefix-map=/build/opencv-fF3y1A/opencv-4.5.1+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security  -DNDEBUG
    C++ flags (Debug):           -g -O2 -ffile-prefix-map=/build/opencv-fF3y1A/opencv-4.5.1+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -g  -DDEBUG -D_DEBUG
    C Compiler:                  /usr/bin/cc
    C flags (Release):           -g -O2 -ffile-prefix-map=/build/opencv-fF3y1A/opencv-4.5.1+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2   -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -g -O2 -ffile-prefix-map=/build/opencv-fF3y1A/opencv-4.5.1+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security  -DNDEBUG
    C flags (Debug):             -g -O2 -ffile-prefix-map=/build/opencv-fF3y1A/opencv-4.5.1+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2   -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -g  -DDEBUG -D_DEBUG
    Linker flags (Release):      -Wl,-z,relro -Wl,-z,now  -Wl,--gc-sections -Wl,--as-needed -Wl,-z,relro -Wl,-z,now 
    Linker flags (Debug):        -Wl,-z,relro -Wl,-z,now  -Wl,--gc-sections -Wl,--as-needed  
    ccache:                      NO
    Precompiled headers:         NO
    Extra dependencies:          dl m pthread rt
    3rdparty dependencies:

  OpenCV modules:
    To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy hdf hfs highgui img_hash imgcodecs imgproc intensity_transform java line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab viz ximgproc xobjdetect xphoto
    Disabled:                    world
    Disabled by dependency:      sfm
    Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv gapi julia matlab ovis python2 ts
    Applications:                apps
    Documentation:               doxygen python javadoc
    Non-free algorithms:         NO

  GUI: 
    GTK+:                        YES (ver 3.24.24)
      GThread :                  YES (ver 2.66.8)
      GtkGlExt:                  NO
    OpenGL support:              NO
    VTK support:                 YES (ver 9.0.1)

  Media I/O: 
    ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.11)
    JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 62)
    WEBP:                        /usr/lib/aarch64-linux-gnu/libwebp.so (ver encoder: 0x020e)
    PNG:                         /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.6.37)
    TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.2.0)
    JPEG 2000:                   OpenJPEG (ver 2.4.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)
    GDAL:                        YES (/usr/lib/libgdal.so)
    GDCM:                        YES (3.0.8)
    HDR:                         YES
    SUNRASTER:                   YES
    PXM:                         YES
    PFM:                         YES

  Video I/O:
    DC1394:                      YES (2.2.6)
    FFMPEG:                      YES
      avcodec:                   YES (58.91.100)
      avformat:                  YES (58.45.100)
      avutil:                    YES (56.51.100)
      swscale:                   YES (5.7.100)
      avresample:                NO
    GStreamer:                   YES (1.18.4)
    PvAPI:                       NO
    v4l/v4l2:                    YES (linux/videodev2.h)
    gPhoto2:                     YES

  Parallel framework:            TBB (ver 2020.3 interface 11103)

  Trace:                         YES (built-in)

  Other third-party libraries:
    Lapack:                      NO
    Eigen:                       YES (ver 3.3.9)
    Custom HAL:                  NO
    Protobuf:                    /usr/lib/aarch64-linux-gnu/libprotobuf.so (3.12.4)

  OpenCL:                        YES (no extra features)
    Include path:                /usr/include/CL
    Link libraries:              Dynamic load

  Python 3:
    Interpreter:                 /usr/bin/python3 (ver 3.9.2)
    Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.9.so (ver 3.9.2)
    numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.19.5)
    install path:                lib/python3.9/dist-packages

  Python (for build):            /usr/bin/python3

  Java:                          
    ant:                         /usr/bin/ant (ver 1.10.9)
    JNI:                         /usr/lib/jvm/default-java/include /usr/lib/jvm/default-java/include/linux /usr/lib/jvm/default-java/include
    Java wrappers:               YES
    Java tests:                  NO

  Install to:                    /usr
-----------------------------------------------------------------

 

与音视频编解码相关的几个重要参数已经列出。这台设备的.264硬编解码器已经在生效状态。

附录A chatGPT关于硬编解码的对答 

如何检查cv2 当前使用的.264编码工具是什么?
要检查OpenCV当前使用的H.264编码器工具,可以使用以下代码:


import cv2

# 获取可用编码器列表
encoder_list = cv2.getBuildInformation().split('\n')
encoder_name = ""

# 查找H.264编码器
for line in encoder_list:
    if 'H.264' in line:
        encoder_name = line.split()[0]
        break

# 打印当前使用的H.264编码器
print("当前使用的H.264编码器:", encoder_name)
运行此代码将打印出当前使用的H.264编码器工具的名称。请注意,OpenCV支持多个H.264编码器,因此可能会打印出多个名称。


video/x-h264  如果实际打包的是这个编码器,我是不是需要把H.264换成x-h264?
不需要将H.264替换为x-h264。实际上,video/x-h264是一种MIME类型(Multipurpose Internet Mail Extensions),用于标识H.264编码的视频文件格式。因此,它们是同一种编码器,只是用不同的名称表示而已。您可以继续使用H.264编码器来处理video/x-h264格式的视频文件。


列表为空,是不是代表没有硬编码器?
不一定。如果获取的可用编码器列表为空,可能是因为OpenCV没有找到可用的编码器或未正确安装编码器。您可以尝试检查编码器是否正确安装或尝试重新安装OpenCV以确保编码器可用。另外,有些编码器可能需要特定的设置或依赖项才能被OpenCV正确识别和使用。您可以查看OpenCV的文档或社区讨论以获得更多帮助和指导。

python3 -c 'import cv2; print(cv2.getBuildInformation())'
这个能看出编解码库相关的信息吗?
这段代码会输出OpenCV编译时的详细信息,包括支持的编解码库以及其他信息。通过查看输出信息,可以了解OpenCV编译时所包含的编解码库及其版本等相关信息。


怎么看.264的编解码库?
要查看是否包含H.264的编解码库,你可以在输出信息中搜索关键词"h264"或者"AVC"来查找相关信息。通常会有类似"FFMPEG: YES (codec h264,avc)"这样的记录来表明是否支持H.264编解码。如果没有找到相关记录,说明当前编译的OpenCV版本可能不包含H.264的编解码库。


avcodec:                   YES (58.91.100)
看起来你的OpenCV编译包含了AVCodec,并支持版本为58.91.100。这意味着你的OpenCV应该支持H.264的编解码。


这是硬编码还是软编码?
这里的AVCodec是指FFmpeg中的音视频编解码器库,通常会支持硬件加速编解码。具体支持硬件编解码还是软件编解码取决于系统和编译设置,一般情况下可以通过设置来选择硬件加速或软件编解码。如果有需要可以查看具体的编译选项和环境来确定。


如何判断它是硬件加速?
要判断OpenCV是否使用硬件加速进行H.264编解码,可以查看编译选项中是否有启用硬件加速相关的选项,比如CUDA、OpenCL、VAAPI、QuickSync等。如果这些选项被启用,并且系统中有相应的硬件加速设备,那么就意味着OpenCV可能在进行H.264编解码时会利用硬件加速。另外,通过查看编码器使用率和性能表现也可以初步判断是否使用硬件加速。如果需要更详细的信息,可以通过相关工具或命令行查看OpenCV的编解码操作是否使用了硬件加速。


arm7的硬件编解码器是什么?
arm7架构上的硬件编解码器可以是一些特定的硬件加速模块或处理器,比如ARM提供的NEON指令集或Mali GPU等。这些硬件可以提供加速H.264编解码的功能,以提升性能和效率。具体支持哪些硬件加速编解码器取决于具体的处理器和硬件设备,可以查看相关的技术文档或资料来了解。


.264相关的那个硬件编解码参数是什么?
H.264相关的硬件编解码参数可以包括一些特定的硬件加速选项,比如支持H.264硬件解码的设备、支持的硬件加速技术(比如CUDA、QuickSync、OpenCL等)、硬件解码器的性能指标等。不同的硬件平台和设备可能有不同的硬件编解码参数,可以根据具体的需求和环境来选择合适的硬件编解码参数。如果需要具体的参数信息,建议参考相关的技术文档或咨询硬件厂商。


在编译cv2是,指定armv7的那个.264相关的编解码参数是什么?
在编译cv2时指定armv7的H.264相关的编解码参数可以包括启用NEON指令集的选项。NEON是ARM架构上的SIMD指令集,可以提供加速处理音视频数据的功能,包括H.264编解码。在编译OpenCV时,可以添加相应的选项来启用NEON指令集的支持,以实现在armv7架构上进行H.264编解码时的硬件加速。具体的编译选项可以参考OpenCV的编译文档或相关的技术资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面解析Unity至Unreal的项目迁移流程

引言 在游戏开发领域,Unity和Unreal Engine都是顶尖的选择,各自带有独特的优势。对于追求更高图形质量和更强大物理模拟的开发团队而言,将项目从Unity迁移到Unreal可能是一个值得考虑的选择。本文将详细介绍整个迁移流程,帮助开发…

[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)

欢迎查看合集: Java、Android面试高频系列文章合集 本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点&am…

Linux操作系统·进程管理

一、什么是进程 1.作业和进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。为了完成这些任务,系统上…

数据库锁介绍

目录 1.数据库锁 事务的隔离级别 读未提交(Read Uncommitted) 读已提交(Read Committed) 可重复读(Repeatable Read) 串行化(Serializable) 幻读和不可重复读区别 2.Mysql中有…

Android binder死亡通知机制

在Andorid 的binder系统中,当Bn端由于种种原因死亡时,需要通知Bp端,Bp端感知Bn端死亡后,做相应的处理。 使用 Bp需要先注册一个死亡通知,当Bn端死亡时,回调到Bp端。 1,java代码注册死亡通知 …

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

豆瓣9.7,这部Java神作第3版重磅上市!

Java 程序员们开年就有重磅好消息,《Effective Java 中文版(原书第 3 版)》要上市啦! 该书的第1版出版于 2001 年,当时就在业界流传开来,受到广泛赞誉。时至今日,已热销近20年,本书第…

自然语言处理(NLP)简介

自然语言处理(NLP)技术是一种使用计算机处理和理解自然语言的技术。以下是一些NLP技术的例子: 机器翻译:NLP可以用于自动翻译一种语言到另一种语言。例如,Google Translate使用NLP技术来将文本从一种语言翻译成另一种语…

三维SDMTSP:GWO灰狼优化算法求解三维单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、单仓库多旅行商问题 多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集…

CST Studio初级教程 五

本课程将实例讲解CST 3D建模。CST 3D 建模有三个途径:一种方法是用Brick、Sphere、Cone、Torus、Cylinder、Bond Wire指令绘制实体。第二种方法是用Extrude Face、Rotate Face、loft在已有模型基础上生成实体。第三种方法是,先用2D绘图指令绘制Curves&am…

Cross-Origin Read Blocking (CORB)

Cross-Origin Read Blocking (CORB) 是一种安全机制,用于保护Web应用免受跨域读取攻击。 跨域读取攻击可能会导致网站上的敏感信息被恶意代码访问和读取。这种攻击方式通常利用浏览器对不同源的资源访问的限制进行绕过。 CORB通过在浏览器中引入一种新的安全检测机…

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…

Aker(安碁科技)晶振产品应用和选型

一、石英晶体振荡器简介 在电子电路系统中&#xff0c;特定的动作需要严格按照一定的顺序进行&#xff0c;以确保数据被正确处理和操作&#xff0c;时钟信号就成了系统工作的重要引导者。而且在多模块复杂电路系统中&#xff0c;为了确保不同功能模块能协调一致地工作&#xf…

【unity】(1)场景

Unity的场景&#xff08;Scene&#xff09;是构建游戏中各种环境和级别的基础。一个场景可以包含游戏中的所有对象&#xff0c;如角色、道具、地形等。 创建和管理场景 创建新场景&#xff1a; 在Unity编辑器中&#xff0c;选择File > New Scene&#xff0c;或者使用快捷键…

你用过最好用的AI工具有哪些

一&#xff1a;介绍 随着科技的飞速发展&#xff0c;AI技术已经深入到我们生活的每一个角落&#xff0c;为我们提供了前所未有的便利和可能性。在众多AI工具中&#xff0c;有几种特别受到人们的喜爱&#xff0c;并且在各自的领域中产生了深远的影响。 1、AI绘画工具 改图鸭AI绘…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(七)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 14 节&#xff09; P14《13.ArkUI组件-自定义组件》 将可变部分封装成组件的成员变量&#xff1a; 1、首先给标题添加两个图标&am…

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长&#xff0c;我是跟着黑马的课走的 课程提供的有文件&#xff0c;我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…

上位机开发PyQt(五)【Qt Designer】

PyQt5提供了一个可视化图形工具Qt Designer&#xff0c;文件名为designer.exe。如果在电脑上找不到&#xff0c;可以用如下命令进行安装&#xff1a; pip install PyQt5-tools 安装完毕后&#xff0c;可在如下目录找到此工具软件&#xff1a; %LOCALAPPDATA%\Programs\Python\…

设计模式之监听器模式ListenerPattern(三)

一、介绍 监听器模式是一种软件设计模式&#xff0c;在对象的状态发生改变时&#xff0c;允许依赖它的其他对象获得通知。在Java中&#xff0c;可以使用接口和回调机制来实现监听器模式。 二、代码实例 1、事件Event类 package com.xu.demo.listener;// 事件类 public class…

前端开发框架uni-app

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl uni-app概述 uni-app起源于跨平台应用开发的需求增长。在过去&#xff0c;为不同的平台&#xff08;如iOS、Android、各种小程序等&#xff09;开发应用需要分别编写和维护…