GWの大半は北半球から南半球へお引越し

カツラです。

ここ1ヶ月は新型コロナウイルス対策の為3日に一度の食料買い出し以外に外出しておりません。まぁ私にとっては単純に食料買い出しに出る日が1日1回から3日1回に減ったぐらいなんですが、流石にそろそろ外に出たい気持ちが湧いてきます。

Twitterで話題になって買った「あつ森」ですが、GW中に妹達とオンラインをして気づいたことが1つ、自分の島の住人があまりにも可愛くない
それもこれもストーリークリアを重視して出会った住人を片っ端から勧誘してたのがまずかった。
そして最後に住人を入れ替えればいいやと軽い気持ちで考えていたのがいけなかった・・・。
なのでクリアした後にやった離島ガチャの黒いカンガルーこと「アザラク」だけが唯一のお気に入りの状態。。。これではいかんと住人の入れ替えを実施。

色々調べてみてやったけど
・キャンプにくるのは可愛いとは限らないそして頻度も割と少ない
・住人を追い出すために虫取り網で叩いてたけど心が痛い・・・そしてよくよく調べてみると住人と別れるには逆に親しくなる必要がある

兄弟全員北半球だったので悩んだ末に南半球に移住(再プレイ)これがGWの大半でした。

まず最初の住人リセマラ。
アネキタイプは微妙なのばっかだったのでハキハキタイプでいいのを試みる(ペンタが理想)。
2時間経過・・・
もう果物が「みかん」で普通に許容できる範囲であればいいやと妥協。
最終的にハムスケとウェンディと「りんご」で初回ガチャを終了。
最初の強制キャンプガチャはもちろん失敗・・・ピエロっぽい羊。
そして勝手に移住してくる住人。
数多もの離島ガチャに失敗し最終的に到達したのがこちら

最初にしっかり選んで誘っていれば良かった。

OpenCVでのオーバーヘッドの少ない静止画像撮影方法

はじめに

Amazon Rekognition を使った顔認識システムを検討しています。

  • Raspberry Pi 3 とカメラモジュールと OpenCV を使う
  • USBで接続したキーボードのEnterキーを押したら撮影
  • ASWへのリクエストで1秒程度必要になるので、撮影に要する時間はなるべく短く

シャッターボタン(Enterキー)を押してから画像データを取得するまでの遅延をなるべく小さくするためには、OpenCVでの処理にある程度のコツが必要なことが分かったのでこの記事にまとめてみました。

Raspberry Pi の準備

  1. Raspbeian Buster with desktop をインストール
  2. raspi-config を起動して Interfacing Options → Camera で カメラインタフェースを有効化
  3. apt-get install python-opencv

ダメダメな例

最初にうっかり書いてしまったバージョンです。
raw_input で入力待ちをして、入力があれば VedeoCapture オブジェクトを生成して read で画像を1枚読み込む、という処理を無限ループします。 一応動きますが、毎回 VideoCapture を作っているので遅い(キー入力から画像取得まで1秒弱)です。
さらに、後述の通り2回目以降正しく動作しません。

ダメな例

ループの外で VideoCapture を生成して使い回すようにしました。VideoCapture生成処理の分(0.4秒程度)早くなりました。
ただし、上のダメダメな例でもそうでしたが、2回目以降のシャッターは正しく動作しません。

  1. 顔をカメラに向けた状態で起動
  2. キー入力する
  3. 顔が写った画像が記録される
  4. 顔をフレームから外す
  5. キー入力する
  6. 顔が写った画像が記録される

といった具合です。2回目以降はキー入力された時点の映像がキャプチャされません。

正しいキャプチャの方法

VideoCapture を使うサンプルコードは世に溢れてますが、そのほとんどは動画のすべてのフレームを漏れなく処理するには、のようなパターンで、処理をブロックしておいて何らかのトリガで1枚だけキャプチャをするという今回のような使い方はあまりしないようです。
改めて VideoCapture の仕様を調べてみると、フレームレートに応じた頻度で read を呼び出して VideoCapture 内部のフレームを進めないと、過去のフレームを読み込んでしまうことになるようです。要するに、ダメな例のコードでは read の回数が少なすぎた訳です。

したがって、以下のような動作が必要になります。

  1. 適切なウェイト(50msec程度)を入れつつreadを繰り返し実行
  2. キー入力が発生したら最後に読み込んだ画像をメインの処理に渡す

