こんにちは、仕事で食品検査を担当しています。
入社してまもなく半年、デジタルに関する知識はほぼ0ですが、家の遠い私が定時で帰宅するために業務の効率化ができないか模索中です。
前回の記事はこちら↓
今回もデジタルで解決できそうな課題があったのでご紹介します。
1. 取り組み背景
突然ですが、私は食べることが大好きです!笑
みなさんも毎日食べ物を食べますよね!
私は、食品の品質検査の中でも微生物検査に従事しています。
食品が衛生的に作られたか、人に危害を与える食中毒菌は存在しないかなどを調べ、みなさまに安心して食事を楽しんでもらうための仕事です。
しかし、この微生物検査、現状ほぼほぼ人力で行われています。
簡単な検査の流れをお伝えします。
一部、菌数測定のところでは自動コロニーカウンターを使用することがありますが、それ以外の工程は全て手作業、目視による確認で行われています。
特に測定や判定は、検査員の経験や技術が必要とされ、ぺーぺーの私はまだまだ力不足で役に立ちません…
こんなマンパワーで成り立っている職場ですが、デジタルの力を使って私も先輩方の役に立ちたい!
そして早く帰りたい!(笑)
そんなこんなで思いついたのが「画像認識AIによる判定」です!
熟練の技術が必要とされる工程に、画像の機械学習ができるツールを用いて、人間の代わりをしてもらおうというアイデアです。
新人、ベテラン問わず誰が担当しても同じ結果が得られますし、
現在この「判定」は2名の検査員でダブルチェックを行っていますが、AIの判定と目視の判定を照合するというフローになれば人員・時間削減にも繋がります。
というわけで、早速作ってみました!
サルモネラ判定AIモデル in TSI培地#protoout#微生物検査#TeachableMachine pic.twitter.com/mE5pXvHScG
— hosaka (@Rhosaka21) September 21, 2022
2. 使用ツール
Teachable Machine
Node-RED
Make
Google Sheets
3. 実施内容
3.1. 検査概要
今回は感染すると腹痛、下痢などを発症してしまう食中毒菌の1種、「サルモネラ」の確認試験のうち、TSIという培地の判定に取り組みました。
サルモネラや培地の説明をすると長くなってしまうので、ざっくりとしたイメージを持っていただければと思います。
この、微生物の種類によって変化する培地の色を識別して判定を行っていきます。
培地の組成や反応原理に興味のある方はこれらの記事を参考にしてください。
3.2. モデルの作成
Teachable Machineにアクセスし、「使ってみる」→「画像プロジェクト」→「標準の画像モデル」を選択します。
Classに名前をつけ、その場でWebカメラで撮影するか、保存してある画像をアップロードする、たったこれだけです!
撮影時のポイント
背景は白地にするなど、ごちゃごちゃしていない方が精度がよくなると思われます!
Class名=出てくる判定ワードは、実際の判定を紙に記入する形式ではなく、一目で結果がわかりやすいものにしています。
もう一つオススメなのが、「準備中」のClassを作ることです。
認識したいものと次の認識したいものの間に、関係ない判定ワードが出るのがスマートではなかったので、判定と判定の間用に使えるモデルも作成しました。
画像が準備できたら「トレーニング」開始です。
これでモデルが作成できます。
3.3. Node-REDでモデルをシステム化
まず、Node-REDで必要なノードを追加します。
次にTeachable Machineで、トレーニング済みのモデルをアップロードします。
ここで出てくるリンクをコピーし、Teachable Machineノードをダブルクリックし、Url欄に貼り付けます。
写真のようにノード同士をつなぎ合わせてカメラボタンを押すと、、、
見事に判定してくれました!(写真オレンジの四角の下「100%サルモネラ?H2S(+)」)
ここまでで、写真を撮ったらそれが何に該当するか判定してくれるシステムが完成しました。
3.4. Makeと連携させて、AIと人間による判定システムを構築
続いて、実際の検査実施方法に近づけるため、Class名に登録した全体の結果ではなく、目視で検査員が判定する時と同様の方法でGoogle Sheetsに記入できるようにしました。
<記入項目:斜面部(培地上部)の色、高層部(培地下部)の色、硫化水素を産生能力の有無(黒変の有無)>
Node-REDとMakeの連携
①Makeで「Custom webhook」のモジュールを追加②Addボタンを押して、Webhook nameに任意の名前をつけてSaveボタン
③Webhookで欲しい情報を自分で定義づけするため、出てきたURLを、ChromeやSafariなどの新しいタブを開き貼り付ける
④URLの後ろに「?判定するもの=結果」のような形で定義する
ここではURL?TSI=サルモネラ陰性
としています。
⑤enterを押すと「Accepted」の表示になり、MakeモジュールのURLの下部にも「Successfully determined」と表示される
⑥Node-REDの各ノードをつなげ、中身の設定をする
http requestノードのURLは「?〜」の部分消してOK
Google Sheetsの準備
4つのシートを用意しました。
Rは赤色、Yは黄色、+は黒色、ーは黒色ではないことを示します。
AI判定用のところに自動で結果が入るよう、このあとMakeの設定をします。
検査員目視判定用はプルダウン形式で入力できるようにしました。
最終結果用は、AI判定のシートと目視判定のシートの値が同じであればAI判定用のシートの結果を、違っていれば「✖️」が入るようにしします。
E列には問題がなければ何も記入されず、3つの判定項目のうち1つでも異なる点があれば再判定を要求するように関数を設定しました。
Node-REDを起動させて得た結果を、MakeのWebhookで受け取って、結果に応じた判定をGoogle Sheetsに記入します。
Makeの完成図
本当は「Search Rows」などを使ってかっこよくやりたかったのですが、わからなかったため、必殺!力任せ!笑
6つの結果ごとにフィルターをかけて、それぞれ新たな行に結果を記入させます。
フィルターと「Add a Row」モジュールの中身の例
MakeのSCHEDULINGをONにします。
準備は整いました!
いざ、Node-REDのcameraボタンで撮影!
成功です!
嬉しい!
実際の判定をするときのPC画面イメージです。
(Node-REDの画面で判定結果が見えてしまうと先入観で判定してしまう恐れがあるので、他のノードを重ねて判定文字部分隠すとよいかもしれません)
4. まとめ・今後の課題
この培地単独でしたら、現場で使えそうなところまで持っていくことができました。
しかし、実際には他の培地の結果も見て総合的に最終判断を下すため、その総合的な判定をどうさせるかという点と、Node-REDの撮影に3秒ほどかかるため、本当に時間削減できるか微妙という課題が残りました。
試作品を先輩方にみせたところ、
「すごい、こんなのできるの!?」
「近未来みたい」
「ちょっとついていけない…」
「すごく微妙な色の変化を見る必要がある他の培地もあるけどいける?」
「色の見え方は人それぞれだから、きちんと判定できるなら使えるかも」
などなど、たくさんのご意見をいただきました!
Teachable Machineの認識レベルの限界はわかりませんが、微生物試験にはたくさんの培地があります。
何度も学習させて精度をあげるのはもちろんのこと、認識できるもの、判定には使えないものをしっかり吟味して、いつか実際に使えたらなーなんてもくろんでいたりいなかったりしています。
ちなみにほぼ手作業とお伝えした微生物検査ですが、先端技術を利用している記事があったのでご紹介します。
完全自動化はなかなか難しいですが、検査室にも少しずつ技術を取り入れて、より正確で効率的な検査ができたらいいですね!
新入社員の挑戦はまだまだ続きます。
最後までお付き合いいただき、ありがとうございました!