Pythonのlibrosaで音声解析まとめ
音声解析なんて大学時代に授業で触った程度。
最近はPythonのライブラリでおおよそのことは出来るみたいなので、一通り触ってみた。
librosa
音声解析用ライブラリ。
github.com
librosaのインストール
pip install librosa
音声読み込み
audio_path="hogehoge"
y, sr = librosa.load(audio_path)
音声再生
注:jupyter notebookで実行しています。
display(IPython.display.Audio(y, rate=sr))
STFT(短時間フーリエ変換)
S = np.abs(librosa.stft(y) plt.figure(figsize=(12,4)) img = librosa.display.specshow(librosa.amplitude_to_db(S,ref=np.max),y_axis='log', x_axis='time', ax=ax) plt.title('Chromagram') plt.colorbar() plt.tight_layout()
メル尺度
人間の音声近くを反映した尺度。人間は低い音の聞き分けは得意だが、高い音は苦手なので、その辺を考慮したものになっている。
S = librosa.feature.melspectrogram(y, sr=sr, n_mels=128) log_S = librosa.power_to_db(S, ref=np.max) plt.figure(figsize=(12,4)) librosa.display.specshow(log_S, sr=sr, x_axis='time', y_axis='mel') plt.title('mel power spectrogram') plt.colorbar(format='%+02.0f dB') plt.tight_layout()
オンセット検出
オンセットとは音の開始点(らしい)
o_env = librosa.onset.onset_strength(y, sr=sr) times = librosa.times_like(o_env, sr=sr) onset_frames = librosa.onset.onset_detect(onset_envelope=o_env, sr=sr) D = np.abs(librosa.stft(y)) fig, ax = plt.subplots(nrows=2, sharex=True) librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max),x_axis='time', y_axis='log', ax=ax[0]) ax[0].set(title='Power spectrogram') ax[0].label_outer() ax[1].plot(times, o_env, label='Onset strength') ax[1].vlines(times[onset_frames], 0, o_env.max(), color='r', alpha=0.9,linestyle='--', label='Onsets') ax[1].legend()
ビートトラッキング
音声のテンポを自動検知して周波数を返す
onset_env = librosa.onset.onset_strength(y, sr=sr, aggregate=np.median) tempo, beats = librosa.beat.beat_track(onset_envelope=onset_env, sr=sr) import matplotlib.pyplot as plt hop_length = 512 fig, ax = plt.subplots(nrows=2, sharex=True) times = librosa.times_like(onset_env, sr=sr, hop_length=hop_length) M = librosa.feature.melspectrogram(y=y, sr=sr, hop_length=hop_length) librosa.display.specshow(librosa.power_to_db(M, ref=np.max), y_axis='mel', x_axis='time', hop_length=hop_length, ax=ax[0]) ax[0].label_outer() ax[0].set(title='Mel spectrogram') ax[1].plot(times, librosa.util.normalize(onset_env), label='Onset strength') ax[1].vlines(times[beats], 0, 1, alpha=0.5, color='r', linestyle='--', label='Beats') ax[1].legend()
MFCC(メル周波数ケプストラム
mfccs = librosa.feature.mfcc(x, sr=fs)
HPSS(Harmonic-Percussive sound separation)
調波打楽器音分離なんかも関数一発
y, sr = librosa.load(librosa.ex('choice'))
y_harmonic, y_percussive = librosa.effects.hpss(y)
サンプルが充実しているのが良い。
pythonでopencvまとめ
インストール
2020/08/02現在で4.3.0
pip install opencv-python
>>python Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.3.0' >>>
USBカメラから動画を取得
cap= cv2.VideoCapture(0) while(True): ret, frame = cap.read() cv2.imshow('usb cam',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
Pythonデータ分析まとめ(pandas, skitlearn)
基本操作
データ読み込み
test.csv
column1,column2,column3 1,2,3, 4,5,6, 7,8,9
を読み込む。
import pandas as pd df = pd.read_csv("test.csv") df.head()
エクセルファイルの場合
df = pd.read_excel("test.xlsx")
ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.
xlrdが入ってない場合は、インストールが必要
結合
innerだと同一名が合体するが、outerだと別(列・行)として結合される。
data = pd.concat([df1,df2],ignore_index=True)
data.head()
df1のデータをすべて残し、id一致で結合
data = pd.merge(df1,[df2,df3],on="id",how="left)
カラム作成
df4["column4"] = df4["column1"] * df4["column2"]
統計
df4["column1"].sum() #合計 df4["column1"].average()#平均 df4["column1"].min()#最低 df4["column1"].max()#最大 df4.describe() #統計量表示 df4.dtypes #データタイプ df4.groupby("column3").sum()["column2"]#column3のデータでグループ化したうえで、column2のデータをグループ内で合計
ユニーク
かぶらないデータのリストを返す
pd.unique(df4.column1)
欠損値
欠損値の有無をaxisで指定した次元に対して判定
df4.isnull().any(axis=0)
行指定、列指定(at,iat,loc,iloc)
at,iatは単一、loc,ilocは範囲指定が可能。atは使う機会が少ない気がする。
iat,ilocは行番号、列番号で指定。
df.loc[df['column2'] > 6, ['column4']]
コロナリモートで感じた、リモートワークに必要なもの
会社が準備すべきもの
ペーパーレスな業務フロー(必須度:★★★★★)
紙の資料にアクセスできないのが課題という内容がネットニュースになっていたが、紙を多用する職場では厳しい。
同様にハンコによる承認フローもリモートワークの敵となる。
通常から99%の業務をペーパーレスで行ってないと難しい気がする。
チャット(必須度:★★★★★)
複数人とリアルタイムに情報共有する為のコミュニケーションツールとして必須。
テレビ会議システム(必須度:★★★★★)
チャットで問題が解決しない時や、普通に会議をする為には必須。
VPN(必須度:★★★★)
社内のネットワークを必要とすることは多々あるはず。
ただし、IT系に限った話かも。
自宅に必要なもの
会社が準備してくれるかはわからないが、とりあえず家に必要だと思ったもの。
会社以外で会話する人(必須度:★★★★)
家族がいる人は問題ないが、独身の一人暮らしだと、平日はほとんど他人と会話しないことに気づく。
1週間家から出ないでいると、マジで喉から声が出なくなる。
誰でも良いが週一で会える、友人、知人、恋人、家族がいないと病む人が増える気がする。
ディスプレイ(必須度:★★)
会社のノートPCで作業するのは、なかなかやり辛い。
文書作成以上の作業をやる場合は、外付けのディスプレイが欲しい。
デスクとイス(必須度:★★★★)
うちには作業するようなデスクがないので、座布団に座り、ローテーブルで作業している。
腰が痛くなるとソファーに移動しているが、それも疲れる。
腰や肩を痛めない為にも、体にあったデスクとイスは必要。
ループイフダン実績 (完結)
年初からやっていたループイフダンだけど、クローズすることにした。
理由としては、リスクに対してリターンが少なすぎるから。
オーストラリアドル40pipの売買双方で張っていたけど、半年間で利益は1万ちょい。
その割に、大きな変動があった場合は10万ほど持ってかれたりする可能性があるのでクローズすることにした。
半年間自動で取引して損失を背負ってない点で、素人にとっては良いのかもしれないが、
取引回数に対して、利益が少なすぎる→業者大儲け ってことなんだろう。
世界情勢も見えないし、当面ループイフダンには戻らない予定。
tensorflow
tensorflow使った時の初心者メモ。
tensorflow.layers.dense
denseってなんだろうかと思ったけど、全結合レイヤーのことらしいです。
一通り説明されていたので助かりました。
www.daily-dev.net
ループイフダン実績 1月18日~2月15日
1カ月の運用の結果、
確定利益:+10255
含み損: ー3944
+6000円程度で終了。
買い、売り設定にもかかわらず月1万円の利益は少ないな。
しばらくは設定を変えずに運用する予定。