前回、ラズパイカメラで水槽を定点撮影し、HPで自動更新しているお話をしました。
撮影した写真。何かに使いたいと思い、写真内に写っているエビの数をPython+OpenCVを組み合わせてカウントしてみることにしました。
※流行りのDeepな画像認識ではないのであしからず。
なんで、カウントすんの?
正直、今のところあまり意味はないです。単純に面白そうだったのと前々から画像認識をやってみたかったのが理由です。あと、飲み会等で見せるとエンジニアへのウケが抜群。
カウントした結果の使い道を考える中で、面白い情報を見つけました。
レッドビーシュリンプが木の影に隠れて出てこないという質問がなされていました。回答の要約は以下の通り。
- 水がまだしっかり出来ていないとBeeは隠れっぱなしで出てきません。
- 健常な状態であれば、四六時中あちこちでツマツマしている姿が見られます。
つまり、定点写真に映り込むエビは元気なエビということになります。そのエビ数を記録すれば飼育環境を紐づけて客観的な評価ができるのでは…?と考えてます。
まぁ、その辺は今後の検討課題ということで。
どうやってエビを認識させる?
今回はOpenCVを使って画像認識を行いました。OpenCVについての説明は検索すれば山ほど情報がでてきますので割愛。
さて、エビをカウントするには、エビの輪郭を捉える必要があります。はじめはグレースケール⇒二値化⇒輪郭抽出をやってみたんですが、エビの輪郭を上手くとらえることができませんでした。
今回、カウント対象となるレッドビーシュリンプは個体差がありますが基本的には頭部に赤色があります。

食事中のレッドビーシュリンプ達
水槽内を見渡すと、レッドビーシュリンプの赤色のほかに赤色がないことに気が付きました。ここから、頭部の赤色を抽出すればエビはカウントできると気が付きました。
作成したスクリプトは以下のリンクで公開してます。”ebi-countor.py”です。
どんな処理をしてるの?
実際にどんな処理をしているか、写真を使いながら簡単に説明します。
① 定点撮影した写真です。ここから、この写真を処理してエビの数をカウントします。
② 下準備として、撮影した写真をγ補正します。これをすると後々、エビの赤色を認識しやすくなります。何となく赤色が目立っていませんか?
③次に、赤色の部分だけ抜き出し、二値化します。
④白の領域を膨張させ白い領域を大きくしノイズを消します。その後輪郭を抽出します。
⑤上で得られた輪郭をオリジナルの写真に重ねて出力します。文字とかもお好みで。
処理の流れはこんなところです。シンプル。
リアルタイムでカウントしてます
アクアリウムIOT化プロジェクトページで実際にリアルタイムでカウントしています。
上記プロジェクト専用ページで確認できますので、ぜひ見てみてください。
ライトが点灯してないとカウントできなかったり、ソイルを間違えてカウントしたりするドジっ子ですが、とりあえず動いてます。
今は精度がお察し状態ですが、今後も引き続き検討し精度を上げてきたいですね。
ちょっと嬉しいので宣伝。https://t.co/llTcMQVYLN
でうちの水槽写真をリアルタイムで自動更新して公開してるんですが、
本日、画像認識で写真内のエビをカウントすることに成功しました!ちなみに、こんな感じでカウントしてます。#python #アクアリウム #レッドビーシュリンプ pic.twitter.com/zQHGle60Rk— 産業道路 (@kumakuma918) December 13, 2018
まとめ
- エビの赤色に着目し、カウントができるようになった。
- 画像認識は面白い!他にもなにかしたい。
- エビカウンターの活用方法を考える。
以上