SSブログ

【忙しいアピール定期】仕事が終わらねぇ… [徒然日記]

テレワークで無駄な打ち合わせや会議設定などのゴミ仕事が激減したのは嬉しいのですが、一方で資料作成や調査の仕事がすごく増えてしまい、気がつけば山のような仕事。

7月中締め切りの仕事が終わる気がまったくしない。最近はコロナ禍が広がりつつある上、天気もずーーと悪いので、外出で気晴らしもできず、気分も盛り上がらず、どうしても煮詰まってしまいます。


やる気スイッチ.png


もともと夏休みの宿題は最終週に片付けるタイプなので、締め切りがないと集中できない性分なんですよね。コロナ前は展示会や報告会、学会などがあるのでそれがモチベーションとなっていましたが、今はそれがないのでダラダラ仕事。生産性ワル…。

なんか、切羽詰まったときの集中力を呼び出す良い方法ないかなぁ。ストレスたまりそうだけど。
(´・ω・`)





「頭のゴミ」を捨てれば、脳は一瞬で目覚める!

「頭のゴミ」を捨てれば、脳は一瞬で目覚める!

  • 作者: 苫米地英人
  • 出版社/メーカー: コグニティブリサーチラボ株式会社
  • 発売日: 2014/04/14
  • メディア: Kindle版



なぜ、あなたの仕事は終わらないのか

なぜ、あなたの仕事は終わらないのか

  • 作者: 中島聡
  • 出版社/メーカー: 文響社
  • 発売日: 2016/06/01
  • メディア: 単行本(ソフトカバー)



マンガでわかる 「仕事が速い人」と「仕事が遅い人」の習慣 (Asuka business & language book)

マンガでわかる 「仕事が速い人」と「仕事が遅い人」の習慣 (Asuka business & language book)

  • 出版社/メーカー: 明日香出版社
  • 発売日: 2018/06/12
  • メディア: 単行本(ソフトカバー)




nice!(27)  コメント(0) 
共通テーマ:趣味・カルチャー

【惑星コロニー】人類が目指すべきは火星ではなく金星なのでは? [トンデモ学説]

UAEがアラブ諸国初となる惑星探査機「HOPE」を打ち上げました。H2Aで無事に軌道に投入できて日本の技術がアピールできたのもよかったですね。その後、中国の火星探査機が打ち上げられ、今月末にはアメリカも打ち上げ予定。日本も20年代後半にサンプルリターンを計画しています。


H2A_HOPE.jpg


それに加え、スペースXは火星にコロニーを作ることを真剣に検討しています。まさに火星探査ラッシュと言ってよい状態なのですが、はたして火星は人類が目指すのに相応しい星なのでしょうか?


Mars.png


火星は、重力が小さい、大気は薄い、また固有磁場もないので薄い大気を貫く放射線が直接降り注いできます。そして何より寒い。平均気温で-55度です。大量の水もあまり期待できないでしょう。


mars_sunset.jpg


地球に比べ、かなり過酷な世界と言わざるえません。テラフォーミングできたとしても活用できる資源が限られるため、かなり狭い領域となってしまうでしょう。まさに砂漠のオアシスですね。


本当に火星が人類にとってベストな移住先なのか?という疑問をもっていたら、こんな記事を見つけました!


人類は火星の前に金星を目指した方が良さそうな理由とは?
https://gigazine.net/news/20180315-venus-before-mars/
Venus.jpg


この記事によると、金星の地表上空50kmの場所では、気圧はほぼ1気圧。そして気温も30~50度と暑い夏程度。多くの放射線も大気が防いでくれます。そして大気中には硫酸だけでなく、二酸化炭素、窒素、水素も多く含むため、大量の水や作物の肥料を生成することもできます。

NASAは、飛行船型の探査機を飛ばす計画もたてているようです。


VinusCloudCity.jpg
https://io9.gizmodo.com/how-nasa-could-build-a-cloud-city-over-venus-1672240059


しかし、そこで大きな障害となるのは金星固有の大気の流れである「スーパーローテーション」です。地球でいう偏西風のようなものですが、風速が桁違い。4日で金星を一周する速さです。偏西風は秒速30mに対し、スーパーローテーションは秒速100m。そして金星全体を覆っています。


venus-winds.jpg
https://andymaypetrophysicist.com/can-earth-become-venus/


これを克服する術が見つかれば、計画も具体化するかもしれませんね。日本の金星探査機「あかつき」が収集したデータの研究成果が重要になってきそうです。


金星への移住というと地表を思い浮かべる人がほとんどだと思いますが、金星の地表は90気圧。地球で言うなら海底の気圧と比べるようなものです。

となると1気圧の空気を充満した飛行船は海の上の船のようなもので、気圧を保っていれば沈むことはありません。濃硫酸の雲も問題ですが、金星の大気に酸素がほとんどないので、金属が腐食することはありません。気球や宇宙服を金属で覆っても大丈夫でしょう。


VenusProbe.png
https://www.starletters.com/2018/06/18/is-a-human-mission-to-the-clouds-of-venus-possible/


飛行船内にある水や酸素は金星の外気に漏れ出ると非常に危険ですが、すでに人類は地球環境では非常に危険な水素やガソリンを安全に活用できる技術を身に着けています。克服できない課題ではないと思います。

一番の問題は、荒れ狂うスーパーローテーションですが、これも金星の気象をよく調べれば安全に飛行船を運用できる方法が見つかるでしょう。金星では天気予報が非常に重要になりそうですね。


VenusRaputaCity.jpg
https://www.starletters.com/2018/06/18/is-a-human-mission-to-the-clouds-of-venus-possible/


資源が乏しい火星でコロニーを作るよりも、資源が豊富な金星で「ラピュタの城」を作ったほうがよっぽど現実的だと思います。日本はここで火星探査のブームに乗るのではなく、金星探査に力を入れてほしいところですね。
(^^)/~





惑星気象学入門――金星に吹く風の謎 (岩波科学ライブラリー)

惑星気象学入門――金星に吹く風の謎 (岩波科学ライブラリー)

  • 作者: 松田 佳久
  • 出版社/メーカー: 岩波書店
  • 発売日: 2011/08/26
  • メディア: 単行本(ソフトカバー)










nice!(25)  コメント(0) 
共通テーマ:趣味・カルチャー

コロナの最新状況と第二波は来るのか? [徒然日記]

首都圏を中心に都市部でコロナが拡大しているなか、GoToトラベルが始まりました。今後、GoToイートも計画されているようです。よい機会なので、ここでコロナの状況を見てみましょう。例によって東洋経済さんの集計サイトからの引用です。

陽性件数はうなぎのぼりですね。これを見ると只事ではありません。

1_positive.png


PCR件数も増えています。傾向は陽性件数と明らかに相関ありですね。検査数が減っている時には陽性件数も減っています。市内の一定数に陽性者がいるということの証でしょう。

2_pcr.png


再生産数を見てみましょう。前回 1.7 まであがっていましたが、1.4程度で数値が安定しています。PCR件数も増えているので、これが現在の日本のライフスタイルでの市中感染力の実態と考えてよさそうです。陽性者数が増えてきて、多くの人が警戒しはじめたのではないかと思います。

3_reproduction.png


陽性者が増えていますので要入院治療者も着実に増えています。

4_hospital.png


重傷者も増加傾向ですね。あまりよい傾向とは言えません。医療体制の整備が急がれますね。

5_seriousinjury.png


死亡者は少ないですが、重傷者が増加していますので今後徐々に増加していくものと思えます。

6_death.png


年齢分布を見るとやはり20代から50代の生産年齢の世代が多いようです。特に20代が突出しています。いわゆる夜の街含めサービス産業に携わっている世代が多くPCR検査が重点的に行われた結果かもしれません。

7_distribution.png


政府がGoToを企画している背景には、陽性者は増えているものの重傷者・死亡者が低レベルにあることが背景にあるようです。やはりコロナウイルスが弱毒化していると見ているようですね。

ただ、このまま楽観できるかというとそうではないと思っています。個人的な意見ですが、本当の第二波は今年の冬に来るのではないかと思います。なぜ冬に風邪が流行するのか、次のような解説がありました。以下抜粋です。


新たな研究で、冷たい空気に触れて体内温度が下がると、免疫系がウイルスを撃退する能力も低下することが示唆されました。「マウスの気道細胞をモデルとして用いて検討した結果、鼻の中程度の低い温度(33度前後)では、宿主の免疫系がウイルス増殖を阻止する防御シグナルを誘起できないことが分かった」「屋外の冷たい空気を吸い込むと、一時的に鼻の中の温度が下がり、冷たい外気温によってウイルスが増殖して風邪を引き起こす」冬になると風邪のみでなくRSウイルスも流行します。呼吸器合胞体ウイルス(RSV)は、感染すると、風邪のような症状を起こすウイルスです。ただし、乳幼児や高齢者では重篤になることもあるため、特に注意が必要です。



寒さにより風邪が引きやすくなるのは、鼻孔が冷えることにより免疫系機能が阻害されることが原因のようです。つまり、現在は弱毒化しているコロナウイルスも、冬には免疫力低下により急速に症状が悪化する可能性があります。油断はできません。

このまま対策をせずに全国にコロナウイルスが広まっていくと、冬にどうなるかが心配です。
(´・ω・`)





