下面,我将用Python代码来一步步演示,希望大家能够举一反三,用Python玩转出属于自己的视频播放器程序!
用Python代码实现视频播放器功能,主要有6步。
第一步:导入需要的依赖库。
这里面主要用到三个库:
(1)tkinter库:用于界面制作
(2)PIL库:用于图片处理
(3)cv2库:用于视频捕获
第二步:定义视频播放器的窗体。
主要是定义一个视频播放器窗体。
第三步:定义并初始化视频显示控件。
主要是定义并初始化一个视频展示的显示控件框。
第四步:定义并初始化播放进度条控件。
主要是定义并初始化一个进度条显示控件条。
第五步:定义并初始化窗体菜单。
(1)定义并初始化菜单。
主要功能是定义文件菜单下的打开和关闭子菜单,然后分别对子菜单关联控制事件:打开播放视频事件和关闭播放视频事件。
(2)定义打开播放视频函数。
主要功能是获取打开视频的文件地址,并读取帧进行显示播放,同时与播放进度条进行关联。
(3)定义关闭播放视频函数。
主要功能是关闭播放的视频,并释放占用资源。
第五步:运行窗体主循环。。
以上就是用Python代码实现一个简易视频播放器的方法,下面给出具体的代码,供大家交流!
在本教程中,我们将学习如何基于 Opencv 和 Python 实现对象跟踪。
首先必须明确目标检测和目标跟踪有什么区别:
我们将首先讨论对象检测,然后讨论如何将对象跟踪应用于检测。
可能有不同的应用,例如,计算某个区域有多少人,检查传送带上有多少物体通过,或者计算高速公路上的车辆。
当然,看过本教程后,您会很容易地想到数以千计的想法应用于现实生活或可能应用于工业。
在本教程中,我们将使用 3 个文件:
首先我们需要调用highway.mp4文件并创建一个mask:
正如您在示例代码中看到的,我们还使用了 createBackgroundSubtractorMOG2 函数,该函数返回背景比率(background ratio),然后创建mask。
mask可视化结果:
但是,如您所见,图像中有很多噪点。因此,让我们通过删除所有较小的元素来改进提取,并将我们的注意力集中在大于某个面积的对象上。
使用 OpenCV 的cv2.drawContours函数绘制轮廓,我们得到了这个结果。
就本教程而言,分析整个窗口并不重要。我们只对计算在某个点通过的所有车辆感兴趣,因此,我们必须定义一个感兴趣的区域 ROI 并仅在该区域应用mask。
结果可视化如下:
函数 cv2.createBackgroundSubtractorMOG2 是在开始时添加的,没有定义参数,现在让我们看看如何进一步改进我们的结果。history是第一个参数,在这种情况下,它设置为 100,因为相机是固定的。varThreshold改为 40,因为该值越低,误报的可能性就越大。在这种情况下,我们只对较大的对象感兴趣。
在继续处理矩形之前,我们对图像进行了进一步的清理。为此,阈值函数就派上用场了。从我们的mask开始,我们告诉它我们只想显示白色或黑色值,因此通过编写254, 255,只会考虑 254 和 255 之间的值。
然后我们将找到的对象的坐标插入到 if 条件中并绘制矩形
这是最终结果:
我们现在只需导入和集成跟踪功能。
一旦创建了对象,我们必须获取边界框的每个位置并将它们插入到单个数组中。
通过在屏幕上显示结果,您可以看到所有通过 ROI 的通道是如何被识别的,以及它们的位置是如何插入到特定的数组中的。显然,识别的摩托车越多,我们的数组就越大。
现在让我们将带有位置的数组传递给tracker.update()。我们将再次获得一个包含位置的数组,但此外,将为每个对象分配一个唯一的 ID。
从代码中可以看出,我们可以使用 for 循环分析所有内容。此时我们只需要绘制矩形并显示车辆 ID。
在图像中,您可以看到结果
main.py
从视频中也可以看到,我们已经获得了我们在本教程开始时设置的结果。
但是,您必须将其视为练习或起点,因为关于这个主题有很多话要说,而本教程的目的只是让您了解对象跟踪的原理。
如果你想将 Object Tracking 集成到你的项目中,你应该使用更可靠和先进的对象检测方法,以及跟踪方法。
完整代码地址:私信“333”直接获取或者「链接」
继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装,本期我们简单介绍一下如何使用python来进行YOLOV3的对象检测算法
YOLOV3的基础知识大家可以参考往期文章,本期重点介绍如何使用python来实现
1、初始化模型
14-16 行:
模型的初始化依然使用cv下的DNN模型来加载模型,需要注意的是CV的版本需要大于3.4.2
5-8行:
初始化模型在coco上的label以便后期图片识别使用
10-12行:
初始化图片显示方框的颜色
2、加载图片,进行图片识别
输入识别的图片进行图片识别,这部分代码跟往期的SSD 以及RCNN目标检测算法类似
19-20行:输入图片,获取图片的长度与宽度
25-29行:计算图片的blob值,输入神经网络,进行前向反馈预测图片
只不过net.forward里面是ln, 神经网络的所有out层
3、遍历所有的out层,获取检测图片的label与置信度
遍历out层,获取检测到的label值以及置信度,检测到这里YOLOV3以及把所有的检测计算完成,但是由于yolov3对重叠图片或者靠的比较近的图片检测存在一定的问题,使用YOLOV3使用非最大值抑制来抑制弱的重叠边界
竟然把墨镜识别了手机,体现了YOLOV3在重叠图片识别的缺点
4、应用非最大值抑制来抑制弱的重叠边界,显示图片
56: 使用 非最大值抑制来抑制弱的重叠边界
58-59行:遍历所有图片
61-62行:提取检测图片的BOX
64-68行:显示图片信息
70-71行:显示图片
利用python来实现YOLOV3,与SSD 以及RCNN代码有很多类似的地方,大家可以参考往期的文章进行对比学习,把代码执行一遍
进行视频识别的思路:从视频中提取图片,进行图片识别,识别完成后,再把识别的结果实时体现在视频中,这部分代码结合前期的视频识别,大家可以参考多进程视频实时识别篇,因为没有多进程,检测速度很慢,视频看着比较卡
1、初始化模型以及视频流
2、从视频中提取图片,进行图片的blob值计算,进行神经网络的预测
3、提取检测到图片的置信度以及ID值
4、 应用非最大值抑制来抑制弱的重叠边界,显示图片
5、关闭资源,显示图片处理信息
每个目标检测算法都有自己的优缺点,个人感觉,在精度要求不是太高的情况下SSD检测算法可以实现较快的速度实现,毕竟精度差不多的情况下,我们希望速度越快越好