Julia言語で奏でる詩

80億分の1のあなたへ
 

Julia言語で顔認識APIを使用してみる

カテゴリー: API, Google, julia言語, Microsoft, 顔認識


今回はMicrosoftとGoogleの画像認識APIのうち,顔認識を使用して見たいと思います.
LINE Botを作成しており,面白いBotを作ってみたいと思ったので顔認識を導入してみようと思いました.
おそらく実際には導入するのは性年代,感情分析のあるMicrosoftになりそうです.
また,各サービスの使用方法は他のサイトの説明にお任せします.

Google Vision API

GCPにアクセスしてVision APIを有効にして認証キーを取得します.

using HTTP
using JSON
using Base64

url = "https://vision.googleapis.com/v1/images:annotate?key=*** 取得した認証キー ***"
headers = Dict("Content-Type" => "application/json;charset=UTF-8")

# ローカルにあるファイルを判定する場合はbase64でエンコードする必要がある
r = open("test.jpg", "r")
r_base64encode = Base64.base64encode(r)

# "features"の部分を変更することで顔認識以外のもできる
body = Dict(
     "requests" =>[ Dict(
          "image" => Dict(
              "content" => r_base64encode
          )
          ,"features" => [ Dict(
              "type" =>  "FACE_DETECTION",
              "maxResults" => 10
          )]
     )]
)

HTTP.request("POST", url, headers  , JSON.json(body) )

Microsoft Azure Face API

AzureにログインをしてFaceAPIを有効にして認証キーを取得します.
MicrosoftのFaceAPIは基本的にサーバーにある画像しか判定できないようです.

using HTTP
using JSON

# POSTするURL.パラメータの指定でresponseの内容をしていできる
url = "https://face-api-20210814-2.cognitiveservices.azure.com/face/v1.0/detect?detectionModel=detection_01&returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=age,gender,smile,facialHair,glasses,emotion,hair,makeup,accessories,blur,exposure,noise"
# 画像判定する画像のURL
imgUrl = "https://upload.wikimedia.org/wikipedia/commons/c/c3/RH_Louise_Lillian_Gish.jpg"

headers = Dict("Content-Type" => "application/json;charset=UTF-8"
    ,  "Ocp-Apim-Subscription-Key" => " *** 事前に取得している認証キー *** ")

data = Dict("url" => imgPath)
# Face APIにPOSTでRequest
HTTP.request("POST", url, headers, JSON.json(data))

以下がResponse(JSON形式)のサンプルです.
性年代や感情の項目があることが確認できます.

[{
  "faceId":"dc8ece5f-ef86-4eae-9140-0c169a469de5"
  ,"faceRectangle":{"top":131,"left":177,"width":162,"height":162}
  ,"faceAttributes":{"smile":0.001
    ,"headPose":{"pitch":-5.7,"roll":-9.1,"yaw":-34.1}
    ,"gender":"female","age":23.0
    ,"facialHair":{"moustache":0.0,"beard":0.0,"sideburns":0.0}
    ,"glasses":"NoGlasses"
    ,"emotion”: {“anger":0.0,"contempt":0.0,"disgust":0.0,"fear":0.0,"happiness":0.001,"neutral":0.987,"sadness":0.001,"surprise":0.01}
    ,"blur":{"blurLevel":"low","value":0.06}
    ,"exposure":{"exposureLevel":"goodExposure","value":0.67}
    ,"noise":{"noiseLevel":"low","value":0.0}
    ,"makeup":{"eyeMakeup":true,"lipMakeup":true}
    ,"accessories":[]
    ,"occlusion":{"foreheadOccluded":false,"eyeOccluded":false,"mouthOccluded":false}
    ,"hair":{"bald":0.01,"invisible":false
      ,"hairColor":[{"color":"brown","confidence":1.0}
        ,{"color":"gray","confidence":0.53}
        ,{"color":"black","confidence":0.51}
        ,{"color":"blond","confidence":0.13}
        ,{"color":"red","confidence":0.13}
        ,{"color":"other","confidence":0.02}
        ,{"color":"white","confidence":0.0}
      ]}
  }
}]

終わりに

少々雑ですみません.形式に沿ってRequestを投げるだけだと思いますので,詳細な説明は公式ドキュメントにお任せします.ご参考までに以下がMicrosoft Azure Face APIを組み込んだLINE Botになります.

画像に alt 属性が指定されていません。ファイル名: ser2037t.png