基于SQLite与face_recognition的人脸库管理

针对传统人脸库全量构建存在的耗时冗长及维护困难等瓶颈,本文设计并实现了一种基于 SQLite 与 face_recognition 的管理架构。该方案支持特征数据的增量更新与删除同步机制,有效提升了系统的响应速度与数据管理的灵活性。

其中,人脸识别我们使用face_recognition库,其作为基于dlib的Python封装,以其简洁的API设计和卓越的识别精度(基于ResNet-34模型)成为开发者首选。

人脸识别代码

python 复制代码
@app.route('/recognize', methods=['POST'])
def api_recognize():
    if not gallery_built:
        return jsonify({"error": "人脸库未加载"}), 500
    if 'image' not in request.files:
        return jsonify({"error": "缺少 image 文件"}), 400

    file = request.files['image']
    try:
        in_memory = file.read()
        nparr = np.frombuffer(in_memory, np.uint8)
        img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
        rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    except Exception as e:
        return jsonify({"error": f"图像处理异常: {str(e)}"}), 400

    face_locations = face_recognition.face_locations(rgb_img)
    if not face_locations:
        return jsonify({"results": [], "message": "未检测到任何人脸"})

    face_encodings = face_recognition.face_encodings(rgb_img, face_locations)
    results = []
    THRESHOLD = 0.6

    for encoding in face_encodings:
        distances = face_recognition.face_distance(known_encodings, encoding)
        best_match_index = np.argmin(distances)
        min_distance = distances[best_match_index]

        if min_distance < THRESHOLD:
            name = name_list[best_match_index]
            confidence = float(1.0 - min_distance)
        else:
            name = "Unknown"
            confidence = 0.0
        results.append({"name": name, "confidence": round(confidence, 4)})

    return jsonify({"results": results, "total_faces": len(results)})

人脸库增量构建

系统在录入前会首先检索 SQLite 数据库进行身份去重校验。若检测到身份证号已存在则自动跳过;否则,将调用 face_recognition 算法提取人脸特征向量,并将该特征数据序列化后追加至 NPY 特征库中。

人脸库文件定位

通过文件定位功能可以直接定位到图像文件夹,便于问题定位与修改。

人脸库删除

针对冗余人员的清理,系统采用了"批量标记+统一触发"的异步处理机制。用户可连续执行多条删除指令而不立即重构;待所有目标人员确认移除后,手动点击"清除并重建"按钮,系统将集中执行一次底层人脸库的重构与同步。

相关推荐
李兆龙的博客8 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
倔强的石头_10 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间10 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西10 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西11 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
小蒋观天下11 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
数据库小学妹11 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
loong_XL13 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶13 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba
adinnet202613 小时前
保单、赔付与渠道问数:保险经营数据如何实现按需查询
大数据·数据库·人工智能