アフターコロナ 見えてきた7つのメガトレンド

アフターコロナ 見えてきた7つのメガトレンド

  • 出版社/メーカー: 日経BP
  • 発売日: 2020/06/02
  • メディア: Kindle版



ウイルスと内向の時代 コロナ後の大転換を国家と個人はどう生き残るか

ウイルスと内向の時代 コロナ後の大転換を国家と個人はどう生き残るか

  • 作者: 佐藤優
  • 出版社/メーカー: 徳間書店
  • 発売日: 2020/07/01
  • メディア: Kindle版



コロナショック・サバイバル 日本経済復興計画 (文春e-book)

コロナショック・サバイバル 日本経済復興計画 (文春e-book)

  • 作者: 冨山 和彦
  • 出版社/メーカー: 文藝春秋
  • 発売日: 2020/04/30
  • メディア: Kindle版




タグ:コロナ
nice!(25)  コメント(0) 
共通テーマ:趣味・カルチャー

スペクトログラムの学習用データの生成を自動化する [AI]

スペクトログラムの学習用データの生成の続きです。前回、一つのスペクトログラムのデータから複数の学習用データを生成する基本的な処理が出来上がりましたので、今回は学習用データを量産してみたいと思います。


前回と同じくデータは、”イチ”、”二”、”サン”の3つ。それに無音も認識が必要なので無音のノイズデータの4点です。学習用の画像データは32x32の大きさにしました。結果から出してしまいますが、次のようなデータが生成されました。


