読者です 読者をやめる 読者になる 読者になる

TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

PyOpenGLを使ってみる その5(頂点配列にnumpyを使う)

前回は頂点配列にPythonの組み込みのタプルとリストを使用したが、numpyを使うこともできる。 座標変換はOpenGLの機能で行った方が簡単だが、場合によってはnumpyを使用できると便利である。 import sys from OpenGL.GL import * from OpenGL.GLU import * f…

PyOpenGLを使ってみる その4(頂点配列)

頂点配列を使って描画を行う。 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * def display(): glClear(GL_COLOR_BUFFER_BIT) glEnableClientState(GL_VERTEX_ARRAY) glColor3f(1.0, 0.0, 0.0) glVertexPointerf([…

PyOpenGLを使ってみる その3(移動と回転)

前回表示したテクスチャを移動と回転させる。 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from PIL import Image def load_texture(): img = Image.open("sample1.png") w, h = img.size glTexImage2D(GL_TEXT…

PyOpenGLを使ってみる その2(テクスチャ)

PyOpenGLでテクスチャを表示する。 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from PIL import Image def load_texture(): img = Image.open("sample1.png") w, h = img.size glTexImage2D(GL_TEXTURE_2D, 0,…

PyOpenGLを使ってみる

前回の日記でPyOpenGLの導入を行った。2D画像の変形をOpenGLを使って行うことが目標だが、現時点でOpenGLの知識がほとんどない。 画像の変形はFree-Form Deformationという方法でポリゴンの頂点を変形させることで実現できそうだが、あせらず基礎的なことか…

WindowsのPythonでOpenGLを使う

写真の線画化を、iBUG 300-Wの300枚の画像に試してみたけど、あまりきれいな線画が生成できなかった。 学習データの生成には他のアプローチを試したい。 Live2Dのような方法で、線画のキャラクタの向きや表情のバリエーションを増やせないかと考えている。 L…

リアルタイムにマンガの顔パーツ検出を行ってみた

以前に書いた以下の日記の内容を組み合わせて、リアルタイムにマンガの顔パーツ検出を行ってみました。 dlibでマンガの顔認識をやってみた DCNNによるマンガキャラクターの顔パーツ検出 Surfaceのカメラでリアルタイムに顔器官検出を行う リアルタイムにマン…

Surfaceのカメラでリアルタイムに顔器官検出を行う

以前日記に書いたdlibを使った顔器官検出をSurfaceのカメラを使ってリアルタイムに行ってみました。 import sys import dlib import cv2 if len(sys.argv) != 2: print("realtime_shape_predictor.py model") exit() model = sys.argv[1] predictor = dlib.s…

SurfaceのカメラをPythonからリアルタイムに使う

SurfaceのカメラをPythonからリアルタイムに使うには、OpenCVを利用して以下のように記述する。 import cv2 video_capture = cv2.VideoCapture(1) while True: ret, frame = video_capture.read() cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == o…

写真を線画化する

マンガの顔パーツ検出を試みているが、マンガの顔画像と検出点がセットになった教師データを大量に入手することができない。自分で入力したデータで検出精度の実験を行って、ディープラーニングを使うことで、単一のコミックの画像であればかなりの精度で検…

TensorFlowをWindowsにインストール

以前の日記で公式バイナリをインストールする方法を書いていましたが、バージョン1.0がリリースされたことで内容が古くなったので、書き直します。公式のページを見ればわかる内容なので、あまり価値のある内容ではないですが。 前提ソフトウェアとして、以…

デブサミ2017 【DevBooks】で同人誌を出します

デブサミ2017 【DevBooks】で、Andirogueというサークルで頒布する同人誌に記事を寄稿しました。以前の日記で書いていたAlphaGoに関する記事です。1ページ目の内容はこんな感じ。 サークルのメンバが書いた技術的な内容からゆるふわな記事まであります。 よ…

DCNNによるマンガキャラクターの顔パーツ検出(追試3)

前回に続き、学習のハイパーパラメータの影響を考察する。今回は、ミニバッチサイズを変更した場合の影響について調べた。ニューラルネットワークの学習は、通常ミニバッチ単位で更新を行う。 ミニバッチのサイズは、大きくすると勾配のばらつきが安定するた…

DCNNによるマンガキャラクターの顔パーツ検出(追試2)

前回の日記で初期値の変更や正則化やBatch Normalization、フィルター枚数などを変更した場合の効果について調べた。ここでは、さらに畳み込み層のゼロパティングの有無とカーネルサイズの影響について調べた。 ゼロパティング 畳み込み層のパディングは、一…

DCNNによるマンガキャラクターの顔パーツ検出(追試)

前回の日記では正則化など行わずにRMSpropを使用して学習を行ったが、初期値の変更や正則化やBatch Normalizationなどを行った場合にどうなるか試してみた。 初期値の変更 ChainerのConvolution2Dのパラメータの初期値は、デフォルトではHeの初期値で初期化…

DCNNによるマンガキャラクターの顔パーツ検出

以前の日記でdlibを使用してマンガのキャラクターの顔パーツ検出を行った。しかし、dlibの方法は、マンガキャラクターには有効ではなく、顔パーツを検出できなかった。そこで、DCNNを使用して顔パーツ検出(顔器官検出)ができるか試してみた。 dlibで実装され…

音声スペクトルモニター(Audio Spectrum Monitor)をバージョンアップ

Androidアプリの音声スペクトルモニター(Audio Spectrum Monitor)をバージョンアップしました。前回のアプデートから1年以上更新していませんでしたが、ボーカル音程モニター(Vocal Pitch Monitor)の方で改善した内容を反映しました。あと、前回の日記で書い…

ゼロパティングを使用して自己相関関数でのピッチ推定の精度を向上する

前回の日記で自己相関関数によるピッチ推定の精度をN倍の位置のピークを使用することで向上できることを示した。Nを大きくすることで精度を高めることができるが、Nの上限はフレーム長により制限される。単純にフレーム長を長くした場合、応答性とのトレード…

自己相関関数でのピッチ推定の精度向上

以前の日記で、自己相関関数でのピッチ推定の誤差について検証した。自己相関関数で求めたピッチは、高周波数で誤差が大きくなることを示した。 ここでは、それを改善する方法について検証する。 自己相関関数のピークの位置をnとすると、周波数fは以下の式…

スマホでのFFTの処理時間

FFTでスペクトル推定を行う際、フレーム長を長くするほどより周波数領域で精度を上げることができる。しかし、フレーム長を長くすると実行時間も長くなる。スマホでリアルタイムで解析を行うような場合、実行時間について考慮が必要になる。ここでは、フレー…

自己相関関数とピッチ推定の誤差

ボーカル音程モニター(Vocal Pitch Monitor)では、ピッチ推定に自己相関関数を使用している。自己相関関数を使用するメリットとしては、 ノイズに強い 低周波数での誤差が少ない という点があげられる。逆にデメリットとしては、高周波数の誤差が大きくなる…

ゼロパディングとFFTによるスペクトル推定の精度

ボーカル音程モニター(Vocal Pitch Monitor)では、ピッチ推定に自己相関関数を使用しているが、精度を高めるために、FFTの値も使用している。離散フーリエ変換(FFT)で、スペクトル推定の分解能を高めるために、ゼロパディングという手法が用いられる。ここで…

ボーカル音程モニター(Volcal Pitch Monitor)のバージョンアップ

Androidアプリのボーカル音程モニター(Volcal Pitch Monitor)をバージョンアップしました。play.google.com 今回の更新内容は、以下の通りです。 音程の解析精度を向上 自動スクロールの速度の設定を追加 メイン画面からテンポ機能のオン/オフを可能とした …

新年あけましておめでとうございます

アプリ開発のモチベーション維持のために、このブログをはじめたのが2年前。 今年で3年目になります。飽きっぽい自分にしてはよく続いています。去年はAlphaGoに影響されて、ディープラーニングのネタを扱ったおかげでアクセスが増えた気がします。ディープ…

リアルタイム音程解析 VSTプラグイン(vst_pitch)の更新

リアルタイム音程解析 VSTプラグイン(vst_pitch)を更新しました。更新内容は解析精度の改善です。 正しいピッチの1/3の周波数に誤って判定されることがあったので修正しました。解析方法はAndroid版のボーカル音程モニター(Vocal Pitch Monitor)と同じで、An…

ボーカル音程モニター(Volcal Pitch Monitor)のバージョンアップ

3週続けて、Androidアプリのボーカル音程モニター(Volcal Pitch Monitor)をバージョンアップしました。play.google.com 今回の修正は、テンポの設定できる範囲を20BPMから250BPMに広げたのと、画面を点滅させるメトロノーム機能を追加しました。メトロノーム…

TensorFlowの公式Windowsバイナリをインストールして動かす

2017/2/18追記 1.0正式版がリリースされましたので、この記事の内容は古くなっています。正式版のインストールについてこちらの日記に書きました。先日TensorFlowがWindowsでビルドできるようになったという記事を書いたが、公式からバイナリのインストーラ…

ボーカル音程モニター(Volcal Pitch Monitor)のバージョンアップ

先週に引き続き、Androidアプリのボーカル音程モニター(Volcal Pitch Monitor)をバージョンアップしました。今回は、移調機能とテンポ機能を実装しました。 どちらも要望をもらっていた機能です。移調機能は、管楽器などのCメジャー以外に調律された楽器の練…

ボーカル音程モニター(Volcal Pitch Monitor)のバージョンアップ

Androidアプリのボーカル音程モニター(Volcal Pitch Monitor)のバージョンアップしました。今回は、UIの改善がメインです。より正確な音程を把握できるように簡易なチューナーを表示するようにしました。 メーターの表示方式は悩みましたが、上部の音階名が…

Androidアプリの広告版と有料版を一つのプロジェクトにする(補足)

前回の日記で書いたProduct Flavorsを使って、広告版と有料版を一つのプロジェクトにするには、広告ありのlayoutと広告なしのlayoutを用意する必要がある。 layout定義 com.google.android.gms.ads.AdViewをlayoutの一部に使用していて、それ以外は共通の場…

Androidアプリの広告版と有料版を一つのプロジェクトにする

今まで、広告版と有料版を別のプロジェクトにして、両方に同じ内容の修正を行っていたが、コードを共通化できると手間が省ける。 Android Studioのビルドバリアント機能を使えば、一つのプロジェクトにできることが分かった。ビルドバリアントには、「Build …

AndroidスマホにおけるJavaとNativeの速度比較

Androidのアプリで、FFTの計算をNDKでNativeで実装した場合に、速くなるか検証してみた。 測定条件 大浦版FFTをJavaに移植したコードとC言語のコードを使用する FFTのフレームサイズは4096 NativeはNDKでJNIのメソッドとして実装する NativeのメソッドはJava…

VSTプラグイン(vst_pitch)を更新

VSTプラグイン(vst_pitch)を更新して、MIDIノートと音程が一致する場合に色にハイライトを付けるようにした。 よりカラオケ採点機能っぽくなりました。VSTプラグインなので別途DAWソフトが必要です。Windows専用です。音程解析VSTプラグイン(vst_pitch)

WindowsでChainerをGPUを使って動かす(更新)

GPUをGeForce GTX 1080に交換したので、CUDAを8.0にバージョンアップした。CUDA7.5でインストールしたChainerが動かなくなったため、CUDA 8.0に対応させるため、再インストールを行った。基本的に、CUDA7.5のときの手順と同じだが、環境変数INCLUDEの設定が…

TensorFlowをGPUを有効にしてWindowsでビルドする(続き)

※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。GPUをGeForce 1080に交換したので、前回の日記でWindowsでGPUを有効にしてビルドしたTensorFlowを動かしてみた。結果は以下の通り、GPUで実行できた。 tensorflow\mod…

TensorFlowをGPUを有効にしてWindowsでビルドする

※公式からWindowsバイナリが提供されたため、この記事の内容はほとんどの人には不要です。TensorFlowはビルドツールのBazelがWindowsに対応していないため、Windowsではビルドができなかった。Bash on Windowsを導入することで、Ubuntuのパッケージをバイナ…

行列でベクトルはなぜ縦なのか

data augmentationを行うために、アフィン変換を行っているときにひさしぶりに行列の内積を計算したので、行列ネタについて書きます。 行列の計算ではベクトルは縦で表し、内積は以下のように計算される。行列を初めて見たときに思った疑問は、なぜが縦なの…

顔認識用の学習データを準備する際の小技

画像から顔画像のみを切り出して、顔認識用の学習データを準備したい。画像データが大量に必要になるので、data augmentationで実行時に動的に増幅することを考慮する。data augmentationとして、回転、拡大縮小、平行移動をアフィン変換で行う。切り出した…

dlibをWindowsにインストールする(補足)

前の日記で、WindowsのAnacondaでインストールしたPythonにdlibをインストールする方法を記載したが、jpegライブラリが有効になっていないため、サンプルが実行できなかった。解決方法が見つかったので、その方法を記す。Bash on Windowsでは、dlib公式のペ…

dlibの顔のパーツ検出をマンガで試してみた(追試)

昨日の日記でdibでマンガの顔器官検出を試したころ、全く検出できなかった。HOG特徴+SVMであらかじめ顔検出をして切り出した画像を対象とした場合どうなるか追加で検証を行った。画像の切り出しは、顔検出スクリプト(detect_object_detector.py)を修正して、…

dlibの顔のパーツ検出をマンガで試してみた

前回の日記でサンプルで試した顔器官検出を、マンガの画像で試してみた。 学習データ準備 サンプルでは特徴点が68個あるが、入力するのが大変なので、顔の輪郭5点と左右の眼それぞれ4個ずつの13個とした。前回説明した通り、imglabツール(前の日記参照)の引…

dlibで顔のパーツ検出を行う

前の日記で、dlibの顔検出を試したが、dlibには目、鼻、口、輪郭といった顔のパーツを検出する機能も実装されている。 英語では「Facial Landmark Detection」という用語が使われている。 日本語では「顔器官検出」と訳すようだ。ここでは、サンプルを試す手…

dlibをWindowsにインストールする

前々回の日記で、Bash on Windowsにdlibをインストールする方法を書いたが、Anaconda 4.1(64-bit)でインストールしたPython 3.5にもインストールできたので、その方法を示す。 ※2016/9/27追記:この方法でインストールしてもJPEGライブラリが有効にならない…

dlibでマンガの顔認識をやってみた

昨日の日記でBash on Windowsを使ってdlibで顔検出を行うことができたので、自分で用意した画像を使って、顔検出ができるか試してみた。↓この記事のようにアニメの画像での顔認識を試した例はいくつかありましたが、マンガでの例がなかったので試してみまし…

Bash on Windowsでdlibを使って顔検出する

最近、物体検出に興味がありネットの記事を調べていたら、こちらの記事で使われていたdlibによるHOG特徴量+SVGが検出精度が高いらしい。bohemia.hatenablog.comdlibはC++の総合的な機械学習のライブラリで、Python用のインターフェースも用意されている。自…

VSTプラグイン(vst_pitch)を更新

VSTプラグイン(vst_pitch)を更新しました。更新内容は、解析精度の改善と、オクターブ表示を440Hz=A3にするオプションの追加です。 オプションは要望を頂いたので対応しました。個人的には自分自身で一番使っているプログラムですが、Windows専用でDAWソフト…

自己相関関数と窓関数

以前の日記で、自己相関関数はウィーナー=ヒンチンの定理でFFTを使って高速に計算できることを書いた。自己相関関数は、同じ波形データ同士をずらしながら掛け合わせた値の合計であることを説明したが、その定義通り計算する場合は窓関数は特に必要ない。 …

ボーカル音程モニター(Vocal Pitch Monitor)をアップデートその2

前回の日記で、ボーカル音程モニター(Vocal Pitch Monitor)のアップデートについて書きましたが、解析精度に少し問題があったので、再度アップデートしました。どうやら母音が「う」の場合に、倍音を誤検知しやすくなっていました。 アップデートで倍音構成…

ボーカル音程モニター(Vocal Pitch Monitor)をアップデート

Androidアプリのボーカル音程モニター(Vocal Pitch Monitor)をアップデートしました。 マイクから入力した音声のピッチをリアルタイムで表示するアプリです。今回のアップデートで、C2以下の音程の解析精度を改善しました。 歌声やギターなどの弦楽器の音声…

FFTと窓関数に関する考察

前回の日記で、ピークの周波数の周辺のパワースペクトルの和がエネルギー(全周波数のパワースペクトルの総和)に占める割合について書いたろころ、Chachayさんからスペクトル漏れについてご指摘を頂いた。chachay.hatenablog.comFFTについてのはじめの日記を…