影像識別垃圾分類app的製作

alex2wong發表於2019-07-01

隨著6月結束,7月開始,最近上海最火的話題是垃圾分類無疑了。。上海人民是每天早晚倆小時定時定點扔垃圾。

乾溼垃圾要分開,把溼垃圾從垃圾袋裡倒進桶裡,再把垃圾袋扔進幹垃圾桶 ?

龍蝦?殼是幹垃圾,龍蝦?肉是溼垃圾,請你分開扔,謝謝?

豬?能吃的是溼垃圾,不能吃的是幹垃圾,吃了會死的是有毒垃圾,賣了能買豬?的是可回收垃圾

佩琦識垃圾

看完是不是要崩潰了?!別擔心,本人週末花一下午精心製作的看圖識垃圾app,主要依賴 tensorflow coco-ssd 來識別照片中的多物體,然後找了個不知名的api,返回垃圾的分類。例如:

screenshot

製作過程簡述

首先,網上已經有很多可以輸入文字查詢垃圾分類的網站了,我靈光一閃:要是可以直接通過影像垃圾分類豈不更好。然後找到了tensorflow.js 的官方指南:

<!-- Load TensorFlow.js. This is required to use coco-ssd model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script>
<!-- Load the coco-ssd model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/coco-ssd"> </script>
<img id="img" src="cat.jpg"/>
<script>
  // Notice there is no 'import' statement. 'cocoSsd' and 'tf' is
  // available on the index-page because of the script tag above.

  const img = document.getElementById('img');

  // Load the model. 在瀏覽器裡fetch和載入模型到記憶體可能要花1分鐘以上
  cocoSsd.load().then(model => {
    // detect objects in the image.
    model.detect(img).then(predictions => {
      console.log('Predictions: ', predictions);
    });
  });
</script>

複製程式碼

可見,Google tensorflow 已經把常用的機器學習模型做到開箱即用的水平,非常方便。當然,這個多物體檢測的函式返回的是個陣列,包含了物件在圖中的bbox,而且裡面的分類標籤都是英文的:

[{
  bbox: [x, y, width, height],
  class: "person",
  score: 0.8380282521247864
}, {
  bbox: [x, y, width, height],
  class: "kite",
  score: 0.74644153267145157
}]
複製程式碼

那麼問題來了:網上的垃圾分類api 都是要求輸入中文的!!我第一時間想到了 Bing Translate API 把英文翻譯成中文再去查詢分類。所以又去申請了個Azure 的免費賬號,還好我有master card,付了一美金才搞定。具體的可以參考最後的官方文件連結

經過一頓折騰,終於搞定,就是識別率很低。畢竟沒有專門訓練垃圾分類的模型,只是用現成的物體檢測模型。

所以有很多搞笑的結果 ?:

哭笑不得

線上體驗

建議用電腦線上體驗地址,載入模型就得花一分鐘:

感興趣的可以看github 專案地址

也歡迎掃碼體驗:

二維碼

參考資料

tensorflowjs-models

Bing 翻譯官方文件

Bing 翻譯官方例子

相關文章