(「AI課題2:AIで生菌数をカウント(2)」の続きです。)
前回はOpenCVの機能を利用したプログラムでカウントしましたが、培地の枠を消す操作やコントラスト調整などの調整は手動で行う必要がありました。
今回は、OpenCVのカウンタのアルゴリズムの前処理としてディープラーニングの学習結果を使う場合を試してみました。
(1) 学習プログラムとデータ
学習プログラム(言語 Python、テキストファイル UTF-8)
学習データ
【解説】学習データは元の培地の画像と教師データとして処理後の画像のセットとなっています。
但しファイル名BAKで始まる画像は背景のみの画像なので教師データとして全面黒画像をプログラムで作成しています。(この培地の写真はテスト用に作成したもので実際に培養したものではありません。)
学習画像の例
教師画像の例
学習済みモデル
(2) カウントプログラムと結果
カウントプログラム(言語 Python、テキストファイル UTF-8)
ディープラーニングの学習済みモデルを用いて背景や培地の縁などを処理してカウントしやすくしています。
OpevCVの機能は二値化と領域抽出を利用して、カウント値はコンソールに表示されます。
実行すると開いて元画像と調整後の画像にカウント値が描画された画像がウィンドウに表示されます。
ディープラーニングでの調整後の画像と、カウント付き画像はそれぞれ保存されます。
画像ファイルパスは以下の通りです。
入力ファイル
FILE_ORG_IMAGE = ‘data/bactcount/bctimage.jpg’ # 元の画像
出力ファイル
FILE_CNT1_IMAGE = ‘data/bactcount/cntiamge1.jpg’ # AI調整後の画像
FILE_CNT2_IMAGE = ‘data/bactcount/cntimage2.jpg’ # OpenCV調整とカウント後の画像
FILE_CNT3_IMAGE = ‘data/bactcount/cntimage3.jpg’ # 元の画像にカウント値を描画
結果の例
元画像
ディープラーニングの学習済みモデルを用いて背景や培地の縁などを処理した画像
OpenCVによるカウント
元画像にカウントを描画
カウント結果
count=132
目視で数えた場合は127だったので有効数値2桁と考えると1.3×10の何乗となり、許容される誤差範囲の結果となりました。
但し、この学習に使った培地の写真はテスト用に作成したもので実際に培養したものではないので、あくまで限られた学習の範囲での結果です。
実用的なプログラムを作成するには対象となる培地の写真を集めて学習する必要があります。
前回上げた「ディープラーニングにより解決するべき課題」のうち以下のものは何とかなりそうです。
・解像度・明るさ・コントラストの調整
・光の反射・影などの調整
・泡、ゴミのような余計なものを消去
・コロニーの大きさや色の調整
・培地の枠を消す
「コロニーの重なりの補正」については今回の学習では不十分で今後の改良が必要と思われます。
(2022/08/17 Shin Onda)