はじめに
こんにちは!プラットフォームエンジニア・バックエンドエンジニアビクトルです。
本記事はHRBrain Advent Calendar 2023の24日目の記事です。
明日クリスマスですね!🎄🤶
ところで。。。あなた!面接中で、緊張して、自分の表情が気になっていますか?
それとも面接官で、候補者がどんな顔をしているのか確認したいですか?
多分変な質問ですが、時々自分も気になっている。
まず、注意することを発表したいと思います。
このアプリケーションはコンセプトのPoCです。
この間 ChatGPTとWebSocketsでダイエット相談アプリを作りました。
今回GoCVとGoogle Vision APIでwebアプリを作成しましょう。
Google APIsを準備
- まず、Google Cloud Platformでサービスアカウントを作成。ロール権限を追加しなくて大丈夫です
a. APIの使いすぎが起こるかもしれないのでクオータを決定してください - Google Vision APIを有効
- サービスアカウントのJSONキーファイルをダウンロードしてアプリの環境変数設定します
export GOOGLE_APPLICATION_CREDENTIALS=/JSON/key/file
コードとライブラリと環境を設定
-
GoCVはOpenCVのラッパーです。GoCVのインストールページご覧ください
-
GitHubからリポジトリをクローンして
git clone https://github.com/ervitis/gomendan-assistant
-
Makefileのコマンドを実行するだけ
make run
GOOGLE_APPLICATION_CREDENTIALS
環境変数設定を忘れないでください
Show me the code!
WebCamと連携で顔モデルを使って自分たちの顔を取ります。
// 0はカメラIDです
webcam, err := gocv.OpenVideoCapture(0)
if err != nil {
fmt.Printf("Error capturing data from device: %v\n", err)
return
}
img := gocv.NewMat()
classifier := gocv.NewCascadeClassifier()
// 顔モデルをロード
if !classifier.Load("./data/haarcascade_frontalface_default.xml") {
fmt.Printf("Error reading file")
return
}
GoCVライブラリ作成した人からstream server
のライブラリも使います。
stream := mjpeg.NewStream()
// タイム設定は自由に
// 今回あまりリクエストを叩きたくないので500msでしました
stream.FrameInterval = 500 * time.Millisecond
顔検出
ラッパーで実装しました。
features := make([]*visionv2.Feature, 1)
features[0] = &visionv2.Feature{
MaxResults: 1,
Type: visionv2.Feature_FACE_DETECTION,
Model: "builtin/stable",
}
...
annotations, err := c.gc.BatchAnnotateImages(ctx, &visionv2.BatchAnnotateImagesRequest{
Requests: c.reqs,
})
if err != nil {
return nil, err
}
詳しくはここです。
結果は。。。
GitHubのリポジトリコードはこちらです。
参考
- GoCV: https://github.com/hybridgroup/gocv
- Google Vision API資料
最後に
もしGoCV気になりましたらこのビデオをご覧ください
株式会社HRBrainでは新しいメンバーを募集しています。
仲間になりましょう〜