分享免费的编程资源和教程

网站首页 > 技术教程 正文

python3之实现一个提供人脸识别的在线网站

goqiw 2024-10-14 11:40:33 技术教程 11 ℃ 0 评论

前文

书接上文,在之前的python3之人脸识别教程中,简单说明了如何通过开源的face_recognition库进行人脸识别。但是该程序不具备扩展性,每次运行都要重新载入图片,并且新增known图片也不方便。

为了解决这个问题,这篇文章会在上篇文章的基础上,构建一个提供既能人脸识别又能动态扩展的在线网站。

思路

为了解决前面提出的问题,需要解决以下2个具体的问题。

  1. 提供一个web服务,这里选择flask。如何构建简单的flask服务器
  2. 提供一个存储face_encoding的存储服务,这里简单点直接选择sqlite3。

Python代码

facerec_web.py中启动了一个flask的web服务器。

在这个服务器中提供了3个服务。

第一个upload_page方法,是提供一个主页面。

第二个upload_image方法,是上传一张图片,并返回图片里面的人是谁。

第三个upload_new_image方法,是上传一张图片,并告诉服务器这个人是谁。

DB.py中维护了一个sqlite3的数据库,并对外提供insert和find操作。

用来保存face_encoding和其对应的name。

这个地方需要注意的是face_recognition库中返回的face_encoding是numpy库中的ndarray类型。所以我们在存入数据库的时候需要特殊处理一下bytes(face_encoding)将其转化成bytes类型,同时在取出来的时候要np.ndarray(shape=(128,), dtype=float, buffer=row[1])将其转回ndarray类型。

同时我们也要修改一下上篇文章中的facerec.py文件。引入DB模块,在其初始化的时候,self.known_faces, self.known_names = self.db.find()

从数据库中载入已经存在的人脸信息,并且在load_face方法中加入self.db.insert(known_name,face_encoding)将新的信息存入数控库。

引入必要的库

代码写完了,但是运行之前别忘了添加必要的库。

pip install flask

pip install sqlite3

pip install numpy

启动Web服务器

运行命令:

python facerec_web.py

访问服务器

浏览器打开连接:http://localhost:5001/

上面的部分是猜,可以选择一张人脸图片上传,上传之后会返回这个人是谁。

比如我上传一张奥巴马的图片:

这时返回:

因为我们现在的数据库还是空的,所以返回了unknown_person。

那么我们先上传一张obama的图片,并填写照片里的人的名字叫obama。

这时的返回时:

那么我们在上传之前的第一张照片unknown-obama。

这时的返回就变成了:

我们的在线人脸识别服务就这样提供出去了。

并且我们可以通过upload_new_image方法动态的去扩展该程序能识别的人脸。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表