Spectgram_training.png


Python のスケッチを次にあげておきます。見通しをよくするために幾つか関数に分離をしていますが、前回のアルゴリズムをそのまま踏襲しています。追加した処理は、次の3点です。

(1) 無音時のノイズ処理(スペクトラムの範囲を決められない為)
(2) ランダムにシフト量とゲイン量を算出する処理
(3) スペクトラムをリサイズして画像として保存する処理

import numpy as np
import cv2 as cv
import random
import os
import scipy.io.wavfile as wav
from matplotlib import pyplot as plt
from numpy.lib import stride_tricks
from numpy.lib.stride_tricks import as_strided
from numpy.fft import rfft

""" short time fourier transform of audio signal """
def stft(samples, frameSize, overlapFac = 0.5, window = np.hanning):
    win = window(frameSize)
    hopSize = int(frameSize - np.floor(overlapFac * frameSize))
    
    # cols for windowing
    cols = np.floor(len(samples) / hopSize) - 1
    # print("cols: ", cols)
    
    # make an array in 2nd dimension with hopSize
    frames = as_strided(samples, shape=(int(cols), frameSize), strides = (samples.strides[0] * hopSize, samples.strides[0])).copy()
    frames = frames * win

    return rfft(frames)    

def spectrogram_detector(spectrogram):
    spectro_mean = np.mean(spectrogram, axis=1)
    threshold = np.ceil(np.mean(spectro_mean)) 
    threshold = np.ceil(np.mean(spectro_mean[spectro_mean <= threshold]))  # pick up only noise signals
    print("threshold: ", threshold)
    offset = 5
    up_trigger = 0
    down_trigger = 0
    for i in range(offset, spectro_mean.shape[0]-offset):
        cur_floor = int(np.mean(spectro_mean[i:i+offset-1]))
        pre_floor = int(np.mean(spectro_mean[i-offset:i-1]))
        if ((cur_floor > threshold) and (pre_floor <= threshold) and (up_trigger == 0)):
            up_trigger = i
        if ((cur_floor <= threshold) and (pre_floor > threshold)):
            down_trigger = i
    print("up_trigger  : ", up_trigger)
    print("down_trigger: ", down_trigger)
    return up_trigger, down_trigger
    

def augmentator(spectrogram, left, right, signal):
    axis_max = spectrogram.shape[0]
    if (signal == 0): # in case of zero1.wav
        left = random.randint(0, np.floor(axis_max/2))
        right = random.randint(np.ceil(axis_max/2), axis_max-1)
    left_or_right = random.randint(0,1)
    if (left_or_right > 0): # 1 is right, 0 is left
        move = random.randint(right, axis_max-1)
        move = move - right
    else:
        move = random.randint(0,left)
        move = -move
    print("move: ", move)
    
    spectrogram_result = spectrogram.copy()
    spectrogram_body = spectrogram[left:right, :] # extract spectoram data
    
    #if the shift is left, the value is minus, the shift is right, tha value is plus
    if (move < 0):
        spectrogram_noise = spectrogram[left+move:left,:]
        spectrogram_result[left+move:right+move,:] = spectrogram_body
        spectrogram_result[right+move:right,:] = spectrogram_noise
    elif (move > 0):
        spectrogram_noise = spectrogram[right:right+move,:]
        spectrogram_result[left+move:right+move,:] = spectrogram_body
        spectrogram_result[left:left+move,:] = spectrogram_noise

    max_gain = 255 / np.max(spectrogram)   # maximum gain
    gain = random.uniform(0.67, max_gain)
    print("gain: ", gain)
    return spectrogram_result * gain

def plot_spectrogram(spectrogram, time_axis, freq_axis, time_interval, frequency_map):
    plt.figure(figsize=(16, 8))
    plt.imshow(np.transpose(spectrogram), origin="lower", aspect="auto", cmap="jet", interpolation="none")
    plt.colorbar()

    plt.xlabel("time (s)")
    plt.ylabel("frequency (hz)")
    plt.xlim([0, time_axis-1])
    plt.ylim([0, freq_axis-1])

    xlocs = np.float32(np.linspace(0, time_axis-1, 5))
    plt.xticks(xlocs, ["%.02f" % i for i in (xlocs * time_interval)])
    ylocs = np.int16(np.floor(np.linspace(0, freq_axis-1, 10)))
    plt.yticks(ylocs, ["%.02f" % frequency_map[i] for i in ylocs])

    plt.show()
    
