自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 QWebEngine集成Netron可视化模型

将开源的Netron集成到自己的Python QT软件中

2022-12-06 22:51:54 985 7

原创 PyQT股票看板软件界面设计

本文介绍如何使用Python QT设计股票看盘软件图形界面

2022-07-03 23:26:38 2626 3

原创 SQL存储股票数据

python SQLite存储股票历史数据

2022-07-03 21:29:07 2390 1

原创 PyQT绘制股票K线图

本文介绍如何使用PyQtGraph绘制类似东方财富PC软件上的K线图,我们要绘制的K线图包括蜡烛图、移动平均线、交易量柱状图、KDJ(或其它指标)曲线、十字光标、前后翻页等可视化功能,一图胜千言,先上笔者绘制的K线图:图1本文设计的K线图图2为东方财富同一天的K线图:图2东方财富K线图对比可以发现,除了少了些指标曲线(例如MA30,MA60,MA120,MA250;MAVOL1)等,主要的显示功能不能说差不多,只能说一模一样!如果有读者...

2021-11-27 22:22:30 11174 31

原创 ARM NEON优化6.GCC汇编指令的使用

C/C++代码最终都是被编译成汇编代码然后翻译成机器指令,编译器一般都会对代码进行优化,但往往优化的效果不是最高效的。针对最核心的计算部分仍然需要使用汇编指令编写。在程序中使用汇编一般有三种方式:1.使用汇编源码,一般为.s文件,定义汇编函数,这种方式比较繁琐,需要用户自己维护栈,很容易出错。2.GCC内嵌汇编,由__asm__关键字定义汇编代码,嵌入在C/C++函数内部。一般使用第二种方式进行优化性能计算部分代码,本文介绍如何在GCC中嵌入ARM汇编。GCC ASM声明...

2021-11-10 23:19:03 1158

原创 ONNX与JSON相互转换

ONNX模型的修改可以通过转成JSON文件再将JSON文件转回ONNX。以一个Conv算子构成的模型为例:ONNX转JSON使用MessageToJson进行转换,如下将一个conv算子构成的ONNX模型转成JSONimport onnxfrom google.protobuf.json_format import MessageToJson, Parseonnx_model = onnx.load("Conv.onnx")mes...

2021-08-18 23:52:32 1396

原创 ONNX构建并运行模型

ONNX是开放式神经网络(Open Neural Network Exchange)的简称,主要由微软和合作伙伴社区创建和维护。很多深度学习训练框架(如Tensorflow, PyTorch, Scikit-learn, MXNet等)的模型都可以导出或转换为标准的ONNX格式,采用ONNX格式作为统一的界面,各种嵌入式平台就可以只需要解析ONNX格式的模型而不用支持多种多样的训练框架,本文主要介绍如何通过代码或JSON文件的形式来构造一个ONNX单算子模型或者整个graph,以及使用ONN...

2021-08-07 22:16:23 8589 2

原创 OpenCV基础应用6.图像几何变换

