【子供の科学2026年6月号】AIでネコを判定しよう!

 『子供の科学2026年6月号』の「AkaDakoものづくりラボ」では、2026年5月号に引き続き、JavaScriptで「自動猫じゃらしマシン」をつくりました。ただ、今の人感センサーを使う方式は、ネコだけでなく人でも反応してしまいます。

 2月号から4月号で紹介した生成AIを使ってネコの判定をしても良いのですが、生成AIを使う方法は、判定に時間がかかる上に、使用するために費用がかかったり、年齢制限の問題もあります。

 そこでここでは「COCO-SSD」を使います。これは、GoogleのTensorFlow チームが開発したAIモデルで、カメラ映像から80種類の一般的なオブジェクト(人、車、イヌ、ネコなど)を素早く認識することができます。

■プログラムを改造しよう

 今回は、ブラウザ上で簡単に機械学習を利用できる「ml5.js」 というライブラリーを使ってCOCO-SSDを利用します。以下はサンプルプログラムです。
コメントを入れたPDFは下記のボタンよりダウンロードができます。がんばって読んでみてください。

<html>
<head>
  <meta charset="UTF-8">
  <title>AIねこじゃらし</title>
  <script src="https://unpkg.com/ml5@0.12.2/dist/ml5.min.js"></script> 
  <script src="https://699.jp/src/js/akadako.js"></script>
  <style>
    video { width: 400px; border: 5px solid #fff; border-radius: 10px; }
  </style>
</head>

<body>
  <h1>ねこじゃらし(AIカメラ版)</h1>

  <div>
    <video id="myVideo" autoplay playsinline></video>
  </div>

  <script>

      async function servo(board,speed,angle,ms) {
           await board.runServoTurn(AkaDako.DigitalWrite.A1,speed,angle);
           await new Promise(r => setTimeout(r, ms));
      }

    async function main() {
      let timer = 0;
      const board = await AkaDako.connect();

      const video = document.getElementById('myVideo');
      const stream = await navigator.mediaDevices.getUserMedia({ video: true });
      video.srcObject = stream;

      await new Promise(r => {
        video.onloadedmetadata = r;
      });

      const detector = await new Promise((resolve) => {
        const d = ml5.objectDetector('cocossd', () => {
          resolve(d);
        });
      });

      setInterval(() => {
        if (timer > 0) timer--;
      }, 1000);

      while (true) {

        const results = await new Promise(r =>
          detector.detect(video, (err, res) => r(res || []))
        );

        if ( results && results.find(obj => obj.label === 'cat') ) {
          timer = 30;
        }

        if (timer > 0) {
          await servo(board,20,-60,4000);
          await servo(board,100,60,1000);
          await servo(board,100,55,200);
          await servo(board,100,60,200);
          await servo(board,100,55,200);
          await servo(board,100,60,4000);
        } else {
          await new Promise(r => setTimeout(r, 100));
        }
      }
    }
    main();
  </script>
</body>
</html>

■実験してみよう!

 マリちゃんは、「自動猫じゃらしマシン」が飼いネコのくーちゃんとマリちゃんを間違えないかどうかを実験します。ネコを飼っていない人は、スマートフォンなど別の端末でネコの画像を検索して、パソコンのカメラに見せてください。

うわっ!動いた!

じゃあ、今度はマリちゃんがカメラの前に立ってみるとどうなるかな?

人間だから反応しない。すごーい!

高松基広 著者の記事一覧

AkaDako作者。CoderDojoつくば・守谷チャンピオン。つくば市ICT教育推進アドバイザー。ティーファブワークス代表。

最新号好評発売中!

子供の科学 2026年 6月号

CTR IMG