《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.4.Elasticsearch和Python构建面部识别系统(上) https://developer.aliyun.com/article/1225806
从图像中检测和编码面部信息
使用 face_recognition 库,我们可以从图像中检测人脸,并将人脸特征转换为 128 维向量。
为此,我们创建一个叫做 getVectorFromPicture.py:
getVectorFromPicture.py
import face_recognition import numpy as np import sys import os from pathlib import Path from elasticsearch import Elasticsearch es = Elasticsearch([{'host':'localhost','port':9200}]) cwd = os.getcwd() print("cwd: " + cwd)
# Get the images directory rootdir = cwd + "/images" print("rootdir: " + rootdir) for subdir, dirs, files in os.walk(rootdir): for file in files: print(os.path.join(subdir, file)) file_path = os.path.join(subdir, file) image = face_recognition.load_image_file(file_path) # detect the faces from the images face_locations = face_recognition.face_locations(image) # encode the 128-dimension face encoding for each face in the image face_encodings = face_recognition.face_encodings(image, face_locations) # Display the 128-dimension for each face detected for face_encoding in face_encodings: print("Face found ==> ", face_encoding.tolist()) print("name: " + Path(file_path).stem) name = Path(file_path).stem face_encoding = face_encoding.tolist() # format a dictionary to be indexed e = { "face_name": name, "face_encoding": face_encoding } res = es.index(index = 'faces', doc_type ='_doc', body = e)
首先,我们需要声明的是:你需要修改上面的 Elasticsearch 的地址,如果你的 Elasticsearch不是运行于 localhost:9200。上面的代码非常之简单。它把当前目录下的子目录 images 下的所有文件都扫描一遍,并针对每个文件进行编码。我们使用 Python client API 接口把数据导入到 Elasticsearch 中去。在我们的 images 文件夹中,有四个文件。
在导入数据之前,我们需要在 Kibana 中创建一个叫做 faces 的索引:
PUT faces { "mappings": { PUT faces { "mappings": {
让我们执行 getVectorFromPicture.py 以获取 Elastic 创始人图像的面部特征表示。
python3 getVectorFromPicture.py
现在,我们可以将面部特征表示存储到 Elasticsearch 中。
我们可以在 Elasticsearch 中看到四个文档:
GET faces/_count "count" : 4, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 } }
我们也可以查看 faces 索引的文档:
GET faces/_search
《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.4.Elasticsearch和Python构建面部识别系统(下) https://developer.aliyun.com/article/1225804