def gen_spectrogram(wavfile, frameSize):
    sample_rate, samples = wav.read(wavfile)
    print("sample_rate:", sample_rate)
    print("num_of_samples:", len(samples))

    spectrogram = stft(samples, frameSize)
    frequency_map = np.fft.fftfreq(frameSize, 1. / sample_rate)
    spectrogram = 20. * np.log10(np.abs(spectrogram)) # amplitude to decibel

    # spectrogaram has an extra colum, so slice it
    spectrogram = spectrogram[:,:int(np.floor(frameSize/2))]
    spectrogram -= np.min(spectrogram) # normalize
    
    return spectrogram, sample_rate, frequency_map
    
def main():
    frameSize = 256
    output_img_size = 32
    num_of_augdata = 5 
    wavfiles = ['./wav/zero1.wav', './wav/ichi1.wav', './wav/ni1.wav', './wav/san1.wav']
    
    for i in range(len(wavfiles)):
        print(wavfiles[i])
        spectrogram, sample_rate, frequency_map = gen_spectrogram(wavfiles[i], frameSize)
        time_dim, freq_dim = np.shape(spectrogram)
        time_interval = frameSize / sample_rate 
        plot_spectrogram(spectrogram, time_dim, freq_dim, time_interval, frequency_map)

        # detect the range of spectrogram signal
        left, right = spectrogram_detector(spectrogram)

        data_dir = "./" + str(i)
        if not os.path.exists(data_dir):
            os.mkdir(data_dir)
        for n in range(num_of_augdata):
            # spectrogram data augmentator
            spectro_aug = augmentator(spectrogram, left, right, i)
            # plot_spectrogram(spectro_aug, time_dim, freq_dim, time_interval, frequency_map)
            
            spectro_aug.astype(np.uint8)
            spectro_img = cv.resize(spectro_aug, (output_img_size, output_img_size))
            spectro_img = np.rot90(spectro_img)
            data_path = data_dir + "/" + str(n) + ".bmp"
            cv.imwrite(data_path, spectro_img)
    
if __name__ == "__main__":
    main()




おそらく実機では、マイクのノイズやゲイン量が大きく影響するので作り直しになると思いますが、このスケッチそのものはパラメータなどを変更することで流用できそうです。
(^^)/~





Pythonで学ぶ実践画像・音声処理入門

Pythonで学ぶ実践画像・音声処理入門

  • 出版社/メーカー: コロナ社
  • 発売日: 2018/04/04
  • メディア: 単行本






Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2018/05/26
  • メディア: 単行本(ソフトカバー)




nice!(22)  コメント(0) 
共通テーマ:趣味・カルチャー

スペクトログラムの学習用データを生成する [AI]

前回、音声ファイルからスペクトログラムを生成しました。Neural Network Console で学習させるためには、学習用データを生成する必要がありますが、たくさんのデータを記録するのはめんどくさい。

そこで、既存データを加工して学習用データを生成したいと思います。このとき、生成するデータは、次の2つの要因を考慮する必要があります。

(1)音声が入ってくるタイミングはバラバラ
(2)キャプチャされる音声のレベルは一定でない

これらのデータを生成するには、得られたスペクトログラムを左右にランダムに降り、スペクトルのレベル(ゲイン)をランダムに変化させたデータを生成するのがよさそうです。


■ スペクトログラムのデータを左右に降る
スペクトログラムの信号が現れる位置と信号がなくなる位置を検出し移動できる量を特定します。左右に位置はランダムにずらします。そのときに、ずらした分のノイズは入れ替えます。

Spectrogram_dataset.png


■ スペクトルのゲインを変化させる
スペクトルのゲインは、一旦ここでは最大値が255になるか、最小値はデータの最大値の2/3となるようにします。実際の運用では、最小値の値を使用するマイクにあわせたほうがいいでしょう。


■ スペクトログラムの data augumentation のPythonスケッチを書く
以上、2点に留意して検証用のPythonスケッチを作ってみました。まだお試しなのでパラメータは直打ちです。

import numpy as np
import scipy.io.wavfile as wav
from matplotlib import pyplot as plt
from numpy.lib import stride_tricks
from numpy.lib.stride_tricks import as_strided
from numpy.fft import rfft

times = 0
ftaps = 0
frameSize = 0

""" short time fourier transform of audio signal """
def stft(samples, frameSize, overlapFac = 0.5, window = np.hanning):
    win = window(frameSize)
    hopSize = int(frameSize - np.floor(overlapFac * frameSize))
    
    # cols for windowing
    cols = np.floor(len(samples) / hopSize) - 1
    # print("cols: ", cols)
    
    # make an array in 2nd dimension with hopSize
    frames = as_strided(samples, shape=(int(cols), frameSize), strides = (samples.strides[0] * hopSize, samples.strides[0])).copy()
    frames = frames * win

    return rfft(frames)    

