Python-敲木鱼升级版(真手动版敲木鱼)

news2024/12/23 22:09:10

演示效果

需要安装的第三方库:
pip install pygame # 加载音乐
pip install pillow # 加载图片
pip install mediapipe # 判断手势的模型
pip install opencv # 模型要用来处理图形

建议有独显和摄像头的可以尝试!

想着升级一下玩法,只有真敲才能真积徳!于是找了个能判断手势的模型。

源码(开启摄像头后按Q退出)

import time
import tkinter
from tkinter import messagebox
import threading
import pygame # pip install pygame
from PIL import Image, ImageTk # pip install pillow
 
class window(tkinter.Tk):
        def __init__(self):
                super().__init__()
 
                # 初始化功德
                self.gongde=0
 
                # 准备音频
                self.pygame=pygame
                self.pygame.mixer.init()
                self.pygame.mixer.music.load('敲.mp3')
 
                # 准备图片
                self.qiaomuyutupian=ImageTk.PhotoImage(file='敲木鱼.jpg') # 转化为tkinter可以使用的图片
                self.qiaomuyutupian2=ImageTk.PhotoImage(file='敲木鱼2.jpg') # 转化为tkinter可以使用的图片
 
                # 启动界面
                self.base_top()
 
        def base_top(self):
                self.title('敲木鱼加功德')
                self.geometry('410x400')
                self.configure(bg='black')
 
                # 标签
                self.label1=tkinter.Label(self,text='积攒功德:'+str(self.gongde),font=('华文新魏',15),fg='white',bg='black',width=18)
                self.label1.place(x=100,y=70)
 
                # 按钮
                self.button1=tkinter.Button(self,image=self.qiaomuyutupian,relief='ridge',command=self.qiaomuyu)
                self.button1.place(x=100,y=100)
 
                # 按钮
                self.button2=tkinter.Button(self,text='互动',width=10,command=self.thread_hudong)
                self.button2.place(x=160,y=315)
 
                # 消息
                self.text1=tkinter.Text(self,width=10,height=5,bg='black',bd=0,foreground='white')
                self.text1.place(x=125,y=115)
 
        def showplus(self):
                # 文字浮动
                for i in range(4):
                        self.text1.insert('insert',' \n')
                else:
                        self.text1.insert('insert',' 功德 + 1')
                for i in range(5):
                        time.sleep(0.04)
                        self.text1.delete(1.0, 2.0)
 
                # 功德+1
                self.gongde=self.gongde+1
                self.label1.config(text='积攒功德:'+str(self.gongde))
 
        def changetupian(self):
                self.button1.config(image=self.qiaomuyutupian2)
                time.sleep(0.1)
                self.button1.config(image=self.qiaomuyutupian)
 
        def qiaomuyu(self):
                # 多线程启动解决延时,虽然延迟足够小,但为了更有效果
                th=threading.Thread(target=self.pygame.mixer.music.play)
                th.start()
 
                th2=threading.Thread(target=self.showplus)
                th2.start()
 
                th3=threading.Thread(target=self.changetupian)
                th3.start()
 
        def thread_hudong(self):
                th4=threading.Thread(target=self.hudong)
                th4.start()
 
                self.frame=tkinter.Frame(self,width=200,height=40,bg='white')
                self.frame.place(x=103,y=350)
 
                self.label2=tkinter.Label(self.frame,text='正在摄像头中,请稍等...',bg='white')
                self.label2.place(x=33,y=10)
 
        def hudong(self):
                import cv2
                import mediapipe as mp
 
                mp_hands = mp.solutions.hands
                hands = mp_hands.Hands()
                mp_drawing = mp.solutions.drawing_utils
 
                # coding:utf-8`
                cap = cv2.VideoCapture(0)  # 打开摄像头
                mark_one=0
                while True:
                        self.frame.destroy()
 
                        ret, frame = cap.read()  # 读取视频帧
                        if not ret:
                                break
                        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 转换颜色空间
                        results = hands.process(image)  # 手势识别
 
                        # 处理识别结果
                        if results.multi_hand_landmarks:
                                for hand_landmarks in results.multi_hand_landmarks:
                                        mp_drawing.draw_landmarks(
                                                frame,
                                                hand_landmarks,
                                                mp_hands.HAND_CONNECTIONS) # 用于指定地标如何在图中连接。
 
                                        for point in hand_landmarks.landmark:
                                                x = int(point.x * frame.shape[1])
                                                y = int(point.y * frame.shape[0])
                                                if y < 200:
                                                        mark_one=1
                                                if y > 400:
                                                        if 1 - mark_one == 0:
                                                                self.qiaomuyu()
                                                                mark_one=0
 
                                                cv2.circle(frame, (x, y), 5, (0, 255, 0), -1) # 画出关键点
 
                        cv2.imshow('Gesture Recognition', frame)  # 显示结果
                        if cv2.waitKey(1) & 0xFF == ord('q'):
                                break
 
                cap.release()
                cv2.destroyAllWindows()
 
if __name__ == '__main__':
        top=window()
        top.mainloop()

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

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

相关文章

二维码智慧门牌管理系统升级:引领政务服务、寄件、开锁、刻章新潮流

文章目录 前言一、政务服务二、寄件服务三、便民开锁和刻章服务四、应用范围 前言 在科技不断进步的时代&#xff0c;二维码智慧门牌管理系统升级版正在改变我们的生活&#xff0c;为政务服务、寄件、便民开锁、刻章等多种业务应用提供全新的解决方案&#xff0c;使我们的日常…

python基础(Python高级特性(切片、列表生成式)、字符串的正则表达式、函数、模块、Python常用内置函数、错误处理)培训讲义

