2018年8月1日 星期三

自架臉部表情判讀服務

臉部表情判讀示範 -- 「驚訝」 請看一下 原始網站: 我把這個判讀臉部表情 (及性別) 的程式 複製回來並小改一下, 然後打包成 face_classification docker 讓大家玩。 情緒判斷還蠻有一點像的; 可是鬍子先生為什麼竟然被判斷成女性呢?

一、 試玩

以下假設你已略懂 docker

  1. 抓回我打包的 docker: docker pull ckhung/face_classification:18C 後面的 :18C 請依 最新狀況 調整。
  2. 啟動, 命名為 fc, 把服務放在 port 15984 : docker run -d --name fc -p 15984:8084 ckhung/face_classification:18C
  3. 找一張表情豐富的相片, 例如叫做 some_faces.jpg 。 可以包含不只一張臉。
  4. 把判讀結果直接畫在原圖上面。 傳回來的新的固定是 png 格式。 curl -F image=@some_faces.jpg http://localhost:15984/emo/mark > result.png
  5. 以 json 文字格式顯示判讀結果: curl -F image=@some_faces.jpg http://localhost:15984/emo/label > result.json

如果想要進去 docker 裡面探索, 可以在啟動之後, 在另外的終端機視窗這樣下: docker exec -it fc bash

二、 修改筆記

  1. 我先修改 image_emotion_gender_demo.py -- 命令列版比較好測試。 主要是叫程式去讀 FACE_CLASSIFICATION_PATH 這個環境變數來決定程式碼的位置。
  2. 原來的程式已有 flask 加上傳檔案功能, 所以不需要自己從頭寫起。 但修改程式時遇到奇怪的問題, 每次建立新的 docker, 第一次測試成功; 第二次以後就會出錯。 卡關很久後終於找到 這個問答, 發現應該是原程式忘記呼叫 keras.clear_session()。 最後採取第三個解答 (的變形), 在 src/web/faces.py 裡面的 app.run(...) 裡面加上 threaded=False。 如果你的服務需要提供給很多客戶端使用, 應該要改採第一個解答才對。
  3. 重建 docker image 時, 改以 ml-jupyter-python3 為基礎比較快, 可以略過一些套件的安裝步驟。

不求甚解工程師做到這裡就滿足了, 性別問題就不處理了, 直接收工吧。

沒有留言:

張貼留言