def augmentator(spectrogram):
    spectro_mean = np.mean(spectrogram, axis=1)
    threshold = np.mean(spectro_mean) 
    threshold = np.mean(spectro_mean[spectro_mean <= threshold])  # pick up only noise signals
    print("threshold: ", threshold)
    
    up_trigger = 0
    down_trigger = 0
    for i in range(3, spectro_mean.shape[0]-3):
        if ((np.mean(spectro_mean[i:i+2]) > threshold) and (np.mean(spectro_mean[i-3:i-1]) <= threshold) and (up_trigger == 0)):
            up_trigger = i
        if ((np.mean(spectro_mean[i:i+2]) <= threshold) and (np.mean(spectro_mean[i-3:i-1]) > threshold)):
            down_trigger = i
    print("up_trigger  : ", up_trigger)
    print("down_trigger: ", down_trigger)
    move = -10  #if the shift is left, the value is minus, the shift is right, tha value is plus
    spectrogram_result = spectrogram.copy()
    spectrogram_body = spectrogram[up_trigger:down_trigger, :]
    if (move < 0):
        spectrogram_noise = spectrogram[up_trigger+move:up_trigger,:]
        spectrogram_result[up_trigger+move:down_trigger+move,:] = spectrogram_body
        spectrogram_result[down_trigger+move:down_trigger,:] = spectrogram_noise
    elif (move > 0):
        spectrogram_noise = spectrogram[down_trigger:down_trigger+move,:]
        spectrogram_result[up_trigger+move:down_trigger+move,:] = spectrogram_body
        spectrogram_result[up_trigger:up_trigger+move,:] = spectrogram_noise

    gain = 255 / np.max(spectrogram)   # maximum gain
    # gain = 0.67  # minmum gain
    return spectrogram_result * gain

def plot_spectrogram(spectrogram, time_axis, freq_axis, time_interval, frequency_map):
    plt.figure(figsize=(16, 8))
    plt.imshow(np.transpose(spectrogram), origin="lower", aspect="auto", cmap="jet", interpolation="none")
    plt.colorbar()

    plt.xlabel("time (s)")
    plt.ylabel("frequency (hz)")
    plt.xlim([0, time_axis-1])
    plt.ylim([0, freq_axis-1])

    xlocs = np.float32(np.linspace(0, times-1, 5))
    plt.xticks(xlocs, ["%.02f" % i for i in (xlocs * time_interval)])
    ylocs = np.int16(np.floor(np.linspace(0, freq_axis-1, 10)))
    plt.yticks(ylocs, ["%.02f" % frequency_map[i] for i in ylocs])

    plt.show()
    
def main():
    frameSize = 256
    sample_rate, samples = wav.read('./wav/ni1.wav')
    print("sample_rate:", sample_rate)
    print("num_of_samples:", len(samples))

    spectrogram = stft(samples, frameSize)

    frequency_map = np.fft.fftfreq(frameSize, 1. / sample_rate)
    spectrogram = 20. * np.log10(np.abs(spectrogram)) # amplitude to decibel

    # spectrogaram has an extra colum, so slice it
    spectrogram = spectrogram[:,:int(np.floor(frameSize/2))]
    time_dim, freq_dim = np.shape(spectrogram)
    print(spectrogram.shape)
    spectrogram -= np.min(spectrogram)
    max_spectro = np.max(spectrogram) # normalize
    print("MAX: ", max_spectro)
    
    time_interval = frameSize / sample_rate 
    plot_spectrogram(spectrogram, time_dim, freq_dim, time_interval, frequency_map)
    
    spectrogram = augmentator(spectrogram)
    plot_spectrogram(spectrogram, time_dim, freq_dim, time_interval, frequency_map)
    
if __name__ == "__main__":
    main()




少し工夫した点は、開始点 (up_trigger)、終了点(down_trigger)の判定に前後3ラインの出力の平均を使っているところです。これにより精度よく開始点と終了点を判別できるようになりました。

試しに、”イチ”、”二”、”サン”の音声データを加工してみました。


”イチ”
2020-07-20 (2).png


”二”
2020-07-20.png


”サン”
2020-07-20 (3).png


なかなかいい感じですね。ただ実際には、マイクのノイズの下限は一定になるので、ノイズのレベルもゲインを下げているのは現実的ではありません。それについては、実際にマイクの特性を見てから考えたいと思います。

次は、このデータを使って畳み込みニューラルネットワークで、"イチ"、"二"、"サン"を判定できるかチャレンジしてみたいと思います!
(^^)/~





NumPy&SciPy数値計算実装ハンドブック (Pythonライブラリ定番セレクション)

NumPy&SciPy数値計算実装ハンドブック (Pythonライブラリ定番セレクション)

  • 出版社/メーカー: 秀和システム
  • 発売日: 2019/08/23
  • メディア: 単行本



現場で使える! Python科学技術計算入門 NumPy/SymPy/SciPy/pandasによる数値計算・データ処理手法 (AI & TECHNOLOGY)

現場で使える! Python科学技術計算入門 NumPy/SymPy/SciPy/pandasによる数値計算・データ処理手法 (AI & TECHNOLOGY)

  • 作者: かくあき
  • 出版社/メーカー: 翔泳社
  • 発売日: 2020/05/19
  • メディア: 単行本(ソフトカバー)



Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2018/05/26
  • メディア: 単行本(ソフトカバー)




nice!(21)  コメント(0) 
共通テーマ:趣味・カルチャー

Python で音声ファイルからスペクトログラムを生成してみた [AI]

音声を認識させるには、音声を時系列のスペクトログラムを生成し、畳み込みニューラルネットワークやLSTMのような再帰型ニューラルネットワークに入力すれば行うことができそうです。

