翼度科技»论坛 编程开发 python 查看内容

Openface搭建(图片对比)

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
注:之前搭建的windows失败,因为最终发现openface开源代码中的torch_neural_net.py的某一路径并不是windows的文件路径,所以直接改用最简便的docker使用。

实现需求目标:

实现两张照片对人脸进行比对判断是否为同一个人
openface环境搭建步骤

安装docker

docker自动化安装

官方的一键安装方式:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
国内 daocloud一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
Docker手动安装

待补充~~~~~
Docker启动

启动Docker的命令:
sudo systemctl start docker
拉取openface镜像

拉取openface镜像命令

docker pull bamos/openface
注:应为openface国内镜像拉去慢,可使用该方式解决
利用阿里云方式解决docker拉取出现的Client.Timeout exceeded while awaiting headers的问题
查询镜像命令

docker images

启动镜像

docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
查询容器

docker ps

进入容器

sudo docker attach id or name (填写自己的容器id或者name)
容器内操作:

进入 /root/openface/demos
cd  /root/openface/demos
compare.py便是两个图片对比算法
利用宿主机原有的文件cp到docker的命令

docker cp 宿主的文件地址   容器id:/root/openface/目标文件夹
图片进行对比

python compare.py ./images/xxx.jpg  ./images/xxx.jpg

因为两个照片相同,差别是0 ,阈值大概是0.5 大于标识不同的人, 小于0.5标识是同一个人。
代码添加

应为目标需求是写个接口实现上传两张图片进行对比判断所以添加以下python代码在openface的demos文件夹下
[code]from flask import Flask, request, jsonifyfrom io import BytesIOimport numpy as npimport cv2import osimport openfaceapp = Flask(__name__)fileDir = os.path.dirname(os.path.realpath(__file__))modelDir = os.path.join(fileDir, '..', 'models')dlibModelDir = os.path.join(modelDir, 'dlib')openfaceModelDir = os.path.join(modelDir, 'openface')align = openface.AlignDlib(os.path.join(dlibModelDir, "shape_predictor_68_face_landmarks.dat"))net = openface.TorchNeuralNet(os.path.join(openfaceModelDir, 'nn4.small2.v1.t7'), 96)def getRep(image_bytes):    bgrImg = cv2.imdecode(np.frombuffer(image_bytes.read(), np.uint8), cv2.IMREAD_COLOR)    rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB)    bb = align.getLargestFaceBoundingBox(rgbImg)    alignedFace = align.align(96, rgbImg, bb, landmarkIndices=openface.AlignDlib.OUTER_EYES_AND_NOSE)    rep = net.forward(alignedFace)    return rep@app.route('/compare_images', methods=['POST'])def compare_images():    try:        image1 = request.files['image1']        image2 = request.files['image2']        rep1 = getRep(BytesIO(image1.read()))        rep2 = getRep(BytesIO(image2.read()))        # distance = np.linalg.norm(rep1 - rep2)        distance = np.dot(rep1 - rep2, rep1 - rep2)        result = {            # 'distance': round(float(distance), 3),            # 'distance': float(distance),            'distance': "{:.2f}".format(distance),            'result': 'Pass' if distance

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具