🐱

AIにペットの餌やりを任せてみた!

2025/01/22に公開

AIにペットの餌やりを任せてみた!

皆さん、こんにちは!

今回は、我が家の愛猫の食事をもっと快適にするために、ある実験的な試みを行ってみました。その結果をレポートとしてお届けしたいと思います!

愛猫の食事事情

我が家の猫ちゃんは、いつも自動給餌器でご飯を食べています。自動給餌器は、スケジュールを設定できるので、決まった時間に餌をあげることができて便利です。

でも、猫ちゃんの食欲って毎日同じじゃないです。ある日はたくさん食べてくれるけど、次の日はちょっと少なめだったり… なので、自動給餌器を使っているとはいえ、餌の残量を気にしながら、手動で調整する必要がありました。

そこで、「猫ちゃんの食欲に合わせて、自動で餌の量を調整してくれるシステムを作れないかな?」と考えたのが今回のプロジェクトの始まりです。

プロジェクト始動

アイデア

考えたのは、定期的に給餌器の中の餌の量をチェックして、少なくなったら自動で餌を補充するシステムです。

実現方法

まず、使わなくなったAndroidスマホを給餌器の上に設置し、カメラで餌皿を撮影できるようにしました。そして、以下の2つの方法を試してみました。

初めての試み:スマホで餌の量を検知

最初は、餌の色(茶色)を基準に、餌皿に占める餌の割合を計算して量を判断する方法を試しました。

// Process image and return food level (0.0 to 1.0)
fun processFoodImage(image: ImageProxy): Float {
    // ...
    var foodPixels = 0
    var totalPixels = 0

    // Scan ROI(Region of Interest) for food-colored pixels
    for (x in (roiLeft.toInt() until (roiLeft + roiWidth).toInt())) {
        for (y in (roiTop.toInt() until (roiTop + roiHeight).toInt())) {
            val pixel = bitmap.getPixel(x, y)
            if (isPixelFood(pixel)) {
                foodPixels++
            }
            totalPixels++
        }
    }

    return if (totalPixels > 0) {
        min(1.0f, max(0.0f, foodPixels.toFloat() / totalPixels.toFloat() * 1.5f))
    } else {
        0.0f
    }
}

// Check if a pixel color matches food color range
private fun isPixelFood(pixel: Int): Boolean {
    val red = Color.red(pixel)
    val green = Color.green(pixel)
    val blue = Color.blue(pixel)
    
    return red in Color.red(MIN_FOOD_COLOR)..Color.red(MAX_FOOD_COLOR) &&
            green in Color.green(MIN_FOOD_COLOR)..Color.green(MAX_FOOD_COLOR) &&
            blue in Color.blue(MIN_FOOD_COLOR)..Color.blue(MAX_FOOD_COLOR)
}

しかし、実際にやってみると、この方法はうまくいきませんでした…

  • カメラの画像の色は、照明や角度、周りの環境によって大きく変化してしまうため、正確な判断が難しかった
  • 餌を検知する範囲を自動で設定することができず、スマホや餌皿の位置が少しでもずれると、設定をやり直す必要がありました

画像処理の知識が乏しい私は、ChatGPTに相談しながら色々試してみましたが、結局うまくいかず…

2度目の挑戦:AIに判断を任せる!

そこで、AIに餌の量を判断してもらうことを思いつきました。AIなら、色の問題を解決できるだけでなく、様々な環境にも自動で対応してくれるはず!

どのAIを使う?

自分でモデルを学習させるのも面白そうでしたが、今回は週末の2日間で完成させることを目標にしていたので、Gemini API を使うことにしました。

なぜGeminiを選んだのか?

理由は簡単。Geminiの無料枠が、このプロジェクトにピッタリだったからです。

15 RPM(リクエスト / 分)
100 万 TPM(1 分あたりのトークン数)
1,500 RPD(1 日あたりのリクエスト数)

このプロジェクトでは 5 分に 1 回のリクエストで十分であり、この制限内で余裕で運用できます。

具体的な実装

大まかな流れは以下の通りです。

  1. 初期設定で、スマホのカメラ映像を表示し、餌皿が完全に映るように位置を調整します。
  2. 5分ごとに写真を撮影し、Geminiに送信して解析してもらいます。Geminiが「餌が必要」と判断したらtrue、「必要ない」と判断したらfalseを返します。
  3. 給餌器の手動給餌機能をAPIで操作し、Geminiの判断結果に基づいて餌をあげます。

完成したアプリはこんな感じです!

カメラ位置調整画面 稼働中画面(デモ用に検知間隔を5秒に設定しています)

実際に動作している様子を動画でご覧ください!(デモ用に検知間隔を5秒に設定しています)

https://youtube.com/shorts/GOXrx3IkmWc?si=wkygHw5k9X3KnQ38

結果はいかに…?

3日間のテスト運用を行った結果…なんと、 驚くほど順調でした!

心配していた「朝起きたら餌が溢れてる!」なんて事態も一度も起こらず (笑)

途中で何度かプロンプトを調整しましたが、AIが餌の残量を判断してくれるおかげで、照明や角度が変わっても問題なく動作してくれました。

まとめ

今回は、AIを活用したペットの自動給餌システムを作ってみました。

AIの進化には本当に驚かされますね!これからも、AIを使って生活を便利にしていきたいと思います。

リポジトリはこちら↓
https://github.com/dacer/AIFeeder

Progate Tech Blog

Discussion