【Modelground】个人AI产品MVP迭代平台(5)——神投手(实时投篮检测游戏)

文章目录

  • 介绍
  • 篮框识别
  • 进球算法
  • 离屏渲染
  • 总结

介绍

神投手是我开发的一款移动端web实时投篮检测游戏。其解决的痛点是:专为投篮训练而生的,有手机就能玩的投篮计数游戏。我本人是一个篮球爱好者,特点就是投篮准,虽然投篮挺靠天赋(手感),但是大量的训练一定是能锻炼出你的肌肉记忆,大大提升命中率。因此,对于一次有较多命中数的训练而言,计数将成为一个比较大的痛点。传统的人工计数虽然准,但是例如你想投进100个,靠脑子记忆多少有点费脑子(哈哈)。基于此,诞生了这款在线投篮计数游戏!

神投手基于Mediapipe对象检测模型,提供数据集,训练出可识别篮框的模型。利用图像处理算法,检测篮球进框的场景。为了提升游戏体验,每次进球,都有特殊音效,并且在达成目标后,也有特殊音效。

神投手游戏入口:https://tryiscool.space/shooter-game,欢迎移动端体验!

提供了两种模式:计数模式和计时模式,界面如下:

在这里插入图片描述在这里插入图片描述
点击开始按钮,进入游戏界面,对准篮框,手机保持静止后,点击录制,游戏开始。
在这里插入图片描述
左上角显示进球数,右侧可以退出和标定篮框。

篮框识别

篮框识别基于mediapipe的objectDetection模型,再训练。通过colab上的云服务器,在线训练,仅需要提供篮框的训练集即可。colab链接见:https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/customization/object_detector.ipynb#scrollTo=Mz3-eHe07FEX
在这里插入图片描述
篮框的识别不会稳定在真实篮框处,有时也会标错到其余的物体上,因此需要通过一个淘汰机制,来维持识别次数最多的矩形为篮框。不同的识别框也会根据覆盖度,确定新的篮框范围。

进球算法

进球算法使用图像处理,参考这篇论文Camera-based Basketball Scoring Detection Using Convolutional Neural Network。原理见下图:
在这里插入图片描述
简单讲就是每一张图片都和基准图片的灰度图做diff,得到的就是移动的物体,通过篮框周边范围的移动物体就是篮球,利用连通域算法,取出篮框周边最大的斑块大概率就是移动的篮球,再制定一些进球规则:

  1. 斑块的bbox宽度比篮框宽度小
  2. 斑块先经过篮框上边沿
  3. 斑块后经过篮框下边沿

符合以上规则,计一次进球。清空缓存,重新计算。

离屏渲染

由于模型计算量较大,如果通过通过渲染,会有明显卡顿,帧率较低。因此采用offscreenCanvas(离屏canvas)技术,这样可以大大提升运算的性能。

总结

这种算法的缺点是,手机不能移动,强依赖于图片的diff,另外,篮框的识别的准度和精度都有待提升(训练集是700+图片,似乎不够)。

实际使用场景较弱,很少有人带手机支架去球场打球,只能依赖篮球场边可以竖放手机的支撑物。横屏时前置摄像头靠近地面,拍摄的范围很狭窄,如果后置摄像头,又无法看到实际的篮框识别结果,无法手动标定篮框。

总体而言,是一次教难的尝试,但是过程中学到了蛮多东西,特别是死磕算法确实很难。

如果你有好的建议,请及时反馈我!如果你是篮球爱好者,欢迎试用神投手游戏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十一节:带你梳理Vue2: 父组件使用子组件时的修饰符和双向数据绑定

1. 原生事件修饰符.native 1.1. 关于组件标签上的事件 在组件标签上是没办法触发原生的js事件的,vue会将其作为自定义事件处理 示例代码如下: <div id"app"><!-- 使用组件 --><!-- 组件标签上使用DOM元素原生事件不会触发, --><my-compone…

DevExpress WPF中文教程:Grid - 如何向项目添加GridControl并绑定到数据

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

第十二届蓝桥杯单片机国赛练习代码

文章目录 前言一、问题重述二、主函数总结 前言 第十五蓝桥杯国赛落幕已有十天&#xff0c;是时候总结一下&#xff0c;这个专栏也将结束。虽然并没有取得预期的结果&#xff0c;但故事结尾并不总是美满的。下面是赛前练习的第十二届国赛的代码。 一、问题重述 二、主函数 完整…

大数据快速使用Kerberos认证集群

一、创建安全集群并登录其Manager 创建安全集群&#xff0c;开启“Kerberos认证“参数开关&#xff0c;并配置“密码“、“确认密码“参数。该密码用于登录Manager&#xff0c;请妥善保管。 登录MRS管理控制台页面。 单击“集群列表“&#xff0c;在“现有集群“列表&#xf…

虚拟机调用摄像头设备一直 select timeout问题的解决

