JUNのブログ

JUNのブログ

活動記録や技術メモ

WaterMelonSound のWebアプリ&API を公開しました。

タイトルにもある通りWaterMelonSoundのWebアプリとAPIを公開しました。

この記事は主にその2つの使い方などを紹介するものです。

WaterMelonSoundについては過去の記事を参照

jun-networks.hatenablog.com

jun-networks.hatenablog.com

Webアプリ

WebアプリURL: WaterMelonSound

使い方

  1. [ファイルを選択]から拡張子が.wavの音声ファイルを選択する。
  2. [アップロード]をクリックすると結果が表示される
    ファイル選択結果表示
    スクリーンショット

API

使い方

サンプルコード(Python3)

import requests
import json

url = "https://jun-web.herokuapp.com/watermelonsound/api/"
path = "shuukaku_1.wav"
files = {"wav_file": open(path,"rb")}
res = requests.post(url, files=files)

print(res.json()["status"])

結果

1

上記のURLに"wav_file": wavファイルと指定し、postリクエストを送ると判定結果がjsonで返ってくる。
成熟していれば1、未熟なら0が返ってくる。

システム的な話

ライブラリ(バージョン)

もしかしたら需要あるかもなのでviews.pyのコード載せときます。 views.py

from django.shortcuts import render, HttpResponse
from django.template.context_processors import csrf
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import os

from .app.main import predict_watermelon # 判定の関数

def form(request):
    if request.method != 'POST':  # POSTリクエストじゃない場合の処理
        c = {}
        c.update(csrf(request))
        return render(request, 'watermelonsound/index.html')

    file = request.FILES["file"]

    file_name = file.name

    if os.path.splitext(file_name)[1] != ".wav":
        return HttpResponse("The extension of this file is not wav")  # 「このファイルの拡張子はwavじゃありません」

    result = predict_watermelon(file)

    if result == 0:
        result = "早熟"
    else:
        result = "成熟"

    return render(request, 'watermelonsound/result.html', {
        "result": result
    })


@csrf_exempt
def api(request):
    if request.method != 'POST':
        c = {}
        c.update(csrf(request))
        return JsonResponse({"status": "Your request is not post request."})

    wav_file = request.FILES["wav_file"]

    file_name = wav_file.name  # ex: 'shuukaku_1.wav'

    if os.path.splitext(file_name)[1] != ".wav":
        result = "The extension of this file is not wav."
    else:
        result = predict_watermelon(wav_file)
    return JsonResponse({"status": result})

Django始めたばかりの初心者が書いたコードなので間違いや、もっと改善できそうな部分あればぜひコメントで教えてください。

参考にしたサイト

memoon.mskjp.com stackoverflow.com