LoginSignup
1
1

夜の渡り鳥が出す鳴き声を検出するnighthawkをdockerで動かしてみた

Posted at

目的

夜渡る小鳥は鳴き声を出しながら飛んでいきます。春とか秋とか平野部でもよく聞こえます。この鳴き声をフライトコールと言いますが、夜間のフライトコール(NFC:Noctural Flight Call)を録音して渡りの生態を調べることが北米で行われています。そのための自動検知プログラムがpythonで開発されており、それをdockerで動かしてみようというものです。pythonの環境構築はバージョン管理やコンフリクトとかライブラリがないとか苦手なので、dockerを使うというのが新しいと思います。

難易度

  • 初心者向け

anaconda3をインストール

$ docker pull continuumio/anaconda3
  • anaconda3イメージを基にコンテナを作成
$ docker run --name anaconda -it -p 8888:8888 -v /Users/XXXXX/docker/anaconda:/home continuumio/anaconda3 /bin/bash
  • anaconda3に事前からインストールされているパッケージを確認します。
base) root@xxxx:/## conda list
  • anaconda3はtensorflowが最初からインストールされていないので、tensorflowをインストールします。
base) root@xxxx:/# conda install tensorflow

nighthawkをインストールする

nighthawkの概要

  • Nighthawk は、夜行性の鳥の移動を音響モニタリングするための機械学習モデルです。
  • Nighthawk は、北アメリカ東部で最大のカバー範囲を持つ、アメリカ大陸からの夜行飛行通話 (NFC) の録音について訓練されています。モノチャンネル オーディオ ファイルを .wav 形式で処理し、検出結果を表形式 (.csv および .txt) で返します。Nighthawk には現在、夜の移動中に鳴く鳥類 82 種、18 科、4 目からのトレーニング データが含まれています。
  • Nighthawk は Python 環境で実行されます。基礎となるモデルはTensorFlowでトレーニングされました。
  • Nighthawk のトレーニングとパフォーマンスの詳細については、次の論文を参照してください。
  • nighthawkのライセンスはCreative Commons Attribution-NonCommercial 4.0 International Licenseで商用利用不可です。
  • インストールマニュアル通りにnighthawk-0.3.0をインストールします。Python 3.10 を使います。
conda create -n nighthawk-0.3.0 python=3.10
  • 次に、環境をアクティブ化します。
conda activate nighthawk-0.3.0
  • そして、Nighthawk Python パッケージとその依存関係をインストールします。
pip install nighthawk

実行時エラーの対策

しかしそのままでは動きませんでした。メッセージからsoundfilelibsndfile1のインストールが必要でした。またpip install soundfileの実行すると、rootユーザーとしてpipを実行することに関する警告が表示されました。この警告は、rootユーザーでの実行がシステムのパッケージマネージャーと競合したり、権限の問題を引き起こす可能性があるためです。

python -m venv myenv
source myenv/bin/activate  # Unix/macOSの場合
# myenv\Scripts\activate  # Windowsの場合
pip install soundfile
apt-get update && apt-get install -y libsndfile1
apt install time
  • 計算時間計測のため、timeもインストールしておきます。

これで走るようになりました。めでたしめでたし。

実行結果

  • 出力はフライトコールの検出結果だけでなく、音声分析ソフトravenやaudacityのフラグテーブルも出力できます。次の例はravenようです。
(myenv) (nighthawk-0.3.0) root@f3b4f7f3e72d:~# time  nighthawk /home/231109_1800.wav  --raven-output
Loading detector model...
Getting detector configuration file paths...
Running detector on audio file "/home/231109_1800.wav"...
loading taxonomy
using taxon subset
masking taxa with ap less than 0.7
....略
processing file: using custom model runner
Processed 3613.4 seconds of audio in 792.7 seconds, 4.6 times faster than real time.
predictions generated
doing calibration
merging taxonomic predictions
Writing output file "/home/231109_1800_detections.csv"...
Writing output file "/home/231109_1800_raven.txt"...

real	13m18.061s
user	67m20.669s
sys	3m49.935s

1時間のモノラルファイルで13分かかりました。6個フライトコールを検出しました。そのうち正解は2つでした。北米の教師データなので東北アジアの小鳥とは違うかもしれません。

どなたかのお役に立てたら嬉しいです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1