その前処理として、Python を使って音声ファイルからスペクトログラムを生成するプログラムを作ってみました。

import numpy as np
import scipy.io.wavfile as wav
from matplotlib import pyplot as plt
from numpy.lib import stride_tricks
from numpy.lib.stride_tricks import as_strided
from numpy.fft import rfft

""" short time fourier transform """
def stft(samples, frameSize, overlapFac = 0.5, window = np.hanning):
    win = window(frameSize)
    hopSize = int(frameSize - np.floor(overlapFac * frameSize))
    
    # cols for windowing
    cols = np.floor(len(samples) / hopSize) - 1
    # print("cols: ", cols)
    
    # make an array in 2nd dimension with hopSize
    frames = as_strided(samples, shape=(int(cols), frameSize), strides = (samples.strides[0] * hopSize, samples.strides[0])).copy()
    frames = frames * win

    return rfft(frames)    

def main():
    frameSize = 256
    sample_rate, samples = wav.read('./wav/ichi.wav')
    print("sample_rate:", sample_rate)
    print("num_of_samples:", len(samples))

    spectrogram = stft(samples, frameSize)

    frequency_map = np.fft.fftfreq(frameSize, 1. / sample_rate)
    spectrogram = 20. * np.log10(np.abs(spectrogram)) # amplitude to decibel

    # spectrogaram has an extra colum, so slice it
    spectrogram = spectrogram[:,:int(np.floor(frameSize/2))]
    times, ftaps = np.shape(spectrogram)
    print(spectrogram.shape)

    plt.figure(figsize=(16, 8))
    plt.imshow(np.transpose(spectrogram), origin="lower", aspect="auto", cmap="jet", interpolation="none")
    plt.colorbar()

    plt.xlabel("time (s)")
    plt.ylabel("frequency (hz)")
    plt.xlim([0, times-1])
    plt.ylim([0, ftaps-1])

    xlocs = np.float32(np.linspace(0, times-1, 5))
    plt.xticks(xlocs, ["%.02f" % i for i in (xlocs * frameSize / sample_rate)])
    ylocs = np.int16(np.floor(np.linspace(0, ftaps-1, 10)))
    plt.yticks(ylocs, ["%.02f" % frequency_map[i] for i in ylocs])

    plt.show()
    plt.clf()

if __name__ == "__main__":
    main()




プログラムの詳しい解説は省きますが、記録したオーディオ信号をFFTのタップ数(frameSize=256)の半分ずつ(overlapFac=0.5,128)を移動しながらFFTをかけています。

プログラム上で注意すべき点は音声ファイルをタップ数に分割して2次元配列にしているところと、横軸と縦軸の物理量の算出あたりでしょうか。

違いが出るのか確認するために、今回は、”イチ”、”二”、”サン”と数字を発音したファイルをそれぞれスペクトログラムに変換してみました。その結果がこれです。


”イチ”
2020-07-17 (2).png


”ニ”
2020-07-17 (3).png


"サン"
2020-07-17 (4).png


結構、特徴が出るものですね。これなら認識できるかな?🤔
( ̄ー ̄)





Pythonで学ぶ実践画像・音声処理入門

Pythonで学ぶ実践画像・音声処理入門

  • 出版社/メーカー: コロナ社
  • 発売日: 2018/04/04
  • メディア: 単行本



Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2018/05/26
  • メディア: 単行本(ソフトカバー)



現場で使える! Python自然言語処理入門 (AI & TECHNOLOGY)

現場で使える! Python自然言語処理入門 (AI & TECHNOLOGY)

  • 出版社/メーカー: 翔泳社
  • 発売日: 2020/01/20
  • メディア: 単行本(ソフトカバー)




nice!(24)  コメント(0) 
共通テーマ:趣味・カルチャー

【アフターコロナの世界】私のテレワーク生活スタイル [徒然日記]

コロナ禍で在宅勤務がすっかり当たり前となった私の生活。すでに5ヶ月を経過しようとしています。ここで、私のステイホームの生活スタイルを振り返ってみたいと思います


online_kaigi_man.png


■テレワーク■
"打合せはテレカンで"というのはもう当たり前のものとなってきました。最近は一回もF2Fで会ったこともない人ととも、テレカンで何度も打合せをしているうちに、旧知の仲のように思えるようになってくるので不思議です。


■職場の飲み会■
あれだけ頻繁にあった職場の飲み会はすっかり過去のものとなってしまいました。コロナ初期は宅飲みってやつもありましたが、最近はすっかりなくなりました。テレカンでも十分仲間同士のコミュニケーションはとれるってことなんでしょう。


■スーツ■
スーツを着る機会も少なくなりました。テレカンも上半身だけなので、良くて襟付きシャツ、下手するとポロシャツやTシャツです。最近は”資料共有するのに支障が出るといけないのでカメラオフにしてますー”と顔出しなし。ひどい時は寝間着で参加。^^


■外食■
外食は少しするようになってきてました。さすがに気分転換したいので。そのためか、近所のレストランは賑わいを取り戻してきています。ただ、ソーシャルディスタンスのため席数は少ないままですね。