文章目录 1. Python高级特性&#xff08;切片、列表生成式&#xff09;a) 切片的概念、列表/元组/字符串的切片切片的概念列表切片基本索引简单切片超出有效索引范围缺省 扩展切片step为正数step为负数 b) 列表生成式以及使用列表生成式需要注意的地方概念举例说明1. 生成一个列…

详细讲解如何求解「内向基环森林」问题

题目描述 这是 LeetCode 上的 「2876. 有向图访问计数」 &#xff0c;难度为 「困难」。 Tag : 「基环森林」、「内向基环树」、「拓扑排序」、「图」、「BFS」 现有一个有向图&#xff0c;其中包含 n 个节点&#xff0c;节点编号从 0 到 n - 1。此外&#xff0c;该图还包含了 …

OJ练习第185题——数组中两个数的最大异或值

数组中两个数的最大异或值 力扣链接&#xff1a;421. 数组中两个数的最大异或值 题目描述 给你一个整数数组 nums &#xff0c;返回 nums[i] XOR nums[j] 的最大运算结果&#xff0c;其中 0 ≤ i ≤ j < n 。 示例 官解思路 异或运算性质&#xff1a; class Solutio…

ZZ038 物联网应用与服务赛题第I套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;I卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的各类软件工…

NSSCTF第十页(2)

[HNCTF 2022 WEEK3]ssssti 题目提示是jinja2模板 怎么感觉之前做过&#xff0c;看到了注入 随便进行一下注入&#xff0c;发现了过滤 大致的黑名单 " _ args -- 无法使用 request.args os -- 无法导入os 不允许post -- 无法使用 request.value 正常用的payloa…

JavaScript从入门到精通系列第二十九篇:正则表达式初体验

大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻J…

暴力递归转动态规划(十三)

题目 给定3个参数&#xff0c;N&#xff0c;M&#xff0c;K 怪兽有N滴血&#xff0c;等着英雄来砍自己 英雄每一次打击&#xff0c;都会让怪兽流失[0~M]的血量 到底流失多少&#xff1f;每一次在[0~M]上等概率的获得一个值 求K次打击之后&#xff0c;英雄把怪兽砍死的概率。 暴…

算法题:53. 最大子数组和(动态规划)Java Python 实现

1、解题思路 该图引用自&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、动态规划解法-Python代码 # 空间未做优化时的代码&#xff0c;保留本部分代码是为了便于理解 # class Solution: # def maxSubArray(self, nums): # …

SpringBoot的Condition注解

文章目录 参考资料运行环境SpringBoot 自动配置原理一、Condition二、切换内置web服务器三、Enable*注解四、Import 注解五、EnableAutoConfiguration 注解六、案例七、收获与总结 参考资料 视频链接 运行环境 win10IDEA专业版SpringBoot 2.6.2 SpringBoot 自动配置原理 一、Co…

信道编码及MATLAB仿真

文章目录 前言一、什么是信道编码&#xff1f;二、信道编码的基本逻辑—冗余数据1、奇偶检验码2、重复码 三、编码率四、4G 和 5G 的信道编码1、卷积码2、维特比译码&#xff08;Viterbi&#xff09;—— 概率译码3、LTE 的咬尾卷积码4、LTE 的 turbo 码 五、MATLAB 仿真1、卷积…

javaspringbootMySQL网上商城系统的设计与实现08789-计算机毕业设计项目选题推荐(附源码)

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设网上商城系统。 本设…

07.Diffusion Model概述

文章目录 Diffusion Model原理Reverse ProcessDenoise模块Forward Process(Diffusion Process) 文字生成图片by Diffusion Model文字生成图像的常见套路Text EncoderFrchet Inception DistanceContrastive Language-Image Pre-Training(CLIP) DecoderGeneration Model 部分截图…

大数据毕业设计选题推荐-收视点播数据分析-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Leetcode实战

我们今天来利用这段时间的学习实操下我们的oj题。 int removeElement(int* nums, int numsSize, int val){int dst0;int src0;while(src<numsSize){if(nums[src]!val){nums[dst]nums[src];}elsesrc;}return dst;}我们这里用用两个下标&#xff0c;src来移动&#xff0c;如果…

抵押贷款巨头 Mr. Cooper 遭受网络攻击,影响 IT 系统

导语 近日&#xff0c;美国抵押贷款巨头 Mr. Cooper 遭受了一次网络攻击&#xff0c;导致该公司的 IT 系统受到影响。这一事件引起了广泛的关注&#xff0c;使得 Mr. Cooper 的在线支付平台无法正常运行。本文将为大家详细介绍这次网络攻击事件的具体情况及其对用户和公司造成的…

Alfred 5 for mac(最好用的苹果mac效率软件)中文最新版

Alfred 5 Mac是一款非常实用的工具&#xff0c;它可以帮助用户更加高效地使用Mac电脑。用户可以学会使用快捷键、全局搜索、快速启动应用程序、使用系统维护工具、快速复制粘贴文本以及自定义设置等功能&#xff0c;以提高工作效率。 Alfred for Mac 的一些主要功能包括&#…

项目实战:根据关键字检索,查找相应的水果

1、在index.html绑定查询点击事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"style/index.css"><script src"…

Python之字符串详解

目录 一、字符串1、转义字符与原始字符串2、使用%运算符进行格式化 一、字符串 在Python中&#xff0c;字符串属于不可变、有序序列&#xff0c;使用单引号、双引号、三单引号或三双引号作为定界符&#xff0c;并且不同的定界符之间可以互相嵌套。 ‘abc’、‘123’、‘中国’…

大数据Doris(十六):Doris表的数据划分

文章目录 Doris表的数据划分 一、Partition 二、 Bucket 三、PROPERTIES 四、 ENGINE Doris表的数据划分 Doris支持单分区和复合分