- 博客(64)
- 收藏
- 关注
原创 【Python】
Pyserial是一个用于串口通信的Python库。它允许Python程序与串口设备进行通信,如传感器、控制器、嵌入式系统等。Pyserial提供了一些函数和类来实现串口通信的各种操作,如打开和关闭串口、读取和写入数据、设置串口的参数等。需要注意的是,在进行串口操作时需要确保串口设备已经连接到计算机上,并且串口的参数与程序中设置的参数一致。获取缓冲区字符数量——count = ser.inwaiting()清空缓冲区——ser.flushInput()
2024-07-12 16:50:38
301
原创 【PyQt】
通过QtDesigner创建如下图所示的界面ui,并用UIC工具转成对应的py文件。案例一代码通过线程实现点击按钮向线程传输地址,程序等待20秒后,返回结果。通过QtDesigner创建如下图所示的界面ui。案例二通过线程实现用按钮控制进度条。
2024-07-11 16:48:43
461
原创 【PyQt5】
通过将耗时的任务放在子线程中执行,可以避免阻塞UI主线程,保持用户界面的流畅性。同时,通过使用异步任务或线程池等机制,还可以实现多个耗时任务并行执行,提高应用程序的整体性能。在应用程序中,主线程负责处理用户的输入事件、更新UI元素和响应系统的回调,而耗时的任务(例如网络请求、数据库访问、图像处理等)会在子线程中执行。如果将耗时的任务放在UI主线程中执行,会导致UI线程被阻塞,用户界面无法及时响应用户的操作,造成界面卡顿、无响应的现象,降低了用户的体验。
2024-07-09 17:05:02
266
原创 【计算机视觉(11)】
像梯度计算的是图像变化的速度,一般情况下,图像的梯度计算是图像的边缘信息。如果想要得到两个方向的梯度变化的组合图,应分别进行x和y方向上的梯度运算,然后使用组合函数进行组合,这是因为直接进行image = cv.Sobel(image, cv.CV_32F, 1, 1)的效果并没有分别进行x和y方向上的梯度运算二者融合的好。为了计算梯度幅度,通常 dx 和 dy 分别设置为 1 和 0,或者 0 和 1,然后计算两个方向的梯度,最后通过组合这两个方向的梯度来得到最终的梯度幅度。ddepth: 图像的深度。
2024-06-19 17:42:44
1175
原创 【计算机视觉(10)】
方框滤波的原理是利用方框函数来对邻域内的像素值进行加权,使得离中心像素更近的像素具有更大的权重,从而使图像变得更加平滑。中值滤波的原理是利用邻域内像素值的中值来替代该像素的值,从而有效地去除图像中的椒盐噪声和其他类型的噪声。高斯滤波的原理是利用高斯函数来对邻域内的像素值进行加权,使得离中心像素更近的像素具有更大的权重,从而使图像变得更加平滑。sigmaColor:参与计算的颜色范围,这个值是像素颜色值与周围颜色值的最大差值,只有颜色值之差小于这个值时,周围的像素才进行滤波计算。
2024-06-14 17:38:15
1051
原创 【计算机视觉(9)】
腐蚀操作是通过将图像中所有的像素点与结构元素进行逻辑“与”运算,来减小图像中边缘和细节的尺寸。黑帽操作基于原始图像和经过闭操作(Closing Operation)后得到的图像,通过求差运算来突出暗的小区域。顶帽操作基于原始图像和经过开操作(Opening Operation)后得到的图像,通过求差运算来突出亮的小区域。它基于图像的形状和大小特征,通过对图像进行特定的数学运算和变换来实现对图像的分割、腐蚀、膨胀、细化等操作。开运算可以用于去除图像中的噪点和细小的干扰物,同时保持图像的整体形状和轮廓特征。
2024-06-07 17:16:09
940
原创 【计算机视觉(8)】
它将图像的像素亮度值按照不同的亮度等级进行计数,并以直方图的形式呈现出来。图像直方图可以显示图像中每个亮度级别的像素数量,从而用于分析图像的亮度分布情况。[channels]: 用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道,多幅图像相当于多通道;ranges: 表示直方图中各个像素的值,[0.0, 256.0]表示直方图能表示像素值从 0.0 到 256 的像素。Mask: 与原图维度相同,被计算的区域,1 计算,0 不计算,不使用该参数用 None。
2024-06-06 17:43:01
483
原创 【计算机视觉(7)】
cv2.THRESH_BINARY:二值化阈值处理,大于阈值的像素点的灰度值设定为maxValue(如8 位灰度值最大为255),灰度值小于阈值的像素点的灰度值设定为0。阈值是图像处理中非常重要的概念,可以把阈值看作是图像的标准线,像素值与这条“标准线”进行比较,最后得到3种结果:像素值比阈值大、像素值比阈值小或像素值等于阈值。cv2.THRESH_BINARY_INV:反二值化阈值处理,大于阈值的像素点的灰度值设定为0,而小于该阈值的设定为maxValue。maxValue:阈值处理采用的最大值。
2024-06-04 17:11:26
619
2
原创 【计算机视觉(6)】
Pos1和pos2:原图4个点坐标和透视后的四个点的坐标,例如:[[0, 0], [1, 0], [0, 1],[1, 1]]。在实际的应用中最常使用的是图像的旋转,OpenCV提供了getRotationMatrix2D方法自动计算旋转图像的M矩阵。图像透视变换的本质是将图像投影到一个新的视平面,从不同的角度观察物体,会看到不同的变形画面。M:一个2行3列的矩阵,根据此矩阵的值变换原图中的像素位置,决定做哪种变换。M:一个3行3列的矩阵,根据此矩阵的值变换原图中的像素位置。
2024-05-31 17:18:57
459
原创 【计算机视觉(5)】
cv2.INTER_LINEAR:双线性插值(默认方法) ,cv2.INTER_AREA, cv2.INTER_NEAREST,cv2.INTER_CUBIC,interpolation:可选参数。在图像缩小或放大时需要删减或补充像素,该参数可以指定使用哪种算法对像素进行增减。几何变换是指改变图像的几何结构,例如大小、角度和形状等,让图像呈现出缩放、翻转、映射和透视效果。dsize:输出图像的大小,格式为(宽,高),单位为像素,例如:(640, 640)。flipCode:翻转类型,类型为整数。
2024-05-30 17:32:01
292
原创 【计算机视觉(4)】
色彩空间是人们为了表示不同频率的光线的色彩而建立的多种色彩模型。常见的色彩空间有RGB、HSV、HIS、YCrCb、YUV、GRAY,其中最常用的是RGB、HSV、GRAY。彩色图像RGB在机器中的颜色显示,是基于三基色而言的,三基色指的是红色、绿色和蓝色。
2024-05-28 17:09:34
287
原创 【计算机视觉(3)】
cv2.FONT_HERSHEY_TRIPLEX:正常大小的有衬线字体,比FONT_HERSHEY_COMPLEX更复杂。cv2.FONT_HERSHEY_DUPLEX:正常大小的无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂。cv2.FONT_HERSHEY_COMPLEX_SMALL:FONT_HERSHEY_COMPLEX的小版本。cv2.FONT_HERSHEY_SCRIPT_COMPLEX:更复杂的手写风格字体。cv2.FONT_HERSHEY_PLAIN:小号无衬线字体。
2024-05-24 17:11:44
794
原创 【计算机视觉(2)】
视频是由一系列连续的图像帧组成的。每一帧都是视频中的一张静止图像,它们以非常快的速度连续播放,给人一种连续运动的感觉。视频的帧率指的是每秒钟播放的帧数,常见的帧率有24帧/秒、30帧/秒和60帧/秒等。帧率越高,视频播放越流畅。视频的处理就是通过循环将视频流中的所有的帧进行处理。对于 MJPG, FourCC 的代码作为 cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) 或。ret:bool类型,判断是否读取到帧,成功为True,否则为False。frame:读取到的帧。
2024-05-23 17:49:47
874
原创 【计算机视觉(1)】
计算机视觉是人工智能 (AI) 的一个领域,是指让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息,并根据该信息采取行动或提供建议。如果说人工智能赋予计算机思考的能力,那么计算机视觉就是赋予发现、观察和理解的能力。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
2024-05-21 17:46:55
362
原创 Python入门(八)
典型的面向过程语言,如C语言,有很完善的模块系统。选择环境变量,在其中添加PYTHONPATH的新变量,然后设置这个变量的值,即想要搜索的路径。为了减少代码的冗余,减轻我们的工作量,我们常常将代码分块编写,在Python中更是如此,那么我们怎么在一个新的程序文件中调用我们已经编写好程序文件的函数,我们使用import。借着import语句,我们可以在second.py中使用first.py 中定义的laugh()函数。如果你是自定义的模块,则可以放在合适的地方,然后修改PYTHONPATH这个环境变量。
2024-03-31 09:13:09
429
1
原创 Python入门(七)
栈最显著的特征是“后进先出”当我们往箱子里存放一叠书时,先存放的书在箱子底部,后存放的书放在箱子顶部。这就是“后进先出”。且函数内部使用的是自己内部的那一份,所以函数内部对info的操作不会影响到外部变量info。上面的解法使用了递归(Recursion),即在一个函数定义中,调用了这个函数自身。递归的关键是说明紧邻的两个步骤之间的衔接条件。它还会寻找函数外部,也就是 Python 的主程序(其实是.py程序模块中构成的模块)中定义了的变量。因此,在一个函数内部,我们能“看到”函数外部已经存在的变量。
2024-03-25 01:21:30
275
原创 Python入门(六)
只不过,在包裹关键字传递的时候,数据容器不再是一个元组,而是一个字典。参数名成为元素的键,而数据成为元素的值。为了提醒,参数all_arguments是包裹关键字传递所用的字典,因此在all_arguments前加**。为了提醒Python参数all_arguments是包裹位置传递所用的元组名,我们在定义package_position()时要在元组名all_arguments前加*号。注意:普通传参和关键字传参可混合使用,但需要注意的是,在混合使用的过程中,所有的位置参数需要出现在关键字参数前。
2024-03-25 00:53:07
308
原创 python入门(五)
当然,对于max()是Python中的内置函数,所以其函数文档是已经准备好的,那么对于我们自己定义的函数我们要怎么添加,我们看下一个例子:给函数square_sum加上简单的注释,然后我们使用help()函数来查询一下:结果如下:注意:通常要将文档写的尽可能详细,特别是参数和返回值。
2024-03-24 11:37:17
548
原创 Python入门(四)
Python先检测if的条件,如果发现if的条件为假,则跳过隶属于if 的程序块,检测 elif的条件;在whil的隶属程序中,我们不断改变参与条件判断的变量i,直到它变成10,以至于还不满足条件而终止循环。进一步缩进的程序隶属于内层的if。Python与C语言、Java语言等不太相同的是,Python用缩进来表明代码的从属关系,所以缩进是强制的。但有的时候,我们只是想简单地重复特定的次数,不建立序列,可以使用range()函数。当然,C语言也可以使用缩进,但是与不缩进没有任何区别,得到的是相同的结果。
2024-03-17 23:17:15
336
原创 Python入门(三)
所以,在列表中,由于能够改变数据,就可以通过下标对单个元素进行赋值。序列中的元素是有序排列的,所以我们可以根据每个元素的位置找到对应的元素,元素的位置索引称为下标。比如下面的例子中,"tom"对应11,"sam"对应57,"lily"对应100。由于键值之间的一一对应关系,所以词典的元素可以通过键来引用。序列是有顺序的数据集合。序列包含的一个数据被称为元素,序列可以由一个或多个元素组成,也是可以没有任何元素的空序列。除此之外,序列的元素不仅可以是基本类型的数据,还可以是另一个序列,即在序列中嵌套序列。
2024-03-17 22:17:41
360
原创 python入门(一)
提到编程,那么对于“封装”一词我想大家并不陌生,那么要说什么是封装,其实就是把执行特殊功能的指令打包成程序块,再给这个程序块取一个好查询的名字,方便查询调用。OpenCV自发布起便得到广泛应用,其中包括在安保以及工业检测系统,网络产品以及科研工作,医学、卫星和网络地图(例如,医学图像的降噪,街景图像或者航空图像的拼接及其扫描校准等),汽车自动驾驶,相机校正等。编程对于我的理解来说,就是人与机器的互动,人用机器明白的语言操纵机器,让机器按照人的想法来工作,达到人想要的效果。image:返回的是读取到的图像。
2024-03-11 00:54:27
957
原创 AI入门笔记(四)
对于隐藏层的神经元会用3×3(通常是5×5)的方阵去扫描输入层的数据,主动去探索其需要的偏好,再利用相似整合为一个神经单元的信号和,就得到了卷积层,卷积层再通过这个方法得到池化层,最终通过相似度得出最后的结果。实际上,在隐藏层中,有很多层,不停的卷积简化,由一个很大的输入层最后得到一个值,而通过层层卷积,这就是“深”就是深度学习,而这个结构组成的就是卷积神经网络。当输入层接收到数据后,经过卷积到隐藏层中的卷积层,卷积层简化后到池化层,最终到输入层进行输出。图像的像素为单色二值。我们以一个例题为例。
2024-03-10 23:34:03
324
原创 STM32单片机基本原理与应用(十一)
此实验采用STM32核心板+ LD3320模块,通过初始化LD3320并写入待识别关键词,对麦克风说出相应关键词,实现实训平台上的流水灯相应变化的效果。LD3320 是一颗基于非特定人语音识别 (SI-ASR:Speaker-Independent Automatic Speech Recognition)技术的语音识别/声控芯片。提供了真正的单芯片语音识别解决方案。
2024-03-10 22:31:03
889
原创 STM32单片机基本原理与应用(十)
JPEG 是 Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为“.jpg” 或“.jpeg”,是最常用的图像文件格式,由一个软件开发联合会组织制定,同 BMP 格式不同, JPEG 是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤(BMP 不会,但是 BMP 占用空间大)。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP 文件所占用的空间很大,但是没有失真。
2024-03-03 23:12:59
1134
原创 AI入门笔记(三)
神经网络又是如何工作的呢?我们用一个例子来解释。我们看下面这张图片,我们要识别出这些图片都是0并不难,要怎么交给计算机,让计算机和我们得出同样的结果?难点就在于模式识别的答案不标准,正如以下几种情况都将识别为手写数字0。
2024-03-03 18:44:02
291
原创 AI入门笔记(二)
紧接着上一篇幅,点火条件的图形表示如下。利用单位阶跃函数可表示点火的式子:y=u(w1x1+w2x2+w3x3-θ)因为u表示的是单位阶跃函数,那么一般化点火的式子可以表示为:y=a(w1x1+w2x2+w3x3-θ),此处的a表示激活函数,x1、x2、x3 是模型允许的任意数值,与上面不同的是,抛出了生物的限制,y 是函数 a 能取到的任意数值,不止于取0或1,这里涉及到了神经元与神经单元的不同。神经元是基于生物上的,而神经单元是我们抽象化、简化后的神经元数学模型。
2024-02-27 18:06:14
252
原创 AI入门笔记(一)
人工智能是智能学科重要的组成部分,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人的大脑是由多个神经元互相连接形成网络而构成的,每一个神经元都可以从其他神经元那里接收到信号,同时也可以向其他神经元传递信号,所以这就形成了大脑中的信息流动,人的大脑就可以通过这种流动来处理各种信息。
2024-02-26 00:42:50
334
原创 STM32单片机的基本原理与应用(七)
超声波测距实验是STM32单片机通过控制HC-SR04超声波模块,使其发送超声波,遇到物体反射回超声波来实现距离测量,其原理就是在发射超声波到接收超声波会有一段时间,而超声波在空气中传播的速度为声速(340M/S),时间*声速就是超声波的往返距离,那么测量距离=(往返时间*声速)/2=超声波往返距离/2。HC-SR04是怎样做到发送和接收超声波的呢?HC-SR04具有两个控制端口TRIG和ECHO,TRIG用于触发测距,ECHO用于检测是否有超声波信号返回。
2024-02-06 16:36:54
2560
原创 STM32单片机的基本原理与应用(六)
在串口实验中,是通过mini_USB线搭建终端与电脑端(也可称终端,为做区分称电脑端)的“桥梁”,电脑端的串口调试助手通过mini_USB线向终端发送信息,由CH340芯片将USB接口进行转换,转换为串口,通过串口将信息传给单片机,串口接收到信息后,产生中断响应,单片机进行处理,单片机处理后返回一个信息给串口调试助手。在串口通信中,中断处理程序通常包括串口接收中断和串口发送中断两部分。串口接收中断用于处理接收到的数据,当串口接收到数据时,就会产生接收中断,并进入接收中断处理程序。
2024-02-04 23:28:14
719
原创 STM32单片机基本原理与应用(五)
12864液晶模块是一种图形点阵液晶显示器,其像素点为128(列)x 64(行),可显示8x64个汉字或者128个ASCII字符,支持图形显示。
2024-02-04 18:55:23
936
原创 STM32单片机基本原理与应用(四)
1、电机正反转控制在STM32中,直流电机的正反转控制主要通过改变电机输入电源的极性来实现。当电机的电压极性发生变化时,电机的旋转方向也会相应改变。在硬件电路中,可以通过继电器或晶体管等电子开关来切换电机的电源极性。在软件层面,STM32可以通过GPIO引脚的高低电平来控制电机的正反转。例如,当GPIO引脚输出高电平时,电机正转;当输出低电平时,电机反转。通过改变GPIO引脚的电平状态,可以实现电机的正反转控制。2、电机速度控制直流电机的速度控制可以通过PWM技术实现。
2024-01-30 23:53:29
1989
原创 总结NB-IoT模块和单片机的区别
(1)封装:封装尺寸、方式不同,对于STM32F103T8U6,其封装形式为VFQFPN36_6x6x05P(塑料四方扁平封装)体积小、重量轻。(2)核心架构不同: STM32F103T8U6采用ARM Cortex-M3内核,而STM32F103ZET6采用ARM Cortex-M4内核,有更高的处理能力和更低的功耗。NB-IoT模块只是一个节点,而STM32单片机确切的来说是一个系统。在学习了NB-IoT模块后,紧接着又学习了单片机系统,单片机和NB-IoT模块有什么不同之处呢,总结为以下几点。
2024-01-28 23:32:05
602
原创 STM32单片机基本原理与应用(三)
矩阵键盘由多个独立按键组成,按键的一端接地,一端接MCU的GPIO。当按键没有被按下时,电路其实是一个断路,将单片机该引脚设置成输入上拉状态,读到的电平为高电平。当按下按键时,引脚会被拉低,此时读到的电平为低电平,说明按键已经被按下。4*4的矩阵键盘,通常采用逐行逐列进行扫描。先扫描第一行,将该行输出高电平,其他行输出低电平,记为0xF7(1111 0111)。然后开始扫描列,控制列的引脚为输入引脚,将其和0XF7相与,如果哪一位为0,那么就证明哪一个被按下。
2024-01-28 23:04:28
695
原创 STM32单片机的基本原理与应用(二)
STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处。那么其中断是怎样实现的呢?其原理就是由GPIO口产生触发信号,通过NVIC中断控制器和EXTI外部中断控制器完成中断响应。使用外部中断可以对优先级进行分组,设置抢占优先级和响应优先级。STM32F103 的中断控制器支持 19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
2024-01-26 23:42:29
909
原创 拨动开关的原理与应用
拨动开关其主要原理就是通过控制电路通断实现不同电路连接,拨动开关常用的品种有单极双位、单极三位、双极双位以及双极三位等,它一般用于低压电路,具有滑块动作灵活、性能稳定可靠的特点。
2024-01-21 13:47:51
1533
原创 NB-IoT云平台实验
NB-IoT是Narrow Band Internet of Things的缩写,是指窄带物联网技术,基于蜂窝技术,是一种广域网络技术标准。由其名可知,“窄带”表明其带宽很小,只有180KHz,低功耗,用于连接使用无线蜂窝网络的各种智能传感器和设备。
2024-01-16 23:51:09
951
原创 基于STM32的串口通信——UART与和USART的基础与应用
在同步模式下,USART使用一个额外的时钟线来同步发送器和接收器之间的数据传输。此外,USART还支持同步模式,需要一个额外的时钟线来同步数据传输。在同步模式下,USART模块的工作方式和传统的串行通信协议相似,但具有更高的数据传输速率和更好的同步性能。UART模块支持全双工通信,是一种通用的异步串行通信协议,具有可编程的数据字长度、奇偶校验和停止位。STM32系列微控制器在嵌入式系统领域中应用广泛,其内建的UART(通用异步收发器)和USART(通用同步异步收发器)模块为串行通信提供了强大支持。
2024-01-14 21:05:03
695
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人