在VMware里面调用v4l2-ctl捕获图像&#xff0c;或者opencv的VideoCapture(0)捕获图像&#xff0c;或者直接调用v4l2的函数&#xff0c;在streamon后&#xff0c;调用select读取数据&#xff0c;均会一直提示select timeout的问题&#xff0c;大概率是由于USB版本的兼容性造成的…

fs.1.10 ON rockylinux8 docker镜像制作

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 rockylinux docker上编译安装fs1.10版本的流程记录。 环境 docker engine&#xff1a;Version 24.0.6 rockylinux docker&#xff1a;8 freeswitch&#xff1a;v1.10.7 手动模式 rockylinux准备 docker hub拉取r…

MySql一条查询语句的执行流程是怎么样的?

MySql一条查询语句的执行流程是怎么样的&#xff1f; 1.前言 一条sql语句到底在执行时经历了什么&#xff1f;探究这个问题是学习mysql的重要步骤&#xff0c;面试时常被问到&#xff0c;也使得学习mysql时也有了知识框架的支撑&#xff0c;明白我们背的知识点到底用在哪里&a…

为什么要进行渗透测试?

渗透测试的重要性 渗透测试是一种安全评估技术&#xff0c;旨在模拟黑客攻击&#xff0c;发现和利用系统漏洞&#xff0c;以评估企业信息系统的安全性。以下是进行渗透测试的几个主要原因&#xff1a; 1.发现潜在的漏洞和安全风险&#xff1a;渗透测试可以模拟真实的攻击行为…

AI智能体做高考志愿填报分析

关注公众号&#xff0c;赠送AI/Python/Linux资料&#xff0c;对AI智能体有兴趣的朋友也可以添加一起交流 高考正在进行时&#xff0c;学生焦虑考试&#xff0c;家长们焦虑的则是高考志愿怎么填。毕竟一个好的学校&#xff0c;好的专业是进入社会的第一个敲门砖 你看张雪峰老师…

2024.6.10学习记录

1、代码随想录二刷 2、项目难点 review 3、计组复习

RabbitMQ-工作模式(Topics模式RPC模式Publisher Confirms模式)

文章目录 Topics模式topic代码示例 RPC模式客户端界面回调队列关联ID总结RPC代码示例 Publisher Confirms模式概述在通道上启用发布者确认单独发布消息批量发布消息异步处理发布者确认总结总体代码示例 更多相关内容可查看 Topics模式 在Topics中&#xff0c;发送的消息不能具…

目标检测算法YOLOv9简介

YOLOv9由Chien-Yao Wang等人于2024年提出&#xff0c;论文名为&#xff1a;《YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/2402.13616 &#xff1b;源码见: https://github.com/W…

一文带你轻松掌握Java数组定义和声明

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

ChatGPT原理10min快速掌握

一、引言 ChatGPT是一种基于人工智能技术的自然语言处理工具&#xff0c;由OpenAI开发。它利用深度学习技术&#xff0c;通过理解和学习人类语言来进行对话。ChatGPT的核心是使用了一种称为“Transformer”的深度学习架构&#xff0c;这种架构使得模型能够学习从输入文本到输出…

Java_Map集合

认识Map集合 Map集合称为双列集合&#xff0c;格式&#xff1a;{key1value&#xff0c;key2value2,key3value3,…},一次需要存一对数据作为一个元素。 Map集合的每个元素“Keyvalue” 称为一个键值对/键值对对象/一个Entry对象&#xff0c;Map集合也被叫做“键值对集合” Map集…

Vue笔记(二)

Vue&#xff08;一&#xff09;&#xff1a;Vue笔记&#xff08;一&#xff09;-CSDN博客 综合案例&#xff1a;水果购物车 项目功能&#xff1a; 视频链接&#xff1a;034-水果购物车-基本渲染_哔哩哔哩_bilibili 目录结构&#xff1a; index.css .app-container {padding-…

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10]

已解决Error || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10] 原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来…

第十一篇——信息增量:信息压缩中的保守主义原则

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过信息中的保守主义&#xff0c;我想到了现实中人的保守主义一样&#…

汇编语言作业(五)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、 实验总结 一、实验目的 1.熟悉掌握汇编语言的程序结构&#xff0c;能正确书写数据段、代码段等 2&#xff0c;利用debug功能&#xff0c;查看寄存器&#xff08;CS,IP,AX,DS..)及数据段的…

基于AI大文本模型的智慧对话开发设计及C#源码实现,实现智能文本改写与智慧对话

文章目录 1.AI 大模型发展现状2.基于AI服务的智慧对话开发2.1 大模型API选择2.2 基于C#的聊天界面开发2.3 星火大模型API接入2.4 优化开发界面与显示逻辑 3.源码工程Demo及相关软件下载参考文献 1.AI 大模型发展现状 端午假期几天&#xff0c;关注到国内的AI大模型厂商近乎疯狂…