大海で生きたいマンのブログ

大海で生きたいな〜と思い、行動したことを残していくブログ

Arduino触って、Railsで無理やり動かしたり、その他いろいろ遊んだ話

Web×IoTメイカーズに参加してきた

インフルから完全復活したibukiです。
この土日、Web×IoTメイカーズの研修に参加したので、そこでやったいろいろを残していきます。

まず二日間...

非常に楽しかった!!今までやるやる詐欺を決めていたArduinoを初めて触ることが出来て、IoTプログラミングの学習の第一歩を踏み出せた気がします!!!
安定のLチカや、スイッチでポチポチしたり、温度センサーで室内の温度を測定、Slackの指定したチャンネルに室内温度を通知、光センサーで光測定したりとか、自由気ままに遊ばせていただきました。笑

基本的にNode.jsで書いて動かす感じだったので、これから真面目にちゃんとJavascript勉強したいなーとも思いましたね。

参考記事

・JavaScriptでArduinoをコントロール ― 第1回 Lチカ(LEDチカチカ)させてみよう!
・JavaScriptとArduinoではじめるIoT入門 〜Johnny-Fiveで温度センサーを使ってみる〜
・JavaScriptでArduinoをコントロール ― 第2回 スイッチ・センサーからの入力値を取得しよう!
・Node.jsで光センサー(LLS05-A)/CdSセル(GL5528)の値を読み取る

RailsでNode.js力づくで呼び出してArduino呼び出してLチカ

タイトルを見ると、は?って思う人も多いのではないでしょうか。それぐらい鬼畜なことをしてみました。笑

このメイカーズの研修は結構自由気ままにやっちゃって〜みたいな雰囲気で、時間が余ったのもあって試しにしてみました。

以下がcontrollerのコード

class LedlightController < ApplicationController
  require 'open3'
  
  def index
  end

  def create
    argv = params[:light]
    Open3.capture3("node arduino.js #{argv}")
  end
end

そして以下がviewのコード

<h2>LEDのON/OFF</h2>
<%= form_tag("/tempreture/create") do %>
<button type="submit" value="ON" name="light">ON</button>
<button type="submit" value="OFF" name="light">OFF</button>
<% end %>

最後にこれがNodeのコード

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  if(process.argv[2] === "ON"){
  (new five.Led(13)).on();
  }else{
  (new five.Led(13)).off();
  }
});

これでどうなるのか。

結論から言うと一応動きました。一応。
ただこれだとcapture3で無理やりnode arduino.jsっていう外部コマンド実行してなんとか動かしているって感じなので、毎度ON/OFFさせるたびにNode実行しなくちゃならないので、最初のチカチカが不可避なんですね。

そもそもこれRailsで動かす必要まったくないんだよなー。この後実際にNode.jsとHTML単体ずつで動いたし...
とは言え、Railsもまだまだ初心者なので、他にもっといいやり方があるのかも...? 知っている方ぜひ教えてください。笑

この後もNodeとHTMLでWebから色指定してLED光らせたりとかもして本当に楽しかったですね。
また、1ヶ月後にはハッカソンもあるので、Arduinoもっと勉強しないとなー。

とりあえず今後やることとしては
・引き続きRuby,Railsスキルアップ
・Laravel始めるための色々
ArduinoJavascript(主にNode.js)

って感じか。正直自分のキャパとか全く考えずにとりあえずやってみるかってスタンスなので、楽しいけどいつか潰れるのかと思うとちょっと心配。笑
まあとりあえず今はこのスタンスで勉強していきやす\(^o^)/

以上です〜読んでくださってありがとうございますm( )m

課題があったので(実質)初めてPython3でOpenCVを触ってみた

正月にDSのポケモンウルトラムーンを買ってのんびり過ごしていたら、学科の皆さんのツイートを見て
「はっ!!課題!」となったので急いで課題をやることに...
てことで、実質初めてのPython3×OpenCVを課題を通して触ったので、調べたこととかを載せてみようと思います。

とある講義の課題

課題の内容

「実写写真画像を加工してマンガ風の画像を生成するプログラム」を作成しなさい。
⇒実現に必要な機能をリストアップしてからコーディングすると良い。また、吹き出しや効果音等も好みに応じて追加して良い。できるだけカッコ良くマンガ化すること。 余力のある者は4コマ漫画にしても良い。ただし、4コマ漫画として面白くなければならない。

はい...とのことです。ギャグセンスには自信がないので、純粋に一つの画像を漫画風にしようと思いますw

今回漫画風にするのはこれ!!

f:id:ibuki0315:20180102180428j:plain:w300

はい、私の愛するpepsi。(これを写すと、高血圧だのとうるさい人達がいるのですがそんなのは気にしない。)