■通勤■
電車はすっかり乗らなくなりました。会社も定期代支給をやめてしまいましたし。通勤がなくなったので、すっかり運動不足となってしまいました。最近は毎日5~6km走るようにしています。


■残業■
もともと残業代がつく立場ではないので、あまり残業時間を気にすることはないのですが、私生活と仕事の切れ目がほとんどなくなってしまったので、際限なく仕事をしてしまうこともしばしばです。


■旅行■
遊びに行くにはまだ早いですが、息子が地方大学に行ったので遠出はします。人混みを避けるため車での移動です。車は便利ですし、まとまった人数だと安いので、コロナ後も旅行は車がメインになりそうです。コロナ前は電車がメインだったのですが。



■アフターコロナの世界■
これが私の最近の生活スタイルなのですが、在宅勤務をされている皆さんも同じではないでしょうか?さて、ここから垣間見えてくるアフターコロナの世界ですが、私の生活スタイルをベースにすると、次のようになりそうです。


・電車の利用は減りそうです。運賃が高くなりそうですね。
・紳士服業界もかなり厳しいですね。スーツも昔のように高くなるのかなぁ。
・郊外のレストランは、コロナが落ち着けば需要は復活するかもしれません。
・都会の居酒屋は厳しいでしょうね。サラリーマン需要が減りますので。
・運動不足から、スポーツ用品の需要は高まるかもしれません。
・意外ですが、車の需要は高まるかもしれません。
・残業を計る基準がなくなるので、雇用形態は変わっていくと思います。
・旅行は車をベースとしたプランがメインになるのかな。
・オフィスの需要は減るので、代わりに貸し会議室やホテルが増えそうですね。


