近況と生存報告と人気ページについて
先月からクソ忙しくて、録に更新してこなかったけどいい加減更新しようと思いいたった。のだけれども、どうも記事にできる内容がない。
いや、この三ヶ月、何もしてこなかった訳ではない。一応、研究成果の方はしっかり出して、それ相応の評価を頂戴した。
ただ、このブログに書けるような内容が、どれも進捗半端で紹介しかねるという状況だった。例えば、Webアプリ作った話とか、tensor flowのWindows版をインストールして使ってみた話とかCNTKがクソだった話とか、DLIBでDCGANを実装しようとして死にそうになってる話とか、もう色々あるんだけど……。
それで、とりあえず。はてブの編集ページへ飛ぼうとはてブのトップを開くと、右上のアカウント名のところに赤い通知が来ていた。
PV数が100を超えました
これを見た瞬間「はぁ?」となり、さらにPV数を確認して「……」となった。なんと、月間PVが100と言わず404になっていた。これまで、と言っても最後に更新したのは12月の話だが、その時は月間PV数なんて50を超えれば良いほうだった。それがほったらかしにした2ヶ月の間に何があったのかという話だ。
それで、記事の人気順を出して見るとその原因が何となく分かった。
総アクセス数に占める割合 | ページ名 |
23% | C++でDNNが使えないなんてあるわけないよ in Windows |
20% | CUDA 8.0がいつの間にかリリースされててVisual Studio 2015 Update 3でも使えるようになっていた話 |
11% | DLIBでCNNを使ってみた in Windows |
11% | DLIBのコンパイル For Debugビルド |
6% | DLIB with CUDAでCNNを使ってみた in Windows |
4% | Windowsでffmpegを使ってみた話 |
3% | /category/機械学習 |
2% | /category/dlib |
2% | GLEWをVisual Studio 2015とCMakeでビルドするときの注意点 |
2% | ブログトップ |
2% | OpenGLでズームを実装する方法 |
1% | GPGPUって色々あるけど結局どれがいいの |
1% | SFINAEやテンプレートの部分特殊化で気をつけたいこと |
1% | Visual Studio で拡張子のないC++ヘッダーをIntelli Senseで表示する方法 |
0% | PythonでDLLを使う時の話 |
0% | /category/深層学習 |
0% | Visual Studioユーザーに送るCMakeテクニック☆ (1) |
0% | cygwinでFindOpenCVするとエラーになる |
0% | Visual Studioユーザーに送るCMakeテクニック☆ (2) |
あー、ただのディープラーニングか。実際、「C++ DNN」とか「DLIB DNN」でGoogle検索を掛けると、ビックリするほど上位に出てくるから、やはりそういうことらしい。
とりあえず、今後もディープラーニングの話は書いていくつもりですのでよろしくお願いします。あ、それとCMake絡みの記事も読んでくれてもええんやで。
Visual Studioユーザーに送るCMakeテクニック☆ (3)
いやーこれでもう第三回ですよ。
なんとか自分で設定した週一更新のノルマを達成できそうですねー
それはさておき、今日は(1)と(2)の続きにあたるはなしで、(2)はCMakeListsを対象としたものでしたが、今回はそれ以外のヘッダーファイルやソースファイルを対象としたものです。
今回は少し長いので、gistに上げました。
かなり前に書いたためちょいちょいとお恥ずかしい部分(ぶっちゃけ汎用で作ればいいのになぜか専用品になってるあたりマジで…)もありますが、普通に使えるはずです。
下記は実際にこれを使い方です。実行したCMakeListsの保存されているディレクトリをルートとしてそのファイル内の全てのファイルについてフィルタリング&ファイルパスを取得できます。
使い方としては>|cmake|RecursiveGroupingWithFileSet(<探索するルートディレクトリ> <探索するディレクトリ一覧> <ヘッダーファイルの一覧が保存される変数名> <ソースファイルの一覧が保存される変数名>)|
なんかデスマってたからレムちーのボクセルキャラクターを描いてみた
学会前のセルフハンディキャッピングの一環としてなぜかボクセルキャラクターを作りたくなったのでRe:ゼロのレムを作ってみました。
参考は下記、3つのサイトです。
CHARACTER|TVアニメ『Re:ゼロから始める異世界生活』オフィシャルサイト
ultimei.hatenablog.com
github.dev7.jp
一番上は参考画像。まあRe:ゼロのアニメ版公式サイトですね。
それから、真ん中は基本的な書き方、一番下はテンプレートを拝借しました。
それで、実際に書いていて一箇所だけ詰まったのが、パレットの設定です。
パレットからいらない色を選択して、左下のHSVというペーン内で設定することができるのですが、
HSVというのはスライダーの部分のパラメータだけで、スライダーの下のテキストボックスはRGBなので、手打ちで色を入力する際は注意が必要です。
それ以外は特に詰まること無くスイスイと書くことができました。
もともと絵心がない上に製作時間が1時間なので出来具合はお察しください。
正面
頭上
側面
背面
パンツは未実装
ガラス調
メタル調
それでも、自分で作ったからか何となく愛着が湧いちゃって。もうね、どれ位かって言うとこんな記事を作っちゃうくらいですよね。
とりあえず、今後も作るかは分からないけれども、課題としてはもう少し凝ってみたいので、より大きなサイズのボクセルモデルを作ってみたいですね。
追記:
投稿してからすぐに気づいたのだけれども、なんかメイド服なのにしっくりこないなと思っていたら、カチューシャ(?)の存在を忘れていたので慌てて付け足しました。
Visual Studioユーザーに送るCMakeテクニック☆ (2)
Visual Studioユーザーに送るCMakeテクニック☆ 、第二回目です。
今回は、昨日の記事で説明したフィルタリング機能を使って、CMakeファイルをVisualStudioから簡単に見えるようにしようって話です。
具体的にはどういうことかと言うと下記のように各ディレクトリに配置されているCMakeListsと*.cmakeファイルをディレクトリ構造をフィルタ名としたCustomプロジェクトを作成します。
下記が実際のソースコードです。
FILE(GLOB_RECURSE CMAKE_LIST_FILES CMakeLists.txt *.cmake) FOREACH(file ${CMAKE_LIST_FILES}) FOREACH(dir ${CMAKE_CURRENT_LIST_DIR}) FILE(RELATIVE_PATH relative ${CMAKE_CURRENT_LIST_DIR} ${file}) STRING(REGEX MATCHALL "[^/]+" filters "${relative}") LIST(LENGTH filters output_length) MATH(EXPR iteration "${output_length} - 2") IF(${iteration} LESS 0) continue() ENDIF() SET(group_string "") FOREACH(i RANGE 0 ${iteration}) LIST(GET filters ${i} g) set(group_string "${group_string}\\${g}") #MESSAGE(${i},${output_length}:${g}) ENDFOREACH() SOURCE_GROUP("${group_string}" FILES ${file}) ENDFOREACH() ENDFOREACH() ADD_CUSTOM_TARGET(CMakeLists SOURCES ${CMAKE_LIST_FILES}) <||
Visual Studioユーザーに送るCMakeテクニック☆ (1)
はじめに
今月忙しすぎてブログの更新が滞っていたので、暫くごまかしのためにCMakeのテクニックを紹介します。
なお、未だに忙しくて録に記事が書ける状態ではないので記事は分割してますが、悪しからず。
決して当初掲げていた週一更新の分を一気に放出しようとしているわけではありません
それはさておき、今日紹介するのはVisual Studioが有するフィルタリング機能をCMakeから利用するにはどうすれば良いのか?
という話です。
フィルタリング機能って
Visual Studioでプロジェクトを右クリックしてでてくるポップアップメニューの Add > New Filterで出てくるアレです。
デフォルトでも、Source filesやHeader files(日本語版だとソースファイルとヘッダーファイルかな?)というものが設定されているかと思います。
このフィルタリング機能ですが、これがないとソースファイルの数が100近くなると非常に見づらくなるので、どっぷりとVisual Studioを使っている方は間違いなく利用しているかと思います。
これをCMakeを使ってソリューションファイルを生成するとデフォルトのSource filesやHeader filesのフィルタリングすらないため、非常に不便ですよね。
フィルタリングを有効にする
下記コマンドを実行すればフィルタリングが有効になります。
なお、デフォルトでSource filesとHeader filesが設定され、振り分けられます(久しくデフォルトの挙動を確認していないので不安ですが…)。
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
もし、これをONにしない場合、以下で説明している設定をしても反映されないので注意しましょう
ソースファイルをフィルタリングしたいとき
ソースファイルをフィルタに分類する場合、下記コマンドを実行すればOKです。
SOURCE_GROUP("任意のフィルタ名" FILES <ソースコードのファイルパス> ...)
なお、もしフィルタをネストする場合、例えば Source files > hoge > huga > hage.cpp のような階層構造を持たせたい場合、フィルタ文字列をバックスラッシュ2つ(文字列内の場合バックスラッシュをエスケープする必要がある?)並べる必要があります。
SOURCE_GROUP("Source files\\hoge\\huga" FILES hage.cpp)
のようになります。
プロジェクトをフィルタリングしたいとき
プロジェクトの場合ソースコードとは違う方法でフィルタリングを行います(フィルタリングのフォーマットは同じ)
SET_TARGET_PROPERTIES(<プロジェクト名(ターゲット名)> PROPERTIES FOLDER "任意のフィルタ名")
ここで注意しなければならないのが、ターゲットを対象としてフィルタリングするため、add_executable or add_library or add_custam_target etc... でターゲットを生成した後に呼び出す必要があるという所。
おわりに
ざっくりとCMakeを使ったフィルタリングの使い方を説明しました。
次回以降も個人的に知ってて便利だな―と思ったCMakeの使い方を説明していくつもりです。
なお、全五回くらいになる予定していますそんなにネタがあるか微妙ですが
Visual Studio で拡張子のないC++ヘッダーをIntelli Senseで表示する方法
Qt+CMakeを使いつつVisual Studioを使っていると拡張なしのヘッダーファイルをインクルードしたい時がある(実際には拡張し有りのヘッダーファイルをインクルードすれば事足りるので特に問題にはならないが…)。
その場合、なぜかIntelli Senseでは標準ライブラリ以外の拡張子無しのヘッダーファイルが候補として表示されることはない。
本当になぜかは分からないが…
それはさておき、解決方法。
Tools > Options... から設定画面を開く。
それから TextEditor > FileExtension から拡張子に関する設定画面を開く。
その後,「Editor:」と「Map extensionless files to:」をMicrosoft Visual C++に変更して、チェックボタンをチェックしてからOKボタンをクリックして設定完了。
Windowsでffmpegを使ってみた話
はじめに
ffmpegを使ってみた話ですが、あくまでもC++から使ってみようっていう話。
ffmpegのバイナリを使うって話はググれば山ほど出てくるんだけど、Cのライブラリを使うって言う話はあまり出てこなかったので、備忘録を兼ねて。
そもそも、どうしてffmpegを使おうと思い至ったかと言いますと、OpenCVのVideoCaptureってコーデックが揃った外部のffmpegを指定してもフレームのシークや動画情報の取得が上手く行かない場合が多く、そもそもコーデックに対応してないなんて場合もあって微妙に使いづらいという問題があります。(汎用的な機構でいろんな動画フォーマットを開けるというだけで十分便利なのですがね)
それで、ffmpegを直接使えば多少の手間はかかれど、そういう問題はないだろうと思い、実際に試してみました。
準備
いつも通り、Windows環境での話しかしませんので、MacやLinuxの人はパッケージマネージャーで適当に準備してください。
それで、Windows環境の場合ですが一からffmpegをビルドするのは大量のコーデックをビルドする必要があって、かなり骨が折れるので下記からダウンロードしてきましょう。
32bit、64bit、好きな方を選んで、SharedとDevの両方のパッケージをダウンロードしましょう。なぜかはわかりませんが、Devを選択してダウンロードしてくるとリンクするシンボルが含まれたlibファイルはあるのにdllがないのでSharedパッケージに含まれるdllを併せて利用します。
テストコード
下記のサンプルコードを改変してC++で使えるようにしました。ただ、それだけだと面白みが無いので、フレームのシークをできるようにてみました。(正しく動いているとは言ってない)
ffmpeg tutorial
ポイントは、ffmpegのヘッダーを extern "C" で括ってやることぐらいですかね。
ただ、このコード。たまにシーク出来ないことがあるので、おそらくどこか間違ってるんでしょうね。おいおい修正します。