Категория статьи: Нейронные сети
Проект: Shazam своими руками
Описание процесса загрузки файлов mp3 с сайта, используя пакет requests
Всем привет!
Как я уже говорил раньше, для обучения модели нам понадобятся музыкальные файлы записанные с микрофона. Я загрузил их на сайт и подготовил обработчик, который возвращает данные в формате json. Посмотреть его можно перейдя по этой ссылке https://evgenykondratev.ru/shazam/j?train=1
Давайте быстренько разберем что здесь есть:
• filecount - количество файлов mp3
• filename_prefix_train - это префикс файлов, которые используются для обучения модели (если префикс отсутствует - это оригинальный файл)
• path - Путь к директории с файлами
• status - Статус ответа сервера (Если 200, значит все в порядке)
• data - это список, каждый элемент которого состоит из 2х полей filename - имя файла mp3 и id - идентификатор mp3 файла (будем использовать для классификации звуковых файлов)
Давайте откроем файл проекта Colab и напишем код, который загрузит mp3 файлы в проект для дальнейшей работы с ними, используя формат json
Сначала создадим директорию, куда будем сохранять mp3 файлы. Так как создание директории будет использоваться несколько раз для разных папок предлагаю оформить в виде функции
import os
def create_dir_if_not_exists(src_dir, echo=False):
if not os.path.exists(src_dir):
os.makedirs(src_dir)
if echo:
print(f"Создана директория '{src_dir}'")
else:
if echo:
print(f"Директория '{src_dir}' уже существует")
Назовем нашу директорию "mp3" и вызовем функцию создания директории
mp3_dir = 'mp3'
create_dir_if_not_exists(mp3_dir, True)
Теперь перейдем, непосредственно, к запросу для получения данных в формате json
import requests
import json
response = requests.get(url="https://evgenykondratev.ru/shazam/j?train=1")
if response.headers['Content-Type'] == 'application/json':
mp3_data = json.loads(response.text)
print(list(mp3_data.keys()))
print(f"Префикс к файлами mp3: { mp3_data['filename_prefix_train'] }")
print(f"Путь к директории с файлами mp3: { mp3_data['path'] }")
print(f"Количество файлов для загрузки: {mp3_data['filecount']}")
Сначала импортируем пакеты requests и json, затем выполняем запрос и получаем ответ, далее анализируем тип заголовка ответа (убеждаемся, что данные пришли действительно в формате json). Загружаем данные из json в словарь mp3_data и выводим информацию на экран.
Следующий код тоже использует запрос, но уже на получение данных самих файлов mp3
from google.colab import output
for item in mp3_data['data']:
output.clear()
print(f"{item['id']} / {mp3_data['filecount']}")
r = requests.get(url=mp3_data['path'] + mp3_data['filename_prefix_train'] + item['filename'])
with open(os.path.join(mp3_dir, str(item['id'] - 1).zfill(4) + ".mp3"), 'wb') as f:
f.write(r.content)
f.close()
Результатом данного запроса будет ответ, в котором присутствуют определенные заголовки, а сам контент представлен в виде бинарных данных. Я просто открываю файл и сохраняю информацию. Обратите внимание на имя нового файла, оно составляется из идентификатора файла - 1 и дополняется 4-мя нулями (то есть будет так: 0000.mp3, 0001.mp3, 0002.mp3 ...). Единицу отняли, потому что списки в python начинаются с 0, а данные в json ответе начинаются с 1
Теперь у нас есть директория с mp3 файлами на основе которых мы будем подготавливать данные для обучения модели