2.0でタイプガード周りが向上したので、下記のように早期リターンがしやすくなった。comp;//上のif文でCompItem以外はreturnしたので、ここはCompItemと推測してくれる!今まではItemと認識されていた。})();プロパティに関してもタイプガードしてくれるようになった。AVLayer!!}のように、AVLayerとそのサブクラスを羅列する必要がある。ShapeLayer;}のようになるわけだが、これだと型周りの情報が抜けてtrueの場合にAVLayerであると認識してくれない。ShapeLayer;}きちんと解釈してくれる。layer;//AVLayerクラス!!}polyfillTypeScriptはes5のpolyfillは用意してくれない(Startupにpolyfillをデフォルトで突っ込んでくれればいいと思うけど)。for-of文は使えるので、配列周りで面倒なことはそこまでないと思う。constや、クラス、分割代入、テンプレート文字列等、es6の機能は普通に使えるのでどんどん使っていけばいいと思う。bにrateを加えて、rateを動かすことで色調を変化させていくことを試みる。Vibranceを掛けた画像(左下)、となるように学習させた。普通の写真よりかは色んな色が混ざっている方が学習するにはいいので、学習時はカラーノイズに差し替えてある。間がどう補間されるかっていうのは、モデルの構成や初期値等々によって結構変わるもんなんだろうか。y(位置)を入力として、色を出力させてみる。学習がすすむにつれ、何となく近づいていってるのが分かる。最終的な画は使用しているモデルがどこまで表現できるかに依存するわけだけども、300*200=60000pixelsの画を再現するのに、数百個程度の重みじゃ厳しい。のちのち次こそ畳み込み層も加えて色々したい。機械学習はPythonが楽なのでとりあえずAEにPythonを組み込むことを考える。AEとPythonを連携させた例は以下のようなものがある。devlog0ひとつ目は、スクリプトからbat経由でPythonスクリプトを実行するというもの。ふたつ目は、スクリプトにPythonを組み込むもの。Python"は今回やりたいことの方向性と似ているけど、Cairoを扱って描写というのがちょっと扱いにくい(ピクセルをnumpyの配列で扱いたい)ので参考にしつつ自作する。AEで実際にPythonAEプラグイン側から呼び出されるpythonのコードはこんな感じ。基本、AEプラグインと関数の命名、機能等を対応させる感じで。ParamsSetup()で、使用パラメータやチャンネルの順序を指定(OpenCVはBGRの順なため変えられるようにしてある)。SmartRender()でパラメータの実際の値や、入力画像であるnumpyの配列を受け取り色々処理した後AEプラグイン側にnumpyの配列を返して後はよしなに描写。CC2015でOpenCV使おうとすると処理が戻ってこなくなったり、モジュールによっては落ちたりするけど、軽くフィルタを作る分には非常に楽。ひとつ前の記事の4コマの奴もこれでトライアンドエラーした。上では紹介してないけど、トラッカーのようにある時間幅(現在フレームのみ、ワークエリア等)を指定してその間を逐次処理する機能も実装してある。最終的に何かの値をキーフレームにベイクする、連番ファイルを渡してプロジェクトに読み込む的な用途を期待してるんだけど、単純にフレームのピクセル情報を得て色々するのにも当然使えるので、それを利用して学習させる。画像を扱うならCNNっていう感じなんだろうけど、まだあまり理解してないのと計算コストが大きいのとどういう方向でやると面白くなりそうかというのがまだ明確じゃない。単純にピクセルのマッピングを学習させる。フィルタを掛ける前の画像のピクセル列を入力ピクセル、フィルタを掛けたあとの画像のピクセル列を教師ピクセルとして、そのフィルタを学習させる。機械学習部のコードの断片。機械学習のライブラリはChainerのv1.5。別に特別なことはやっていない。Bの3つ、いくつかの全結合層で繋いで、入力と同様に3つの値を出力。中間層の活性化関数はReLU。元画像で左下がLightroomで現像した画像、右下が学習したフィルタを適用した画像となっている。動画内では3エポック回してるが、学習が進むにつれ右下の画像の色合いが左下の画像の色合いに近付いていってるのが分かる。左が元画像、真ん中がLightroomで現像した画像、右が学習したフィルタを適用した画像である。LUTに出力してから適用してある。Buddy(Free)で読み込める。差分画像、ちょっと分かりにくいが、ヘルメットや勝負服、ブリンカー等の色鮮やかなところの再現性が少し劣っている。他の画像に学習させたフィルタを適用した例。LUTには出力できないので可搬性に劣るのでそこらへんは何とかする必要がありそう。後、適当なパラメータを入力に加えて、それを弄ることでトランジションさせていったりとか。どっちにしろ、現状の1ピクセル入力、1ピクセル出力だとやれることに限度があるので、もうちょっと色々考えたい。23:57AfterEffectsで機械学習Tweet広告を非表示にするもっと読むコメントを書く2015-12-134コマ漫画のコマを切り抜くesuji5.hateblo.jp上記の記事に触発され自分も書いてみました。3.0.04コマを切り出すsrcフォルダ以下にある画像を再帰的に処理してdstフォルダ以下に切り抜き画像を出力するようにしてあります。OpenCVにfindContoursという輪郭を抽出するメソッドがあるのでそれでコマの輪郭を抽出することを目指します。画像サンプルは手持ちで上からとった悪条件のものを。C)輪郭を抽出する前にまず二値化する必要があります。Thresholdを行います。Adaptiveの場合、画像全体で一意の閾値を適用するのではなく周囲のピクセルに応じて閾値を上下させるので影があっても綺麗に処理してくれます。条件が悪い場合はブロックサイズを大きくしたり等パラメータを調整する必要がありますが、スキャナできちんとスキャンしたものを対象にする場合はそこまで気を使う必要はないと思います。contours[0:external_num]findContoursで輪郭を抽出します。今回は一番外部の輪郭(コマの内部の輪郭は必要ない)のみが必要なので2つめのパラメータにcv2.RETR_EXTERNALを渡します。するとhierarchyに一番外部の輪郭のみのリストが返ってくるので、個数を数えてその分だけの輪郭データだけを返すようにしてます。OpenCV3系では戻り値が変わって最初に画像を返すようになったので、OpenCV2系の場合は注意が必要です。フィルタを掛け、コマの輪郭だけを抽出を試みてます。_cmp_frameコマを外接矩形の中心位置に基づいて並び替えます。傾いている場合も考慮して、x方向は許容範囲内であれば同じx位置と見て、y方向のみで比較するようにしてます。key=cmp_to_key(cmp_frame(tolerance)))python3系ではsortedにcmpを渡せなくなったのでfunctools.cmp_to_keyを用いてます。python2系の場合は直接cmpに渡せば大丈夫かと思います。size)アフィン変換で傾きを直しつつ切り抜いてます。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。