起初使用yolov11和deepface效果不太理想,后来使用chatGPT得到insightface效果很好,得到以下测试代码 分享。
import os
import cv2
import numpy as np
import insightface
import base64
from flask import Flask, request, jsonify
from werkzeug.utils import secure_filename
import json
from flask_cors import CORS
# 读取配置文件
with open("config.json", "r") as config_file:
config = json.load(config_file)
# 提取配置参数
MODELS = config["models"]
FACE_CONFIDENCE_THRESHOLD = config["face_confidence_threshold"]
MIN_FACE_SIZE = config["min_face_size"]
SERVER_CONFIG = config["server"]
# 初始化 Flask 服务器
app = Flask(__name__)
CORS(app)
app.config['UPLOAD_FOLDER'] = 'uploads'
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
# 加载 InsightFace 模型
model = insightface.app.FaceAnalysis(name='buffalo_l')
model.prepare(ctx_id=-1) # 使用 CPU,若有 GPU 可改为 ctx_id=0
def decode_base64_image(base64_string):
try:
if "data:image" in base64_string:
encoded_data = base64_string.split(",")[1]
else:
encoded_data = base64_string
decoded_data = base64.b64decode(encoded_data)
np_arr = np.frombuffer(decoded_data, np.uint8)
img = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
return img
except Exception as e:
return None
@app.route('/detect', methods=['POST'])
def detect():
if 'image_type' in request.form and request.form['image_type'] == 'BASE64':
img = decode_base64_image(request.form['image'])
else:
file = request.files['image']
filename = secure_filename(file.filename)
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)
img = cv2.imread(filepath)
os.remove(filepath)
if img is None:
return jsonify({'error': 'Invalid image file'}), 400
# 进行人脸检测
faces = model.get(img)
results = []
for face in faces:
gender = 'Male' if face.gender == 1 else 'Female'
results.append({'gender': gender, 'bbox': face.bbox.astype(int).tolist()})
return jsonify({'faces': results})
if __name__ == '__main__':
app.run(
host=SERVER_CONFIG["host"],
port=SERVER_CONFIG["port"],
debug=SERVER_CONFIG["debug"]
)
声明:本站部分资源搜集自网络,相关版权归版权持有人所有,如有侵权,请联络我们,本站会尽快删除。