CVは人工知能の頂点であり、顔認識はその広範なアプリケーションとして、日常生活のあらゆる側面に登場しています。
今日、私たちはPython
とhora
を使用して顔認識アプリケーションを作成しています
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/