LoginSignup
29
7

面談で変顔バレないようにGoogle Vision APIとGoCV使ってみた

Last updated at Posted at 2023-12-23

はじめに

こんにちは!プラットフォームエンジニア・バックエンドエンジニアビクトルです。

本記事はHRBrain Advent Calendar 2023の24日目の記事です。

明日クリスマスですね!🎄🤶

ところで。。。あなた!面接中で、緊張して、自分の表情が気になっていますか?

それとも面接官で、候補者がどんな顔をしているのか確認したいですか?

多分変な質問ですが、時々自分も気になっている。

まず、注意することを発表したいと思います。

このアプリケーションはコンセプトのPoCです。

この間 ChatGPTとWebSocketsでダイエット相談アプリを作りました。

今回GoCVとGoogle Vision APIでwebアプリを作成しましょう。

Google APIsを準備

prepare-all-apis

  1. まず、Google Cloud Platformでサービスアカウントを作成。ロール権限を追加しなくて大丈夫です
    a. APIの使いすぎが起こるかもしれないのでクオータを決定してください
  2. Google Vision APIを有効
  3. サービスアカウントのJSONキーファイルをダウンロードしてアプリの環境変数設定します
    export GOOGLE_APPLICATION_CREDENTIALS=/JSON/key/file
    

コードとライブラリと環境を設定

  1. GoCVはOpenCVのラッパーです。GoCVのインストールページご覧ください

  2. GitHubからリポジトリをクローンして

    git clone https://github.com/ervitis/gomendan-assistant
    
  3. 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気になりましたらこのビデオをご覧ください

株式会社HRBrainでは新しいメンバーを募集しています。
仲間になりましょう〜

29
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
7