バナナを見つけてみよう

人間以外のものも認識してみましょう。バナナやレモンなどに反応するロボットが作れます。

Tensorflow.js

obnizのブロックプログラムではGoogleの出している機械学習ライブラリTensorflow.jsを使って物体の認識ができます。「バナナ」や「ボールペン」などの認識です。

JavaScriptでは1000種類の認識ができますが、ブロックプログラムでは身の回りにある数種類が選べるようになっています。

バナナに近づいてかぼちゃのおばけから離れる

実際にプログラムしてみましょう。
ループの中でカメラに写っているものをチェックします。
カメラに写っているのがバナナだったら前へ動かし、
ジャック・オー・ランタン(かぼちゃのおばけ)だったら後ろへ動くようにします。

どちらでもなければ止まるようにします。

<!-- Block Program Example -->
<xml xmlns="http://www.w3.org/1999/xhtml">
  <variables>
    <variable type="obniz" id="X2:3=S(hsdv0mk{aavHW">obniz</variable>
    <variable type="UIButton" id="80uQ37Yg!_RM@zbm[`cF">button</variable>
    <variable type="UIButton" id="#7$4fAkr(P%;.%JaKIy`">backbutton</variable>
    <variable type="UIButton" id="akidXEU*0XQ}VT^!o6Sp">rightbutton</variable>
    <variable type="UIButton" id="KBvD*sLV+fD7(ieEkq5x">leftbutton</variable>
    <variable type="" id="hpvY$6K[tgY$$/L_8%xc">count</variable>
    <variable type="dcmotor" id="V?6USN(jVhQ,P{82]/*M">dcmotor</variable>
    <variable type="airobotkit" id="Jk=/mw~HxfZs@VDVmFYY">airobotkit</variable>
    <variable type="led" id="!MAt1@Dsy)#f.p,K@;=%">led</variable>
  </variables>
  <block type="obniz_connect" id="Z8!^LPO*[5?q{e*57()u" x="154" y="225">
    <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
    <value name="obniz_id">
      <shadow type="text" id="XmI_$os3vVOeQ~scg106">
        <field name="TEXT">OBNIZ_ID_HERE</field>
      </shadow>
    </value>
    <next>
      <block type="obniz_parts_airobotkit_wired" id="Z|2}f3PXkYzz)24$KZ.9">
        <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
        <field name="AIRobotKit" id="Jk=/mw~HxfZs@VDVmFYY" variabletype="airobotkit">airobotkit</field>
        <next>
          <block type="obniz_ai_camera_start" id="}_Jnf^Ml:ymM4qw~6?SQ">
            <next>
              <block type="obniz_util_repeat" id="9lu9Z1ZCks18R6J`^jq{">
                <statement name="DO">
                  <block type="controls_if" id="!/V})r$xUelMg[uMK;8V">
                    <mutation elseif="1" else="1"></mutation>
                    <value name="IF0">
                      <shadow type="logic_boolean" id="~/Y]V0sB63NH2A2~}:!]">
                        <field name="BOOL">TRUE</field>
                      </shadow>
                      <block type="obniz_ai_classify" id="{bug.It,@;!EA{5#(6q(">
                        <field name="text">banana</field>
                      </block>
                    </value>
                    <statement name="DO0">
                      <block type="obniz_parts_airobotkit_move" id="`B7Z)n*jzTK*6FzYC~2p">
                        <field name="AIRobotKit" id="Jk=/mw~HxfZs@VDVmFYY" variabletype="airobotkit">airobotkit</field>
                        <field name="flag">forward</field>
                      </block>
                    </statement>
                    <value name="IF1">
                      <block type="obniz_ai_classify" id="~vt,MPg[OXot+LLOiq@2">
                        <field name="text">jack-o</field>
                      </block>
                    </value>
                    <statement name="DO1">
                      <block type="obniz_parts_airobotkit_move" id=":{qU7Bp_GApU?y+qRqbE">
                        <field name="AIRobotKit" id="Jk=/mw~HxfZs@VDVmFYY" variabletype="airobotkit">airobotkit</field>
                        <field name="flag">back</field>
                      </block>
                    </statement>
                    <statement name="ELSE">
                      <block type="obniz_parts_airobotkit_stop" id="GX@x*CB7znMZ;)MLNky]">
                        <field name="AIRobotKit" id="Jk=/mw~HxfZs@VDVmFYY" variabletype="airobotkit">airobotkit</field>
                      </block>
                    </statement>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>

これを動かし、ロボットにバナナを見せれば近づいてきて、かぼちゃおばけを見せれば離れていきます。

JavaScript

今回使用しているTensorflow.jsのモデルはモバイルネットになります。

https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md

JavaScriptで使えばより多くの(1000種類)の識別ができます。

識別できるもののリストは

http://image-net.org/challenges/LSVRC/2012/browse-synsets

https://github.com/starpentagon/python_scripts/blob/master/dataset/ILSVRC2012_class_name/ILSVRC2012_class_name.csv

などが参考になります。



Next : Give curiosity

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us