LoginSignup
0
1

More than 1 year has passed since last update.

⚡⚡PythonとHoraを使用して、非常に高速な顔認識システムを作成します⚡⚡

Posted at

WX20210730-203541.png

CVは人工知能の頂点であり、顔認識はその広範なアプリケーションとして、日常生活のあらゆる側面に登場しています。

今日、私たちはPythonhoraを使用して顔認識アプリケーションを作成しています

1. dependencyをダウンロードします

pip install -U flask numpy face_recognition Pillow horapy

2. 既存の顔datasetを埋め込む必要があります

ここで、デモの顔データベースは dataset であり、face_recognitionを使用して埋め込み、その最下層は微調整された model です。

その中で、顔認識アプリケーションのコアであるhora.HNSWIndexを初期化し、誇張された速度で隣人を検索して、最も一致する顔写真を見つけます。

# -*- coding: utf-8 -*-
import numpy as np
from horapy import HNSWIndex
import face_recognition
from os import listdir
from os.path import isfile, join
from flask import Flask, request, abort, jsonify
from PIL import Image

image2vector = dict()        # image to vector map
f = 128                      # vector dimension
index = HNSWIndex(f, "str")  # init Hora index instance
app = Flask(__name__)        # wep app instance


def img2vector():
    # encode all image into vector
    face_image_path = ""  # here write you image file path

    images = [f for f in listdir(face_image_path)
              if isfile(join(face_image_path, f))]

    for f in images:
        image = face_recognition.load_image_file(face_image_path + "/" + f)
        embedding = face_recognition.face_encodings(image)
        if embedding and len(embedding) > 0:
            image2vector[f] = embedding[0]
            index.add(embedding[0], f)

    index.build("euclidean")

3. web application

このようにして、基本データがロードされ、残りはindexを提供するだけで済みます。
今回は、比較的 flask で明確なフラスコをWeb applicationのframeworkとして選択しました。

@app.route("/match", methods=['GET'])
def image_match():
    # image match main function
    image = request.args.get('image', '')  # get request image query
    if image not in image2vector:          # if thers is not image in the map, return 404
        abort(404)
    response = list()
    for similar_image_idx in index.search(image2vector[image], 10):
        response.append({
            "image": similar_image_idx,
            "image_embedding": image2vector[similar_image_idx].tolist()
        })
    return jsonify(response)

@app.route("/search", methods=['POST'])
def image_search():
    img = Image.open(request.files['file'].stream)  # get request image query
    image = np.array(img)
    embedding = face_recognition.face_encodings(image) # encode incomming image into vector
    response = list()
    for similar_image_idx in index.search(embedding, 10):
        response.append({
            "image": similar_image_idx,
            "image_embedding": image2vector[similar_image_idx].tolist()
        })
    return jsonify(response)

if __name__ == "__main__":
    img2vector()
    app.run(debug=True)

今、私たちはbashに入ります

python app.py

私たちの顔認識アプリケーションが稼働しています
terminal で入力できます

curl  http://localhost:5000/match\?image\={your image}

見ることができます

[
{{
{{
"image""123.jpg""image_encoding":[
..。
]
}{{
"image""124.jpg""image_encoding":[
..。
]
}{{
"image""125.jpg""image_encoding":[
..。
]
}
}
]

これで顔認識アプリケーションが完成しました

詳細については、Hora をクリックしてください。

github: https://github.com/hora-search/hora
Python Library: https://github.com/hora-search/horapy
homepage: https://horasearch.com/

WX20210730-203610.png

0
1
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
0
1