AI Lazy DJ: Включете се в движение със Spotify, управляван с жестове!
Използване на Python с MediaPipe и Spotipy за управление на възпроизвеждането на вашата музика
Мотивация
Да си софтуерен инженер е една от най-добрите професии на този свят — защото можеш да решаваш технически проблеми, докато слушаш любимата си музика. Къде другаде можете да сложите вашите шумопотискащи слушалки и да слушате невероятни мелодии, докато пишете чист код и изграждате страхотни продукти?
Едно предизвикателство обаче остава – в свят, в който технологията и мързелът се сблъскват, безпроблемното управление на музиката все още е нещо.
Да! Болката е истинска. Намиране на раздела на браузъра или отваряне на настолното приложение и щракване върху Напред. Кой иска да направи това?
Не искам да се разсейвам от ценния си код.
И затова реших да се справя с това предизвикателство, представете си следното:
Напишете своя код и покажете кратък палец надолу, махайки във въздуха, и любимата ви музика от Spotify се контролира и преминава към следващата песен.
Благодарение на силата на изкуствения интелект и малко интеграция на API на трета страна, вашето музикално изживяване може да достигне съвсем ново ниво.
Пригответе се да се потопите в невероятното царство на Lazy DJ!
Къде да започна? Концепцията.
AI е на мода напоследък и не е чудно защо! Но забравете за момент сложните алгоритми и умопомрачителните невронни мрежи. Нашият AI Lazy DJ скрипт не се нуждае от преоткриване на колелото. Нека използваме това, което вече е там. Използвайки най-съвременните алгоритми за разпознаване на жестове, той трябва да класифицира вашите жестове с ръце в прости имена на жестове. И тогава ние ще ги използваме и ще ги картографираме, за да спотифицираме API заявките.
Започвайки с AI
Този път ще използваме Python, защото светът на AI се спря на него. За наш късмет има библиотеката mediapipe. Библиотеката прави машинното обучение на устройството достъпно за всеки и се предлага с вградени решения за разпознаване на жестове.
Изпълнението на този код на Python ще доведе до видео емисия на живо от вашата уеб камера, която ще разпознае предоставените от вас жестове с ръце:
# main.py import cv2 import mediapipe as mp from mediapipe.tasks import python class GestureRecognizer: def main(self): num_hands = 1 model_path = "gesture_recognizer.task" GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode self.lock = threading.Lock() self.current_gestures = [] options = GestureRecognizerOptions( base_options=python.BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.LIVE_STREAM, num_hands = num_hands, result_callback=self.__result_callback) recognizer = GestureRecognizer.create_from_options(options) timestamp = 0 mp_drawing = mp.solutions.drawing_utils mp_hands = mp.solutions.hands hands = mp_hands.Hands( static_image_mode=False, max_num_hands=num_hands, min_detection_confidence=0.65, min_tracking_confidence=0.65) cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = hands.process(frame) frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) np_array = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks: mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS) mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=np_array) recognizer.recognize_async(mp_image, timestamp) timestamp = timestamp + 1 # should be monotonically increasing, because in LIVE_STREAM mode self.put_gestures(frame) cv2.imshow('MediaPipe Hands', frame) if cv2.waitKey(1) & 0xFF == 27: break cap.release() def put_gestures(self, frame): self.lock.acquire() gestures = self.current_gestures self.lock.release() y_pos = 50 for hand_gesture_name in gestures: # show the prediction on the frame cv2.putText(frame, hand_gesture_name, (10, y_pos), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2, cv2.LINE_AA) y_pos += 50 def __result_callback(self, result, output_image, timestamp_ms): self.lock.acquire() self.current_gestures = [] if result is not None and any(result.gestures): for single_hand_gesture_data in result.gestures: gesture_name = single_hand_gesture_data[0].category_name if(gesture_name == "Thumb_Down"): # Do Something with Thumb Down Gesture # ... self.current_gestures.append(gesture_name) self.lock.release() if __name__ == "__main__": rec = GestureRecognizer() rec.main()
Преминаване към Spotify!
Сега, когато имаме разпознавател на жестове, трябва да добавим API на spotify.
За наш късмет — има библиотека на Python за него: spotipy.
Разкрива всички необходими функции, от които се нуждаем.
Следното е фрагмент от скрипта:
# ... import spotipy from spotipy.oauth2 import SpotifyClientCredentials from threading import Timer from threading import Thread # Set data client, redirect URL and username SPOTIPY_CLIENT_ID = 'YOUR_CLIENT_ID' SPOTIPY_CLIENT_SECRET = 'YOUR_CLIENT_SECRET' redirect_uri = 'http://localhost:8080' scope = 'user-modify-playback-state' sp = None t = None shouldNext = True class SpotifyApi: def connect(self): auth_manager = SpotifyClientCredentials( client_id=SPOTIPY_CLIENT_ID, client_secret=SPOTIPY_CLIENT_SECRET) global sp sp = spotipy.Spotify(auth_manager=spotipy.SpotifyOAuth(scope=scope, client_id=SPOTIPY_CLIENT_ID, client_secret=SPOTIPY_CLIENT_SECRET, redirect_uri=redirect_uri)) def spotify_next(): global sp global t global shouldNext if sp != None and shouldNext == False: shouldNext = True sp.next_track() try: t.cancel() t = None except(AttributeError): pass def __result_callback(self, result, output_image, timestamp_ms): # ... if(gesture_name == "Thumb_Down"): global t global shouldNext if shouldNext == True: shouldNext = False if t == None: t = Timer(2.5, spotify_next) t.start() # ... if __name__ == "__main__": api = SpotifyApi() api.connect() # ...
Когато използвате API на Spotify, трябва да се удостоверите, като използвате клиентски идентификатор и клиентска тайна. Можете да получите и двете, като регистрирате приложение в портала за разработчици на Spotify.
Добавяне на таймер за по-гладко управление и използване на библиотеката spotipy — можем да му кажем да премине към следващата песен, ако покажем жест „Thumbs_Down“.
Това е! Пригответе се и се насладете на управлението на вашата музика с помощта на AI.
Да - можете да се наречете AI Lazy DJсега!
Сега започва истинското забавление - какво ще правите с това ?
Ето някои идеи, които могат да бъдат забавни за изпълнение:
- Палец нагоре— запишете текущо възпроизвежданата песен към вашите любими
- Победа — Повторете текущата песен
- Насочване нагоре— Върнете се назад във вашето възпроизвеждане
и съм сигурен, че ще измислите още много.
Ще се радвам да чуя вашите идеи в коментарите!
Резюме
Прегърнете великолепната комбинация от мързел, шум от изкуствен интелект и чистата радост от забавлението. Със скрипта AI Lazy DJ Python, контролирането на Spotify с вашите жестове на ръцете става реалност, осигурявайки забавно и безпроблемно музикално изживяване.
Можете да намерите кода за проекта тук:
dminkovski/ailazydj: AI Lazy DJ (github.com)