过去几个月里,我一直在发布关于自己探索 A.I. 的视频,把它当作记录学习的方式,所以第一次有人好奇地问我是怎么做出来的,真的很开心!😊
我写了一个脚本,用握拳来“空气打鼓”,播放的是我用马来鼓训练过的 RAVE 模型生成的声音。这只是一个限时小实验,有点像那种“只是因为可以所以就做出来”的傻玩意,所以我很高兴大家喜欢它,甚至超过我之前所有关于 A.I. 的帖子加起来。也许我一直都用错 Instagram 了,lol。
握拳空气打鼓
开始
总之,这是用所有 A.I. 应用的教父 Python 写的。说到 Python,依赖管理和这门语言的人类友好程度成反比。你需要安装 Python,知道如何 pip install,并能从命令行运行 Python 脚本,才能跟上这个教程。代码本身只有 115 行,是我像往常一样和 ChatGPT “结对编程”写出来的,lol。
这是我的系统配置和软件包版本:
-
Apple M2 Max
-
Python 3.10.6 -
mediapipe 0.10.9 -
pygame 2.5.2
下面的视频与其说是教程,不如说是在解释 demo 背后的思考过程和逻辑拆解。反正这些东西对迁移到其他技术任务更有价值也更重要。如果你知道自己需要准备哪些材料,并能清楚地一步一步指示 A.I. 如何做你想做的事,你就可以坐下来等代码生成。当然,你还是需要知道如何运行和调试。
教程:用 A.I. 空气打鼓
114 行代码
注意:你需要把 gesture_recognizer.task 和想播放的 .mp3 文件放在与脚本相同的目录里,或者更新文件路径。我使用的声音文件,基本上是由一个我用马来鼓训练过的 RAVE 模型 生成的音频。我也计划写一篇教程,介绍如何用免费的 Google Colab 笔记本训练你自己的模型,所以敬请期待!
import mediapipe as mp
import cv2
import pygame
import time
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
# For webcam input:
hands = mp_hands.Hands(min_detection_confidence=0.5, min_tracking_confidence=0.5)
last_sound_time = 0 # Tracks when the sound was last played
sound_cooldown = 2 # Cooldown in seconds
pygame.mixer.init()
sound = pygame.mixer.Sound('sample_out.mp3')
BaseOptions = mp.tasks.BaseOptions
GestureRecognizer = mp.tasks.vision.GestureRecognizer
GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions
GestureRecognizerResult = mp.tasks.vision.GestureRecognizerResult
VisionRunningMode = mp.tasks.vision.RunningMode
# Function to draw hand landmarks on the frame
def draw_hand_landmarks(frame, landmarks):
# Assuming landmarks is a list of landmarks with x, y, z coordinates normalized to the image size
for landmark in landmarks:
x = int(landmark.x * frame.shape[1])
y = int(landmark.y * frame.shape[0])
cv2.circle(frame, (x, y), 5, (0, 255, 0), -1)
# Create a gesture recognizer instance with the live stream mode:
def print_result(result: GestureRecognizerResult, output_image: mp.Image, timestamp_ms: int):
print('gesture recognition result: {}'.format(result))
handle_gesture(result)我移除了 numpy,因为它没有被用到;另外按 q 退出循环似乎也不工作。我通常会直接从命令行终止脚本。
这段代码也可以在我的 GitHub 仓库 找到。我会尽量定期发布和分享自己的代码,如果你想持续了解我在做什么,可以在那里关注我!
灵感
我做这个是受 Antoine(RAVE 的创作者)的工作启发,只是想探索在空中做音乐的想法。;) 因为为什么不来一场空气打鼓!!!它看起来太酷了,而且 Instagram 上的 800 多个赞也同意!
我是如何构建的
有了这个想法之后,我基本上通读了 hand_osc 仓库,然后专注于实现一个最小版本,让我不用花太多时间就能试试看什么是可能的。于是,在一个晚上里不断翻看资料、和 ChatGPT 聊天、调试、给出更清楚的指令之后,我做出了这个。
最大的障碍来自 GPT-4 里的 mediapipe 代码太过时了,所以我必须认真读文档,给 A.I. 示例,并一边做一边调试。显然这比上面描述的痛苦多了。但就像我喜欢说的,用 A.I. 构建东西是一种折磨般的乐趣。
接下来
在意识到什么是可能的、并在 Disney+ 上看完 Taylor Swift 的演唱会直播之后,我立刻觉得:如果能 用 A.I. 和 Embodme Erae II 为她的音乐打碟,那会很酷。我真的很喜欢 Don’t Blame Me 到 Look What You Made Me Do 的过渡,它顺滑得像黄油。当我在维基百科上查打碟,看到它说 DJ 是通过对齐节拍把不同曲目融合在一起时,我就想:我对音乐一窍不通,但这种“音乐”我可以用 A.I. 做。这听起来像是一个非常适合 A.I. 的工作。
如果把 time 放在 x 轴、bpm 放在 y 轴,就好像可以画出她演唱会中能量随时间的演化。让 A.I. 为你选择下一首歌并交叉淡入,难道不酷吗!?
事实上,我们可以把观众席的所有声音输入转成 MIDI,并在其上实时进行神经音频合成,把它纳入一场演出!当然,Spotify 已经有一个库可以让你这么做。
如果你不想当 DJ,只想演奏,也有办法。#ideas
等我有时间试这些想法应该会非常有趣,但我预计接下来会更新模型合并和 LLM 微调!
最初发表于 PubPub:erniesg.pubpub.org/pub/r2map92q。