由于最近在家工作的政策,我需要一个在家锻炼身体的方法。我买了一张1/4大小的乒乓球桌和一块练习板(视频中的红色长方形)来帮助球反弹回来。虽然这是一种出汗的方式,但它并没有显示™™的练习表现,以及我花了多少时间。我希望有一种方法来跟踪每个实践的所有信息,作为以后改进的参考。此外,人类喜欢读数字。数字是一种魔力,可以激励人们做更多的事情。
经过反复试验,我建立了一个系统来显示我练习过程中最重要的数字:
- 多少时间过去了,
- 我用了多少球,
- 我打了多少枪,
- 目前的连续命中,
- 以及最大的连续命中率。
现在,我将解释这个系统是如何建立的。
架构
该系统由三个组件组成:
RTSP流
第一部分是最简单的部分,我从Fdroid网站下载了Spydroid。这是一款可以录制视频并通过RTSP协议流式传输的移动应用程序,配置灵活。™是一款移动应用程序,可以录制视频并通过RTSP协议进行流媒体传输。因为我计划把所有繁重的工作都放在PC上完成,所以我只需要一个设备来连续捕捉练习图像并将其发送到PC。蜘蛛机器人正好符合我的需要。
图像处理与Web服务器
在OpenCV库的帮助下,由python脚本完成图像处理。OpenCV库是一个非常成熟和流行的图像处理解决方案。在互联网上也可以找到很多资源。
我使用opencv来检测图像的左侧是否有任何图像差异(与球还没有进入屏幕的第一个图像相比)。我使用™来检测图像的左侧是否有任何图像差异(与球还没有进入屏幕的第一个图像相比)。通常,我站在桌子的右边,练习板放在左边。这就是为什么我只检测到图像左侧的原因–™。如果是这样,则在图像差异消失后将其算作一次击球(这意味着球再次离开屏幕)。
如果两次击球之间的时间差足够近,比如说在1到2秒内,我就认为他们是用同一个球连续击球。这是我计算当前连续命中和最大连续命中的方法。
当图像数据被处理时,结果应该被发送到某个地方,以便我在练习乒乓球时可以看到它。
我选择在iMac上编写一个Web服务器,而不是为平板电脑或移动设备编写应用程序,因为这样做更容易使用™。Web服务器是用Python和Flask编写的。我还使用了SocketIO来加快速度。
在Web上显示统计信息
当从Web服务器获取STATUS_RESPONSE时,网页会相应地更新内容。下面是代码片段:在网页上,有专门用于我需要的信息的-uro™元素。当新的值到来时,我只是更改文本。
以下是欧洲™的示例Web内容演示:
开始和停止跟踪
跟踪按钮将添加到网页底部。如果点击™,将触发Web服务器开始从手机读取RTSP流数据,并开始整个过程。
再次单击同一按钮时,将停止图像处理,并将当前统计数据保存到本地文件。然后,这些数据可以用来显示培训趋势和努力程度。
代码编写得不是很好,因为它只是一个概念验证解决方案,仅供个人使用。™只是一个概念验证解决方案,仅供个人使用。然而,我认为这个概念也可以很容易地应用到其他可能的场景中。希望这篇文章对您在家中的实践有所帮助。
本项目的源代码
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/05/%e4%b9%92%e4%b9%93%e7%90%83%e7%bb%83%e4%b9%a0%e8%b7%9f%e8%b8%aa%e4%bb%aa%e8%a1%a8%e6%9d%bf/