- 博客(48)
- 资源 (6)
- 收藏
- 关注
原创 用C语言构建一个数字识别深度神经网络
接上一篇:按照深度学习的理论,随着神经网络层数的增加,网络拟合复杂问题的能力也会增强,对事物特征的挖掘也会更加深入.这里尝试构建一个5层深度的神经网络,包括两个卷积层和两个池化层, 其中输出层为全连接层,如下图示:程序中对应配置说明:conv_layer层: 为3x3的卷积层, 8个卷积核, 采用valid_padding(不填充),移动扫描步长为1.maxpool_layer层: 采用2x2最大池化,步长为2.
2023-08-09 19:24:41
1164
原创 用C语言构建一个数字识别卷积神经网络
为3x3的卷积层, 默认8个卷积核, 采用valid_padding(不填充),移动扫描步长为1. 需要通过训练来确定各个卷积核参数. 3x3的卷积核相比5x5和7x7的卷积核其参数量更少,非线性度更高,同时可以提取更小的特征. (5x5和7x7的卷积可以用多层3x3卷积来表示, 当然,随着层数的增加可能会产生新的问题.) 卷积层的输入部分就是灰度值表示的28x28的手写数字图像,这里也预先进行了归一化处理,即除以255.0.。取5万条训练样本进行训练,训练后再进行测试,其准确率可超过94%.。
2023-08-04 10:50:35
1689
2
原创 用C语言构建一个手写数字识别神经网络
用C语言构建一个手写数字识别神经网络, 采用简单的三层全连接神经网络,包括输入层(wi),中间层(wm)和输出层(wo).
2023-07-27 14:46:21
2817
1
原创 BVH动捕文件导入到E3D骨骼树
E3D骨骼树以每一块骨头作为树的节点,而BVH动捕文件以骨关节作为树的节点,两者有一定的区别,在转换的时候需要通过前后的关节数据来生成一个骨骼节点.。另外,E3D和BVH都是右手坐标系,尽管相对单元骨骼来说其XYZ方向会不同,但是由于所有旋转矩阵都是相对的,因此不会影响最后转换结果.。骨头的动画帧数据,记录了N组对应时刻t下的四元数Qts矩阵.。骨头的世界矩阵(相对于世界坐标系,gmat=amat。骨头的静状矩阵(静止状态下,相对其父节点)骨头的动态矩阵(动态状态下,相对于静止状态)float blen;
2022-11-17 11:06:18
584
原创 一种简单的三角形纹理映射算法
1. 基本原理如上图,已知物体空间中三角形的顶点坐标(x0,y0),(x1,y1),(x2,y2)分别对应到纹理空间坐标(u0,v0),(u1,v1),(u2,v2). 分别将他们的坐标值组合成3阶矩阵 matXYZ={ x0,y0,z0; x1,y1,z1; x2,y2,z2 } 和 matUV={ u0,v0,1.0; u1,v1,1.0; u2,v2,1.0 }假设存在一个变换矩阵T, 使得下面等式成立: matUV = matXYZ * matT 如果matT有解, 那么...
2022-04-22 19:27:04
1959
1
原创 一种简单的图形旋转算法
图形旋转好玩又有实用性, 这里介绍一种简单的图形旋转算法.具体步骤如下:1. 首先将原图和旋转图的坐标原点都变换到图形的中心位置处.2. 历遍旋转图形中的每一个pixel, 将pixel的坐标(j,i)反向旋转映射到原图, 得到原图对应的坐标值(Xr,Yr).3. 考虑到旋转图的尺寸可能大于原图,这时需要检测(Xr,Yr)是否在原图范围内,如果不是,则忽略下面步骤.4. (Xr,Yr)通常并不是正好对应到原图中一个整点的像素, 而是会夹在四个像素中(如图), 对四个像素的位置进行插值计算(也即所
2022-04-07 12:38:36
5087
原创 一种简单的抗锯齿算法
在LCD等显示器上逐点绘制几何图像的时候, 往往对几何体的边缘采样不足, 这就会导致出现锯齿状不平滑的边缘. 为了尽量减弱这种现象,需要在斜线或物体边缘进行更密集的采样,然后根据一定的权重比例将色彩/亮度等值分配到周边象素点, 使得其看起来有平滑过渡的效果. 下面是一种简单的抗锯齿算法.
2022-03-07 14:16:22
3882
3
原创 一个简单的RingBuffer
写了一个简单的RingBuffer模块。 主要函数包括: egi_ringbuffer_create() (创建RingBuffer), egi_ringbuffer_free()(释放RingBuffer), egi_ringbuffer_write()(写入数据), egi_ringbuffer_read()(读出数据)。通过一个mutex互斥锁来同步,以实现多个线程同时写和读.。egi_ringbuffer.h/*--------------------------------...
2021-11-17 10:50:31
646
原创 E3D:Boxman and Boxdog
E3D模块测试#mermaid-svg-q9dNLtWUzZBFpkXo .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-q9dNLtWUzZBFpkXo .label text{fill:#333}#mermaid-svg-q9dNLtWUzZBFpkXo .node rect,#mermaid-svg-q9
2021-10-21 20:46:00
138
原创 EGI例子: EGI_FFFT快速傅立叶变换应用
EGI mat_egiFFFT()函数采用定点方式进行快速傅立叶变换,特别适用于那些没有FPU单元的处理器,可以加快其计算速度.当然,定点计算对FFT输入数据的数量和取值范围有一定的限制.应用mat_egiFFFT()函数可以制作一些有趣的小应用,比如从麦克风拾取声音数据,并实时展示其频谱,让我们可以看到音频的律动效果.下面是具体的代码和解释./*------------------------------------------------------------------This p
2021-02-04 16:11:55
592
原创 EGI例子: 编写一个漂亮的wifi扫描仪
平台: openwrt基本思路: 用iwpriv命令来获得wifi扫描信息,用EGI图形库将所得结果呈现出来, 包括: SSID,信号强度,带宽,频段位置等. 效果一目了然,直观地标出了信号质量和干扰信道.Code:
2021-01-24 18:00:59
646
原创 Linux: sed命令的使用
sed是linux下一个非常好用的流式编辑器(stream editor), 它通过一边传输一边过滤的方式来对文本进行编辑,我们可以对指定内容进行排除/选择/替换/删除/增加等操作,同时可以配合正则表达式来使用.sed是以行为单位进行处理的,可以利用管道设置进行多个sed串接处理.这样,只要从管道的一头输入原始文本,从另一头就可以输出得到我们所需要的数据和格式了.sed只是对输出流进行了处理,原始的文件可以保持不变.总结一下常用的sed命令, 以方便复习.1. sed对文本行的过滤和处理sed -
2021-01-04 11:26:51
459
原创 AES-256算法C语言实现
AES是美国确立的一种高级数据加密算法标准,它是一种对数据分组进行对称加密的算法,这种算法是由比利时的Joan Daemen和Vincent Rijmen设计的,因此又被称为RIJNDAE算法.根据密钥长度的不同,AES标准又区分为AES-128, AES-192, AES-256三种,密钥越长,对每一数据分组进行的加密步骤(加密轮数)也越多.AES-128/192/256分别对应10/12/14轮加密步骤. AES-256对应的密钥长度为256bits, 其每一数据分组都需要进行14轮的加密运算,(若将
2020-12-15 13:46:13
6612
2
原创 SHA-256算法C语言实现
SHA-256是一种安全散列(哈希)算法(Security Hash Algorithm),它可以将任意长度的输入信息转化成256位长度的哈希数值(也称作'消息摘要'或'印鉴').SHA-256通常用在数字签名和密码保护中,比如区块链. 我们可以用生成的哈希数值和原始的哈希数值作对比,这样不用查验信息具体内容即可验证信息是否被篡改过.网络上有很多关于SHA-256算法原理和基本步骤的文章,我参考了这一篇: https://qvault.io/2020/07/08/how-sha-2-works-step-
2020-12-07 11:14:01
2391
原创 采集并显示摄像头视频流的程序实例
V4L2是Linux为视频设备所提供的内核驱动和应用程序统一接口体系. 有了它,应用程序就可以通过调用设备接口控制函数ioctl(),来实现对视频设备的参数设置和数据操控.通过编写一个操作摄像头设备的程序实例,我们可以学习到应用V4L2系统的一般步骤和重点.1. 调用一个摄像头设备的控制函数ioctl(),主要涉及使用下面的一些控制代码(IOCT CODE):VIDIOC_QUERYCAP 查询设备驱动相关信息及支持的各项功能,返回struct v4l2_queryctrl, 包括驱动名称,硬件名称,.
2020-11-14 12:01:27
2176
原创 应用libmad制作一款mp3播放器
应用libmad制作一个mp3播放器MAD(libmad)是一款高质量的MPEG音频解码器,它支持MPEG-1,MPEG-2(LSF) 和所谓的MPEG-2.5格式(支持更低的采样率),并实现了各标准下所有三个层级的解码(Layer I, Layer II, and Layer...
2020-11-06 14:00:35
2246
原创 EGI基本图形库示例:Geometries
EGI是设计运行在OpenWRT环境下的一款开源嵌入式GUI, 简单好玩。用它可以来开发一些简单图形小界面,同时还可以加入声效背景,GIF动画等。EGI的基本图形库包含了点,直线,圆弧,三角形,矩形等各种常用的几何图形。下面是一个基本图形库示例。/*---------------------------------------------------------------------------This program is free software; you can redistribute
2020-07-25 14:36:04
778
原创 EGI的第一个程序: Hello World.
EGI是设计运行在OpenWRT环境下的一款开源mini GUI, 简单好玩。用它可以来开发一些简单图形小界面,同时支持加入声效背景,GIF动画等。EGI是在WidoraNEO硬件环境下开发的,它非常适合开源软件教育,嵌入式爱好者们也可以通过它发挥自己的创意创造。EGI的第一个程序: Hello World./*--------------------------------------...
2020-03-14 10:47:18
425
原创 Openwrt: 为mplayer编制一个可以播放电影的Makefile
MPlayer是一款开源的多媒体播放软件,可以在Openwrt上来播放mp3和wav等音频文件。另外,mplayer还可以在slave模式下运行,这也是它的一大特色。为了让mplayer能在openwrt上顺利运行,需要进行合理的配置,剪裁掉图像和视频等相关的代码。以下是经过多次试验后的配置和步骤,给有兴趣的openwrt爱好者参考。这里假设openwrt的安装目录为openwrt_widora。...
2020-01-12 20:48:33
20486
1
原创 Openwrt: 为giflib编制一个Makefile
为了在widora_Openwrt环境下安装最新的giflib-5.2.1库,自己编制了对应的feeds Makefile. 由于giflib本身的Makefile没有configure配置, 在Openwrt环境下安装目录参数也需要调整. 最后步骤如下:1. 在 feeds/packages/libs 目录下建立子目录 giflib, 在其中建立一个Makefile, 内容如下:##...
2019-12-16 12:45:30
295
原创 利用objcopy将文件附加到程序中
当我们编制的程序需要调用图片或者mp3等媒体文件时, 通常是将相应的文件预先存放在指定的目录位置,程序运行时才可以被找到.其实还有一种更方便的办法,那就是将音乐或者图像文件直接插入到程序文件的某个段中. 程序启动时,先将这些文件释放出来,然后主程序就可以使用它了. 这个方法在<<程序员的自我修养>>里面有阐述,但是它并没有具体说明如何将文件释放出...
2019-11-22 13:29:45
400
原创 Openwrt_Widora: 一种定点FFT计算方法的实现
为了在自编的一个播放器上显示频谱效果,学习了一下快速傅里叶变换,做了一个定点的FFT程序。定点FFT程序主要应用到了浮点数的定点处理和复数的运算,为此自编了一个fft_math模块。FFT具体原理参考了《数字信号处理 第2版》(Richard G. Lyons), 在第5章节中对FFT有详尽的解释和演示。这里需要注意的是:1. 在Openwrt_widora编译环境下左右移位均为数学移位...
2019-08-23 10:53:35
1144
原创 Openwrt ubus: 进程间通信的例子
ubus是Openwrt实现进程间通信的一种总线机制, 由三部分协作完成通信过程:ubusd守护进程,ubus服务端,ubus客户端。1. ubusd守护进程: 管理ubus服务端和客户端的注册,并作为服务端和客户端的中间人, 进行消息转发, 所有消息均封装成json格式。向ubus服务端传递ubus客户端的请求(call),向ubus客户端传递ubus服务端的执行结果。2. ubus服...
2019-05-28 11:19:37
4435
2
原创 Openwrt ubox应用例子: 实现C/S网络通信
ubox是Openwrt的一个帮助工具包, 包含了MD5,链表,平衡树,blob标签式二进制数据包的生成和解释......等等基础API, 以及uloop,usock,ustream,ulog等应用。 通过学习ubox可以更好地理解和融入Openwrt框架体系。通过应用其中的uloop和usock可实现基于文件句柄监控和事件驱动机制的C/S结构网络通信应用。以下是一个实现的小例子:1....
2019-05-22 11:09:44
2421
原创 用C语言构建了一个简单的神经网络
用C语言构建了一个非常简单的神经网络,用来理解NN工作的基本原理。1. 模块说明: NVCELL: 单个神经元结构,包含输入向量和权重向量,并指定了对应的传递/激活函数。 NVLAYER: 单层神经网络,包含若干个NVCELL结构 各结构对应的方法函数包括:NVCELL和NVLAYER的产生/销毁函数,向前/向后传导函数,权重和偏置系数的随机产生函数等。2...
2019-04-19 18:51:31
3153
2
原创 Openwrt MT7688: 汇编实现hello world
在openwrt-widora环境下用汇编实现hello world, 用syscall来调用print和exit,其特点就是编译出来的可执行文件比用C编译出的小了很多。1.代码: asmhello.S#include <asm/regdef.h>#include <asm/unistd.h>.datamsg: .ascii "Hello Wo...
2019-04-03 09:11:24
463
原创 在Ubuntu上测试用live555推送摄像头H264数据流
1. USB摄像头: RERVISION 型号USB100W04H, 最大分辨率1280x720,支持H264,MJPEG,YUY2三种编码方式,支持UVC协议。 插入USB摄像头后会在/dev目录中出现video0和video1两个设备文件,其中video1为H264数据流usb设备.2. 在Ubuntu上安装FFmpeg,并编译完成Live555.3. 在Live555目录li...
2019-02-11 13:09:10
2746
5
原创 一个简单的字符设备模块
一个简单的字符设备模块,包括设备文件的读写和ioctl等基本操作,可以作为模板来使用。在Openwrt-Widora Linux 3.18.29 和 Ubuntu 16.04 Linux 4.15.0-36 环境下都可以调试通过。 1. 内核模块 hello.c/*---------------------------------------------------------...
2018-11-03 17:38:34
324
原创 C语言: 指针应用练习
//---- 1. 字符指针可以在定义时直接赋值 //---- 2. 指针在使用前必须先初始化 //---- 3. 通过分配内存给指针赋值,此时指针指向所分配的内存的首地址。 3.1 申请分配内存后,必须检查是否成功。 3.2 指针释放后应该置NULL //---...
2018-10-29 12:18:05
255
原创 在Widora_NEO上应用卡尔曼滤波来获得可靠倾角
在widora openwrt中应用卡尔曼滤波,目的是从加速度计ADXL345和陀螺仪L3G4200D采集的数据中提炼出相对真实可靠的倾角和角速度,通常这些原始数据里面包含有大量的噪音和毛刺,卡尔曼滤波可以有效滤除这些噪音,得到统计意义上的平均值(有义值), 而其中的毛刺则通过在平滑滤波中设定最大增量值来剔除。 主要的挑战是大量的矩阵计算,为此特意编写了一组矩阵计算...
2018-02-08 10:42:11
520
原创 "神经网络入门" 笔记
学习网上这篇文章的笔记, 对于线性代数和概率论只有模糊的记忆了,硬着头皮看了下去。发现这实在是一篇了解神经网络基础概念的好文章, 将自制的视图笔记分享在这里:1. 最简单的神经网络2.二分类神经网络3.带隐藏层的简单二分类神经网络4. 带隐藏层的多维神经网络
2017-10-22 11:19:44
373
原创 在Widora-OpenWRT上试用百度人脸识别API
在Widora-OpenWRT平台上试用了一下百度人脸识别API,感觉还可以,人脸识别的准确率还是挺高的。进行人脸识别之前,你必须先注册人员的图片,人脸识别其实是和你先注册的人脸图片进行比对,并给出一个相似度分值,分值达到80就基本可以判定是同一人了。 先注册了3张图片:(用命令 ./face.py -add Linus_Torvalds linus.jpg )
2017-08-17 19:39:27
2678
wegi_2022_03_20.tar.gz
2022-03-20
wegi_nogit_2021-05-09.tar.gz
2021-05-09
wegi_nogit_2021-04-07.tar.gz
2021-04-08
egi_nogit_2021-03-16.tar.gz
2021-03-17
egi_2021-03-04.tar.gz
2021-03-04
egi_2021_01_27.rar
2021-01-30
神经网络的意识与超意识
2024-08-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人