無料運用 LINEbotでAIの顔認識webサービスができるまで。~Develop編②~

2019/11/13

AI 開発試行

アプリケーションのスケルトンを説明します。merge_face.py、box_upload.pyアプリケーションについて、部位ごとに掲載していきます。各API等の仕様については、リンクしていきますので、そちらをご参照ください。


Develop編②

face_detect.py


import requests
# パラメータは、イメージファイルとapi_key,api_secret key
def face_detect(image,api_key,api_secret):

  # requestのURL
  url = "https://api-us.faceplusplus.com/facepp/v3/detect"

  # requestのパラメータ:api_key、api_secret key、イメージファイル、
 # オプションの返却値を指定。このスケルトンでは性別と美しさを指定
  payload = {'api_key': api_key, 'api_secret': api_secret,
             'image_base64': image, 'return_attributes': 'gender,beauty'}
  try:
      r = requests.post(url, data=payload)
      # レスポンスは、JSON形式。
      # 顔認証は、facesパラメータにリスト形式で格納される。順番はランダム
      # ディクショナリ形式に読み替える
      r = r.json()

      # 必要な項目をディクショナリ形式の単一なリストにする
      face_list = []
      for face in r["faces"]:
          faces = {}
          if "attributes" in face:
              faces["gender"] = face["attributes"]["gender"]["value"]
              faces["beauty"] = face["attributes"]["beauty"]["male_score"]
              # 並び替え用に画像上の顔のX座標の位置を代入
              faces["x_axis"] = face["face_rectangle"]["left"] 
              face_list.append(faces)

      # 左から順に並び変える
      face_list = sorted(face_list, key=lambda x:x["x_axis"]) 
      msg = ""
     # 左から順に並び変えたリストより出力したいメッセージを編集する
      for i, f in enumerate(face_list, 1):
          msg += "{}人目の情報\n".format(i)
          msg += "性別: {}\n".format(f["gender"])
          msg += "ツヤツヤ偏差値: {}\n\n".format(int(f["beauty"]))
      msg = msg.rstrip()

      if not msg:
          msg = "画像から顔データを検出できませんでした。"
      return msg

  except:
      return "サーバーの接続に失敗したか画像を正しく認識できませんでした。"


Face++

Megvii Tech III

[Python] GET・POSTリクエストによるWebデータの取得(Requestsモジュール)



face_detect_azure.py


face_detect_azure.py ※詳細説明はリンク先をご確認ください。

import http.client, urllib.request, urllib.parse, urllib.error
import json

def face_detect_azure(body,api_key,api_secret):

   # APIに送るメディアのタイプ application/octet-stream' (Local ファイル転送の場合)
   # APIキーを指定する
   headers = {
       'Content-Type': 'application/octet-stream',
       'Ocp-Apim-Subscription-Key': api_key,
   }
   # 取得したい情報について、パラメータを指定する
   # 入力した顔画像に付与されるID、顔の位置(x,y,width,height)、
   # オプションの返却値、このスケルトンでは性別と美しさを指定
   params = urllib.parse.urlencode({
       'returnFaceId': 'true',
       'aceRectangle':'true',
       'returnFaceAttributes': 'gender,smile'
   })

   
   # requestのURL,body部にイメージファイルを指定する
   # "/face/v1.0/detect?%s" の部分が接続先APIの機能を指定
   try:
       conn = http.client.HTTPSConnection(api_secret)
       conn.request("POST", "/face/v1.0/detect?%s" % params, body, headers)

       response = conn.getresponse()
       # 顔認証は、リスト形式で格納される。順番はたぶん左から
       # ディクショナリ形式に読み替える
       rs = json.loads(response.read())

       # ディクショナリ形式のリスト。メッセージと顔の位置を編集して再度リストにする。
       face_list = []
       for i, r in enumerate(rs, 1):
           rsface = {}
           msg = ""
           msg += "{}人目の情報\n".format(i)
       msg += "\n性別:"
       msg += r['faceAttributes']['gender']
       msg += "\nスマイル偏差値:"
       msg += str(int(r['faceAttributes']['smile']*100))
           rsface['msg'] = msg.rstrip()

           rsface['faceRectangle']=str(r['faceRectangle']['top'])+','+str(r['faceRectangle']['left'])+','+str(r['faceRectangle']['width'])+','+str(r['faceRectangle']['height'])                                
           face_list.append(rsface)

       if len(face_list) == 0:
           rsface = {}
           rsface['msg'] = "画像から顔データを検出できませんでした。"
           face_list.append(rsface)
       return face_list

       conn.close()

   except Exception:
       print(rs['error']['message'])
       print("サーバーの接続に失敗したか画像を正しく認識できませんでした。")


Cognitive Services: Face APIの顔検出をPythonで試してみた|Cognitive Services, Face API | | ナレコムAzureレシピ

that is it

tosd Noteについて

RSS Feed資格や仕事、サラリーマンとしての備忘録です。

このブログを検索

ブログ アーカイブ

QooQ