こういう場合の定石は cv2.imshow して cv2.waitKey でタイムアウト有りのキー入力待ちをすることです。タイムアウトを50msecに設定すれば、キー入力が無ければ50msec毎に cv2.read を実行できます。

もっと動作を軽く

上の定番のやり方の場合、imshowするのでそれなりにCPU負荷が掛かります。カメラに映っている映像を表示しなくても良い用途のためにもっと軽い方法も欲しくなります。

select を使ってタイムアウト付きキー入力関数を自前で用意しました。

おわりに

imshowとwaitKeyを使う版だとほとんど何もしていないときでもCPU使用率が20%強になりますが、動画表示しない版だと3%程度まで抑えることができました。また、プログラムの構成上キー入力の前に画像読み込みが終わっているので、処理の遅延をなるべく小さくという意味でも非常に良いものになっています。

ハイスタがサブスクはじめるってよ

音楽って本当にいいですね。
マエダです。

僕らの青春時代を支えてくれたあのHi-STANDARDさんが各主要ストリーミングサービスで全楽曲を開放してくれましたよ!

https://music.apple.com/jp/artist/hi-standard/36223467

※ ハイスタと関係のない画像

ハイスタといえば名曲だらけです。
『Maximum Overdrive』のイントロ聴いたらアガる。
『Summber Of Love』とか『Saturday Night』とか最高すぎますね。
(『Growing Up』多め)

 

そういえば元ZOZOの前澤さんの「スタートトゥデイ」という社名はハイスタの『START TODAY』からなのかなーって思ったら全然違いました。

https://ja.wikipedia.org/wiki/ZOZO

ゴリラ・ビスケッツさんの同名曲が由来とのこと。(豆知識)

 

僕は高校生のときに『New Life』のイントロベースを練習したなぁとしみじみ。

といいつつ僕はハイスタのコピーバンドはしていませんでした。
同級生の中でもイケてるヒトたちがコピーしていました。

僕は『セクシーコマンドー外伝 すごいよ!!マサルさん』が好きすぎてアニメの主題歌だった当時ビジュアル系バンドと呼ばれるPENICILLINのロマンスを友だちの家で練習していました。(黒歴史)

ギター、ベース、キーボードだけのバンド。
ドラムもボーカルもいないけど楽しかった思い出。
※ どんな曲か気になる方はYouTubeとかで探してみてください。^^

 

楽器といえば最近ドラムをしてませんが、僕の趣味の欄は「ドラム」にしておきます。

※ 僕の趣味はだれがなんと言おうと「ドラム」

趣味「ドラム」の僕のハイスタのプレイリストを置いておきますので、是非ハイスタをお供に最高の夏をお過ごしください!

https://playlist.surf/playlists/33968

[PR] ご視聴にはPLAYLISTとAppleMusicにてお楽しみください。

 

Hi-STANDARD 公式ウェブサイト: https://hi-standard.jp/

お家での過ごし方

こんにちわ。
リエです。

突然ですが、外出自粛の中、皆さんお家でどんな過ごし方をしていますか?
私は最初こんなに時間があっても外に出れないのなら出来ることなんて限られてるやん(TдT)と思っていましたが、発想の転換で充実した過ごし方をできるようになりました。
ということで、私のお家での過ごし方を今回はご紹介したいと思います🏠

その1.お家カフェ☕

私はカフェでお茶するのが大好きなのですが、今は行けません;;
お家でカフェ気分を味わえないかなと考え、色々工夫してみました。
最近作ったもの↓↓

ダルゴナコーヒーは韓国で話題のドリンクで、牛乳の上に「インスタントコーヒー」「砂糖」「お水又はお湯」を等比率で泡立ててホイップ状にしたものを冷たい牛乳の上に乗せたドリンクです。

〈材料〉
・インスタントコーヒー 大さじ2
・砂糖 大さじ2
・お水又はお湯 大さじ2

〈作り方〉
1.材料を全てボウルの中に入れる
2.泡立て器でホイップ状になるまでひたすら泡立てる
3.コップに牛乳を入れその上にホイップしたコーヒーの乗せる

〈アドバイス〉
・材料はきちんと計量しないとうまく泡立たないので、ご注意ください。
・泡立て器を使うと大変みたいなので、ハンドミキサー推奨。
私はミルクフォーマーを使いました。
・混ぜるとき、結構飛び散るので深いボウル推奨。

