可应用于实战的产品级人脸识别系列算法-人脸识别

本文人脸识别系列算法涵盖人脸识别(1比1、1比N)、人脸属性识别(年龄估计、性别识别)、图像质量评估(光照、清晰度、总质量分、头部姿态、口罩)等功能。

先看一下效果展示:

 1、人脸识别-1比1

人脸识别是所有人脸应用中最为广泛功能,本文人脸识别采用ResNet网络架构,训练环境为多机多卡分布式环境,训练数据经过清洗治理后规模达到千万级,误识率在千万分之一时,识别准确率达到99%以上。提供特征提取、特征比对、图像比对服务接口。

部分代码:

import os
import io
import datetime
import configparser
import json
import cv2
import logging
import logging.handlers
import numpy as np
import base64
from flask import Flask, request, jsonify, Response
from sklearn import preprocessing
from PIL import Image, ImageStat
from face_detect.sddet.sd_init import scrfd_model_init
from face_detect.face_model_rf import FaceDetectModelRF
from face_detect.face_model_sd import FaceDetectModelSD
from face_recognition.face_recognition import FaceDetectORT
from license.verLicense import is_license_check, is_license_valid
from face_detect.rflm106det.app import FaceAnalysis
from face_quality_api import getFaceQuality

config = configparser.ConfigParser()
config.read("./config/algorithmPara.ini", "utf-8")

faceEngineVersion = config.get('algorithm', 'faceEngineVersion')
faceEngineName = config.get('algorithm', 'faceEngineName')
face_detect_model_flag = config.get('algorithm', 'face_detect_model_flag')
getFeatureErrRotFlag = config.getboolean('algorithm', 'getFeatureErrRotFlag')
angleRotFlag = config.getboolean('algorithm', 'angleRotFlag')
imgAug = config.getboolean('algorithm', 'imgAug')
brightnessLowThreshold = config.getfloat('algorithm', 'brightnessLowThreshold')
brightnessHighThreshold = config.getfloat('algorithm', 'brightnessHighThreshold')
error_log_flag = config.getboolean('log', 'error_log_flag')
errorLogPath = config.get('log', 'errorLogPath')
info_log_flag = config.getboolean('log', 'info_log_flag')
infoLogPath = config.get('log', 'infoLogPath')
licnese_enc = config.get('license', 'enc')
licnese_aes = config.get('license', 'aes')
licnese_private = config.get('license', 'private')
is_invalid = config.getboolean('license', 'is_invalid')

logger_error = logging.getLogger('error_logger')
logger_info = logging.getLogger('info_logger')
logger_error.setLevel(level=logging.ERROR)
logger_info.setLevel(level=logging.INFO)
log_error_filename = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "_error.log"
log_info_filename = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "_info.log"
handler_error = logging.handlers.RotatingFileHandler(os.path.join(errorLogPath, log_error_filename), maxBytes=200*1024*1024, backupCount=100)
handler_info = logging.handlers.RotatingFileHandler(os.path.join(infoLogPath, log_info_filename), maxBytes=200*1024*1024, backupCount=100)
formatter_error = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
formatter_info = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler_error.setFormatter(formatter_error)
handler_info.setFormatter(formatter_info)
logger_error.addHandler(handler_error)
logger_info.addHandler(handler_info)


# 检测模型
if face_detect_model_flag == "0":
    face_detect_model = FaceDetectModelRF()
elif face_detect_model_flag == "1":
    face_detect_model = FaceDetectModelSD()
    bbx_detector = scrfd_model_init('face_detect_model/sd/sd_det.onnx')
elif face_detect_model_flag == "2":
    face_detect_model = FaceAnalysis(model_path='face_detect_model/rf_landmark106',
                                     allowed_modules=['detection', 'landmark_2d_106'])
    face_detect_model.prepare(ctx_id=0, det_size=(256, 256))
# 识别模型
face_recognition = FaceDetectORT("face_recognition_model/model")
face_recognition.check("g")

license_check = is_license_check(licnese_enc, licnese_aes, licnese_private)

2、人脸识别-1比N

在人脸识别1比N中随着底库数据量的增多,涉及到如何实现特征快速检索、增量更新、特征模板库管理等一些列问题,是个工程化难题。本文采用向量数据库的方案,可以支持亿级向量快速检索。提供库管理服务、模板管理服务、图像/特征检索服务。

部分代码:

import os
from flask import Flask, request, jsonify
import base64
import numpy as np
import time
import configparser
import logging
import datetime
from flask import Response
import json
from UUIDTool import SnowflakeIDGenerator
import re
import myJsonEncoder
import requests, json
import concurrent.futures
import threading
from pymilvus import MilvusClient, DataType

# 配置
config = configparser.ConfigParser()
config.read("config/algorithmPara.ini", "utf-8")
feature_extract_url = config.get('http', 'feature_extract_url')


app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False  # False返回json不按照字母顺序

# 连接服务,初始化 MilvusClient
client = MilvusClient(
     uri="http://127.0.0.1:19530",
     db_name="face"
)

# 获取集合的状态
res_status = client.get_load_state(
    collection_name="face_vector"
)
# 加载集合
# 枚举类型:LoadState.NotExist = 0
#         LoadState.NotLoad = 1
#         LoadState.Loading = 2
#         LoadState.Loaded = 3
if res_status["state"] == 1:
    client.load_collection(
         collection_name="face_vector"
    )

完整项目代码请联系:1197311349@qq.com

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值