# -*- coding: UTF-8 -*-
import requests
from flask import Flask, jsonify, request, redirect
import base64
import logging
logging.basicConfig(level=logging.INFO #设置日志输出格式
, filename="log1.txt" #log日志输出的文件位置和文件名
, filemode="w" #文件的写入格式,w为重新写入文件,默认是追加
, format="%(asctime)s - %(name)s - %(levelname)-9s - %(filename)-8s : %(lineno)s line - %(message)s" #日志输出的格式
# -8表示占位符,让输出左对齐,输出长度都为8位
, datefmt="%Y-%m-%d %H:%M:%S" #时间输出的格式
)
# You can change this to any folder on your system
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
app = Flask(__name__)
class baidu_api():
def get_access_token(self, apikey, secretkey):
access_token = None
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'
host = host % (apikey, secretkey)
response = requests.get(host)
if response:
json = response.json()
access_token = json['access_token']
return access_token
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
def image_to_base64(image_path):
pic = open(image_path, "rb")
pic_base64 = base64.b64encode(pic.read())
pic.close()
return pic_base64
@app.route('/', methods=['GET', 'POST'])
def upload_image():
# Check if a valid image file was uploaded
if request.method == 'POST':
if 'file1' not in request.files:
return redirect(request.url)
file1 = request.files['file1']
file2 = request.files['file2']
if file1.filename == '' or file2.filename == '':
return redirect(request.url)
if file1 and allowed_file(file1.filename) and file2 and allowed_file(file2.filename):
# The image file seems valid! Detect faces and return the result.
return detect_faces_in_image(file1, file2)
# If no valid image file was uploaded, show the file upload form:
return '''
<!doctype html>
<title>Face比对</title>
<h1>上传两张图片以对比是否为同一人</h1>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file1">
<input type="file" name="file2">
<input type="submit" value="Upload">
</form>
'''
def detect_faces_in_image(file1, file2):
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"
file1.save(file1.filename)
file2.save(file2.filename)
img1_base64 = image_to_base64(file1.filename)
img2_base64 = image_to_base64(file2.filename)
params = []
img1_param = {"image": img1_base64.decode(), "image_type": "BASE64", "face_type": "LIVE"}
img2_param = {"image": img2_base64.decode(), "image_type": "BASE64", "face_type": "LIVE"}
params.append(img1_param)
params.append(img2_param)
# Pre-calculated face encoding of Obama generated with face_recognition.face_encodings(img)
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, json=params, headers=headers)
print(type(response))
print(response)
result_new = {'result': False}
if response:
res_json = response.json()
result = res_json['result']
if result is not None and 'score' in result:
score = int(result['score'])
logging.info('人脸对比分数:{%s}' % str(round(result['score'], 2)))
if score > 80:
result_new['result'] = True
return jsonify(result_new)
if __name__ == "__main__":
# 联系作者提供 apikey secretkey
apikey, secretkey = '', ''
access_token = baidu_api().get_access_token(apikey, secretkey)
app.run(host='0.0.0.0', port=8011)
人脸相似度对比源代码,接口文档,部署文件,前端网页文件
79 浏览量
2022-10-25
20:47:21
上传
评论
收藏 17KB GZ 举报
GeekPlusA
- 粉丝: 193
- 资源: 22
最新资源
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
- VoLTE高丢包优化指导书.xlsx
- Rust资源文件.zip
- 前后端分离实践:使用 React 和 Express 搭建完整登录注册流程
- gradle-publish-to-MavenLocal.zip
- 10份网络优化创新案例.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