めっちゃ簡単です!
前に大さじ2で作ったとき、甘すぎるなと感じたので私は材料を大さじ1にしています。なので泡のボリュームが少ないです( ;∀;)でも材料を大さじ2にすれば、牛乳8:コーヒー2になり見た目は断然きれいになると思いますので、甘い飲み物大歓迎💕という方は大さじ2で作ってみてはいかがでしょうか。
ちなみに飲む時はストローで飲むことをおすすめします🌟

フレンチトースト大好き芸人なので普段からよく作るのですが、いつも適用に卵液を作ってしまいます。でも今は時間があるので美味しいフレンチトーストを作ろう!と思い話題になっていたホテルオークラさんのレシピで作ってみました。
レシピ🍴
ホテルオークラ特製フレンチトースト
※バニラエッセンスはなかったので入れませんでした。

フワフワの美味しいフレンチトーストができました🍞
食パンは厚切りでパン耳を切るのですが、どれだけ違うのか比べてみたくて、半分をパン耳ありにもう半分をパン耳なしで作ってみました。
確かにパン耳がない方がフワフワ感を存分に味わえるので、これからはパン耳なしで作りたいと思います。(切ったパン耳は美味しくいただきました)

もうひとつ気になっているフレンチトーストのレシピがあるので、こっちも早く作ってみたい!
https://macaro-ni.jp/88874

その2.お家ライブ🎤

コロナの影響でたくさんのアーティストさんのライブが延期になったり中止になっていますよね。
悲しいなぁっと思っていましたが、私にはこれがある!ということで持っているRADWIMPSさんのライブDVDでお家ライブをすることに♫

臨場感を出すためにTVとスピーカーを繋いで音質をよくしたのですが、もう最高で約2時間のライブを存分に楽しむことができました。
実際のライブのように飛び跳ねたり大声で歌ったりはしませんが、手を振って全力口パクで楽しみました。(※やばい人ではありません)
欲を言うとプロジェクターに繋いで壁に映すとより楽しめると思うので、配線してプロジェクターで映せるようにしたいと思います。

3.デジタル旅行

今は旅行も行けません☓
でも大好きなYouTuberさんのVlogを見てデジタル旅行した気分になっています✈
後は、旅行へ行けるようになった時に着るお洋服や靴などをネットで探したりするのも旅の準備気分を味わえて中々高まります👗

というような感じで、「○○できない」ではなく「〇〇したいからこうやってみよう」と思うとお家時間も充実してくるんじゃないかなと思います。
今はインターネットでオンライン飲み会ができたり、好きなアーティストさんのライブが見れたり旅気分を味わえたりと恵まれた環境だと思います。
様々な企業様が本来有料サービスであるものを無料で提供してくださっているので、それも活用させていただいております。
工夫すればもっと色々な事が実現できると思うので、さらなるお家時間の充実を目指し楽しみたいと思います\(^o^)/

誰でもできるプログラミング

こんにちは。開発担当のマットです。

以前も言ったことがありますが、開発はとても楽しい仕事です。
PCに文字を打ち込むだけで、コンピュータがその指示を従って、面白いものを生み出せます。

でも、一度もプログラムを書いたことがない人は、どこから始まればいいかわからないでしょう。私も長いこと、プログラムの書き方を一切わからなくて、不思議な魔法のようでした。

それで、誰でもすぐに作れるプログラムを紹介したいと思います。

必要な準備

多くのプログラミング・プロジェクトに特殊な言語やコンパイラーのインストールが必要です。今回は、めっちゃ簡単に、ブラウザーとテキスト・エディター(メモ帳など)さえあれば、動くJavaScriptのプログラムを作ろうと思っています。

つまり、特に必要な準備はありません。

始めましょう〜

まずは、テキストエディターを開いて、「Hello」を書きましょう!
終わったら、program.html として保存しましょう!
保存先はどこでもいいです。デスクトップでも問題ありません。

HTMLファイルなので、ダブルクリックすると規定のブラウザーで開かれるでしょう。私の場合、Chromeで「Hello」が表示されます。

これはプログラム?

いや、今やったことは(とても簡単な)ウェブページの作成です。
動的な内容を出力する何かを開発しないと、「プログラム」と呼べないでしょう。