一. 几何变换空间变换对应矩阵的仿射变换。一个坐标通过函数变换的新的坐标位置:所以在程序中我们可以使用一个2*3的数组结构来存储变换矩阵:1.1 平移变换平移(b1,b2)坐标可以表示为:因此,平移变换的变换矩阵及逆矩阵记为:OpenCV实现的平移变换代码如下:void translate(){ Mat img = imread("../ImageSet/wgj_2.jpg"...

2021-07-31 22:43:29 424

原创 OpenCV基础应用4.边缘检测

由于基于边缘检测的分析不易受到整体光照强度变化的影响,许多图像理解方法都以边缘为基础。边缘检测强调的是图像的对比度。检测对比度,即亮度上的差别,可以增图像中的边界特征,这些边界正是图像对比度出现的地方。这就是人类视觉感知目标周界的机制,因为目标表现的就是与他周围的亮度差别。目标边界实际上时亮度级的梯度变化,而边缘是梯度变化的位置。一. 一阶边缘检测算子1.1 基本算子亮度变化可以通过对相邻点进行差分处理来增强。对水平方向上的相邻点进行差分处理可以检测垂直方向上的亮...

2021-06-26 10:32:57 1189 1

原创 OpenCV基础应用 3.形态学图像处理

数学形态学起初是对二值图像提出的,而后扩展到灰度图像。形态学关注的是形状:将图像和形状看做是点集,根据形状利用数学形态学处理图像。通过这种方式,形态学算子定义的是局部变换,把那些要表达的像素值看做集合。这种改变像素值的方式是通过定义击中或不击中变换进行形式化的。 集合X表达的目标可以通过集合B所表达的结构元素来检测。不同的结构元素可以用来改变对集合X的处理。击中或不击中变换可以定义为点算子: 上式中,x表示集合X中的元素,也就是图像中的像素。带c上标表示集合...

2021-06-21 21:09:46 490

原创 OpenCV基础应用2.图像滤波

OpenCV学习(二).图像滤波一. 均值滤波1.1 均值滤波核2. OpenCV实现二. 中值滤波2.1 中值滤波核2.2 OpenCV实现三. 高斯滤波3.1 高斯分布3.2 OpenCV实现四. 双边滤波4.1 算法原理4.2 OpenCV实现五. 导向滤波5.1 算法原理5.2 OpenCV实现图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析

2021-06-20 15:40:42 1296

原创 OpenCV基础应用1.Ubuntu18安装OpenCV4.0

一. 安装OpenCV4.01. 下载OpenCV4.0源文件,官网地址下载。2. 将下载的opencv-4.0.0.zip文件解压。$ unzip opencv-4.0.0.zip -d .3. 安装相关工具和依赖库。$ sudo apt-get install cmake build-essential libgtk2.0-dev libavcodec libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev:i386 libti

2021-06-19 13:22:27 491

翻译 TVM学习笔记二.relay IR介绍

relay是一种功能多样的编程语言,用于机器学习系统表达的中间表示。relay支持代数数据类型,闭包,控制流和递归,从而可以直接表示比基于计算图的IR更复杂的模型。relay还包括一种使用类型关系的依赖类型的形式,来处理对参数形状有复杂的要求的操作符的形状分析。relay在设计上是可扩展的,这使得机器学习的开发者可以很容易地开发新的大型程序转换和优化。下面分别介绍Relay中的语法,类型系统,代数数据类型和运算符。一.Relay表达式Relay IR是一个纯粹面向表达式的表达语言。下面描述Rel

2021-05-26 08:55:59 2329

原创 Vitis AI修炼秘籍4. DPU IP的系统集成

一. Vitis硬件平台简介Xilinx提供了一些基础的开发板平台内嵌在Vitis IDE中,用户可以直接从这些platform创建应用程序。但如果是自定义的板卡或者想要部署更多加速器IP、配置不同的性能,我们就需要创建完全自定义的硬件平台。本文介绍创建Vitis AI硬件平台的基本步骤。硬件平台创建简介创建一个Vitis嵌入式平台通常有三步:创建硬件接口、创建软件组件和打包平台。当然每一步也都需要进行相应的准备工作和测试。整个流程如下图所示:各阶段简要描述如下: 步骤

2021-04-29 23:30:17 3313 1

原创 Vitis AI修炼秘籍3.开发板测试与Linux系统构建

经过前面的实验,我们已经基本摸清楚了Vitis IDE & Vivado的使用方法。在开始构建DPU与深度学习软件栈之前,我们先对我们拿到的开发板做个体检(硬件全面测试),由于大部分深度学习软件框架都是运行在Linux, android或IOS等嵌入式系统上,因此测试完硬件后还需要搭建一个Linux系统以供后续开发使用。一. 硬件搭建根据开发板上的硬件资源创建板级支持包,进行测试。出ZYNQ处理器外,需要在Vivado中配置的硬件还有DDR,NANDFlash, Ethernet, Uart

2021-04-18 10:06:24 998

原创 Vitis AI修炼秘籍2. 熟悉Vitis软件的使用之LED驱动

深度学习DPU IP最低配置下,至少需要38457 LUT,而ZYNQ 7010只有35500 LUT,本来笔者是有一块7Z010的开发板,奈何资源不够,无法使用Vitis的核心功能。由于笔者比较穷,买不起ZED Board这样的贵的开发板,因此,笔者花了180RMB在某鱼上淘了一块矿机上使用的ZYNQ控制板,板子上的芯片正好是ZYNQ 7020 (XC7Z020CLG400)。为了Bring up这块暂且称之为开发板的板子,取名为ANT开发板,本篇笔记以点亮图中所有的LED为目的,回顾下Vivad

2021-04-11 19:04:42 2593

翻译 Vitis AI修炼秘籍1.Vitis统一软件平台简介

Xilinx在2012年推出了针对其FPGA产品的开发套件Vivado,彻底的完善了FPGA硬件开发堆栈的基础,Vivado相关的参考资料可以查看笔者的ZYNQ学习之路系列笔记。随着Xilinx每一代芯片架构的发展,Vivado也在不断的增加新功能,比如针对嵌入式开发的SDSoC,为数据中心部署开发的SDAccel,随后,机器学习的爆发式发展,Xilinx又推出了AI推断的DPU(来自收购的深鉴)以及相关工具链DNNDK。虽然针对FPGA硬件的开发难度已经降低了不少,但使用这些工具链需要对硬件的设计具备比较

2021-04-11 18:56:01 2011

原创 ZYNQ学习之路20.DNNDK简介与环境配置

背景:深鉴科技的DNNDK,是一个基于xilinx FPGA的SDK端的深度学习开发工具包,能够快速的实现深度学习的硬件化。目的:了解深鉴科技DNNDK内容。一. 简介DNNDK™ (Deep Neural Network Development Kit)是深鉴科技面向AI异构计算平台 DPU (Deep learning Processor Unit,深度学习专用处理器)自主研发的原创深度学习SDK, 涵盖了神经网络Inference阶段模型压缩、编译优化和高效运行时支持等各种功能需求,为 D

2021-04-01 23:49:31 2599

原创 有道云笔记转csdn或微信公众号

有道云笔记在写笔记上非常方便,排版,颜色,标题,代码等都非常好看,基本满足写博客的格式要求。但在有道云笔记写好之后,想发表在csdn或微信公众号等平台上,存在很多问题,比如代码格式乱,图片无法上传等问题,看了网上的一些解决方法,有以下几种方法:1. 先导出word格式再从word上粘贴再复制到csdn中;2.写markdown,复制markdown到csdn的markdown编辑器,但也会有markdown格式不对应的问题。其实,在转换过程中,最麻烦的还是图片和代码格式问题,上传图片特别麻烦,.

2021-04-01 23:34:44 853 1

原创 ZYNQ学习之路19.在SDx中使用xfOpenCV图像加速处理

简介Xilinx的reVISION栈包含了一系列开发平台、算法和应用的开发资源,它支持流行的神经网络包括AlexNet, GoogleLeNet, VGG, SSD和FCN等,并且该视觉库提供了用于创建和实现CNN神经网络层的库,机器学习的元素被实现为一系列硬件加速的函数库,在应用开发层,Xilinx提供了标准的框架和库包括Caffe和OpenCV, reVISION栈同时也提供了第三方平台的开发平台,包括很多的传感器。xfOpenCV是使用Xilinx SoC和FPGA优化硬件加速的OpenCV函

2021-04-01 23:04:07 1722

原创 ZYNQ学习之路18.创建基于Linux系统的SDSoC平台

在第三节中,我们成功创建了ZYNQ裸机下的SDSoC平台文件,但在实际使用中,要求使用Linux操作系统。本节介绍如何创建基于Linux系统的硬件平台。一、创建Linux启动文件使用PetaLinux创建Linux启动文件,在PetaLinux学习02-创建PetaLinux工程.note中有详细的介绍。本节只做操作流程介绍。1.1 使用PetaLinux创建Linux启动文件首先确保使用vivado创建的工程功能完整正常,导出HDF文件,在PetaLinux环境中操作:$ petal

2021-03-31 23:33:07 423

原创 ZYNQ学习之路17.自定义SDSoC硬件平台

前言在前面的学习中,我们已经学会了使用Vivado及SDK开发环境,熟悉了硬件开发与Linux软件驱动之间的联系及开发流程。本系列教程我们学习SDSoc的开发,在SDSoc IDE中,Xilinx为我们集成了比较流行的开发板硬件平台,如果我们使用的是其中的一个,可以直接使用。但笔者使用的是米尔科技的7z010开发板,在开发之前首先要定义我们自己的硬件平台,作为之后创建应用的模板工程。一个SDSoc Platform工程应该包含如下文件:硬件支撑文件(DSA):A device support a

2021-03-29 23:46:02 1389 1

原创 ZYNQ学习之路16.SDSoC开发环境介绍

本节教程介绍如何使用SDSoC软件创建硬件平台,并且使用它来加速程序函数。开发环境:操作系统: windows10 64bitSDSOC:2018.2串口: USB-TTL, CP210x开发板:米尔科技Zturn board(XC7Z010-CLG400)一、SDSOC IDE开发环境简介本节介绍如何使用SDx IDE已一个已知的模板创建一个新的工程,标记某个函数使其使用硬件来时现,编译硬件设计并且在开发板上执行。1.1 创建新的工程step1. 从桌面的快捷图标启动S

2021-03-28 17:20:46 1354

转载 ZYNQ学习之路15.基于SDSoC的开发环境应用介绍

本节开始学习Xilinx另一个很牛逼的软件工具SDSoC,它到底有多强,在学习使用之前读者还是有必要了解一些该软件的功能以及使用它开发的优势。此文为转载其他新闻/博客内容!如有雷同必定是笔者搬运之~近年来“Software Define ” 软件定义这个词持续火热,全球知名技术研究和咨询公司Gartner早在对2014年最有战略意义的十大技术与趋势做出预测时,便提出了软件定义一切(Software Defined Anything)的概念,他们预测这类技术会在未来三年里拥有巨大潜力,并在同行业中产.

2021-03-24 23:39:13 580 3

原创 ZYNQ学习之路14.时序仿真

在编写ZYNA的FPGA逻辑代码过程中,往往需要对时序进行分析。时序信号的分析一般通常有软件仿真和在线仿真两种,本文介绍这两种方法的具体使用方法。一.Vivado软件时序仿真建立时序仿真的步骤:1. 建立工程后,添加源文件,本文以一个非常简单的模块——生成1Hz方波,进行说明。module clock_1Hz( clock, //input system clock,30MHz clk //output 10Hz clock, 10Hz ); .

2021-03-13 17:10:37 2427

原创 ZYNQ学习之路13.创建PetaLinux工程

在前面的学习中,我们知道如何根据PetaLinux BSP设计去创建一个工程,现在,我们结合Vivado设计我们自己PetaLinux系统。开发环境:Ubuntu16 64bit, PetaLinux 2018.2, Vivado 2018.2硬件环境:米尔科技Zturn board(XC7Z010)一、配置硬件环境1.1 创建硬件工程Zynq-7000运行嵌入式Linux系统要求至少包含以下硬件外设:一个Triple Timer Counter(TTC) 至少32MB内存 串口

2021-03-08 23:22:17 1924 2

原创 ZYNQ学习之路12.PetaLinux开发环境搭建

简介PetaLinux是一个嵌入式Linux系统开发工具,用于设计Xilinx基于FPGA的SOC片上系统。本节为第一节,旨在介绍如何使用PetaLinux工具。软件环境: windows 10 64bit,VMware 12, ubuntu 16, Vivado2018.2硬件环境: 米尔科技Zturn board安装vmware后在其中安装ubuntu。一、安装PetaLinux开发环境安装PetaLinux要求:在非root权限下安装 PetaLinux依赖很多标准开发工

2021-03-08 23:00:05 1643

原创 Eclipse开发ZYNQ驱动程序

在虚拟机中的ubuntu中开发linux系统驱动程序,往往直接使用gedit编辑,makefile编译,而这种方法比较麻烦;Eclipse是开源软件框架,编辑器比较好用,配置好编译器后可以更加方便快捷的开发程序,本文介绍如何使用Eclipse开发Linux的驱动程序。本文的前提:安装按arm-xilinx-linux-gnueabi-编译器工具链。1. 建立C/C++项目工程,配置编译器为arm-xilinx-linux-gnueabi-gcc右键单击空白的工程文件名,Properties-&g

2021-01-31 00:08:01 532 5

原创 ARM NEON优化5.图像旋转

对灰度图进行向右旋转90度,需要至少遍历访问所有元素一遍,时间复杂度为o(mn),利用NEON加速可以并行读取多个元素,虽然没有改变时间复杂度,但常数因子减小了。问题描述针对灰度图进行旋转,假设输入图像尺寸为Height*Width,转换后的图像尺寸为Width*Height。转换效果如下图所示:转换后的图像坐标对应关系如下:C代码实现int GrayImageRotation90(uint8_t * in,uint8_t* out, int height.

2020-12-13 16:03:22 1722 2

原创 ARM NEON优化4.RGB图像转灰度图

问题描述灰度图像是用不同饱和度的黑色来表示每个图像像素,用0~255之间的数表示“灰色”的程度,比如0表示黑色,255表示白色,RGB值与灰度图之间的转换公式如下:一幅640*360*3的图像,转换成灰度图需要计算69万次浮点乘法运算,进行优化显得非常必要,但该转换算法最低的复杂度是O(n),无法从算法计算算法上进行优化了,但是,可以通过将浮点计算转成成定点整数计算来提高计算速度,另外还可以将除法计算转换为位操作进一步提高计算速度。对上面的公式进行16位定点转化:.

2020-12-13 15:53:38 840

原创 ARM NEON优化3.RGB Packed转RGB Planar

问题描述RGB Packet图像格式在内存中的排布顺序为 R, G, B, R, G, B,...,每个像素都是由连续的三个字节按RGB的顺序组成(8bit每像素的图像)。现在,我们想要将RGB的各个通道分离开,数据在内存中的排布变成R,R,R...,G,G,G,...,B,B,B...。如下图所示:C代码实现基本的C语言处理该问题代码如下:int RGB_Packed2Planar(uint8_t * packed, uint8_t* planar, int height,

2020-12-13 13:21:16 2469

原创 ARM NEON优化2.NEON基本数据类型与基本指令集

目录一. 基本数据类型1.1 64bit数据类型1.2 128bit数据类型1.3 结构化数据类型二. 基本指令集2.1 初始化寄存器vcreatevdupvmov2.2 加载数据进寄存器vldvld_lane2.3 存储寄存器到内存vstvst_lane2.4 读取/修改寄存器数据vget_lanevget_lowvget_highvset_lane2.5 数据重排vextvtblvrevvtrnvzi

2020-12-09 23:41:11 4888

原创 Halide编译安装与基本数据结构

OverviewHalide是为了在现代计算机上编写更高性能的图像处理代码而设计的一种编程语言。目前只吃的目标为:CPU架构:X86, ARM, MIPS, Hexagon, PowerPC 操作系统:Linux, Windows, macOS, Andriod, IOS, Qualcomm QuRT GPU计算API: CUDA,OpenGL, OpenCL, Apple Metal, Microsoft Direction X 12Halide不是独立的一种编程语言,而是嵌入在C++中,这

2020-09-23 00:45:27 1278 1

原创 Toy例程导读(三).高级语言分析和转换

创建一个接近输入语言语义的方言,可以在MLIR中进行分析、转换和优化,这些分析、转换和优化需要高级语言信息,并且通常在AST上表现出来。例如,CLang有一个相当重量级的机制来处理C++的模板实例化。我们将编译器转换分成两类:本地转换和全局转换。在本章中,我们将重点介绍如何使用TOY方言及其高级语义来执行LLVM中难以执行的本地模式匹配转换,为此,我们使用MLIR的通用DAG重写器。有两种方法可以用来实现模式匹配转换:1.命令式,C++模式匹配和重写;2.声明性的,基于规则的模式匹配和使用表驱动的重

2020-07-20 23:49:12 617

原创 ZYNQ学习之路11.AXI DMA

一.AXI DMA简介AXI DMA IP核提供了AXI4内存之间或AXI4-Stream IP之间的内存直接访问,可选为分散收集工作模式,初始化,状态和管理寄存器等通过AXI4-Lite 从机几口访问,结构如图1所示,AXI DMA主要包括Memory Map和Stream两部分接口,前者连接PS段,后者连接带有流接口的PL IP核。图1 AXI DMA结构框图AXI DMA...

2020-03-08 14:01:11 5279 1

原创 ZYNQ学习之路10.DMA PS(PL330)基础

1. 什么是DMADMA是直接内存访问(Direct Memory Access),DMA引擎可以将数据从一个地方传输到另一个地方,在传输过程中不经过CPU的控制。最简单的DMA用法是将数据从内存的一个区域搬运到另一个区域。DMA也可以将外设的数据(如ADC)搬运到内存中,或者将内存数据搬运到外设中(如DAC)。Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330...

2020-02-16 22:33:26 6097 3

原创 ZYNQ学习之路9.USB总线学习(二)

Linux中USB驱动程序依然遵循标准的设备驱动模型——总线、设备、驱动。和I2C总线设备驱动一样,所有的USB驱动程序都必须创建的主要结构体是struct usb_driver,它们向USB核心代码描述了USB驱动程序,但这只是外壳,只实现了设备与总线的挂接,具体的USB设备是什么,如何实现,还需要编写相应的文件操作接口。本文详细介绍USB的驱动框架。一. USB设备基础知识1.1 US...

2020-02-05 21:19:08 3885

原创 ZYNQ学习之路8.USB总线学习(一)

通用串行总线(Universal Serial Bus)是连接计算机系统与外部设备的一种串行总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通信产品。USB总线是最复杂的总线之一,但其广泛使用。本文首先直接使用USB相关的驱动的应用,后面再具体开始编程做自己的USB驱动程序。一.USB概要1.1 USB的发展历程USB1.0最早是在1996年出现,速度只...

2020-02-05 20:59:12 7179

原创 ZYNQ学习之路7.CAN总线学习

CAN总线是控制器局域网(Controller Area Network)的简称,是国际上应用最广泛的现场总线之一,CAN总线协议已成为汽车控制系统和嵌入式工业局域网的标准总线。CAN总线有很多优秀的特点,比如:传输速度最高达1Mbps,通信距离最远到10Km,无损位仲裁机制,多主结构,理论上挂载到总线上的设备没有数量限制。因此掌握CAN总线协议是很重要的,本文简要介绍CAN总线协议,以Lin...

2020-01-30 13:51:16 10159 1

原创 tflite文件解析

一. 安装flatbuffer下载flatbuffer:https://github.com/google/flatbuffers解压flatbuffer,进入其根目录cd flatbuffers mkdir build cd build cmake .. make -j4 sudo make install flatc --version #输出flatbuffer版...

2020-01-19 00:08:43 4380 4

Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux.tar.bz2

Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux.tar.bz2

2021-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除