気になるのはイベントですが、コロナが落ち着けばまた復活すると思います。オンラインってやっぱり味気ないですからね。あと2、3年の我慢ですね。
(´・ω・`)






アフターコロナ 見えてきた7つのメガトレンド

アフターコロナ 見えてきた7つのメガトレンド

  • 出版社/メーカー: 日経BP
  • 発売日: 2020/06/02
  • メディア: Kindle版



アフターコロナの日本経済 半年後、1年後、5年後(プレジデント2020年7/31号) [雑誌]

アフターコロナの日本経済 半年後、1年後、5年後(プレジデント2020年7/31号) [雑誌]

  • 作者: PRESIDENT 編集部
  • 出版社/メーカー: プレジデント社
  • 発売日: 2020/07/10
  • メディア: Kindle版



これ1冊で先が見通せる!アフターコロナ消費&キャッシュレス最新勢力図

これ1冊で先が見通せる!アフターコロナ消費&キャッシュレス最新勢力図

  • 出版社/メーカー: 日経BP
  • 発売日: 2020/07/02
  • メディア: Kindle版




nice!(23)  コメント(0) 
共通テーマ:趣味・カルチャー

息子、いよいよ一人暮らしを開始する! [4コマ漫画]

コロナ禍で入学以来オンライン授業が続いていた息子の大学ですが、いよいよ授業再開に向けて動き出したようです。大学から”いつでも登校できるように待機せよ”という連絡が届きました。


息子一人暮らし開始.png


カミさんは、息子の生活が気が気でないようで頻繁にメッセージを送っているようなのですが、その返事が意味不明で悩むこともしばしば。私も文章入力するのが面倒でスタンプを返すことが多いのですが、どうやら息子も同じようです。(^_^;)

次に息子が戻ってくるのは夏休み。一ヶ月後くらいです。息子が街に慣れるにはちょうどよい期間になりそうです。 🙂
(^^)







オンライン学習でできること、できないこと (新しい学習様式への挑戦)

オンライン学習でできること、できないこと (新しい学習様式への挑戦)

  • 作者: 千葉大学教育学部附属小学校
  • 出版社/メーカー: 明治図書出版
  • 発売日: 2020/09/10
  • メディア: 単行本



免疫力を上げる! ハーバード大学式 命の野菜スープ 新型コロナウイルスに勝つ! (TJMOOK)

免疫力を上げる! ハーバード大学式 命の野菜スープ 新型コロナウイルスに勝つ! (TJMOOK)

  • 作者: 髙橋 弘
  • 出版社/メーカー: 宝島社
  • 発売日: 2020/06/18
  • メディア: 大型本



これが正解!  ひとり暮らしごはんスタートブック

これが正解! ひとり暮らしごはんスタートブック

  • 出版社/メーカー: 主婦の友社
  • 発売日: 2018/03/01
  • メディア: 単行本(ソフトカバー)




タグ:日常
nice!(26)  コメント(0) 
共通テーマ:趣味・カルチャー

ネオワイズ彗星がいよいよ見頃! [徒然日記]

ネオワイズ彗星が1等級となり、肉眼でも容易に見れるようになってきました。久しぶりの天文ショーですね。肉眼で見える彗星は、97年のヘール・ボップ彗星以来でしょうか。直近ではアイソン彗星が期待されましたが、残念ながらバラバラになってしまいましたしね。


Comet_Neowise.jpg
https://apod.nasa.gov/apod/ap200709.html


7月中旬前は、夜明けまえに見ることができます。ASTROARTSさんのページからの引用です。


newise_dawn.png
https://www.astroarts.co.jp/article/hl/a/11302_ph200700


今、日本は雨が大変な状況ですので、7月上旬は星空の機会がないかもしれませんが、チャンスがあれば早起きをして東の空を見上げてみてください。


7月中旬以降は、夕暮れになります。この時には天気も一段落していることを願いたいところです。夕焼けの西の空に映えるほうき星は見ものでしょうね。天災続きの日本の厄を、そのほうきで払ってほしいものです。


newise_evening.png
https://www.astroarts.co.jp/article/hl/a/11302_ph200700


数十年に一度のチャンスですので、ぜひ夜明けもしくは夕暮れの夜空を見上げてみてください。私は、久しぶりに天体望遠鏡を引っ張り出してこようと思います!🙂
(^^)/





彗星の科学―知る・撮る・探る

彗星の科学―知る・撮る・探る

  • 出版社/メーカー: 恒星社厚生閣
  • 発売日: 2013/09/14
  • メディア: 単行本(ソフトカバー)



天文ガイド 2020年 8月号 特大号 別添付録付 [雑誌]

天文ガイド 2020年 8月号 特大号 別添付録付 [雑誌]

  • 出版社/メーカー: 誠文堂新光社
  • 発売日: 2020/07/04
  • メディア: 雑誌



月刊星ナビ 2020年8月号

月刊星ナビ 2020年8月号

  • 出版社/メーカー: KADOKAWA
  • 発売日: 2020/07/04
  • メディア: 雑誌




nice!(25)  コメント(0) 
共通テーマ:趣味・カルチャー

コロナの最新状況とアフターコロナの時代 [徒然日記]

最近、首都圏のコロナの陽性者数が増えているニュースを毎日聞かされていて不安になったので少し調べてみました。いつもモニターしている東洋経済さんのサイトで最新状況を把握できます。


まず陽性者数ですが、ニュースの通り、ここ最近はかなりの増加傾向です。


2020-07-07 (0).png


入院治療を必要とする人の数も増えています。


2020-07-07 (1).png


この増加はPCR検査人数を増やしているのと関連しているのかもと思い検査人数を確認すると、確かに増えているようです。ここは相関がありそうです。


2020-07-07 (4).png


実行再生産数(感染力)も増えています。ここもPCR検査人数と関連しているように見えます。しかし、より実態に近い感染力の数字が出ているといえますので、今までが低すぎました。


2020-07-07 (5).png


しかし、重症者数については、着実に減っています。


2020-07-07 (2).png


死亡者数も同様ですね。日本の医療体制がコロナに対して盤石になりつつあると見ることができますが、一方でコロナが弱毒化している可能性も否定できません。


2020-07-07 (3).png


年齢別の陽性者数を見ると20代~50代が突出しています。いわゆる生産年齢に該当する人たちです。明らかに自粛解除の影響が出ていることが見受けられます。


2020-07-07 (6).png


また死亡者も60代~80代に多いのも目を引きます。高齢者の方たちをコロナから遠ざけるための社会的なしくみが必要になってくると思います。

これらの数字から考えられる課題は次の3点になると思います。


(1)高齢者をコロナから遠ざける社会的しくみ
(2)生産年齢層の感染の抑制
(3)海外の変異型コロナの流入阻止 (弱毒化コロナの変異防止)


この課題の解決策は”一極集中の解消”と”入国審査の厳格な運用”になると思います。

”入国審査の厳格な運用”は、来訪者の”出国時のPCR/抗体検査”と”入国時のPCR/抗体検査”の徹底です。これが出来ない国からの入国は認めないくらい厳格な運用をしてほしいものです。

”一極集中の解消”については、インフラの整っている首都圏からお年寄りが動いてもらうのは大変なので、経済力のある生産年齢層に動いてもらうのがてっとり早いと思います。手始めに政府機能を東北や四国あたりに移転してみてはでしょう。地方創生ならびに国内需要も喚起できて一石二鳥です。

今のところ、コロナに対する一番の特効薬は社会的なしくみの変革なので、今こそ政治家の方々の手腕に期待したいところですね。🤔
( ̄ω ̄;)





アフターコロナ 見えてきた7つのメガトレンド

アフターコロナ 見えてきた7つのメガトレンド

  • 出版社/メーカー: 日経BP
  • 発売日: 2020/06/02
  • メディア: Kindle版



アフターコロナの日本経済 半年後、1年後、5年後(プレジデント2020年7/31号) [雑誌]

アフターコロナの日本経済 半年後、1年後、5年後(プレジデント2020年7/31号) [雑誌]

  • 作者: PRESIDENT 編集部
  • 出版社/メーカー: プレジデント社
  • 発売日: 2020/07/10
  • メディア: Kindle版



週刊ダイヤモンド 2020年 7/18号 [雑誌] (アフターコロナの業界総予測)

週刊ダイヤモンド 2020年 7/18号 [雑誌] (アフターコロナの業界総予測)

  • 出版社/メーカー: ダイヤモンド社
  • 発売日: 2020/07/13
  • メディア: 雑誌




タグ:コロナ
nice!(21)  コメント(0) 
共通テーマ:趣味・カルチャー

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。