基于Opencv的形状识别
基于Opencv的形状识别
前言:
一个简单的形状识别。
实验环境
Window 10、Visual Studio 2022、 opencv4.6
涉及到的一些知识
findContours寻找轮廓函数
1234567891011CV_EXPORTS_W void findContours( InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());/** @overload */CV_EXPORTS void findContours( InputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset = Point());eg: vecto ...
华为开发者大会2023
华为开发者大会2023
得益于郑老师和华为终端公司有一个产学合作协同育人项目,对方提供了一次 8 月 6 日参加 HDC华为开发者大会的机会,因此我们能够参加此次开发者大会。
每个进场的人都有分配一个牌子,上面有个人的信息,二维码也是用来识别身份的。这个牌子真的很好看!特别是在太阳光的照射下,可以更明显得看出不同颜色。
大会分三天,每天都有不同的安排,最后一天也就是 6 号主要是 HarmonyOS学生公开课。
今天也是十分幸运,在公开课上答题获奖了,然后扫描二维码抽到了开发板(只有10个名额)!!,这个开发板是可以用来开发鸿蒙系统的,很是期待!!
书包是去年的,里面有一件白T但没logo,今年的T恤有logo;一个红色水杯,一个胸针。
打卡一些活动获取活力值兑换的奖品,一开始以为挂包是大的那种,早知道就换个书包了!!
光顾着玩了没怎么拍照片!
没有退路就是胜利之路!
期待下一次的到来(如果有机会的话hhh)。
基于Opencv的车道线检测
基于Opencv的车道线检测
前言:
这只是一个简单的检测,并不具有普遍性。车道线检测的应用很广泛,小到一些智能小车的巡线功能,大到无人驾驶巡线功能等,一般用于小车运动应用,但是在不同场景下,它们的需求大不相同,因此也就需要不同的技术去实现。本次实验采用opencv来实现,主要是用来复习巩固自己所学知识,同时由于是基于opencv实现的传统方法,没有运用一些模型来训练等,因此项目并不具有普遍性,需要根据不同视频进行调参。
实验环境
Window 10、Visual Studio 2022、 opencv4.6
涉及到的一些知识
霍夫变换
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。
Opencv中的霍夫线变换
霍夫线变换是一种用来寻找直线的方法。在使用霍夫线变换之前,首先要对图像进行边缘检测的处理,因此霍夫线变换的输入必须是二值图像。
OpenCV支持三种不同的霍夫线变换
标准霍夫变换(Standard Hough Transform,SHT)
多尺度霍夫变换 ...
移植u8g2库到stm32
抑制u8g2库到stm32(标准库)
移植u8g2库到stm32(标准库)
实验硬件:
STM32F103ZE
OLED:0.96寸OLED,IIC接口
U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,并支持如SSD1306等多种类型的OLED驱动。
U8g2源码的开源库地址:https://github.com/olikraus/u8g2
移植步骤
从官网下载 u8g2 的源码;
只移植c语言版本,因而只需要将用到 csrc文件夹内的文件;
找到需要对应的驱动文件(u8x8_d_xxx.c),只需要添加一个型号即可,这里我用到的是 u8x8_d_ssd1306_128x64_noname.c 文件,然后其余的型号可以删除掉(格式一般都为 u8x8_d_xxx.c)
修改 u8g2_d_setup.c 文件,找到对应 OLED型号的函数,这里用到的是u8g2_Setup_ssd1306_i2c_128x64_noname_f ,保留这个函数,其他删除掉或者注释掉。
1234567891011#include "u8g2.h"/* ...
嵌入式实践实习
嵌入式实践实习知识
大二下时长一周半多半周的嵌入式实习,由粤嵌的工程师教授知识。
环境及工具:Ubuntu 18.04,arm-linux-gcc 5.4.0,粤嵌GEC6818开发板
以下是此次实习中get到的一下知识以及遇到的一些问题。
2023.05.09
gcc : c语言编译器
g++ : c++编译器
gdb : c/c++调试器
binutils : 二进制工具集
MinGW : MinGW 是让Windows 用户可以用上 GNU 工具,比如GCC。
Cygwin : Cygwin 提供完整的类Unix 环境,Windows 用户不仅可以使用GNU 工具,理论上Linux 上的程序只要用Cygwin 重新编译,就可以在Windows 上运行。
如果程序只用到C/C++ 标准库,可以用MinGW 或Cygwin 编译。
如果程序还用到了POSIX API,则只能用Cygwin 编译。
cmd 输入 sysdm.cpl 打开环境变量设置
cygwin64 和 MinGW 的 gcc 和 g++ 只能有一个能使用,不能同时使用。
通过修改环境变量的优先级 顺序从上到下, ...
Ubuntu共享文件夹问题
Ubuntu 18.04 每次重启后共享文件夹未显示问题。
虽然虚拟机设置了总是启用共享文件夹,但是每次重启虚拟机之后还是未显示共享文件夹。
通过以下命令查看共享文件夹是否存在。
1vmware-hgfsclient
这边查询到共享文件夹是存在的,在 /mnt/hgfs 下进行 ls 查看目录时,共享文件夹并没显示。
使用以下命令可以得到解决,但是重启虚拟机之后仍然会出现找不到共享文件夹的问题。
1sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other
显然这种方法是不优的,因此采用下述方法,把这个命令放在 /etc/rc.local文件夹下,即可每次开机自动执行。
普通用户下执行命令打开 rc.local 文件:
1sudo vim /etc/rc.local
写入
123#!/bin/sh -esudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other
在 /etc 目录下输入 cat rc.local 查看是否添加成功。
在 /etc 目录下 ...
硬件通讯协议
常见硬件通讯协议
一些基础概念
串行通信协议
同步通信(asynchronous data communication):以数据块为单位传输,收发方必须使用同一时钟源。
异步通信(synchronous data communication):以字符为单位传输,两个字符之间传输的时间间隔不固定的,但同个字符内部的时间间隔是固定的,收发方无需使用同一时钟源,只要时钟信号的频率相同即可。
异步通信通过传送字符内的起始位来进行同步,而同步通信采用共用外部时钟来进行同步。
通俗点来说:同步通信就是舔狗发微信找女神,对方一直不回复,但舔狗一直在那等待回复;异步通信就是一个比较聪明点的舔狗发微信找女神,对方一直不回复,但舔狗不在那一直等待回复,选择了干其他事情。
数据传送方式
单工:只有一个固定方向进行传送数据。
半双工:双方都可以进行传送数据,但不能同时传送和接收数据,即只存在一方传送,一方接收。
全双工:双方都可以进行发送数据,并且可以同时传送和接收数据。
常见电平标准
TTL 电平:全双工,1:2.4V~5V,0:0.
电平类型
通信方式
逻辑1
逻辑0
TTL 电平
全双工
...
梯度下降法
1412.6980v8.pdf (arxiv.org)
duchi11a.dvi (jmlr.org)
CSC321 Winter 2014: lecture notes (toronto.edu)
[1212.5701] ADADELTA: An Adaptive Learning Rate Method (arxiv.org)
cs229.stanford.edu/proj2015/054_report.pdf
[1212.5701] ADADELTA: An Adaptive Learning Rate Method (arxiv.org)
lee16.pdf (mlr.press)
1609.04747.pdf (arxiv.org)
正则化方法
什么是正则化(Regularization)
深度学习可能存在过拟合问题——高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据,这是非常可靠的方法,但你可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高,但正则化通常有助于避免过拟合或减少你的网络误差。
规范化中并没有对偏置项进行规范化,因为即使对偏置进行规范化操作也并不会对结果改变太多,所以,在某种程度上,对不对偏置进行规范化其实就是一种习惯了。然而,需要注意的是,有一个大的偏置并不会像大的权重那样会让神经元对输入太过敏感。所以我们不需要对大的偏置所带来的学习训练数据的噪声太过担心。同时,允许大的偏置能够让网络更加灵活。因为大的偏置让神经元更加容易饱和,这有时候是我们所要达到的效果。所以,我们通常不会对偏置进行规范化。
正则化方法
L1正则化
L1 规范化是在未规范化的代价函数上加上一个权重绝对值的和:
Cost=Loss+λn∑w∣∣w∣∣1Cost = Loss + \frac{\lambda}{n}\sum_w \vert \vert w \vert \vert_1
Cost=Loss+nλw∑∣∣w∣ ...