- 博客(64)
- 资源 (2)
- 收藏
- 关注
原创 冯诺依曼结构和哈佛结构的区别
冯诺依曼结构和哈佛结构的区别1. 冯·诺依曼结构:说明:一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。冯诺依曼的计算机必须具有如下功能:把需要的程序和数据送至计算机中;必须具有长期记忆程序、数据、中间结果及最终运算结果的能力;能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力;能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作;能够按照要求将处理结果输出给用户优势
2022-01-24 11:23:02
4605
原创 jetson设备上部署Yolov5 v3.1 -- Deepstream5.0应用
1. 概述Deepstream 是NVIDIA公司开发的AI视频处理框架,该框架是基于GStreamer视频框架上开发的。Yolov5框架是目标检测的AI训练,推理框架。本文主要讲述如何使用Deepstream SDK和yolov5模型推理快速构建AI应用应用环境上主要分为两种:Jetson 边缘设备,ARM cpu架构,本文采用的是JetsonAGXXavier。
2021-12-28 15:22:52
2381
原创 opencv-python对qt环境的冲突
环境:conda环境yolov5-3.1ubuntu18.04python3.6系统环境安装了Qt5.12.2问题现象:在执行训练脚本(train.py)时,对qt环境报错如下:QObject::moveToThread: Current thread (0x3d9b720) is not the object's thread (0x5af24f0).Cannot move to target thread (0x3d9b720)qt.qpa.plugin: Cou
2021-12-23 11:32:43
2715
原创 Deepstream 之 appsink元素保存图片
目录1. appsink元素介绍2. appsink 元素结合cv::Mat保存图片2.1 开发环境2.2 软件代码与说明1. appsink元素介绍appsink 元素作为gstreamer的sink节点,它可以实现pipeline中的流媒体数据与其他应用程序的交换,比如实现gstreamer与CUDA交互,gstreamer与OpenCV交互,等等。主要作用是借助gstreamer pipeline的 media streaming, 我们通过appsink用一个buffer
2021-11-16 15:54:03
3731
1
翻译 GStreamer中的时钟与同步
在播放复杂媒体时,每个声音和视频样本必须在特定时间以特定顺序播放。为此,GStreamer 提供了一种同步机制。GStreamer为以下用例提供支持:访问速度快于播放速度的非实时源。这是从文件中读取媒体并以同步方式播放的情况。在这种情况下,需要同步多个流,如音频、视频和字幕。 从多个实时源捕获和同步混合/混合媒体。这是一个典型的用例,您从麦克风/摄像头录制音频和视频并将其复用到文件中进行存储。 使用缓冲从(慢速)网络流进行流式传输。这是典型的 Web 流媒体案例,您使用 HTTP 从
2021-07-29 19:39:39
1062
翻译 GStreamer高级概念之Interfaces
将element用作 GObject,将GObject属性的使用作为应用程序和元素交互的一种简单方式。这种方法对于简单的 getter 和 setter 来说就足够了,但对于更复杂的东西就失败了。对于更复杂的用例,GStreamer 使用基于GObjectGTypeInterface类型的接口。URI处理程序接口到目前为止,在我们的示例中,我们仅使用“filesrc”元素展示了对本地文件的支持,但 GStreamer 支持更多的位置源。GStreamer 不需要应用程序知道任何URI细节...
2021-07-29 16:41:59
241
翻译 GStreamer之Metadata
MetadataGStreamer 明确区分了它支持的两种类型的元数据: 流标签,以非技术方式描述流的内容;和 Stream-info,这是对流属性的某种技术性描述。流标签示例包括歌曲的作者、歌曲的标题或它所属的专辑。流信息的示例包括视频大小、音频采样率、使用的编解码器等。tags使用GStreamer标签系统进行处理。Stream-info可以从一个已经协商过的GstCaps中检索到.这个GstCaps从GstPad中获取到。Metadata 读取stream-info 从GstPad
2021-07-29 16:27:25
393
翻译 GStreamer高级概念之位置跟踪与搜索
Position tracking and seeking到目前为止,我们已经了解了如何创建管道来进行媒体处理以及如何使其运行。大多数应用程序开发人员会对向用户提供有关媒体进度的反馈感兴趣。例如,媒体播放器会想要显示一个显示歌曲进度的滑块,通常还有一个指示流长度的标签。转码应用程序需要显示任务完成百分比的进度条。GStreamer 内置支持使用称为querying的概念来完成所有这些操作。由于查找非常相似,因此也将在此处讨论。Seeking是使用event的概念来完成的。Querying: 查询流的
2021-07-29 15:36:48
368
翻译 GStreamer基础教程之特定平台的元素
目标尽管 GStreamer 是一个多平台框架,但并非所有元素都适用于所有平台。例如,视频接收器严重依赖底层窗口系统,需要根据平台选择不同的接收器。在使用playbin或 等元素时,您通常不需要担心这一点在使用元素像playbin或autovideosink,但是,对于需要使用仅在特定平台上可用的接收器之一的情况,本教程会向您提示它们的一些特性。跨平台glimagesink此视频接收器基于OpenGL或OpenGL ES。它支持缩放图像的重新缩放和过滤以减轻混叠。它实现了 VideoOv..
2021-07-29 14:16:04
645
翻译 GStreamer基础教程之便利的元素
目标本教程列出了一些值得了解的方便的 GStreamer 元素。它们的范围从允许您轻松构建复杂管道的强大的多合一元素(如playbin),到在调试时非常有用的小帮助元素。为简单起见,以下示例是使用该gst-launch-1.0工具给出的。-v如果您想查看正在协商的 Pad Caps,请使用命令行参数。Bins这些是 Bin 元素,您将它们视为单个元素,它们负责实例化所有必要的内部管道以完成其任务。playbin该元素已在整个教程中广泛使用。它管理媒体播放的所有方面,从源到显示,...
2021-07-29 13:27:32
796
1
翻译 GStreamer基础教程之调试工具
目标有时,程序不能按照预期的执行并且从bus检索到的错误消息也不能提供足够多的信息。幸运的是,GStreamer携带有大量的调试信息,这些信息通常会提示我们可能存在的问题。这个教程的目标:怎样从GStreamer获取到更多的debug 信息。 怎么样打印自己的debug信息到GStreamer 日志。 怎样获取到管道的图表。打印debug信息debug日志GStreamer和它的插件充满了调试信息的跟踪。这就是说,在代码中的位置,有一段特别有趣的信息片段被打印到控制台,以及时间戳、..
2021-07-27 12:10:22
1267
翻译 GStreamer基础教程之GStreamer工具
目标GStreamer自带了一些使用方便和完全必要的工具。本教程无代码,并且教我们如下内容:如何在不适用C语言,使用命令行来构建并运行GStreamer管道。 如何找出GStreamer可用的元素及其相应元素的capabilities. 如何发现媒体文件的内部结构。介绍这些工具位于 GStreamer 二进制文件的 bin 目录中。所以,如果想执行这些工具,除了将此目录添加到系统环境变量($PATH),否则只能在bin目录中命令行执行相关工具。为了允许GStreamer多版本在同一个系
2021-07-25 16:21:53
1732
翻译 GStreamer基础教程之媒体信息采集
目标有时您可能想要快速找出文件(或 URI)包含的媒体类型,或者您是否能够播放媒体。您可以构建一个管道,将其设置为运行,并观察总线消息,但 GStreamer 有一个实用程序可以为您完成这些。本教程显示: 如何提取有关 URI 的信息 如何确定 URI 是否可播放 介绍GstDiscoverer是在pbutils库(插件基础实用程序)中找到的实用程序对象,它接受 URI 或 URI 列表,并返回有关它们的信息。它可以在同步或异步模式下工作。在同步模式下,只有一个函数要调用,.
2021-07-23 17:50:26
428
翻译 GStreamer基础教程之缩短管道
目标使用GStreamer构建的管道不需要完全关闭,数据可以随时以多种方式注入管道并从中提取。本教程显示:如何将外部数据注入通用 GStreamer 管道。 如何从通用 GStreamer 管道中提取数据。 如何访问和操作这些数据。 介绍应用程序可以通过多种方式与流经 GStreamer 管道的数据进行交互。本教程描述了最简单的一个,因为它使用了专为此目的而创建的元素。用于将应用程序数据注入 GStreamer 管道的元素是appsrc,用于将 GStreamer 数据提
2021-07-22 18:27:02
964
翻译 GStreamer基础教程之多进程与pad的有效性
概况GStreamer可自动处理多线程操作,但在有些情况下,你需要手动的解耦线程。此教程就是展示如何处理此类问题。另外,完成了关于pad availability的说明,更多的为阐述以下三个问题:如何创建一个新的进程,这个进程是为了执行管道中部分功能。 什么是pad availability。 如何复制流。介绍多线程GStreamer 是一个多线程框架。这意味着,在内部,它会根据需要来创建和销毁线程,例如,将流与应用程序线程分离。此外,插件也可以自由地为自己的处理创建线程,例如,视频解
2021-07-21 21:22:32
619
2
翻译 GStreamer基础教程之媒体格式和pad功能
目标:Pad Capabilities 是 GStreamer 的一个基本元素,尽管大多数时候它们是不可见的,因为框架会自动处理它们。这个有点理论的教程显示:什么是Pad Capabilities 如何检索它们 何时取回它们 为什么你需要了解它们介绍:pad如前所述,Pads 允许信息进入和离开元素。Pad的Capabilities(或Caps,简称Caps),然后,指定什么样的信息可以通过 Pad 传播。例如,“分辨率为 320x200 像素和每秒 30 帧的 RGB 视频”,或“
2021-07-21 17:16:25
966
翻译 GStreamer之GstRegistry
一个Registry保存一组插件的元数据。设计原理GstRegistry对象是一个列表,此列表包含多个插件和操作插件的函数。每个GstPlugin与磁盘上的文件是一对一匹配的,并且可能会或可能不会在给定时间内加载插件。插件信息的主要来源始终是插件文件本身。因此,应用程序想要查询指定插件的有关信息,或想要搜索满足指定条件的功能,主要的操作方法是加载每个插件并查看在默认注册表中搜集的结果信息。显然这是一个耗时的过程,因此我们将信息缓存在注册表文件中。缓存文件的格式和位置是gstreamer内部的
2021-07-21 10:52:49
307
原创 ubunu18.04 使用Anaconda安装PyTorch
1.安装anacondaa) 下载anaconda由于官网的下载速度十分缓慢,而且还不支持断点续传,经常下载失败。故而,去国内的镜像站点下载,我选择的是Anaconda3-5.2.0https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/b) 更改执行权限sudo chmod +x Anaconda3-5.2.0-Linux-x86_64.shc) sudo 执行并安装。安装期间会有配置安装路径,环境变量和安装软件..
2021-03-18 14:47:05
241
原创 ubuntu18.04死机方法
1. 安装kexec-toolssudo apt install kexec-tools2. 配置kernel.sysrqsudo sysctl -w kernel.sysrq=13.执行死机命令:修改文件权限sudo chmod 777 /proc/sysrq-trigger执行命令:sudo echo c > /proc/sysrq-trigger
2021-03-05 11:27:01
583
原创 ubuntu18.04 VSCode配置cmake编译C++程序,并gdb调试程序
1.ubuntu18.04环境软件安装安装cmake 安装gcc 安装VSCode 安装gdb调试工具以上安装不做具体说明2. VSCode 使用cmake编译C++代码配置,gdb调试生成程序2.1 VSCode安装插件:进入此Extensions(Ctrl+Shift+X)菜单,install 以下item:C/C++, C++ Intellisense, CMake,CMake Tools2.2 配置工程cmake编译代码,gdb调试程序主要在于三个文件的生成与配.
2021-01-28 14:04:38
2592
3
原创 ubuntu18.04调节系统声音大小
ubuntu18.04调节系统声音大小sudo pactl set-sink-volume 120% //声音大小120%
2021-01-20 17:41:51
2111
原创 PyQt5——自定义对话框调用
目录1. 概况2. 模态对话框2.1 模态对话框满足的条件2.2 模态对话框的调用3.非模态对话框3.1 对话框设置条件3.2 对话框调用1. 概况对话框分为模态对话框和非模态对话框,模态对话框在使用时是阻塞父窗口的,非模态对话框在使用时,对话框和父窗口是可同时操作的(具体请百度)。PyQt5对于两种对话框的调用不尽相同。2. 模态对话框2.1 模态对话框满足的条件在设置时,就需要设置为模态(ApplicationModal),可用designer设置或.
2020-12-30 17:35:21
1273
1
转载 PyQt5 信号和槽连接方式
目录通过QtDesigner手动关联的方式文章转载:https://www.cnblogs.com/huluwa508/p/10319979.html通过QtDesigner 单击菜单栏切换到信号槽编辑模式 单击控件并拖动鼠标到信号的接收对象上,一般为对话框自己,松开鼠标弹出信号和槽选择框 选中clicked()信号 点击右边Edit弹出信号槽编辑框 添加一个槽函数,特别注意槽函数名字后面一定要带“()”。 然后保存到当前工程目录下,命名
2020-12-30 17:09:52
834
转载 PyQt5 ——Qt Designer配置与使用
转载:链接:https://www.jianshu.com/p/5b063c5745d0Qt Designer的介绍在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,从而实现了开发的便捷。Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果。Qt Designer生成的.ui文件(实质上是XML格式的文件)也可以通过pyuic5工具转换成.py文件。Qt
2020-12-29 13:56:14
2344
1
原创 C++设计模式之备忘录模式
目录1.设计目的2.UML设计3.代码实现4.应用场景1.设计目的主要为了解决类似于撤销的问题。2.UML设计以文本撤销为例3.代码实现代码地址:https://github.com/luozichao324/Design-Patterns/tree/main/Snapshot/SnapShot4.应用场景a) 当你需要创建对象状态快照来恢复其之前的状态时,可以使用备忘录模式。b) 当直接访问对象的成员变量、获取器或设置器将导致封装被突破时,...
2020-12-24 19:19:20
113
1
原创 C++设计模式之观察者模式
目录1.设计目的2.设计UML3.实现代码4.应用场景1.设计目的观察者模式属于行为设计模式,是一种发布-订阅的机制,可以为事件的发布者和订阅者解耦,无需修改发布者代码就能引入新的订阅者类,可以在运行时建立对象之间的联系。2.设计UML以 UI文本编辑为例:UI输入变化后,将变化的字符串保存到日志文件中,同时也将该字符串发送给云端服务器3.实现代码见代码地址:https://github.com/luozichao324/Design-Patter..
2020-12-24 15:49:33
178
原创 C++ 设计模式之命令模式
1. 设计目的将发送者操作与接收者逻辑作解耦,使接收者的输出结果更加的灵活多变.比如,UI界面操作, UI(发送者)点击5s后显示按钮, 直接调用就需要改写显示逻辑对象,添加5s后显示的方法;可如果添加个命令对象,将UI的命令打包给命令对象,那么就可以把5s延时在命令对象里添加.而不用修改显示对象,这样显示对象的职能更单一.2. 设计原理a) 在发送者与接收者之间添加一个命令管理对象(Invoker)和命令类. 发送者操作命令管理对象,名利管理对象管理命令类实例.命令类关联到接受者.b) 命
2020-11-13 16:17:30
206
原创 C++设计模式之代理模式
目录设计目的UML设计代码实现总结设计目的代理模式的主要结构其中代理类主要用来:延迟初始化、记录日志、访问控制和缓存等辅助性工作。代理会代表它所代理的对象,并对整个生命周期进行管理。UML设计代码实现代码地址:https://github.com/luozichao324/Design-Patterns/tree/main/Proxy/Proxy总结几种常见的应用场景:a)延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,...
2020-11-12 15:03:02
118
原创 C++ 设计模式之责任链模式
目录1. 设计目的2. 设计UML3. 总结1. 设计目的主要是为了解决,多种层级执行(判断)下的代码看似混乱难理解的问题。比如:在做用户信息甄别的时候,需要判断用户名和密码是否正确,再看是否是管理员,再看是否是多个登陆IP的操作。。。这样的层层判断会显得代码很臃肿,不利于复用和维护。解决思路:将每层判断抽象成一个类,这些类统一继承一个或(顺序继承)下来。每个继承的对象需要有下一层对象 这样的属性,便于继续下一层的责任判断。2. 设计UML3. 总结优点:你可以.
2020-11-12 11:43:28
107
原创 C++设计模式之享元模式
1. 设计目的解决程序必须支持大量对象且没有足够的内存容量问题。应用该模式所获的收益大小取决于使用它的方式和情景。它在下列情况中最有效:程序需要生成数量巨大的相似对象 这将耗尽目标设备的所有内存 对象中包含可抽取且能在多个对象间共享的重复状态实现原理: 将需要改写为享元的类成员变量拆分为两个部分: a) 内在状态:包含不变的、可在许多对象中重复使用的数据的成员变量。 b) 外在状态:包含每个对象各自不同的情景数据的成员变量。 ...
2020-11-11 18:54:34
147
原创 C++设计模式之桥接模式
目录1. 设计目的2. UML设计3. 代码实现4. 总结1. 设计目的将特定接口-平台的组合代码抽取到独立的类中,以在混乱中建立一些秩序。将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能在开发时分别使用。如:颜色与形状的搭配,蓝色的矩形,红色的圆形。2. UML设计同样以颜色和形状为例:3. 代码实现代码实现见网址:https://github.com/luozichao324/Design-Patterns/tree/main...
2020-11-11 11:54:53
105
1
原创 C++设计模式之适配器模式
目录1.设计目的2.UML设计3. 代码实现4. 总结4.1 应用场景4.2 优点与缺点1.设计目的软件开发中,经常会遇到模块接口不同兼容的情况,如,提供者参数类型时xml格式,而调用者的使用数据类型时JSON,此时就需要使用方法将这两个接口适配下。而在适配的过程中,还不要影响到业务的代码结构,也让这个适配过程具有一定的扩展性,方便扩展其他的数据类型或者属性结构。所以引入适配器模式,添加适配对象。2.UML设计以经典的“方钉与圆孔”为例子,方钉向插入圆孔.
2020-11-10 17:56:44
120
原创 C++ 设计模式之建造者模式(生成器模式)
1. 设计目的1.一个复杂对象,在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中;甚至还有更糟糕的情况,那就是这些代码散落在客户端代码的多个位置。2.当你需要创建不同形式的产品时,其中的一些构造步骤可能需要不同的实现,那么对象的有些定义会显多余。3.生成器模式建议将对象构造代码从产品类中抽取出来,并将其放在一个名为生成器的独立对象中。每个生成器对象都会按照产品的自身特性去创建流程,去按照特有的设置顺...
2020-11-10 11:52:45
296
原创 Ubuntu Qt 使用gdb+core dump定位软件崩溃问题
目录1. 背景1.1 什么是core dump?2.使用方法2.1 设置ubuntu 系统生产core文件2.1.1 core 文件生成2.2 Qt 生成调试信息2.3 gdb调试core文件1. 背景日常软件开发调试过程中,会遇到软件运行过程中,不知不觉就死掉了,通过日志无法确定异常的原因.此时就需要通过工具来定位软件在源代码层崩溃在什么地方.gdb+core dump的方式就可以方便于我们定位异常问题位置,进而分析问题的原因.1.1 什么是core dump?
2020-10-10 17:54:29
709
原创 C++设计模式之模板方法模式
C++设计模式之模板方法模式目录C++设计模式之模板方法模式1.设计目的2.设计UML3.代码实现1.设计目的完成在某一细节层次一致的一个过程或一系列步骤,但个别步骤在更细节的层次上实现可能不同,我们就会采用模板方法模式.2.设计UML其中 void templateMethod() 函数顺序调用operation1()和operation2()方法.3.代码实现//.h文件#ifndef TEMPLATEMETHODINTERFACE_H#define
2020-08-12 20:51:44
155
原创 Ubuntu18.04 DNS服务解析
DNS域名解析,本文主要描述,DNS是什么,怎样的书写规则,设备解析域名的过程,以及ubuntu18.04 在使用DNS的一些手动或自动配置
2020-08-10 15:23:00
3925
转载 ubuntu18.04 终端配置ip地址
1. ubuntu18.04配置静态ip注意:18.04和16.04不一样了,配置静态ip的方法有很大差异!查找netplan目录下默认的网络配置文件,文件后缀为.yaml,我的是叫01-network-manager-all.yaml的文件。如果没有可以使用sudo gedit 01-network-manager-all.yam自己创建和。$ cd /etc/netplan$ ls1 2编辑网络配置文件之前,先查看自己的网卡名称,我的是enp3s0。$ ifconfig.
2020-08-10 15:19:22
5043
原创 Ubuntu18.04 使用supervisor做守护进程
ubuntu18.04 使用supervisor做守护进程,文中主要描述,安装,配置,启动,以及踩坑.
2020-07-11 14:47:15
1327
原创 C++ 设计模式之装饰模式
C++ 设计模式之装饰模式目录C++ 设计模式之装饰模式设计目的UML设计代码实现设计目的动态地给一个对象添加一些额外的功能。就增加功能来说,继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀,反之装饰模式可以在不想增加很多子类的情况下扩展类。UML设计以绘制彩色形状为例:代码实现//.h文件#ifndef SHAPE_H#define SHAPE_H#include <QObject>class Shape : .
2020-06-17 21:52:38
241
yolov5_prept.zip
2021-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人