{"data":{"site":{"siteMetadata":{"title":"bauhausify","siteUrl":"https://www.bauhausify.com","subtitle":"美大出身のWEBエンジニアリング奮闘記","descriptionMyself":"\n多摩美術大学<br>プロダクトデザイン専攻卒業 -> <br>GUIデザイン会社勤務 -><br>\n現在フロントエンジニア<br>\n<br>\nMy site -><br>\n<a href=\"http://www.mwrote.com\">www.mwrote.com</a>\n"}},"markdownRemark":{"id":"156242f5-f991-540a-8b82-2321b7bbc8a9","html":"<p><a href=\"https://codepen.io/mwrote/pen/KKPgbrw?defaultTab=result&#x26;run=true\" target=\"_blank\" rel=\"noopener noreferrer\"><div class=\"embed-codepen\"><iframe\n        height='400'\n        scrolling='no'\n        src='//codepen.io/mwrote/embed/KKPgbrw/?height=400&theme-id=light&default-tab=result'\n        frameborder='no'\n        allowtransparency='true'\n        allowfullscreen='true'\n        style='width: 100%;'></iframe></div></a></p>\n<p>なぜか<a href=\"https://p5js.org/\" target=\"_blank\" rel=\"noopener noreferrer\">p5js</a>と間違えやすい、<a href=\"https://ml5js.org/\" target=\"_blank\" rel=\"noopener noreferrer\">ml5js</a>という機械学習をブラウザ上で実行するライブラリが気なったので、その所見を書きたいと思います。<br>\n(p5jsは<a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B7%E3%82%99%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%95%E3%82%99%E3%82%A2%E3%83%BC%E3%83%88/\">Ptsjsによる実践ジェネラティブアート</a>で紹介しています。)</p>\n<h2 id=\"まず機械学習について簡単に\"><a href=\"#%E3%81%BE%E3%81%9A%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%B0%A1%E5%8D%98%E3%81%AB\" aria-label=\"まず機械学習について簡単に permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>まず機械学習について簡単に</h2>\n<p>以前私は、Pythonの<a href=\"https://keras.io/ja/\" target=\"_blank\" rel=\"noopener noreferrer\">Keras</a>を用いて少しだけ機械学習に触れたことがあります。<br>\nその時の、雑感を端的に説明すると、<br></p>\n<ul>\n<li>学習</li>\n<li>推論</li>\n</ul>\n<p>この２つが機械学習の大きなフェーズとなり、<br>\n一番重要な、そして用意するのが難しい学習のための<em>データ</em>が存在します。<br>\n開発者側はデータから学習した<em>モデル</em>を事前に用意し、<br>\nなんらかのサービスのユーザーはそのモデルをもとに機械学習を実行します。ここが<em>推論</em>です。<br></p>\n<p>そのときの機械学習への印象は以下です。</p>\n<ol>\n<li>学習させるためのデータが必要、より多く、正確なもの</li>\n<li>学習にはマシンスペックが必要、お金を出せば出すほど早くできる、時間とお金の相談</li>\n<li>学習させるノウハウは専門家レベルの習得に時間がかかる、素人はトライアンドエラー</li>\n<li>学習したモデルをもとにインタラクティブに推論を得るにもある程度のマシンスペックがいる</li>\n</ol>\n<p>1-3は到底ブラウザで実行するにはお門違いです。<br>\n<em>ml5js</em> は4の実行させるところに主眼をおいたものに思われます。<br></p>\n<p>では実際にサンプルを触ってみます。</p>\n<h2 id=\"ml5jsのはじめのサンプルを試す\"><a href=\"#ml5js%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%92%E8%A9%A6%E3%81%99\" aria-label=\"ml5jsのはじめのサンプルを試す permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>ml5jsのはじめのサンプルを試す</h2>\n<p>ここからの内容は<a href=\"https://ml5js.org/getting-started/\" target=\"_blank\" rel=\"noopener noreferrer\">公式のチュートリアル</a>に沿っています。その簡略版です。<br></p>\n<p>まず<code class=\"language-text\">&lt;head></code>内にml5jsとp5jsを読み込ませます。<br>\nなぜp5jsを使うのかというと、機械学習は画像に対してわかりやすい効果がだしやすいので、画像を取り扱いやすいp5jsが採用されたのでしょう<br>\nこの記事では最低限のもののみ読み込みます。</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token comment\">&lt;!-- p5 --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/p5.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n<span class=\"token comment\">&lt;!-- ml5 --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://unpkg.com/ml5@0.3.1/dist/ml5.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>つぎにp5jsのみの機能を使いcanvas要素を作成し、画像を表示します。<br>\n今回は、この画像が何の画像なのかを推論します。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">let</span> img<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">preload</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  img <span class=\"token operator\">=</span> <span class=\"token function\">loadImage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'https://res.cloudinary.com/mwrote/image/upload/c_scale,w_200/v1560441316/bauhausify/_SDI0792.jpg'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token function\">createCanvas</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">,</span> <span class=\"token number\">133</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 今回読み込んでいる画像のサイズ</span>\n  <span class=\"token function\">image</span><span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>そこで、肝心のml5jsの登場です。追加しているのは4箇所です。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">let</span> classifier<span class=\"token punctuation\">,</span> img<span class=\"token punctuation\">;</span> <span class=\"token comment\">// ここと</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">preload</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  classifier <span class=\"token operator\">=</span> ml5<span class=\"token punctuation\">.</span><span class=\"token function\">imageClassifier</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MobileNet'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// ここと</span>\n  img <span class=\"token operator\">=</span> <span class=\"token function\">loadImage</span><span class=\"token punctuation\">(</span><span class=\"token string\">'https://res.cloudinary.com/mwrote/image/upload/c_scale,w_200/v1560441316/bauhausify/_SDI0792.jpg'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token function\">createCanvas</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">,</span> <span class=\"token number\">133</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  classifier<span class=\"token punctuation\">.</span><span class=\"token function\">classify</span><span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> gotResult<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// ここと</span>\n  <span class=\"token function\">image</span><span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// ここ</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">gotResult</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>まず、TensorFlowの提供する学習済み画像モデルMobileNetを使うと宣言し、</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">let</span> classifier <span class=\"token operator\">=</span> ml5<span class=\"token punctuation\">.</span><span class=\"token function\">imageClassifier</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MobileNet'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>画像を読み込ませ、callback関数のgotResult(名前なんでもOK)を指定します。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">classifier<span class=\"token punctuation\">.</span><span class=\"token function\">classify</span><span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> gotResult<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>すると画像解析の数秒後にgotResult関数が呼ばれます。</p>\n<p>事前にhtmlにて簡単な受け皿を用意し、</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>result<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>gotResult関数には以下を書きましょう。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function</span> <span class=\"token function\">gotResult</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">results</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>results<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'#result'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>textContent <span class=\"token operator\">=</span> results<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>label<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>すると、ブラウザコンソールには画像の推論結果が表示され、<br>\n<code class=\"language-text\">span#result</code>要素にはそのテキストデータが表示されます。<br></p>\n<p>詳しいサンプルコードは、記事冒頭のCodePenのリンク先でご覧いただけます。</p>\n<h2 id=\"雑感まとめ\"><a href=\"#%E9%9B%91%E6%84%9F%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"雑感まとめ permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>雑感まとめ</h2>\n<p>冒頭の機械学習の概要と照らし合わせせつつ、雑感としてまとめます。</p>\n<ul>\n<li>実行時のNetwork通信をみると学習済みモデルデータは都度ダウンロードしている。ライブラリ内には存在しない。<br>\n場所: <a href=\"https://storage.googleapis.com/tfhub-tfjs-modules/google/imagenet/mobilenet_v1_100_224/classification/1/model.json\" target=\"_blank\" rel=\"noopener noreferrer\">https://storage.googleapis.com/tfhub-tfjs-modules/google/imagenet/mobilenet<em>v1</em>100_224/classification/1/model.json</a></li>\n<li>圧縮版のml5jsだけでも1.6MBあり、モデルデータは64KB。モデルデータが軽いが、ライブラリだけでも重い</li>\n<li>静止画の推論実行に数秒かかる。動画などにリアルタイムではだいぶ未来の話</li>\n</ul>\n<p>やはり、ブラウザ上ではなかなか現状厳しいデータですね。<br>\nしかし、<em>ブラウザで実行できる</em>ことが最大のメリットです。<br>\nそして、クライアント側でのモデルの読み込みと推論がこんなに簡単にできることが触っていて楽しいですね。</p>","fields":{"slug":"/2019-08-21_ブラウザで機械学習が実行できるml5jsを試してみる/"},"tableOfContents":"<ul>\n<li><a href=\"/2019-08-21_%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A7%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8Bml5js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/#%E3%81%BE%E3%81%9A%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%B0%A1%E5%8D%98%E3%81%AB\">まず機械学習について簡単に</a></li>\n<li><a href=\"/2019-08-21_%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A7%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8Bml5js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/#ml5js%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%92%E8%A9%A6%E3%81%99\">ml5jsのはじめのサンプルを試す</a></li>\n<li><a href=\"/2019-08-21_%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A7%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8Bml5js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/#%E9%9B%91%E6%84%9F%E3%81%BE%E3%81%A8%E3%82%81\">雑感まとめ</a></li>\n</ul>","frontmatter":{"date":"2019.08.21","title":"ブラウザで機械学習が実行できるml5jsを試してみる","cover":"","category":"Coding","excerpt":"フロントエンドエンジニアは絵を描くのが苦手だけど、絵をブラウザで表示するのは得意です。それと同じことが、機械学習でも起こるのでは？そんな近未来を予感させてくれるような、ブラウザ実行型のライトウェイトな機械学習ライブラリml5jsを紹介します。"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"156242f5-f991-540a-8b82-2321b7bbc8a9","next":{"path":"/2019-08-15_たった4ステップでVueを使う方法/","title":"たった4ステップでVueを使う方法","category":"Coding"},"prev":{"path":"/2019-08-24_Bodymovinでサイズを拡大しても綺麗なWeb用アニメーションを作る方法/","title":"Bodymovinでサイズを拡大しても綺麗なWeb用アニメーションを作る方法","category":"Design"},"relatedPosts":[{"id":"2e52640f-36d6-5268-99ea-9d58492ffec5","fields":{"slug":"/2019-09-14_p5-jsを本番サイトで使う方法/"},"frontmatter":{"title":"p5.jsを本番サイトで使う方法","date":"2019-09-14T00:00:00.000Z","excerpt":"p5.jsをいざプロダクションビルド(本番サイト向け)で使う場合、一体どのような方法で使うのが最適でしょうか。p5.jsの特徴を踏まえ、代表的な使い方をご紹介します。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"d5a69a1d-62b7-5a8b-8f18-975dfee3ae96","fields":{"slug":"/2019-09-11_p5-jsスケッチトレーニング-円弧の線を円周上に沿って動かす/"},"frontmatter":{"title":"p5.jsスケッチトレーニング -円弧の線を円周上に沿って動かす-","date":"2019-09-11T00:00:00.000Z","excerpt":"p5.jsのarcと簡単なEasing式を使い、円弧の線を動かします。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"a9f2125a-caa7-5d36-a7d1-c68b1a35d0fa","fields":{"slug":"/2019-07-15_Ptsjsによる実践ジェネラティブアート/"},"frontmatter":{"title":"Pts.jsによる実践ジェネラティブアート","date":"2019-07-15T00:00:00.000Z","excerpt":"Ptsという幾何学的な図形を描画するのに特化したJavaScriptライブラリをご紹介します。","templateKey":"post","category":"Coding","propertags":["ptsjs"],"commontags":["generative","javascript"]}},{"id":"1eb35481-156d-520b-ab66-a911316fe17b","fields":{"slug":"/2019-07-03_Webで簡単にコードで絵を描くp5-js/"},"frontmatter":{"title":"Webで簡単にコードで絵を描くp5.js","date":"2019-07-03T14:15:51.667Z","excerpt":"描画ライブラリp5.jsとCodepenを使い、ブラウザ上で簡単にスケッチを描く方法を紹介します。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"3a8f96d7-8238-57b2-be53-57c0bab5d727","fields":{"slug":"/2019-09-05_JSでアニメーションできるフォントleonsans/"},"frontmatter":{"title":"JSでアニメーションできるフォントleonsans","date":"2019-09-05T00:00:00.007Z","excerpt":"CanvasやPIXI.js上で展開できるプログラマブルなフォントleonsansを紹介します。","templateKey":"post","category":"Coding","propertags":null,"commontags":["animation","generative","javascript"]}}]}}