では、それを作りましょう!
現代のブラウザーは JavaScript という言語を解釈する能力を持っています。
Helloの後ろに、Javascriptのコードを書く部分を定義しましょう!これはHTMLタグというものでできます。

書き方は簡単です。
Javascriptのコード部分の開始は <script> で定義する。
Javascriptのコード部分の終了は </script> で定義する。

なお、コード部分にアラートを出す処理を入れましょう!
Javascriptでは、 alert(‘ホゲホゲ’); でできます。 

先程のファイルに以下を書きましょう〜

Hello
<script>
    alert('こんにちは!');
</script>

保存して、ブラウザーをリロードすると、アラートが表示されます!

やった!なんか動き出しましたよ!

基礎の準備ができ、初めてのスクリプトを書きましたので、面白いものを作りましょう!

スプラウティモン

せっかく、スプラウト株式会社のブログなので、スプラウティモンという、モンスター・ゲームを作りましょう!
150匹のモンスターがいて、全部集めることが目標!

150匹のモンスターの名前を決めなければならないことが面倒ので、プログラムで自動にやりましょう。こうやってします。

  1. スプラウティモンの名前のパーツを手動で決める。
  2. 名前のパーツを適当に組み合わせて、名前を作り出す。
  3. その名前をページに出力
  4. それを150回繰り返します。

よっし!目標を設定しました。まずは名前のパーツを手動で決めましょう。
プログラミングで、何かのコレクションを「配列」といいます。
名前のパーツのコレクションが必要ので、まずはpartsという配列を作りましょう。
言語によって、やり方が違いますが、Javascriptの場合は以下です。

Hello
<script>
	var parts = ['ほげ', 'ホゲ'];
</script>

「ほげ」と「ホゲ」で、あまりいい名前作れないので、「ファイヤ」とか「アイス」とかを勝手に決めて、面白さそうなリストを作りましょう。

Hello
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
</script>

これでパーツを定義しましたが、プログラムで3つをランダムに組み合わせて、スプラウティモンの名前を決めましょう。

では、ランダムなパーツを選択する方法はちょっとややこしいですが、以下となります。

parts[Math.floor(Math.random() * parts.length)];

 これを完全に理解しなくてもいいですが、「parts配列の中から、最初から、最後までの中、どれかランダムなものを返す」という意味です。

alertで出してみましょう!

Hello
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
	alert(parts[Math.floor(Math.random() * parts.length)]);
</script>

僕の場合、「メガ」が出ました。リフレッシュする度に、違う名前が出てきます。
ところで、アラートじゃなくて、直接ページに書き出す場合、「document.write」を使えます。それ使いましょう。なお、3つを組み合わせたいので、その行を3回書きましょう。

Hello
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
	document.write(parts[Math.floor(Math.random() * parts.length)]);
	document.write(parts[Math.floor(Math.random() * parts.length)]);
	document.write(parts[Math.floor(Math.random() * parts.length)]);
</script>

すると、

なんか面白いですね。
7才の息子に聞いたら、100点満点で「100点」の名前だそうです!(笑)

どうやって150回?

プログラミング言語でループを書く事ができます。
ループとは、何かの作業を繰り返す時に使うものです。
Javascript では、以下のように書きます。

for (i = 0; i < 150; i++) {
    //150回実行したいコード
}

「Hello」をもっと適切な言葉に変えて、
各スプラウティモンの名前の前に改行(HTMLで「<br />」と書く)も入れましょう!

名前のパーツを150回も定義する必要はないので、ループの外で問題ありません。

すプラウティモンのリスト!
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
	for (i = 0; i < 150; i++) {
		document.write('<br />');
		document.write(parts[Math.floor(Math.random() * parts.length)]);
		document.write(parts[Math.floor(Math.random() * parts.length)]);
		document.write(parts[Math.floor(Math.random() * parts.length)]);
	}
</script>

こうすると・・・・

できました!おめでとうございます!
プログラムを書くことに成功しました。

まとめ

今回、とても簡単なプログラムを紹介しました。
よく考えたら、重複の名前がでてくる可能性もあり、「ドロドロドロ」のような変わった名前も出力されるかもしれません(確率が低くても)。
プログラマはこういうことを考慮して、プログラムを柔軟に作らなければなりません。

とても楽しい仕事で、今後も多くのプログラムを作るチャンスを楽しみにしています。