鱒身(Masu_mi)のブログ

知った事をメモする場所。

Gojiで顔認識ツールを作った

Go言語でWebアプリケーションを一通り実装してみたくなった。 試しにWebベースの顔認識ツール(face_detector)を作った。

実装した機能

  • アップロード用コンパネ
  • ファイルアップロード機能
  • 顔認識機能
  • システムテスト(net/http/httptest)

実装中につまづいた事

アップロードされいたファイルをhttp.Request.FormFile で読み取れなかった。

パケットャプチャしたらBody本文をブラウザが送信していない事に気づいた。 調べ直したところファイルをアップロードする際にはform タグで enctype=”multipart/form-data” が必要だよって記述を見つけられて解決。

通信経路・実行パス上のどこまでが正しいかを確認するのは大事だと改めて思ったのと少し離れたらもう、HTMLわかりません、になってた。

$ tcpdump -Zmasumi -A -i lo0 port 8000
22:36:40.390422 IP6 localhost.59782 > localhost.irdmi: Flags [P.], seq 400:953, ack 326, win 12733, options [nop,nop,TS val 1156481255 ecr 1156455816], length 553
.@...................................@..1b...a..1..Q.....
D...D...POST /face_detect HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Content-Length: 15
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8000/face_detect
Accept-Encoding: gzip, deflate
Accept-Language: ja,en-US;q=0.8,en;q=0.6

body=images.jpg
22:36:40.390460 IP6 localhost.irdmi > localhost.59782: Flags [.], ack 953, win 12714, options [nop,nop,TS val 1156481255 ecr 1156481255], length 0

//*

画面キャプチャ

ファイルアップロードする流れは下な感じ。対象はlennaさん

アップロードツール画面 アップロードファイル アップロード前 アップロード後

最低限の機能は問題なく動いてよかった。これからアップロード上限や認証機能を付けたりオブジェクトストレージ対応・メタデータ保存など機能追加して遊びたい。