tag:blogger.com,1999:blog-64113562824831403742024-03-06T04:53:17.932+09:00Tora & Mammaプログラミング覚書。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.comBlogger171125tag:blogger.com,1999:blog-6411356282483140374.post-27376127411130941742020-10-02T12:10:00.006+09:002020-10-05T17:44:03.604+09:00FireTVStickのステルスWifiとチャンネル干渉?<h1 style="text-align: left;"> FireTVStickのステルスWifiとチャンネル干渉してるんじゃない?</h1><div>なんというか、5GHzのwifi6アクセスが安定しなくて、先日発見したステルスWifiのチャンネルについて調べてみた。</div><div>FireTVStickから出ているWifiのチャンネルは、無線接続しているWifiのチャンネルと同じになるようです。</div><div>というのも、同じチャンネルで飛んでて、微妙に位置が近いせいかソッチのほうがrssiが優秀で、なんとも気持ち悪い状態になっていたので、ルーターのチャンネル何度か変えたんですが、しばらくすると変えたチャンネルに合わせてくるという。</div><div>どんだけ好きなんだと。</div><div>この辺、詳しくないので、技術的に出来る出来ないは知りません。</div><div><br /></div><div>で、チャンネル干渉だけ解消したいなぁと思って、有線接続を思いついたわけですね。</div><div>んで、</div>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=toramamma-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B07R6P7QMV&linkId=2eb6aebe4084d89c4c08c172c7a0fc4f&bc1=000000&lt1=_blank&fc1=333333&lc1=0066c0&bg1=cdccd1&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<div><br /></div><div>これ買って、有線にしてみた。</div><div><br /></div><div>結果から言うと、ステルスWifi自体は出るんだけど、チャンネル干渉は解消されました。</div><div><span style="font-size: x-small;">チャンネルは有線接続の直前に接続していたWifiのチャンネル設定を内部で持ってるようなので、一回ルーター側でメインで使いたいチャンネルでないのに修正して、FireTVStickからそのチャンネルでステルスWifiが出ることを確認してから有線接続にして、ルーターでメインで使いたいチャンネルに変更すれば、干渉はなくなりました。</span></div><div><br /></div><div>で、5GHzのWifiアクセスが安定したかといえば、気持ち?変わった?・・・気のせいかもしれません。</div><div>まぁ、でも電波の干渉がなくなったというので心の平穏は取り戻せました。</div><div>めでたしめでたし。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHrSGw7AF3trE0w41RDuH8XpqjB4sJ05UOAebNhzWvGfgvXhSo44zcHlyhxsIJRyBDqVHFlcP3ErcAXlbbGgNOC7Q928gV2PcfbhIA4iwfdyHtsI2lpiAfFTt7Q__gq_9z1MQ1RxGkHmc/s2392/WiFi_Explorer_Lite.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="138" data-original-width="2392" height="36" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHrSGw7AF3trE0w41RDuH8XpqjB4sJ05UOAebNhzWvGfgvXhSo44zcHlyhxsIJRyBDqVHFlcP3ErcAXlbbGgNOC7Q928gV2PcfbhIA4iwfdyHtsI2lpiAfFTt7Q__gq_9z1MQ1RxGkHmc/w640-h36/WiFi_Explorer_Lite.png" width="640" /></a></div><br /><div><br /></div>あ、Nintendo switchのWifi接続が安定した気がする。気がするだけだけど。<div><br /></div><div>追記:FireTVStickのWifi情報は削除しないと、ふとした瞬間にWifiにつなぎに行ってチャンネルが干渉するので、Wifiに自動接続しないようにしておいてください。</div><div>あと、Macなんだけど、Shift+optionでWifiアイコンをクリックすると、詳細情報見れて便利。<br /><div><br /></div></div>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-15955074294682885602020-09-28T11:04:00.005+09:002020-09-28T11:04:59.381+09:00FireTVStick関連の覚書Wifiの5GHz対応してるんだけど、チャンネルがW52しか対応していないので、新しめのルーター買ってチャンネル自動とかにすると繋がらなかったりする。<div><br /></div><div>ステルスWifiが出てる。</div><div>ディスプレイミラーリングをONにすると、DIRECT_XXXX_FireTV_XXXXみたいなSSIDのWifi電波が出る。</div><div>ミラーリングOFFにすると、ステルスのWifiになって電波を出している。</div><div>軽く調べた感じ、リモコンとの接続に利用しているようで完全にOFFには出来ない模様。</div><div>チャンネルが接続しているWifiと同じチャンネルになるので、干渉するんじゃないかな?</div><div>気持ち的にはOFFにしたい。それかチャンネル変更するか。</div><div>有線接続にした場合のチャンネルを確認したいけど、ちょっとめんどくさいので放置。</div><div><div><br class="Apple-interchange-newline" />FireTVStickの秘密のメニュー</div><div>決定ボタンと↓ボタンを5秒位押して、その後メニューボタンを数秒押すと、秘密のメニューが表示される。</div><div>上記ステルスWifiの干渉を排除したくて見つけたけど、効果的な設定項目はありませんでした。</div></div>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-58690498187052889582020-05-15T12:41:00.001+09:002020-05-18T09:24:43.460+09:00さよなら全角英数のちょっとかゆいところを治した話さよなら全角英数っていうchrome拡張機能<div><a href="https://chrome.google.com/webstore/detail/goodbye-zenkaku-%E3%81%95%E3%82%88%E3%81%AA%E3%82%89%E5%85%A8%E8%A7%92%E8%8B%B1%E6%95%B0/mjdgifdhhligineaimmgbikndpifdgml?hl=ja">https://chrome.google.com/webstore/detail/goodbye-zenkaku-%E3%81%95%E3%82%88%E3%81%AA%E3%82%89%E5%85%A8%E8%A7%92%E8%8B%B1%E6%95%B0/mjdgifdhhligineaimmgbikndpifdgml?hl=ja</a></div><div><br /></div><div>を使っているんだけど、入力ボックスにあるときの動作が不安定だった。</div><div><br /></div><div>なので、入力系のWEBサイトを除外に入れたりしてた。</div><div>けど、SNSって見たいし書きたいしでムゥってなったので、直してみた。</div><div><br /></div><div>開発者さんに連絡しようと思ったんだけど、最終更新日が2012年だったので、もうやってないだろうなぁと思って自分で直した。</div><div>今回は自分で治すけど、今度暇な時に開発者さん探してみよう。</div><div><br /></div><div><div>プラグインのフォルダを漁ります。</div><div>macならこの辺ね</div><div>~/Library/Application Support/BraveSoftware/Brave-Browser/Default/Extensions</div><div><br /></div><div>拡張機能を見るとIDが書いてあるので、同名のフォルダを適当な場所にコピー</div></div><div><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBtvYpthtQcftuvN0aaQwN9VzE91zYhg3B-YQZkS4rOMUxjuXVolyP_2VkZMwtwY6OxIGypemSRFbqww9Z-aZmvFwYklKehP80_ZUb6J2DeMAS7CssztnzJKt8owHu2gZmStBuMN9akh0/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="818" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBtvYpthtQcftuvN0aaQwN9VzE91zYhg3B-YQZkS4rOMUxjuXVolyP_2VkZMwtwY6OxIGypemSRFbqww9Z-aZmvFwYklKehP80_ZUb6J2DeMAS7CssztnzJKt8owHu2gZmStBuMN9akh0/w400-h209/%25E6%258B%25A1%25E5%25BC%25B5%25E6%25A9%259F%25E8%2583%25BD.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">で、/js/content.js</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; line-height: 18px; white-space: pre;"><div style="background-color: white; font-size: 12px;"><span style="color: #d73a49;">var</span> <span style="color: #6f42c1;">translate</span> <span style="color: #d73a49;">=</span> <span style="color: #d73a49;">function</span> (matcher, target, keepHeadingMBSpace) {</div><div style="background-color: white; font-size: 12px;"> <span style="color: #d73a49;">var</span> replaced <span style="color: #d73a49;">=</span> <span style="color: #005cc5;">0</span>;</div><div style="background-color: white; font-size: 12px;"> <span style="color: #d73a49;">var</span> diff <span style="color: #d73a49;">=</span> <span style="color: #22863a;">'A'</span><span style="color: #6f42c1;">.charCodeAt</span>(<span style="color: #005cc5;">0</span>) <span style="color: #d73a49;">-</span> <span style="color: #22863a;">'A'</span><span style="color: #6f42c1;">.charCodeAt</span>(<span style="color: #005cc5;">0</span>);</div><div style="background-color: white; font-size: 12px;"> <span style="color: #6f42c1;">$</span>(target)<span style="color: #6f42c1;">.find</span>(<span style="color: #22863a;">"*:not(iframe,textarea,script)"</span>)<span style="color: #6f42c1;">.andSelf</span>()<span style="color: #6f42c1;">.contents</span>()<span style="color: #6f42c1;">.filter</span>(<span style="color: #d73a49;">function</span> () {</div><div><span style="background-color: white; font-size: 12px;"> </span><span style="background-color: white; color: #d73a49; font-size: 12px;">return</span><span style="background-color: white; font-size: 12px;"> </span><span style="background-color: white; color: #005cc5; font-size: 12px;">this</span><span style="background-color: white; font-size: 12px;">.nodeType </span><span style="background-color: white; color: #d73a49; font-size: 12px;">==</span><span style="background-color: white; font-size: 12px;"> Node.</span><span style="background-color: white; color: #005cc5; font-size: 12px;">TEXT_NODE</span><span style="background-color: white; font-size: 12px;"> </span><b style="background-color: #f7cb4d;"><font size="2"><span style="color: #d73a49;">&&</span> <span style="color: #d73a49;">!</span>document.activeElement.isContentEditable</font></b><span style="background-color: white; font-size: 12px;">;</span></div><div style="background-color: white; font-size: 12px;"> })<span style="color: #6f42c1;">.each</span>(<span style="color: #d73a49;">function</span> () {</div><div style="background-color: white; font-size: 12px;"> <span style="color: #d73a49;">var</span> str <span style="color: #d73a49;">=</span> <span style="color: #005cc5;">this</span>.textContent;</div><div style="background-color: white; font-size: 12px;"> <span style="color: #d73a49;">var</span> prependSpace <span style="color: #d73a49;">=</span> <span style="color: #005cc5;">false</span>;</div><div style="background-color: white; font-size: 12px;"> :</div><div style="background-color: white; font-size: 12px;"> :</div><div style="background-color: white; font-size: 12px;"> :</div><div style="background-color: white; font-size: 12px;"><br /></div></div></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">黄色背景部分を追加すれば、入力中は変換しないようになります。</div><div class="separator" style="clear: both; text-align: left;">あとは、開発者モードから読み込むだけ。</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">快適快適。</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">開発者さん、こんな素晴らしいアプリをありがとう。</div>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-31355429512184805062020-05-07T09:20:00.011+09:002020-05-07T09:45:35.340+09:00EverHelperのEversyncをBraveで使ったら動かなくなってたので治した話<a href="https://everhelper.me/">https://everhelper.me/</a><div>EverSyncって何?っていうのは、オンラインのブックマークサービスです。</div><div>Googleサービスの断捨離で、ChromeSyncを使わないようにしたので、こちらを使ってます。</div><div><br /></div><div>断捨離の一環でブラウザもBraveに変えたんですが、いつからかブックマークの構造がChromeと変わっていて同期されなくなってしまいました。</div><div>これは困ると思いサポートに問い合わせたんだけど、なんだかあまりやる気ないみたい。</div><div><br /></div><div>よーしおじさん頑張っちゃうぞ。</div><div><br /></div><div>プラグインのフォルダを漁ります。</div><div>macならこの辺ね</div><div>~/Library/Application Support/BraveSoftware/Brave-Browser/Default/Extensions</div><div><br /></div><div>拡張機能を見るとIDが書いてあるので、同名のフォルダを適当な場所にコピー</div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIG_QQ9qleVPj-NzeFmPh-OhCfYOV72HG_TZI5fcmIVc2gexOWHRw1OPsxugbyoy3sVqFJVlWtDjMrTGoeIalQg0FWAdAgfkQuJVZbk5E966coZY3-mJlKC7O7f_CXvM-xqM6RK2_aq54/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="422" data-original-width="830" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIG_QQ9qleVPj-NzeFmPh-OhCfYOV72HG_TZI5fcmIVc2gexOWHRw1OPsxugbyoy3sVqFJVlWtDjMrTGoeIalQg0FWAdAgfkQuJVZbk5E966coZY3-mJlKC7O7f_CXvM-xqM6RK2_aq54/w400-h204/%25E6%258B%25A1%25E5%25BC%25B5%25E6%25A9%259F%25E8%2583%25BD.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div><div><span style="background-color: rgba(245, 245, 245, 0.8); color: #262626; font-family: "helvetica neue", helvetica, arial, sans-serif; font-size: 13px;">/js/Driver/bookmarks/manager.js の</span></div>
<div><div style="background-color: white; color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div> <span style="color: #d73a49;">function</span> <span style="color: #6f42c1;">refreshBookmarksRootIds</span>() {</div><div> <span style="color: #6f42c1;">chrome.bookmarks.getChildren</span>(<span style="color: #22863a;">"0"</span>, <span style="color: #d73a49;">function</span> (children) {</div><div><span> </span><span> // children.length = 1 なので </span><span style="color: #005cc5;">CHROME_TOOLBAR_IDが未設定になってしまうため、強制的に</span><span style="color: #005cc5;">CHROME_TOOLBAR_IDを設定</span></div></div><div style="background-color: white; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div style="font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"><font color="#24292e"> </font><span style="color: #d73a49;">if</span><font color="#24292e"> (children.</font><span style="color: #005cc5;">length</span><font color="#24292e"> </font><font color="#d73a49">===</font><font color="#24292e"> </font><font color="#005cc5">1</font><font color="#24292e">) {</font></div><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"> <span style="color: #005cc5;">CHROME_TOOLBAR_ID</span> <span style="color: #d73a49;">=</span> children[<span style="color: #005cc5;">0</span>].id;</div><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"> }</div><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"><span> </span><span> </span>:</div><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"><span> </span><span> :</span><br /></div><div style="color: #24292e;"><div style="line-height: 18px;"><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"> });</div><div style="color: #24292e; font-family: "fira code", menlo, monaco, "courier new", monospace; font-size: 12px; white-space: pre;"> }</div>
</div></div></div></div></div>
既存ロジックを残すように修正してもいいし、自分用に直しちゃってもOK。 <div><br /></div><div> 直し終わったら、拡張機能の開発者モードをONにして、修正したフォルダを読み込み。</div><div><br /></div><div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT1Ch9rwxk0fkUVNSFXYO_VnNOC5p_i6mgSDX8RYZVcTfCahcfZmrnKYget9868_iELxfXJxT52lcQI7RCfEUWMjecwotroFGc_7OHCrozFN_4wHo_UUKYOOTcBduNzsU9UfKOagz_q2g/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1250" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT1Ch9rwxk0fkUVNSFXYO_VnNOC5p_i6mgSDX8RYZVcTfCahcfZmrnKYget9868_iELxfXJxT52lcQI7RCfEUWMjecwotroFGc_7OHCrozFN_4wHo_UUKYOOTcBduNzsU9UfKOagz_q2g/w400-h219/%25E6%258B%25A1%25E5%25BC%25B5%25E6%25A9%259F%25E8%2583%25BD.png" width="400" /></a> </div><div><br /></div><div> これで直ります。</div><div><br /></div><div> 困ってる方はやってみてください。
</div>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-52023248261017080072020-04-15T14:03:00.000+09:002020-04-15T14:36:36.220+09:00DocomoメールのIMAP設定<h2>
事の発端は2019年7月頃のセキュリティ強化に伴うドコモメールの設定変更のお願い </h2>
<div>
<a href="https://www.nttdocomo.co.jp/info/notice/pages/181211_00.html">https://www.nttdocomo.co.jp/info/notice/pages/181211_00.html</a></div>
<br />
あーなんかIMAPパスワードっていうの設定しないと受信が出来なくなりますよーっていう事なんだけど、ログインに3G/LTE回線が必要という罠。<br />
端末もう無いし。。無いし。。<br />
パケ死嫌だ。詰んだーって思って使用頻度も低いし放置してました。<br />
<br />
が、<b><span style="color: red;">なんか出来るようになってる模様!!</span></b><br />
<br />
上のURLからのリンクだと、<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcQPqNCTD0hhFVjnU2tikLgiUKwNNOrJSX0TelY7GzVxCHWXAGPmsrv1_76ccECuDEwQRritWwplzPRII0geh3f8BFZ7l-ahN3HkSerKnlQqVtWbE8rap_p6KlAxPZi05SjBAhpj8_18U/s1600/%25E3%2583%2588%25E3%2582%2599%25E3%2582%25B3%25E3%2583%25A2%25E3%2583%25A1%25E3%2583%25BC%25E3%2583%25AB%25E8%25A8%25AD%25E5%25AE%259A%25E5%25A4%2589%25E6%259B%25B4___NTT%25E3%2583%2588%25E3%2582%2599%25E3%2582%25B3%25E3%2583%25A2%25EF%25BC%2590.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1292" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcQPqNCTD0hhFVjnU2tikLgiUKwNNOrJSX0TelY7GzVxCHWXAGPmsrv1_76ccECuDEwQRritWwplzPRII0geh3f8BFZ7l-ahN3HkSerKnlQqVtWbE8rap_p6KlAxPZi05SjBAhpj8_18U/s400/%25E3%2583%2588%25E3%2582%2599%25E3%2582%25B3%25E3%2583%25A2%25E3%2583%25A1%25E3%2583%25BC%25E3%2583%25AB%25E8%25A8%25AD%25E5%25AE%259A%25E5%25A4%2589%25E6%259B%25B4___NTT%25E3%2583%2588%25E3%2582%2599%25E3%2582%25B3%25E3%2583%25A2%25EF%25BC%2590.png" width="321" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
こうなって、<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkOWSBNCsl3r1DozJwBFZj-OKaOs0FSigP1R3rebxAwG_n2CAV1-ByTmzpFsfumxuiLutKMLWQRy_a4jweQGdOC9kOy2kYGGM2qCBIKysLenjhUTaTs6d891CrKcjHPRtl8ekjtyWFHRY/s1600/Wi-Fi%25E6%258E%25A5%25E7%25B6%259A%25E3%2582%25A8%25E3%2583%25A9%25E3%2583%25BC___NTT%25E3%2583%2588%25E3%2582%2599%25E3%2582%25B3%25E3%2583%25A2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1508" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkOWSBNCsl3r1DozJwBFZj-OKaOs0FSigP1R3rebxAwG_n2CAV1-ByTmzpFsfumxuiLutKMLWQRy_a4jweQGdOC9kOy2kYGGM2qCBIKysLenjhUTaTs6d891CrKcjHPRtl8ekjtyWFHRY/s400/Wi-Fi%25E6%258E%25A5%25E7%25B6%259A%25E3%2582%25A8%25E3%2583%25A9%25E3%2583%25BC___NTT%25E3%2583%2588%25E3%2582%2599%25E3%2582%25B3%25E3%2583%25A2.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
こう弾かれるんだけどーーーーー<br />
<br />
<br />
<br />
<br />
<br />
抜け道っぽいの見つけた!!!!<br />
<br />
<a href="https://id.smt.docomo.ne.jp/cgi7/id/imapsrvp" rel="nofollow" target="_blank">ココ</a>からログインしてみると・・・・・<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDgBYGWmywcTM3ZznwgD8uSioF2LM6BNMYp4aq3FVnO6mOizuInzN5mmB0SN_pdKY9vpUcKG00JxjEsltkIEIvIJkLUPA2Ri-bEMQB_ty2MRDtqUI5uHLsIg51rxtXtxqMwHwA_pXCZ3k/s1600/%25E3%2583%25A1%25E3%2583%25BC%25E3%2583%25AB%25E8%25A8%25AD%25E5%25AE%259A.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1504" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDgBYGWmywcTM3ZznwgD8uSioF2LM6BNMYp4aq3FVnO6mOizuInzN5mmB0SN_pdKY9vpUcKG00JxjEsltkIEIvIJkLUPA2Ri-bEMQB_ty2MRDtqUI5uHLsIg51rxtXtxqMwHwA_pXCZ3k/s400/%25E3%2583%25A1%25E3%2583%25BC%25E3%2583%25AB%25E8%25A8%25AD%25E5%25AE%259A.png" width="375" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Wifiでも中身見れる!!<br />
<br />
無事、格安SIMのiPhoneでIMAP設定しましたとさ。<br />
めでたしめでたし。<br />
<br />
こんな妙な使い方してる人は少数派だと思いますが、何かの足しになれば。<br />
<br />
iPhoneの場合だけど、今まで設定してたののパスワードだけ変更してもダメで、アカウント削除からの再構築が必要。<br />
<br />
アカウント削除してすぐに作成しようとしたら、「そのアカウントは既に存在してる」とか言われるので、再起動でキャッシュ的なものを消してからアタック。<br />
メアドとIMAPパスワードで追加すると、一回目ユーザー名がメアドになってるので弾かれるから、メアドをユーザーIDに変更して確定。<br />
<br />
「検証中」が10分くらい掛かって無事に受信設定出来ました。<br />
<br />
使用頻度低いからそんなに困ってなかったけど、毎回エラーとか出てるのキモかったので、治ってよかった。<br />
<br />
よかったよかった。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-88597477221391375602019-08-07T11:47:00.001+09:002019-08-07T11:47:44.048+09:00Yahooメールの転送設定に関する覚書もう、ほぼ使っていないので転送設定にしてたんだけど、なんかいつからか転送されなくなっちゃう。
<br class="Apple-interchange-newline" />
<br />
なんでなんで?と思ってたら、以下の記事発見。
<br class="Apple-interchange-newline" />
<br />
<a href="https://www.yahoo-help.jp/app/answers/detail/p/622/a_id/47994/session/L2F2LzEvdGltZS8xNTY1MTQ1MjY5L2dlbi8xNTY1MTQ1MjY5L3NpZC9mVWNRMXdONnRISWRYYnZWdVVVbVRrRE00QWZrcjJ5eENta202ZTNTZ3kwSEh5UTZqNzJHY3NPRTQwRU40dnMlN0VVMXVXdldDJTdFZW91eG45bm81QnhBenNSSnNkWUp4Q3QzNTJiWldaOUZTU3NoTEVYY3FheVFrMWNBJTIxJTIx">Yahoo!メールヘルプ</a>
<br class="Apple-interchange-newline" />
<br />
<a href="https://www.yahoo-help.jp/app/answers/detail/p/536/a_id/43934/~/yahoo%21%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AEimap%2Fpop%2Fsmtp%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%A1%E3%83%BC%E3%83%AB%E8%BB%A2%E9%80%81%E6%A9%9F%E8%83%BD%E3%82%92%E3%81%94%E5%88%A9%E7%94%A8%E3%81%AE%E5%A0%B4%E5%90%88">Yahoo!ダイレクトオファーヘルプ</a>
<br class="Apple-interchange-newline" />
<br />
抜粋すると・・・
<br class="Apple-interchange-newline" />
<br />
<br class="Apple-interchange-newline" />
<h4>自動転送には、お得な情報や新製品の情報を定期的に配信する「Yahoo!ダイレクトオファー」へ登録が必要です。転送の設定をすると、自動的に「Yahoo!ダイレクトオファー」へ登録されます。</h4>
<br />
<br class="Apple-interchange-newline" />
<h4>Yahoo!メールの転送設定をしていた場合、Yahoo!ダイレクトオファーの登録を解除すると、メールが転送されなくなります。また、再度転送設定を行うと、Yahoo!ダイレクトオファーの配信も再開します。</h4>
<br />
<br class="Apple-interchange-newline" />
<h2>めちゃくちゃ心当たりありました。</h2>
<br />
TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-54406184239817391372019-05-21T12:38:00.000+09:002019-05-23T16:16:19.069+09:00自作キーボード(ErgoDash mini)のファーム書き換えでエラー<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjLgnbHcfTRQQ7DSIKyQYFvj3ZZT3qXs7KepKaKvhSpkz3G1xZB2s3pesyxDGCzmHU8ncmwEEMb82ZJuvFyAoq2Numfvg7zr5RdekTPzIYWQb1ySehbiujShjFR92TQ6shEsTeAs-Tn6M/s1600/IMG_0599.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjLgnbHcfTRQQ7DSIKyQYFvj3ZZT3qXs7KepKaKvhSpkz3G1xZB2s3pesyxDGCzmHU8ncmwEEMb82ZJuvFyAoq2Numfvg7zr5RdekTPzIYWQb1ySehbiujShjFR92TQ6shEsTeAs-Tn6M/s400/IMG_0599.jpg" width="400" height="300" data-original-width="1600" data-original-height="1200" /></a><br/>
自作キーボードの<a href="https://yushakobo.jp/shop/ergodash-mini/" target="_blank">ErgoDash mini</a>を使わせてもらってるんだけど、ファーム書き換え時にエラー出て気持ちが萎えたので、覚書。<br/>
因みに、キーマップを<a href="https://config.qmk.fm/#/ergodash/mini/LAYOUT" target="_blank">ここ</a>で作って、<a href="https://github.com/qmk/qmk_toolbox/releases" target="_blank">toolbox</a>で焼くという、お手軽版でやっております。<br/>
<br>
まず、ダメなパターンとして、リセットボタンを押してもUSB接続が認識されません。<br/>
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port
</pre>
これは、再起動などで回復するようです。<br/>
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port /dev/tty.usbmodem14101
</pre>
次に、リセットボタンを押した際に、Bluetoothの方を認識してしまうパターンです。<br/>
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
*** Caterina device connected
Found port: /dev/cu.Bluetooth-Incoming-Port
*** Attempting to flash, please don't remove device
>>> avrdude -p atmega32u4 -c avr109 -U flash:w:xxx.hex:i -P /dev/cu.Bluetooth-Incoming-Port -C avrdude.conf
avrdude: warning at avrdude.conf:14976: part atmega32u4 overwrites previous definition avrdude.conf:11487.
Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding
*** Caterina device disconnected
</pre>
これは、なんていうか、何回かやってるとUSBを認識するので、すかさずFLASHです。(なんだそれ😄<br/>
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
*** Caterina device connected
Found port: /dev/cu.usbmodem14101
*** Attempting to flash, please don't remove device
>>> avrdude -p atmega32u4 -c avr109 -U flash:w:/xxx.hex:i -P /dev/cu.usbmodem14101 -C avrdude.conf
avrdude: warning at avrdude.conf:14976: part atmega32u4 overwrites previous definition avrdude.conf:11487.
Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9587
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/xxx.hex"
avrdude: writing flash (15502 bytes):
Writing | ################################################## | 100% 1.21s
avrdude: 15502 bytes of flash written
avrdude: verifying flash memory against /xxx.hex:
avrdude: load data flash data from input file /xxx.hex:
avrdude: input file /xxx.hex contains 15502 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.11s
avrdude: verifying ...
avrdude: 15502 bytes of flash verified
avrdude done. Thank you.
*** Caterina device disconnected
</pre>
ちゃんと調べればなにかあるのかもしれませんが、解決策は「数撃ちゃ当たる戦法」でした。<br/>
<br/>
ついでにキーマップを残しておきます。<br/>
<br/>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcSxcMAfohyphenhyphenqBa6XVoUgw94L5oM_VDuUQVQI7jjGOZcGL7c_DouVIlR94UJqALjh6rLY5TnecIOqviffmK-le6QMz_8hXckKm8di7rV1xfKZPgZDDkyMUpo2f4UTi0WS2jEdso6_Ojgbo/s1600/l1.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcSxcMAfohyphenhyphenqBa6XVoUgw94L5oM_VDuUQVQI7jjGOZcGL7c_DouVIlR94UJqALjh6rLY5TnecIOqviffmK-le6QMz_8hXckKm8di7rV1xfKZPgZDDkyMUpo2f4UTi0WS2jEdso6_Ojgbo/s600/l1.jpg" width="600" data-original-width="1600" data-original-height="548" /></a><br/>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUE11FQrtSsyTPif6VFouM35-AgRO_PX4-7uvI9-VjvBuvVwVqoU4BLevmKhFyBp5RQ19_Kgy7vvdXtDSo4eRkUkRG8tcEAF_qDFowHAOZ_BlyuaKUkREMdrbU01zh2lr6tIAgtmrfkJI/s1600/l2.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUE11FQrtSsyTPif6VFouM35-AgRO_PX4-7uvI9-VjvBuvVwVqoU4BLevmKhFyBp5RQ19_Kgy7vvdXtDSo4eRkUkRG8tcEAF_qDFowHAOZ_BlyuaKUkREMdrbU01zh2lr6tIAgtmrfkJI/s600/l2.jpg" width="600" data-original-width="1600" data-original-height="551" /></a><br/>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQQWq3cAZMJHqLhD3lsiH1tSRPvP6MzcYteFxrjs-Nsepb8ghpZIjGtH1x48KPsBC8uTWB9TKZGhDvEGPdeV3VBksHdlYw9SIti18Qo1Pk7YJli4QLwwaD8kX7relsi6r4Bun-A_aWhc/s1600/l3.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQQWq3cAZMJHqLhD3lsiH1tSRPvP6MzcYteFxrjs-Nsepb8ghpZIjGtH1x48KPsBC8uTWB9TKZGhDvEGPdeV3VBksHdlYw9SIti18Qo1Pk7YJli4QLwwaD8kX7relsi6r4Bun-A_aWhc/s600/l3.jpg" width="600" data-original-width="1600" data-original-height="540" /></a><br/>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-83893762000318266892019-05-10T16:15:00.001+09:002019-05-10T16:18:12.273+09:00Jetson Nano で MNISTをラズパイカメラから動かしてみるあれから、MNIST関係色々見てました。<br/>
詳しいことはよくわからなかったけど、層をたくさん経由すると「deep」になるとのこと。<br/>
だから、前回のはディープラーニングではないようです。<br/>
とはいっても、根本的な意味はよくわかっていないので、今後の課題とします。<br/>
ざっくりとした理解だけれども、今回の教師あり学習に関して言えば、画像から分布を作って(学習)、その分布に当てはめて近い値が出たらそれが答えだ!的な感じっぽい。<br/>
ディープの部分は写経なんだけれども、学習データ保存して、読込して、カメラから画像取得して読み込んだ学習データに照らし合わせてリアルタイムに数字認識するプログラムを書いてみた。<br/>
参考にしたサイトのリンク貼っておきます。<br/>
<br/>
<a href="http://blog.brainpad.co.jp/entry/2016/02/25/153000" target="_blank">http://blog.brainpad.co.jp/entry/2016/02/25/153000</a><br />
<br />
<a href="https://qiita.com/JUN_NETWORKS/items/6514e017e89b9adbfb8d" target="_blank">https://qiita.com/JUN_NETWORKS/items/6514e017e89b9adbfb8d</a><br />
<br />
<a href="https://qiita.com/tsutof/items/2d2248ec098c1b8d3e32" target="_blank">https://qiita.com/tsutof/items/2d2248ec098c1b8d3e32</a><br />
<br />
ソース見たほうが早いかな。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
import tensorflow as tf
import numpy as np
import os,sys
import cv2
from PIL import Image, ImageEnhance,ImageDraw
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)
def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
def conv2d(x, W):
return tf.nn.conv2d(x,W,strides=[1, 1, 1, 1],padding='SAME')
def max_pool_2x2(x):
return tf.nn.max_pool(x,ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],padding='SAME')
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
# 画像をリシェイプ 第2引数は画像数(-1は元サイズを保存するように自動計算)、縦x横、チャネル
x_image = tf.reshape(x, [-1, 28, 28, 1])
print(x_image)
### 1層目 畳み込み層
# 畳み込み層のフィルタ重み、引数はパッチサイズ縦、パッチサイズ横、入力チャネル数、出力チャネル数
# 5x5フィルタで32チャネルを出力(入力は白黒画像なので1チャンネル)
W_conv1 = weight_variable([5, 5, 1, 32])
# 畳み込み層のバイアス
b_conv1 = bias_variable([32])
# 活性化関数ReLUでの畳み込み層を構築
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
### 2層目 プーリング層
# 2x2のマックスプーリング層を構築
h_pool1 = max_pool_2x2(h_conv1)
### 3層目 畳み込み層
# パッチサイズ縦、パッチサイズ横、入力チャネル、出力チャネル
# 5x5フィルタで64チャネルを出力
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
### 4層目 プーリング層
h_pool2 = max_pool_2x2(h_conv2)
### 5層目 全結合層
# オリジナル画像が28x28で、今回畳み込みでpadding='SAME'を指定しているため
# プーリングでのみ画像サイズが変わる。2x2プーリングで2x2でストライドも2x2なので
# 縦横ともに各層で半減する。そのため、28 / 2 / 2 = 7が現在の画像サイズ
# 全結合層にするために、1階テンソルに変形。画像サイズ縦と画像サイズ横とチャネル数の積の次元
# 出力は1024(この辺は決めです) あとはSoftmax Regressionと同じ
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
# ドロップアウトを指定
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
### 6層目 Softmax Regression層
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
### 訓練 ###
cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
saver = tf.train.Saver()
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
config.gpu_options.visible_device_list="0"
with tf.Session(config=config) as sess:
sess.run(tf.initialize_all_variables())
os.makedirs("./model_2",exist_ok=True)
ckpt = tf.train.get_checkpoint_state('./model_2')
if ckpt:
saver.restore(sess, ckpt.model_checkpoint_path)
else:
for i in range(1500):
batch = mnist.train.next_batch(50)
if i%100 == 0:
train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1],keep_prob: 1.0})
print("step %d, training accuracy %g"%(i, train_accuracy))
train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
saver.save(sess, "./model_2/model.ckpt")
num_test = len(mnist.test.labels)
sum_accuracy = 0
for i in range(0, num_test, 50):
sum_accuracy = sum_accuracy + accuracy.eval(feed_dict={x: mnist.test.images[i:i+50], y_: mnist.test.labels[i:i+50], keep_prob: 1.0})
print("test accuracy:", sum_accuracy/(num_test/50))
GST_STR = 'nvarguscamerasrc \
! video/x-raw(memory:NVMM), width=320, height=240, format=(string)NV12, framerate=(fraction)10/1 \
! nvvidconv ! video/x-raw, width=(int)320, height=(int)240, format=(string)BGRx \
! videoconvert \
! appsink'
WINDOW_NAME = 'Camera Test'
cap = cv2.VideoCapture(GST_STR, cv2.CAP_GSTREAMER)
while True:
ret, img = cap.read()
if ret != True:
break
pilImg = Image.fromarray(np.uint8(img))
#print(pilImg.format, pilImg.size, pilImg.mode)
img_width, img_height = pilImg.size
draw = ImageDraw.Draw(pilImg)
draw.rectangle(((img_width - 150) // 2,
(img_height - 150) // 2,
(img_width + 150) // 2,
(img_height + 150) // 2), outline=(255, 255, 255))
mnistImg = Image.fromarray(np.uint8(img))
mnistImg = mnistImg.crop(((img_width - 150) // 2,
(img_height - 150) // 2,
(img_width + 150) // 2,
(img_height + 150) // 2))
mnistImg = mnistImg.convert("L")
color = ImageEnhance.Color(mnistImg)
mnistImg = color.enhance(1.5)
contrast = ImageEnhance.Contrast(mnistImg)
mnistImg = contrast.enhance(1.5)
brightness = ImageEnhance.Brightness(mnistImg)
mnistImg = brightness.enhance(1.5)
sharpness = ImageEnhance.Sharpness(mnistImg)
mnistImg = sharpness.enhance(1.5)
mnistImg = mnistImg.resize((28, 28), Image.LANCZOS)
#print(mnistImg)
mnistImg = map(lambda x: 255 - x, mnistImg.getdata())
mnistImg = np.fromiter(mnistImg, dtype=np.uint8)
mnistImg = mnistImg.reshape(1, 784)
mnistImg = mnistImg.astype(np.float32)
mnistImg = np.multiply(mnistImg, 1.0 / 255.0)
# print(mnistImg)
for i in range(len(mnistImg[0])):
num=mnistImg[0][i]
if num<0.4:
print(' ', end="")
else:
print('%03d ' % (num*1000), end="")
if i % 28 == 0:
print('\n')
#学習データと読み込んだ数値との比較を行う
pred = sess.run(y_conv, feed_dict={x:mnistImg, y_: [[0.0] * 10], keep_prob: 1.0})[0]
# print(pred)
if not np.max(pred) < 0.5 :
print(np.argmax(pred) ,np.max(pred))
draw.text((10,10),f'{np.argmax(pred)} {round(np.max(pred)*100,2)}%')
imgArray = np.asarray(pilImg)
cv2.imshow(WINDOW_NAME, imgArray)
key = cv2.waitKey(10)
if key == 27: # ESC
break
</pre>
起動すると、ウインドウが開いてカメラの画像が出ます。<br/>
真ん中の白枠に手書きの文字を入れると、上に値が出るってわけ。<br/>
認識率悪くて、コントラスト上げたり、明度あげたり、色々やってみてる。<br/>
コンソールに、プログラムからみたテンソルを表示しています。<br/>
<br/>
色々やってて思ったのが、Jetson Nanoだと、何するにしてもメモリ不足で死にます。<br/>
これは、僕の書き方の問題なのかもしれないけど、いろいろシンドかった。<br/>
学習するにしても、バッチサイズ減らしてやらないと落ちるし、学習データの読み込みでも、ブラウザは落としておかないと死ぬ。<br/>
こういったあたりも、今後調べていきたい。<br/>
次は、自分で教師データ作って学ばせてあげたい。<br/>
できるかな?<br/>
<br/>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB4-ymIituo57sY-1rPwuKTLmhtr3UFnFqqa-2SW4mT6jNK4AAIJAvHKn5RirCK1kBikkASCHSJ3IRZwJYVAeOyEenewN-b8ARzpGph8t84FRIzopnmfJTKFtxh7Vl5dbjhyphenhyphenVbKHMbQro/s1600/Screenshot+from+2019-05-10+15-41-06.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB4-ymIituo57sY-1rPwuKTLmhtr3UFnFqqa-2SW4mT6jNK4AAIJAvHKn5RirCK1kBikkASCHSJ3IRZwJYVAeOyEenewN-b8ARzpGph8t84FRIzopnmfJTKFtxh7Vl5dbjhyphenhyphenVbKHMbQro/s320/Screenshot+from+2019-05-10+15-41-06.png" width="320" height="180" data-original-width="1600" data-original-height="900" />
</a>
</div>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-41064276517796109472019-04-25T17:01:00.000+09:002019-05-22T10:13:54.286+09:00Jetson Nano の TensorFlow で MNIST やってみるお熱冷めないうちにやってみる。<br/>
git clone サンプル叩きマンは卒業して、一応ソースも書いてみる。<br/>
ただ、内容はさっぱりなので、見たページを覚書として残しておく。<br/>
<br/>
<a href="https://www.scriptlife.jp/contents/programming/2016/10/19/post-1796/" target="_blank">https://www.scriptlife.jp/contents/programming/2016/10/19/post-1796/</a><br />
<br />
<a href="http://domkade.hatenablog.jp/entry/2016/04/07/011016" target="_blank">http://domkade.hatenablog.jp/entry/2016/04/07/011016</a><br />
<br />
男は黙ってチュートリアルだろと思って<a href="https://www.tensorflow.org/tutorials">本家見に行った</a>ら、Keras勧められてしまうので、参考にした情報が2016年とか、だいぶ古いけど、意味がわからないものが2つあると、そもそも理解できるところまで行かなそうなので、古いまま行きます。<br />
なので、ソースを実行すると、ワーニング出ます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ cd ~/
$ mkdir mnist
$ cd mnist
</pre>
<br />
mnist.pyっていうファイルを作ってみました。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="mnist.py">
import tensorflow as tf
import numpy as np
# mnistのの学習データがMNIST_dataフォルダになければダウンロードしてから読み込み
# あったらそのまま読み込み
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
# MNIST画像をランダムで1枚読み込んでみる
for listitem in mnist.train.next_batch(1)[0]:
for i in range(len(listitem)):
num=listitem[i]
if num==0:
print(' ', end="")
else:
print('%03d ' % (num*1000), end="")
if i % 28 == 0:
print('\n')
print('\n')
# 訓練画像入れ
# 訓練画像(28x28px)を1行784列の配列に格納する
# https://www.tensorflow.org/api_docs/python/tf/placeholder
x = tf.placeholder(tf.float32, shape=[None, 784])
# 重み
# 訓練画像のpx数の行、ラベル(0-9の数字の個数)数の列の行列
# 0埋めしておく(tf.zeros)
# https://www.tensorflow.org/api_docs/python/tf/Variable
# https://www.tensorflow.org/api_docs/python/tf/zeros
W = tf.Variable(tf.zeros([784,10]))
# バイアス
# ラベル数の列の行列
# 0埋めしておく(tf.zeros)
# https://www.tensorflow.org/api_docs/python/tf/Variable
# https://www.tensorflow.org/api_docs/python/tf/zeros
b = tf.Variable(tf.zeros([10]))
# ソフトマックス回帰を実行
# yは入力x(画像)に対しそれがある数字である確率の分布
# matmul関数で行列xとWの掛け算を行った後、bを加算する。
# yは[1, 10]の行列
# https://www.tensorflow.org/api_docs/python/tf/nn/softmax
# https://www.tensorflow.org/api_docs/python/tf/linalg/matmul
y = tf.nn.softmax(tf.matmul(x,W) + b)
# 正解用ラベル入れ
# https://www.tensorflow.org/api_docs/python/tf/placeholder
y_ = tf.placeholder(tf.float32, shape=[None, 10])
# 交差エントロピー
# 誤差関数の交差エントロピー誤差関数を用意
# https://www.tensorflow.org/api_docs/python/tf/math/reduce_sum
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
# 勾配硬化法を用い交差エントロピーが最小となるようyを最適化する
# 学習方法を定義 0.01は学習率
# https://www.tensorflow.org/api_docs/python/tf/train/GradientDescentOptimizer
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
# 用意した変数Veriableの初期化を実行する
# https://www.tensorflow.org/api_docs/python/tf/initialize_all_variables
init = tf.initialize_all_variables()
# Sessionを開始する
# runすることで初めて実行開始される(run(init)しないとinitが実行されない)
# https://www.tensorflow.org/api_docs/python/tf/InteractiveSession
sess = tf.InteractiveSession()
sess.run(init)
# 正しいかの予測
# 計算された画像がどの数字であるかの予測yと正解ラベルy_を比較する
# 同じ値であればTrueが返される
# argmaxは配列の中で一番値の大きい箇所のindexが返される
# 一番値が大きいindexということは、それがその数字である確率が一番大きいということhttp://blogspot.com/
# Trueが返ってくるということは訓練した結果と回答が同じということ
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
# 精度の計算
# correct_predictionはbooleanなのでfloatにキャストし、平均値を計算する
# Trueならば1、Falseならば0に変換される
# https://www.tensorflow.org/api_docs/python/tf/math/reduce_mean
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print("before training accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
# 1000回の訓練(train_step)を実行する
# next_batch(50)で50つのランダムな訓練セット(画像と対応するラベル)を選択する
# feed_dictでplaceholderに値を入力することができる
for i in range(1000):
batch = mnist.train.next_batch(50)
if i%100 == 0:
train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1]})
print("step %d, training accuracy %g"%(i, train_accuracy))
train_step.run(feed_dict={x: batch[0], y_: batch[1]})
# モデルの評価
print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
</pre>
<br />
実行してみます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ python3 mnist.py
</pre>
<br />
こんな感じの結果がでます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
python3 mnist.py
070 741 588 384 184 098 003 184 345 823 1000 564 054
682 992 992 992 992 890 607 776 992 992 992 992 992 282
713 992 992 992 992 992 992 992 992 992 992 886 419 011
247 980 992 992 992 992 992 992 792 666 435 066
956 992 898 078 078 078 078 031
839 992 964 211
192 992 992 796 447 164 305 388 062 062 062 062 019
109 929 992 992 992 992 992 992 992 992 992 992 749 164
549 992 992 992 992 992 992 992 992 992 992 992 913 447
356 501 788 788 780 384 384 450 788 788 937 992 890 423
145 913 992 968 145
498 992 992 596
490 992 992 768
490 992 992 768
227 278 490 992 992 768
070 862 984 611 490 490 149 035 184 737 992 992 737
105 925 992 992 992 992 992 796 670 670 670 670 901 992 992 964 117
403 752 980 992 992 992 992 992 992 992 992 992 992 984 745
254 392 823 992 992 992 992 992 992 992 992 635
047 356 584 745 992 992 992 701 388 058
2019-04-25 13:10:24.417408: W tensorflow/core/platform/profile_utils/cpu_utils.cc:98] Failed to find bogomips in /proc/cpuinfo; cannot determine CPU frequency
2019-04-25 13:10:24.419881: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x30de2ef0 executing computations on platform Host. Devices:
2019-04-25 13:10:24.419973: I tensorflow/compiler/xla/service/service.cc:168] StreamExecutor device (0): <undefined>, <undefined>
2019-04-25 13:10:24.495340: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:965] ARM64 does not support NUMA - returning NUMA node zero
2019-04-25 13:10:24.495643: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x2f6e9ff0 executing computations on platform CUDA. Devices:
2019-04-25 13:10:24.495706: I tensorflow/compiler/xla/service/service.cc:168] StreamExecutor device (0): NVIDIA Tegra X1, Compute Capability 5.3
2019-04-25 13:10:24.496060: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties:
name: NVIDIA Tegra X1 major: 5 minor: 3 memoryClockRate(GHz): 0.9216
pciBusID: 0000:00:00.0
totalMemory: 3.86GiB freeMemory: 742.95MiB
2019-04-25 13:10:24.496126: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-04-25 13:10:25.773266: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-04-25 13:10:25.773363: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0
2019-04-25 13:10:25.773402: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0: N
2019-04-25 13:10:25.773596: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 273 MB memory) -> physical GPU (device: 0, name: NVIDIA Tegra X1, pci bus id: 0000:00:00.0, compute capability: 5.3)
2019-04-25 13:10:25.863593: I tensorflow/stream_executor/dso_loader.cc:153] successfully opened CUDA library libcublas.so.10.0 locally
before training accuracy 0.098
step 0, training accuracy 0.06
step 100, training accuracy 0.86
step 200, training accuracy 0.8
step 300, training accuracy 0.92
step 400, training accuracy 0.94
step 500, training accuracy 0.9
step 600, training accuracy 0.94
step 700, training accuracy 0.88
step 800, training accuracy 0.88
step 900, training accuracy 0.94
test accuracy 0.9175
</pre>
<br />
動いたけど、写経っぷりにもほどがあるし、そもそもようわからんなぁ・・・<br />
チュートリアルでコレって。。機械学習お熱下がっちゃうよ。。<br />
悔しいから、本買って勉強しよう。<br />
<br />TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-60576040897584430932019-04-24T14:06:00.000+09:002019-04-25T09:44:45.846+09:00Jetson Nano に TensorFlow版のOpenpose入れてみる連日のお試しシリーズ、リアルタイムOpenposeの2FPSをもうすこしなんとかならないかなと思って、TensorFlow版のOpenposeでやってみることにしました。<br />
というのも、CPUでも2FPS位出るみたいな記事を見かけたので、GPUにしたらもちょっと出るんじゃないかなという単純な発想です。<br />
<br />
<br class="Apple-interchange-newline" />
<h2>セットアップ</h2>
<br />
セットアップは、これらやった前提で。<br />
<a href="https://toramamma.blogspot.com/2019/04/jetson-nano-darknet.html" target="_blank">https://toramamma.blogspot.com/2019/04/jetson-nano-darknet.html</a><br />
<a href="https://toramamma.blogspot.com/2019/04/jetson-nano-openpose.html">https://toramamma.blogspot.com/2019/04/jetson-nano-openpose.html</a><br />
<br />
<br class="Apple-interchange-newline" />
<h2>インストール</h2>
<br />
<br class="Apple-interchange-newline" />
<h3>tf-pose-estimationのインストール</h3>
<br />
とりあえず言われるまま入れてみます。<br />
<br />
<a href="https://github.com/ildoonet/tf-pose-estimation" target="_blank">https://github.com/ildoonet/tf-pose-estimation</a><br />
<br />
ただ、この通りにやると失敗するもんで、先に必要なライブラリを入れたほうが良いです。<br />
ものっそい時間かかるので、コレを先に・・・<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="色々あった際に叩いたコマンド達">
$ pip3 install --upgrade cython
$ sudo apt-get -yV install libopenblas-dev
$ sudo apt-get -yV install liblapacke-dev
$ sudo apt-get -yV install gfortran
$ sudo apt-get -yV install llvm-7*
$ echo 'export PATH="/usr/lib/llvm-7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
</pre>
<br />
参ります。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ git clone https://github.com/ildoonet/tf-pose-estimation.git
$ cd tf-pose-estimation
$ pip3 install -r requirements.txt
</pre>
<br />
失敗したログしかないけど、正しくできてれば、<span style="color: red;">Failed</span>がないものが出力されると思います。<br />
<pre class="brush: bash; highlight: [,];" title="">
Successfully built dill fire matplotlib numba psutil pycocotools scikit-image msgpack numpy pyzmq tabulate termcolor kiwisolver PyWavelets networkx pillow
Failed to build scipy llvmlite
Installing collected packages: argparse, dill, six, fire, cycler, setuptools, kiwisolver, numpy, pyparsing, python-dateutil, matplotlib, llvmlite, numba, psutil, pycocotools, urllib3, idna, chardet, certifi, requests, PyWavelets, pillow, imageio, decorator, networkx, scipy, scikit-image, slidingwindow, tqdm, msgpack, msgpack-numpy, pyzmq, tabulate, termcolor, tensorpack
</pre>
<br />
次はコレをやれというので<br />
<br />
<a href="https://github.com/ildoonet/tf-pose-estimation/tree/master/tf_pose/pafprocess" target="_blank">https://github.com/ildoonet/tf-pose-estimation/tree/master/tf_pose/pafprocess</a>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ cd tf_pose/pafprocess
$ sudo apt install swig
$ swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace
</pre>
<br />
素直に実行。<br />
<br />
<br class="Apple-interchange-newline" />
<h3>TensorFlowのインストール</h3>
<br />
で、ここでTensorFlow入れてないの思い出して、入れてみます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ pip3 install tensorflow-gpu
Could not find a version that satisfies the requirement tensorflow-gpu (from versions: )
</pre>
<br />
嘘だろ。。<br />
※ サックっとスルーしますが、ここで相当ヤラレタ。。<br />
<br />
色々漁ってたら、ぴったりな記事あったので参考に。<br />
<br />
<a href="https://qiita.com/tsutof/items/77b49f71ed81344b9d16" target="_blank">https://qiita.com/tsutof/items/77b49f71ed81344b9d16</a><br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ sudo apt-get install libhdf5-serial-dev hdf5-tools
$ sudo apt-get install python3-pip
$ sudo apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev
$ sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker grpcio six mock requests gast h5py astor termcolor
$ sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu
</pre>
<br />
で、TensorFlowの動作確認まで。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> print(tf.__version__)
1.13.1
>>>exit()
</pre>
<br />
<br class="Apple-interchange-newline" />
<h3>学習済みモデルのダウンロード</h3>
<br />
次は、学習済みモデルをダウンロード。<br />
見出しと同じことをもう一度書くスタイル。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ cd ~/tf-pose-estimation
$ cd models/graph/cmu
$ bash download.sh
</pre>
<br />
<br class="Apple-interchange-newline" />
<h3>実行</h3>
<br />
やっと実行ですが、ライブラリ足りず落ちたのでコレを先に。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ pip3 install tqdm
$ pip3 install slidingwindow
$ pip3 install pycocotools
</pre>
<br />
※ でもコレ最初の pip3 install -r requirements.txt で入ってるっぽいんだけどな。。<br />
ここに来るまでTensorFlow関連で色々いじったので普通にやってれば再現しないかも。<br />
<br />
やっと実行!!!<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ python3 run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=1
</pre>
<br />
ガーン!!<br />
動いたけど・・・まさかの2FPS。<br />
パフォーマンス変わらず。。。<br />
<br />
まだだ、諦めるのは早い!<br />
モデルを「mobilenet_v2_small」に変えてみよう!<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ python3 run_webcam.py --model=mobilenet_v2_small --resize=432x368 --camera=1
</pre>
<br />
でたーっ!3.5FPS!<br />
なかなか良いね!<br />
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6XEhs06GbNuGeqM51fBPCcjne36w55-UdYBDLBVl6Gi2amgeNnAlJLdf0EobVDi3M-fJHhNNjACvXrf8brfWavksgpT8TF95kCLxQPrM8_fPY5IkTle8DjqFueDy3-C_7RI7tQpxtT-k/s1600/pose.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: left;"><img border="0" data-original-height="504" data-original-width="640" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6XEhs06GbNuGeqM51fBPCcjne36w55-UdYBDLBVl6Gi2amgeNnAlJLdf0EobVDi3M-fJHhNNjACvXrf8brfWavksgpT8TF95kCLxQPrM8_fPY5IkTle8DjqFueDy3-C_7RI7tQpxtT-k/s400/pose.png" width="400" /></a>
</div>
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO60tR6w2bqqezSECkr2oXcX2VGcSnqxY8WGLAmP7gRFlGRCgWEnWeaEnK4025WyFveQREqCvVv0HAMcEWm-dWUPlCYXVQB8Rij1AfrVRV-1zIVRj6XAWI6Wu03opuDKgAIwrVs-9mM88/s1600/gpu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="288" data-original-width="599" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO60tR6w2bqqezSECkr2oXcX2VGcSnqxY8WGLAmP7gRFlGRCgWEnWeaEnK4025WyFveQREqCvVv0HAMcEWm-dWUPlCYXVQB8Rij1AfrVRV-1zIVRj6XAWI6Wu03opuDKgAIwrVs-9mM88/s400/gpu.png" width="400" /></a>
</div>
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3NpvziQ84_syyuWA3kVfHMU2Gec9J2OOXVeKQ0tvdXW11WdIXY8Dp3YS6TPBfFe8_lI-B7wtjUhRU8OgL4odTqHL9im8zZaBMOnVLxS-viuLHWQjQBscN2mUsSCpi2lkXY30NW4CCPoU/s1600/prosess.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="561" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3NpvziQ84_syyuWA3kVfHMU2Gec9J2OOXVeKQ0tvdXW11WdIXY8Dp3YS6TPBfFe8_lI-B7wtjUhRU8OgL4odTqHL9im8zZaBMOnVLxS-viuLHWQjQBscN2mUsSCpi2lkXY30NW4CCPoU/s400/prosess.png" width="400" /></a>
</div>
<br />
お前の力はこんなモンじゃないはずだ。<br />
前回のOpenposeに読み込み画像サイズを合わせてみよう。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ python3 run_webcam.py --model=mobilenet_v2_small --resize=320x176 --camera=1
</pre>
<br />
出ました。<br />
7〜8FPS!<br />
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-mDP5jJ2Gl1rtKMYceVIobS2LY7FUOflEm-ruJ3kFSz8i44H4URjF0gLVfyba_aNoJzaOHQPpTJz_7IZoflq9XEual7JaFj9lfIMALJUzphg4FoMLmftTWTD8sNPkn8HBVGpUcVJP3S0/s1600/8fps.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="509" data-original-width="650" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-mDP5jJ2Gl1rtKMYceVIobS2LY7FUOflEm-ruJ3kFSz8i44H4URjF0gLVfyba_aNoJzaOHQPpTJz_7IZoflq9XEual7JaFj9lfIMALJUzphg4FoMLmftTWTD8sNPkn8HBVGpUcVJP3S0/s400/8fps.png" width="400" /></a>
</div>
<br />
でも、精度だいぶ落ちるんよね〜<br />
<br />
あと、--camera=1はラズパイカメラ同居しているので、ロジクールのを使う設定です。<br />
通常は0です(だと思います)<br />
<br />
<br class="Apple-interchange-newline" />
<h3>感想</h3>
<br />
サイズ合わせて3.5倍達成しました。<br />
精度重視でも1.5倍は早くなりました。<br />
労力はこの比ではありませんでしたw<br />
<br />
でも、折角TensorFlow入れたので、ネタが増えました。<br />
サンプルたたきマンでももう少しなにか出来るかな。<br />
<br />
Virtualenv?知らん、何かあればイメージ焼き直す!!<br />
<br />
<br class="Apple-interchange-newline" />
<h3>メモ</h3>
<br />
TensorFlow入んなくて、ほんと色々イジったので、メモ程度に現状残しておく。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ pip3 list --format=columns
Package Version
----------------------------- -------------------
absl-py 0.7.1
apt-clone 0.2.1
apturl 0.5.2
asn1crypto 0.24.0
astor 0.7.1
beautifulsoup4 4.6.0
blinker 1.4
Brlapi 0.6.6
certifi 2019.3.9
chardet 3.0.4
cryptography 2.1.4
cupshelpers 1.0
cycler 0.10.0
Cython 0.29.7
defer 1.0.6
devscripts 2.17.12ubuntu1.1
dill 0.2.9
distro-info 0.18ubuntu0.18.04.1
feedparser 5.2.1
fire 0.1.3
gast 0.2.2
gpg 1.10.0
graphsurgeon 0.3.2
grpcio 1.20.0
h5py 2.9.0
html5lib 0.999999999
httplib2 0.9.2
idna 2.8
Keras-Applications 1.0.7
Keras-Preprocessing 1.0.9
keyring 10.6.0
keyrings.alt 3.0
kiwisolver 1.0.1
language-selector 0.1
launchpadlib 1.10.6
lazr.restfulclient 0.13.5
lazr.uri 1.0.3
llvmlite 0.28.0
louis 3.5.0
lxml 4.2.1
macaroonbakery 1.1.3
Mako 1.0.7
Markdown 3.1
MarkupSafe 1.0
matplotlib 3.0.3
mock 2.0.0
numpy 1.16.3
oauth 1.0.1
oauthlib 2.0.6
olefile 0.45.1
PAM 0.4.2
pbr 5.1.3
Pillow 5.1.0
pip 9.0.1
portpicker 1.3.1
protobuf 3.7.1
psutil 5.6.1
py-cpuinfo 5.0.0
pycairo 1.16.2
pycocotools 2.0.0
pycrypto 2.6.1
pycups 1.9.73
pygobject 3.26.1
PyICU 1.9.8
PyJWT 1.5.3
pymacaroons 0.13.0
PyNaCl 1.1.2
pyparsing 2.4.0
pyRFC3339 1.0
python-apt 1.6.3+ubuntu1
python-dateutil 2.8.0
python-debian 0.1.32
python-magic 0.4.16
pytz 2018.3
pyxdg 0.25
PyYAML 3.12
requests 2.21.0
requests-unixsocket 0.1.5
scipy 1.2.1
SecretStorage 2.3.1
setuptools 41.0.1
simplejson 3.13.2
six 1.12.0
slidingwindow 0.0.13
ssh-import-id 5.7
system-service 0.3
systemd-python 234
tensorboard 1.13.1
tensorflow-estimator 1.13.0
tensorflow-gpu 1.13.1+nv19.4
tensorrt 5.0.6.3
termcolor 1.1.0
tqdm 4.31.1
ubuntu-drivers-common 0.0.0
uff 0.5.5
unattended-upgrades 0.1
unidiff 0.5.4
unity-scope-calculator 0.1
unity-scope-chromiumbookmarks 0.1
unity-scope-colourlovers 0.1
unity-scope-devhelp 0.1
unity-scope-firefoxbookmarks 0.1
unity-scope-manpages 0.1
unity-scope-openclipart 0.1
unity-scope-texdoc 0.1
unity-scope-tomboy 0.1
unity-scope-virtualbox 0.1
unity-scope-yelp 0.1
unity-scope-zotero 0.1
urllib3 1.24.2
wadllib 1.3.2
webencodings 0.5
Werkzeug 0.15.2
wheel 0.30.0
xkit 0.0.0
zope.interface 4.3.2
</pre>
<br />
TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-50385659166621632382019-04-23T16:29:00.001+09:002019-04-25T09:53:34.575+09:00Jetson Nano のGPU使用率をグラフ表示一個前のラズパイカメラのgitアカウントにgpuGraphっていうリポジトリがあったので入れてみた。<br />
<br />
<a href="https://github.com/JetsonHacksNano/gpuGraph" target="_blank">https://github.com/JetsonHacksNano/gpuGraph</a><br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ wget https://github.com/JetsonHacksNano/gpuGraph.git
$ sudo apt-get install python3-matplotlib
$ python3 gpuGraph.py
</pre>
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU5tyB0PNAgYKPheIe8um0zQbldKqTp7YjGBtnH4Op83yYJ6_HN_-UO9BHY-EQDlWq94VbrtpmQurHwMHrQVOFWck7VeSXPao046rZsu4qL-DF2GNNPRY_xhxBA1m3wr9r19rpx3YxRbg/s1600/gpugraph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="283" data-original-width="812" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU5tyB0PNAgYKPheIe8um0zQbldKqTp7YjGBtnH4Op83yYJ6_HN_-UO9BHY-EQDlWq94VbrtpmQurHwMHrQVOFWck7VeSXPao046rZsu4qL-DF2GNNPRY_xhxBA1m3wr9r19rpx3YxRbg/s400/gpugraph.png" width="400" /></a>
</div>
<br />
darknet の tiny yolov3 動かして試してみたんだけど、ちゃんとGPU使ってくれているみたいです。<br />
あと、raspi-cameraつなげたから、カメラ番号をオプションで渡す必要が出てしまいました。<br />
ので、覚書。<br />
「-c 1」ってのが、カメラ番号です。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ ./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 1
</pre>
<br />
TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-18347852175308995852019-04-23T10:20:00.001+09:002019-04-25T09:57:42.887+09:00Jetson Nano でラズパイカメラリトライJetson nano 届いたって嬉しくてラズパイカメラ買ったのに、動かなくて(うごいてるけどただのカメラ)、悔しいからOpenCVの顔認識で使ってみる。<br />
<br />
とはいっても、出来合いのサンプルたたきマンですけど。<br />
<br />
<a href="https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-camera/" target="_blank">https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-camera/</a><br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ git clone https://github.com/JetsonHacksNano/CSI-Camera.git
$ cd CSI-Camera
$ python face_detect.py
</pre>
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPdebTGQ4Yxxe0jZbEBW1HdVNb4ih8X21NY5g79luKgaWHMYXadcrL_885eaPKY81ulFzIBE_Vm_Mzw26aK6X_cf0sq2_PFW0QeejLwSbIwbdRJ5S9TAyV891GWVioeSSeUoA0HQAVXwo/s1600/IMG_1055_mini.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="75" data-original-width="150" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPdebTGQ4Yxxe0jZbEBW1HdVNb4ih8X21NY5g79luKgaWHMYXadcrL_885eaPKY81ulFzIBE_Vm_Mzw26aK6X_cf0sq2_PFW0QeejLwSbIwbdRJ5S9TAyV891GWVioeSSeUoA0HQAVXwo/s200/IMG_1055_mini.png" width="200" /></a>
</div>
<br />
はいコレで無駄にはなってない。<br />
<br />
TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-24734998718977365452019-04-22T14:29:00.001+09:002019-04-25T10:09:29.783+09:00Jetson Nano に Openpose 入れてみるjetson nano 買ったからにはガンガン使わなくてはという謎の使命感から、僕でも知ってる超有名シリーズ「nightmare」「yolo」に続き、「Openpose」を入れてみることにしました。<br />
<br />
<br class="Apple-interchange-newline" />
<h2>セットアップ</h2>
<br />
セットアップは、こっちの前半に書いてあります。<br />
<br />
<a href="https://toramamma.blogspot.com/2019/04/jetson-nano-darknet.html" target="_blank">https://toramamma.blogspot.com/2019/04/jetson-nano-darknet.html</a><br />
<br />
<br class="Apple-interchange-newline" />
<h2>インストール</h2>
<br />
基本はここを参考に、実際に打ったコマンドを書き残しておくスタンス。<br />
<br />
<a href="https://qiita.com/myoshimi/items/cf64c91cd22c516bb49b" target="_blank">https://qiita.com/myoshimi/items/cf64c91cd22c516bb49b</a><br />
<br />
<br class="Apple-interchange-newline" />
<h3>cmakeをインストール</h3>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ sudo apt-get install qtbase5-dev build-essential gdebi libopencv-dev
$ wget https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4.tar.gz
$ tar xzvf cmake-3.13.4.tar.gz
$ cd cmake-3.13.4
$ ./configure --qt-gui
$ ./bootstrap
$ make -j6
$ sudo make install
</pre>
<br />
<br class="Apple-interchange-newline" />
<h3>GPGPU関連</h3>
<br />
GPGPU関連のセットアップは終わってるものとしてスルー<br />
<br />
<br class="Apple-interchange-newline" />
<h3>Openposeのビルド</h3>
<br />
今までのもHome直下に入れてるので、若干パスをいじって入れる。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
$ cd openpose
$ sudo bash ./scripts/ubuntu/install_deps.sh
$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ sudo make install
</pre>
<br />
<br class="Apple-interchange-newline" />
<h3>実行</h3>
<br />
まずはサンプル動画をやってみまあす<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ cd ~/
$ ./build/examples/openpose/openpose.bin --write_json outputJSON/ --display 0 --model_folder ./models --video "./examples/media/video.avi" --write_video outputVideo.avi
OpenPose demo successfully finished. Total time: 1198.628352 seconds.
</pre>
<br />
20分かかりました(汗)<br />
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj83ltp7v6eKkFFQ5WObRlJ8Hxk-_CbI4VHAL_TZSxgDehjOVIRrI5d1iKLAoo-uNbClpX9c6_DoRHNZkFXkvG4y0wDQHw1UTy2I_WZtCFcFPZvRdyknXemrVD40BBzK0Rdfo7lBco1q3A/s1600/%25E5%2590%258D%25E7%25A7%25B0%25E6%259C%25AA%25E8%25A8%25AD%25E5%25AE%259A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="387" data-original-width="597" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj83ltp7v6eKkFFQ5WObRlJ8Hxk-_CbI4VHAL_TZSxgDehjOVIRrI5d1iKLAoo-uNbClpX9c6_DoRHNZkFXkvG4y0wDQHw1UTy2I_WZtCFcFPZvRdyknXemrVD40BBzK0Rdfo7lBco1q3A/s400/%25E5%2590%258D%25E7%25A7%25B0%25E6%259C%25AA%25E8%25A8%25AD%25E5%25AE%259A.png" width="400" /></a>
</div>
<br />
では、リアルタイムをば・・・<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ ./build/examples/openpose/openpose.bin --model_folder ./models
Starting OpenPose demo...
Configuring OpenPose...
Starting thread(s)...
Auto-detecting camera index... Detected and opened camera 0.
Auto-detecting all available GPUs... Detected 1 GPU(s), using 1 of them starting at GPU 0.
Gtk-Message: 12:50:18.435: Failed to load module "canberra-gtk-module"
</pre>
<br />
なんか、落ちたのでライブラリ入れます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ sudo apt install canberra-gtk*
</pre>
<br />
実行してみます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ ./build/examples/openpose/openpose.bin --model_folder ./models
</pre>
<br />
出ました!<br />
0.2FPS!!<br />
<br />
メモリ食いつぶしてますね。<br />
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimNbnH5AuHyh0A-gBaOVyF1P-xlDvlIRImyU8sQ6ifV_xWyaiVajmDjO0Vfqe1_f54kb2WWvwNjCePh6PW26CoA_W2bb56HzNVgZ3rKKAs-p-3W-KHK9cguOV2Cw7zDZxEvElq2u5Hi0M/s1600/%25E5%2590%258D%25E7%25A7%25B0%25E6%259C%25AA%25E8%25A8%25AD%25E5%25AE%259A2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="595" data-original-width="562" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimNbnH5AuHyh0A-gBaOVyF1P-xlDvlIRImyU8sQ6ifV_xWyaiVajmDjO0Vfqe1_f54kb2WWvwNjCePh6PW26CoA_W2bb56HzNVgZ3rKKAs-p-3W-KHK9cguOV2Cw7zDZxEvElq2u5Hi0M/s400/%25E5%2590%258D%25E7%25A7%25B0%25E6%259C%25AA%25E8%25A8%25AD%25E5%25AE%259A2.png" width="377" /></a>
</div>
<br />
解像度を下げてやってみます。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">
$ ./build/examples/openpose/openpose.bin --model_folder ./models --net_resolution 320x176
</pre>
<br />
これで、2.3FPS達成!!<br />
このくらい出ると、まあまぁ遊べるかな。<br />
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir-DFDUSf1FF_ab20gMniGWRQwnkUcqfgfpELhnH5hTksVPTG7y2MseIhW7YxIrUBZtnWrwdXxUoE0LEAjEd8T7x3hZavIuRhWok9_3BNYcR-i9xeBXiVtS9OR_sL9xSfQgXd9JmyGdsc/s1600/IMG_1056_mini.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="149" data-original-width="256" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir-DFDUSf1FF_ab20gMniGWRQwnkUcqfgfpELhnH5hTksVPTG7y2MseIhW7YxIrUBZtnWrwdXxUoE0LEAjEd8T7x3hZavIuRhWok9_3BNYcR-i9xeBXiVtS9OR_sL9xSfQgXd9JmyGdsc/s200/IMG_1056_mini.png" width="200" /></a>
</div>
<br />
ホネホネが自分に合わせて動くサマを見ていると、あらためてすごい技術だなぁと思いました。<br />
<br />
ちなみに、--face と --hand はリアルタイムでは動作しませんでした。<br />
というのも、--face_net_resolution、--hand_net_resolutionを低めに設定しないと読み込まれず、低くすると精度悪くて検出できないようです。<br />
<br />
次は何動かしてみようかな。<br />
<br />TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-38286563467246279632019-04-19T13:24:00.000+09:002019-07-30T16:27:36.727+09:00Jetson Nano 買ったので darknet で Nightmare と YOLO を動かすまで巷で話題のJetson Nanoが届いたので、僕でも知ってる超有名シリーズ「darknet」入れて「nightmare」「yolo」あたりを動かしてみたいと思います。<br />
<br />
<br class="Apple-interchange-newline" />
<h2>
準備</h2>
<br />
<br class="Apple-interchange-newline" />
<h3>
■ 周辺機器揃える</h3>
<br />
せっかくなので、はりきって電源は5V4Aで、ファンもつけました。<br />
<br />
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2Xwd42P" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07QQ9CFNP&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2Xwd42P" target="_blank">NVIDIA Jetson Nano Developer Kit - 強力 AI コンピュータ 開発者キット</a>
</div>
<div class="af-desc">
<!-- B07QQ9CFNP --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2Xwd42P" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2L4Bvm6" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B0721MLM8B&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2L4Bvm6" target="_blank">Intel Dual Band Wireless-AC 8265 ワイヤレス 802.11ac 867Mbps Dual band 2x2 WiFi + Bluetooth 4.2 カード 8265NGW</a>
</div>
<div class="af-desc">
<!-- B0721MLM8B --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2L4Bvm6" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<!--
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2PrUYM0" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B06ZZX719L&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2PrUYM0" target="_blank">FPC基盤 高性能5dBi 2.4GHz/5GHz 802.11a/b/g/n/ac対応 無線LANカード WIFI/Wimax/Bluetoothモジュール用アンテナ 2本セット (MHF4 Cable=120mm)</a>
</div>
<div class="af-desc">
<!-- B06ZZX719L </div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2PrUYM0" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
-->
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2ymmiDA" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B06ZXX6PHP&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2ymmiDA" target="_blank">FPC基盤 高性能5dBi 2.4GHz/5GHz 802.11a/b/g/n/ac対応 無線LANカード WIFI/Wimax/Bluetoothモジュール用アンテナ 2本セット (MHF4 Cable=120mm)</a>
</div>
<div class="af-desc">
<!-- B06ZXX6PHP --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2ymmiDA" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2PsgsIF" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B0179ODSS0&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2PsgsIF" target="_blank">アイネックス ジャンパー (大) 取手付 JP-01BK</a>
</div>
<div class="af-desc">
<!-- B0179ODSS0 --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2PsgsIF" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2Psm1qy" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B015RKFAA2&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2Psm1qy" target="_blank">SUCCUL ACアダプター 5V 4A 大手メーカーOEM社製品 センタープラス スイッチング式 最大出力20W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品</a>
</div>
<div class="af-desc">
<!-- B015RKFAA2 --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2Psm1qy" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2Pr9Ieh" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07H89SQTH&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2Pr9Ieh" target="_blank">microSDXC 128GB SanDisk サンディスク Extreme UHS-1 U3 V30 4K Ultra HD A2対応 SDアダプター付 [並行輸入品]</a>
</div>
<div class="af-desc">
<!-- B07H89SQTH --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2Pr9Ieh" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<br class="Apple-interchange-newline" />
※追記 <a href="https://qiita.com/yamamo-to/items/bf77048b6f650aad346f" target="_blank">Jetson Nanoのファン購入に気をつけろ!</a><br/>
コチラの記事にあるように、5Vのファンじゃないと回らない(回りにくい?)ようなのでファンのリンクを追記しました。<br/>
<br class="Apple-interchange-newline" />
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/30AZEUb" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07DXS86G7&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/30AZEUb" target="_blank">Noctua NF-A4x10 5V PWMサイレントファン40 mmプレミアムブラウン/ベージュ</a>
</div>
<div class="af-desc">
<!-- B07DXS86G7 --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/30AZEUb" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<br class="Apple-interchange-newline" />
一応こっちでも回ってます。<br/>
<br class="Apple-interchange-newline" />
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2GDLaM4" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B00YH7A8Y0&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2GDLaM4" target="_blank">AINEX OMEGA TYPHOON 薄型・超静音タイプ [ 40mm角 ] CFZ-4010SA</a>
</div>
<div class="af-desc">
<!-- B00YH7A8Y0 --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2GDLaM4" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<br class="Apple-interchange-newline" />
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2PvWwEL" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B01F1SWTZE&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2PvWwEL" target="_blank">Raspberry Pi カメラモジュール【Raspberry Pi Camera V2】</a>
</div>
<div class="af-desc">
<!-- B01F1SWTZE --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2PvWwEL" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/31RwL7M" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B07SLHDGKK&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/31RwL7M" target="_blank">NVIDIA Jetson Nano開発者キット用 アクリルケースボックス(ジャストボックス)</a>
</div>
<div class="af-desc">
<!-- B07SLHDGKK --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/31RwL7M" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<br />
買ったものはこんなところか。<br />
※ 良い子は技適は守ろう。<br />
<br />
キーボードやマウス、ディスプレイは、そのへんに転がっているものでOK!!<br />
<br />
<br class="Apple-interchange-newline" />
<h3>
■ セットアップ</h3>
<br />
<a href="https://dev.classmethod.jp/hardware/nvidia-jetson-nano-setup/" target="_blank">https://dev.classmethod.jp/hardware/nvidia-jetson-nano-setup/</a><br />
<br />
Etcherを使ってイメージを焼く。<br />
<br />
<br class="Apple-interchange-newline" />
<h3>
■ 刹活孔を突く</h3>
<br />
<br class="Apple-interchange-newline" />
<h4>
・ フルパワー化</h4>
<br />
<a href="https://www.jetsonhacks.com/2019/04/10/jetson-nano-use-more-power/" target="_blank">https://www.jetsonhacks.com/2019/04/10/jetson-nano-use-more-power/</a><br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ sudo nvpmodel -m 0
$ sudo jetson_clocks
</pre>
<br />
<br class="Apple-interchange-newline" />
<h4>
・ スワップ作成</h4>
<br />
<a href="https://www.jetsonhacks.com/2019/04/14/jetson-nano-use-more-memory/" target="_blank">https://www.jetsonhacks.com/2019/04/14/jetson-nano-use-more-memory/</a><br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">https://github.com/JetsonHacksNano/installSwapfile
$ cd installSwapfile
$ ./installSwapfile
</pre>
<br />
<br class="Apple-interchange-newline" />
<h4>
・ カメラの確認</h4>
<br />
<a href="https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-camera/" target="_blank">https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-camera/</a><br />
<br />
基本指すだけ<br />
動いてるか確認する。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e
</pre>
<br />
<br class="Apple-interchange-newline" />
<h2>
実践</h2>
<br />
<br class="Apple-interchange-newline" />
<h3>
■ CUDAサンプルとVisionWorksのサンプルの動作確認</h3>
<br />
<a href="https://gihyo.jp/admin/serial/01/ubuntu-recipe/0563?page=4" target="_blank">https://gihyo.jp/admin/serial/01/ubuntu-recipe/0563?page=4</a><br />
<br />
<br class="Apple-interchange-newline" />
<h4>
・ CUDA</h4>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ cp -a /usr/local/cuda-10.0/samples/ ~/
$ cd ~/samples
$ make
</pre>
<br />
すげー時間かかるので気長に待つ。<br />
個別buildの方法もリンク先に書いてある。<br />
<br />
ここにビルドされてるので、移動してそれっぽいやつ実行確認。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ cd bin/aarch64/linux/release
$ ./deviceQuery
$ ./oceanFFT
$ ./smokeParticles
$ ./nbody
</pre>
<br />
<br class="Apple-interchange-newline" />
<h4>
・ VisionWorks</h4>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ /usr/share/visionworks/sources/install-samples.sh ~/visionworks/
$ cd ~/visionworks/VisionWorks-1.6-Samples/
$ make
</pre>
<br />
時間かかるので気長に待つ。<br />
ここにビルドされてるので、移動してそれっぽいやつ実行確認。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ cd bin/aarch64/linux/release/
$ ./nvx_demo_hough_transform
$ ./nvx_demo_motion_estimation
</pre>
<br />
ここまで動けば、環境的には何の問題もないはず。<br />
<br />
<br class="Apple-interchange-newline" />
<h2>
本題</h2>
<br />
<br class="Apple-interchange-newline" />
<h3>
■ DARKNETインストール</h3>
<br />
<a href="http://takesan.hatenablog.com/entry/2019/04/09/001852" target="_blank">http://takesan.hatenablog.com/entry/2019/04/09/001852</a><br />
真ん中あたり、DARKNET(YOLO)のインストール<br />
<br />
<br class="Apple-interchange-newline" />
<h4>
・ makefileの修正</h4>
makefileの修正で、-gencodeもコメントしないとダメでした。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">GPU=1 # 修正
CUDNN=1 # 修正
CUDNN_HALF=1 # 修正
OPENCV=1 # 修正
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0
# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
DEBUG=0
ARCH= -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=[sm_50,compute_50] \
-gencode arch=compute_52,code=[sm_52,compute_52] \
# -gencode arch=compute_61,code=[sm_61,compute_61] # 修正
OS := $(shell uname)
# Tesla V100
# ARCH= -gencode arch=compute_70,code=[sm_70,compute_70]
# GeForce RTX 2080 Ti, RTX 2080, RTX 2070, Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Tesla T4, XNOR Tensor Cores
# ARCH= -gencode arch=compute_75,code=[sm_75,compute_75]
# Jetson XAVIER
# ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]
# GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
# ARCH= -gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61
# GP100/Tesla P100 - DGX-1
# ARCH= -gencode arch=compute_60,code=sm_60
# For Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX - uncomment:
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53] # 修正
# For Jetson Tx2 or Drive-PX2 uncomment:
# ARCH= -gencode arch=compute_62,code=[sm_62,compute_62]
:
</pre>
<br />
<br class="Apple-interchange-newline" />
<h4>
・ make</h4>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ PATH=/usr/local/cuda/bin:$PATH make
</pre>
<br />
気長に待つ。<br />
<br />
<br class="Apple-interchange-newline" />
<h4>
・実行</h4>
<br />
ビルドできてれば以下が出力されるはず。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ ./darknet
usage: ./darknet <function>
</pre>
<br />
<br class="Apple-interchange-newline" />
<h3>
■ Nightmare</h3>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ wget http://pjreddie.com/media/files/vgg-conv.weights
$ ./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/scream.jpg 10
</pre>
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIFkMTyFN3gdvtspIjWr2UBkPf-XD0RY49jP99KbgyVEpE6ks6K45K-D5eqNsiH5XCwgPClquSt-9IEA6Ip1M9CWBU2xDL88gzECpdy7Kqj1v5IH2MaKrVxQBPafwZ_Dn2KzT1_ThU_GQ/s1600/scream_vgg-conv_10_000000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="448" data-original-width="352" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIFkMTyFN3gdvtspIjWr2UBkPf-XD0RY49jP99KbgyVEpE6ks6K45K-D5eqNsiH5XCwgPClquSt-9IEA6Ip1M9CWBU2xDL88gzECpdy7Kqj1v5IH2MaKrVxQBPafwZ_Dn2KzT1_ThU_GQ/s320/scream_vgg-conv_10_000000.jpg" width="251" /></a>
</div>
<br />
なんだか、結果がポクない。。<br />
なにか間違えたか?<br />
<br />
<br class="Apple-interchange-newline" />
<h3>
■ YOLO</h3>
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ wget https://pjreddie.com/media/files/yolov3.weights
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
</pre>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-xQ44Q0ZlrhITfcbo84ZyP2KiXvgZfIO2K9q6z-iKAlIuvDyr9jhQASAGgUxNUKkbA1LhaZH93yvugt9iNk_XpeOtz4TE9961OShP5g-aJgb1bg5jXklvrWtaXp1jIPHA30j-n0mfLNU/s1600/predictions.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="768" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-xQ44Q0ZlrhITfcbo84ZyP2KiXvgZfIO2K9q6z-iKAlIuvDyr9jhQASAGgUxNUKkbA1LhaZH93yvugt9iNk_XpeOtz4TE9961OShP5g-aJgb1bg5jXklvrWtaXp1jIPHA30j-n0mfLNU/s320/predictions.jpg" width="320" /></a>
</div>
<br />
リアルタイムは、raspi camera 繋がってるんだけど、camera stopedとかなって終わった。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
</pre>
<br />
引き続き実験。<br />
<br />
<br class="Apple-interchange-newline" />
--------- 追記 ----------------------------------------<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ sudo apt-get install libv4l-dev v4l-utils
$ v4l2-ctl --list-devices
vi-output, imx219 6-0010 (platform:54080000.vi:0):
/dev/video0
$ v4l2-ctl -d /dev/video0 --all
Driver Info (not using libv4l2):
Driver name : tegra-video
Card type : vi-output, imx219 6-0010
Bus info : platform:54080000.vi:0
Driver version: 4.9.140
Capabilities : 0x84200001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 0: no power)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'RG10'
Field : None
Bytes per Line : 1280
Size Image : 614400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Camera Controls
group_hold 0x009a2003 (bool) : default=0 value=0 flags=execute-on-write
sensor_mode 0x009a2008 (int64) : min=0 max=0 step=0 default=0 value=0 flags=slider
gain 0x009a2009 (int64) : min=0 max=0 step=0 default=0 value=16 flags=slider
exposure 0x009a200a (int64) : min=0 max=0 step=0 default=0 value=13 flags=slider
frame_rate 0x009a200b (int64) : min=0 max=0 step=0 default=0 value=2000000 flags=slider
bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
height_align 0x009a2066 (int) : min=1 max=16 step=1 default=1 value=1
size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
write_isp_format 0x009a2068 (bool) : default=0 value=0
sensor_signal_properties 0x009a2069 (u32) : min=0 max=0 step=0 default=0 flags=read-only, has-payload
sensor_image_properties 0x009a206a (u32) : min=0 max=0 step=0 default=0 flags=read-only, has-payload
sensor_control_properties 0x009a206b (u32) : min=0 max=0 step=0 default=0 flags=read-only, has-payload
sensor_dv_timings 0x009a206c (u32) : min=0 max=0 step=0 default=0 flags=read-only, has-payload
low_latency_mode 0x009a206d (bool) : default=0 value=0
sensor_modes 0x009a2082 (int) : min=0 max=30 step=1 default=30 value=5 flags=read-only
</pre>
<br />
カメラ生きてるっぽいよね。<br />
<br />
----------------------------------------<br />
<br />
<br class="Apple-interchange-newline" />
--------- 追追記 ----------------------------------------<br />
<br />
Logicool HD c270なら動きました。<br />
<br />
<div class="af-box">
<div class="af-imgbox">
<a href="https://amzn.to/2PxKoDq" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B005LFG1DE&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=toramamma-22" width="160px" /></a>
</div>
<div class="af-textbox">
<div class="af-title">
<a href="https://amzn.to/2PxKoDq" target="_blank">LOGICOOL クリエイティビィティ コレクション HDウェブカム HD720p動画対応 C270PP</a>
</div>
<div class="af-desc">
<!-- B005LFG1DE --></div>
<div class="af-kobox af-amazon">
<a class="aflink" href="https://amzn.to/2PxKoDq" target="_blank">Amazon</a></div>
</div>
<div class="clear">
</div>
</div>
<br />
これの無地のやつ。<br />
メモリ使い切って死ぬ寸でしたが・・・<br />
スワップ作っといてよかった。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
</pre>
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_SCk6Nma2CmczJUpwVMeCcgsLJ_3ja0Q_IBnfDWSJziwOHQxMmZai51anSRhtLdNSvt2S5U_P9T561dpYYP7fQyaY8e8GjUCWJj3TV8oEg2FHPFrHy7ZsDlsp9vQCJB44NNp4Z-bn9UU/s1600/Screenshot+from+2019-04-19+16-41-17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_SCk6Nma2CmczJUpwVMeCcgsLJ_3ja0Q_IBnfDWSJziwOHQxMmZai51anSRhtLdNSvt2S5U_P9T561dpYYP7fQyaY8e8GjUCWJj3TV8oEg2FHPFrHy7ZsDlsp9vQCJB44NNp4Z-bn9UU/s400/Screenshot+from+2019-04-19+16-41-17.png" width="400" /></a></div>
<br />
terminalの方見るとわかりますが、2FPSとかです。<br />
実用には耐えません^^<br />
<br />
----------------------------------------<br />
<br />
<br class="Apple-interchange-newline" />
--------- 追追追記 ----------------------------------------<br />
<br />
tiny yolo v3なら、15FPS位出てラズパイで初めてLチカしたときくらいの満足感が得られました。<br />
<br />
<pre class="brush: bash; first-line: 1; highlight: [,];" title="">$ wget https://pjreddie.com/media/files/yolov3-tiny.weights
$ ./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights
</pre>
<br />
----------------------------------------<br />
<br />
ということで、一応 Darknet 動かすところまでできました。<br />
そもそもこの手の情報なにもない素人レベルでしたが、動かすだけなら割と簡単にできました。<br />
<br />
お熱があるうちに、遅ればせながら機械学習のお勉強でも始めようかな。<br />
<br />TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-83437200916538881052018-12-14T14:42:00.001+09:002018-12-14T14:42:33.222+09:00透けテルまだ使ってくれてる人いるようで。お問い合わせあったので、探したらapk発掘したのでココにおいておく。<br />
<br />
<a href="https://www.dropbox.com/s/dj3310kgy6s0ldf/SukeTell.apk?dl=0">https://www.dropbox.com/s/dj3310kgy6s0ldf/SukeTell.apk?dl=0</a><br />
<br />
動作保証なし。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-55015292292814934012018-10-11T16:25:00.000+09:002018-10-12T09:31:09.539+09:00YASHICA Y35はぁ、もう嫌だ。<br />
もう、支援したことが馬鹿らしくなるくらいのレビュー記事たっぷり見て、全然期待してもいなかったのに、いざ届いてみたら、やっぱちょっと嬉しくって、さぁ撮ろうと思ったら、シャッターが押せない。。<br />
何なのもう。。<br />
<br />
Facebookに動かない(証拠として?)動画送れとか言われて、なんやかんややり取りして、一旦ブツを送り返す事になったんだけど、またここからしばらく待たにゃいけんのか。。<br />
<br />
本心言っていいっすか?<br />
もういらねっす。<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwuDW0oE4k3HUcUzdg62hYAyIteNsACBh5zzVPqnoaXa9fL1Ce-Grsf9QHSmfASZGsl6EvKjBbW0UIEVFSIjQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br />
<br />
これ、送った動画なんだけど、巻き上げレバーでシャッターをロックする部分が死んでるんだろうね。<br />
ロックが解除されません。<br />
シャッター押せません。<br />
<br />
裏蓋も硬いしさ。<br />
<br />
とりあえず、送り返して正しく動くバージョンを待ちます。<br />
送り返してもらうのは、お金でもいいですwTORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-89486477211379632912018-04-19T21:34:00.002+09:002018-04-19T21:34:50.480+09:00ngrok http status code 402新環境で <span style="background-color: black; color: white; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; white-space: nowrap;">./ngrok authtoken xxxxxxxxxxxxxxxxx</span> やり忘れたら402出た<br />
<br />
<span style="background-color: white; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 12px; white-space: nowrap;"><br /></span>
<span style="background-color: white; color: white; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 12px; white-space: nowrap;"><br /></span>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-85132796938320447522018-04-07T07:55:00.003+09:002018-04-07T07:55:45.978+09:00メモalexaスキル作っててテストが動かないときは、「avs-alexa-fe.amazon.com」をウイルスチェックソフトの除外リストに追加する。<br />
<br />
avastだったらウェブシールドの除外リストに追加。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-74896029786803129182015-07-04T10:52:00.003+09:002019-05-09T16:37:24.977+09:00おしまい公開するのやめましたのでここからどぞ<br />
<br />
<a href="https://www.dropbox.com/s/751jdzzs08414gi/tora.mamma.xclip_v10_574ed4.apk?dl=0" target="_blank">XClipHistory </a><br />
<br />
<a href="https://www.dropbox.com/s/vbtwe69j946ecex/tora.mamma.xclip_v12_f6bd9f.apk?dl=0" target="_blank">XClipHistroty LOLLIPOP</a>
<br />
<br />
<br />
ソース<br />
<a href="https://github.com/ToraMamma/XClip" target="_blank">https://github.com/ToraMamma/XClip</a>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com5tag:blogger.com,1999:blog-6411356282483140374.post-8597081252628531842015-06-26T12:31:00.000+09:002015-06-26T12:31:01.209+09:00XclipHistoryちょっと更新バグレポ貰ったので対応。<br />
・クリップリストから貼り付けても先頭に行かない。<br />
<br />
使用レポももらったけど、特に問題なさそう。<br />
<br />
あとはちょっとノッてきたのでマテリアルデザイン対応しておいた。<br />
って言っても、画面らしい画面は無いので、履歴タップ時にRippleエフェクトかかるくらい。<br />
ごめん。これはLollipopの人だけ。<br />
<br />
マテリアル対応もしたし心機一転バージョン2.0からスタートすることにしました。<br />
今回の対応はこんな感じ。<br />
<br />
一応機種依存はあるかもしれないけど問題なさそうなので安定版にしました。<br />
<br />
ブラウザ関連は。。。<br />
また気が向いたらやります。<br />
では。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-35029727056583799502015-06-24T17:11:00.001+09:002015-06-24T17:11:13.883+09:00XClipHistory 更新xposed modulesのXclipHistpryを更新しました。<br />
<a href="http://repo.xposed.info/module/tora.mamma.xclip" target="_blank">http://repo.xposed.info/module/tora.mamma.xclip</a><br />
<br />
主にLollipop対応です。<br />
バグレポ貰って調べました。<br />
<br />
というか、Lollipopイケるのね!<br />
環境つくりから開始したのでチョット対応に時間かかっちゃった。<br />
<br />
カスROMの選定から~<br />
まぁこれは置いといて。<br />
<br />
試してみたらまぁ動かない動かない。<br />
笑ってしまうくらい動かなかったですw<br />
<br />
原因は、XClipは各アプリの上で動くように作ってある為、ストレージに保存してあるクリップボードデータを各アプリ側の権限が無いと見れないので、AIDLを使ってXclipプロセスに持ってきてクリップボード関連の処理を実装していたんだけど、Lollipopになったから?なのか、アクセスユーザを明確にしてくれみたいなエラーを吐いて死んでいて、そもそもプロセス間通信出来ていなかったです。<br />
<br />
で、だんまり。<br />
<br />
たちの悪い事に、元々のクリップボードの機能もラップしていたので、アンインストールするしかクリップボード使えないという状態に(||゚Д゚)ヒィィィ!<br />
<br />
チョット調べてたんだけど、Xposedからだといい方法というか解決策が見つからなくて、ContentProviderでデータをやり取りする方式に変更しました。<br />
<br />
ちなみに、APIバージョン21以上の場合だけの修正にした(つもり)なので、KITKATとかには影響ないと思います。<br />
確認環境無くなっちゃったのでベータ版にしておいた。<br />
<br />
Lollipop版はWebViewとかやってないです。<br />
とりあえず動くようにしただけって感じで。<br />
<div>
<br /></div>
あと、今回ContentProviderの方式にしたら、意外とAIDLより使いやすくていい感じだったので、昔の方もこれに変更したいなぁ。<br />
でも、今登録されてるデータ消えちゃうからあはははは。<br />
やめようかな。<br />
<br />
ソース公開してっていうメールも来てるけど、人に見せるのが恥ずかしいくらいのヤッツケ作業なので勘弁してください。<br />
リーマンなんで、自由時間あんまないんす。<br />
もう少しこっちの遊び開発の時間取れたら綺麗にして公開してもいいかな。<br />
そんな大したことやってないけど。<br />
<br />
チョット当分バグ対応とかするかもしれませんがおつきあいください。<br />
Material対応とかしたいなぁ。<br />
せっかくbuildtool:22入れたし。<br />
<br />
仕事じゃないプログラミング、久しぶりにやると面白い。<br />Xposed moduleは再起動必須なのがたまにキズ。<br /><br />以上。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-13098747817297587152014-11-11T14:50:00.002+09:002014-11-11T14:50:32.002+09:00[XClip]XClip更新した要望がたくさん来ていた削除の件。<br />
長押しで削除出来る様にしました。<br />
<br />
後、ブラウザ対応とFacebookのチャットヘッド対応。<br />
こっちはちょっと微妙(無理やり作った)ので実験機能にしてある。<br />
<br />
<br />
話ずれるけど、ちょっと愚痴を。<br />
<br />
お金払うアプリは住所の登録が必要だってことで、有料アプリを削除したんだけど、FlipClipとそのFree修正終わってテスト中だったのに日の目を見ることなく死んでいくことになるな。<br />
ホント個人デベロッパのやる気をそぐような事ばっかしやがって。<br />
<br />
あ、Freeの方は更新してもいいんだけど、プロ版購入してくれた方に申し訳ないから放置することにしました。<br />
<br />
こういうのって、難しいね。<br />
<br />
もうさ、ソース公開しちゃってもいいんだけど、購入してくれた人も居ると思うと放置がベストな対応って気がしちゃって。<br />
ソース汚いから公開するにしても修正作業タップリだけど。<br />
なんか、こんな書き方するんだダセーって思われるのもアレだしw<br />
<br />
個人的にAPK欲しいって人が居ればなんか考えますよ。<br />
<div>
<br /></div>
TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-10135963891196630962014-09-30T09:51:00.001+09:002014-09-30T09:56:20.898+09:00え?GooglePlay、開発者が住所登録しなきゃダメなの?<br />
<br />
ふーん。<br />
個人だから絶対に嫌。<br />
<br />
という事で、有料アプリ抹殺されるかもしれませんのであしからず。<br />
<br />
というか、リジェクトアプリがもうそろそろ限界かも。<br />
不本意だけど、悪質な開発者みたいになってる。<br />
このアカウント削除されたらきついんだよなぁ。<br />
<br />
移行するか。<br />
めんどくせぇなぁ。<br />
<br />
このアカウントでアプリ登録するんじゃなかった(涙)<br />
<br />
有料アプリだけか!<br />
分かった、とりあえず、落ち着くまで有料アプリ公開やめる!<br />
ばいなら。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-58034094558007286202014-09-19T14:37:00.001+09:002014-09-19T14:53:39.662+09:00[XClip]わかった!!さっき怪しいところログ出すようにしてリリースしたら、アリさんから早速連絡が来たよ!<br />
<br />
結果・・・・<br />
<br />
凡ミスでした(汗)<br />
<br />
「貼り付けメニュー」がONになっていないと長押しで落ちるという。<br />
全ONにしてたから気づかなかった。<br />
<br />
とりあえず、ついさっきだからもっかいアップしちゃおうかな。<br />
<br />
ふぅ。<br />
これでひとまずコイツの開発が手を離れる。<br />
<br />
めでたしめでたし。<br />
<br />
※このブログのコメントでもらったFacebookMessengerのチャットヘッドでリストが出ない件<br />
<br />
一覧はダイアログで作っているんだけど、ダイアログを表示するためにはコンテキストが必要。<br />
コンテキストはいくつか種類がある。<br />
BaseContext(大ボス)<br />
└ApplicationContext(アプリ単位)<br />
├ActivityContext(画面単位)<br />
└ServiceContext(サービス単位)<br />
<br />
チョットややこしいんだけど、ダイアログ表示には上のうちActivityContextが必要。<br />
<br />
超ざっくりいうと、画面が無いとダイアログ出しちゃダメだろ?って事だと思う。<br />
まぁ、そうだよね。<br />
スマホいじってたら、いきなり悪意あるサービスがダイアログ出してっていうのが出来ちゃうのって、想像しただけでちょっと怖いよね。<br />
<br />
んで、今回はViewからContextを取得している。<br />
Viewに格納されるContextはActivityContextかServiceContext<br />
<br />
で、あのチャットヘッドはオーバーレイで作られているのでサービスで実装している。<br />
つまり、ServiceContextが渡ってきてる。<br />
<br />
ダイアログ出せません。<br />
<br />
ボーン。<br />
<br />
駆け足で書いちゃったし、あんまりこの辺詳しくないので調べながら書いたので、間違っていることも多々ありそうだけど、ちょっと無理そうだねって事で。<br />
とりあえず、落ちなくしたから良いっしょ!(適当)<br />
<br />
<br />
まぁ、負けじとオーバーレイでリスト作って出しゃぁ良いじゃんって話なんだけれども。TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com0tag:blogger.com,1999:blog-6411356282483140374.post-13038764259922627062014-09-18T09:47:00.003+09:002014-09-18T09:47:30.959+09:00[XClip]マーケットリジェクトwそんなこんなしてたらマーケットからリジェクトされた。<br />
寄付リンクが癇に障ったみたい。<br />
<br />
墓場に置いておくよ。<br />
<a href="http://toramamma.blogspot.jp/p/xclip.html">http://toramamma.blogspot.jp/p/xclip.html</a>TORA & MAMMAhttp://www.blogger.com/profile/00718463007046460302noreply@blogger.com3