これを漫画風にするにあたり、Python3OpenCVを使うことにしました。手っ取り早く。
いつもならこの講義の課題はJavaでゴリゴリ書くのですが、今回はササっとやりたいのと、前期の実験3の画像処理班ではすごく中途半端に触ってしかいなかったので、やることにしました。
備忘録として、今回新しく学んだことを載せていきやす。

参考記事

・【Python/OpenCV】写真・画像を漫画風に加工
・【画像処理】写真を漫画風に加工する原理・仕組み

cvtColor

漫画風にするにあたってまずは、入力画像とスクリーン画像をグレースケール変換しないといけなかったので、OpenCVのcvtColorメソッドを使いました。

gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

こんな感じで。引数に入力画像の変数と、cv2.COLOR_BGR2GRAYを与えればグレースケール変換ができるというメソッド。

resize

次に、入力画像とスクリーン画像の大きさを統一する必要があるので、OpenCVのresizeメソッドを使いました。

screen = cv2.resize(screen,(gray.shape[1],gray.shape[0]))

今回はこのように。スクリーン画像の変数と入力画像をグレースケール変換したgrayの横幅と縦幅の値を渡すことで、スクリーン画像の大きさを入力画像に合わせた。

Canny

次に、漫画風にしていくために、輪郭を検出する必要があるので、ここでもOpenCVのメソッド、Cannyメソッドを使いました。

edge = 255 - cv2.Canny(gray, 80, 120)

こんな感じで。引数にそれぞれ、入力画像、最小閾値、最大閾値を与えてエッジ検出をするメソッド。今回は入力画像にグレースケール変換した画像の変数、最小閾値、最大閾値をそれぞれ80、120にしてエッジ検出。
しかし、これでは真っ黒に輪郭が検出された画像のままなので、色を反転するために、画素値255の白から差し引く処理を追加で行っている。

bitwise_and

最後に,bitwise_andメソッド。このメソッドを使う前に、入力画像を白、黒、灰色の三値化を行った前提で。 以下のように用いた。

cv2.bitwise_and(gray, edge)

引数に配列をそれぞれ与え、ピクセル毎に論理積処理を行うメソッド。今回は、三値化をした画像grayとエッジ検出をして白ベースに反転させた画像edgeを引数に与えて、論理積を取る。これで目的の漫画風な画像にしている。

結果としてはこんな感じ。 f:id:ibuki0315:20180102185557j:plain:w300

最小閾値と最大閾値の間の値を持つところ(灰色の部分)を最初は、スクリーン画像に置き換えてたんだけど、なんか嫌だったので結局スクリーンなしの画像のほうが良さげ。ただもう少しその部分は工夫ができればよかったかも。
とりあえずこんな感じで、楽しく課題ができた一日でした〜。

Ryukyufrogsを終えて...

初めまして!この度、ブログを開設してみましたibukiです!!!

ブログを始めたきっかけとしては、この一年を通して、自分をアウトプットしていくことがどれだけ大切であるかを学んだので、今年やり残したこととして、今日ブログを始めてみようと決めました!! 後は、来年から、自分の夢に向けて、今まで以上に勉強するので、その備忘録も兼ねてこのブログに残していけたらなと思っています!

さて、タイトルにもあるように、今年を振り返ったとき、真っ先に思い浮かぶのが、Ryukyufrogs。 そして、昨日。Ryukyufrogs9期生として全員が集まり、活動することがついに終わってしまいました。 (半年間、自分たちの活動を支援してくださった協賛企業様の訪問という大事な活動もあるのですが、それは全員揃ってでの活動ではないので...)

昨日は、来年をそれぞれが望む一年にするという意味を込めた「望年会」もあり、OB,OGの皆さんや事務局の方々とお話をさせていただきました。 多くの人と話して思ったことが、やっぱりRyukyufrogsはとてもいい取り組みであり、そんな機会を得られたのが今後を生きる上で、自分の大きな財産になったのだと実感しました。

あとはやっぱりOB,OGの皆さんが輝いているということ。 中学生、高校生、大学生、社会人。取り組んでいることも違うけど、それでも自分のしたいことをして、常に何かしらの行動をしていて毎日を過ごしていることを聞いて、このような場に参加できて幸せだなと思う中で、「自分ももっと動かねば、止まったらもうそこで終わりだ。止まりたくない。」と強く思いました...!

frogs現役生として活動が終わり、来年は記念すべき10期生という初の後輩を持つことになるので、昨日お会いしたOB,OG生の皆さんのように、何か残していけるようなfrogsOB生になれるよう来年は動いていこうと思います!

こんな感じで、拙い文章ではありますが、発信していけたらと思います:)

来年も宜しくお願い致します!!では良いお年を〜