前言
我们要实现一个人脸识别的功能,人脸识别的都是调用本地的图片,所以我们搭建一个接口服务来提供图片的上传。
接口
一般接口
接口使用FastAPI框架
https://fastapi.tiangolo.com/zh/#_4
注意
该框架需要Python 3.6 及更高版本
环境变量中添加
KEY | VALUE |
---|---|
Path | D:\Tools\Python310 D:\Tools\Python310\Scripts |
另外要注意
系统变量
的优先级要比用户变量
的优先级高,如果配置后还是2.x版本,就要看看是否系统变量中也配置了。配置完成后要重启开发工具,不用重启电脑。
安装
1 | pipenv install fastapi |
创建一个 main.py
文件并写入以下内容:
1 | from typing import Union |
通过以下命令运行服务器:
1 | pipenv run uvicorn main:app --reload |
使用浏览器访问
http://127.0.0.1:8000/items/5?q=somequery
这样我们的接口服务就搭建好了。
对接的接口文档地址
静态文件
1 | from fastapi.staticfiles import StaticFiles |
所有以/web/
开头的请求都会访问到web目录中。
允许跨域访问
1 | from starlette.middleware.cors import CORSMiddleware |
文件上传
一般文件上传
要用 File,需要先安装这个库
1 | pipenv install python-multipart |
代码
1 | # -*- coding:utf-8 -*- |
注意
uvicorn.run(app="main:app", host="0.0.0.0", port=8000, reload=True)
其中host不要设置为127.0.0.1,否则无法远程访问。
Base64图片上传
1 | import os |
接口返回格式
HTML
1 | from fastapi.responses import HTMLResponse |
纯文本
1 | from fastapi.responses import PlainTextResponse |
JSON
1 |
|
接口文档服务
文档无法访问
默认的swagger引用的JS和CSS无法访问了。
我们可以引用到项目下本地加载
通过百度网盘分享的文件:static.zip
链接:https://pan.baidu.com/s/1ZSF1K3gApxlRoS6qvK-TkQ?pwd=psvm
提取码:psvm
把文件解压到项目根目录
代码中配置路径
1 | from fastapi import FastAPI |
路由要修改一个路由,不要用/docs
禁用文档服务
默认会自动生成文档/docs
删除文档
1 | app = FastAPI(docs_url=None) |
去掉跳转
1 |
|
错误状态码
1 | from fastapi import FastAPI, HTTPException |
运行
推荐按如下配置
1 |
|
人像识别
face_recognition
https://github.com/ageitgey/face_recognition
安装
1 | pipenv install cmake |
使用
1 | import face_recognition |
deepface
https://github.com/serengil/deepface
安装
1 | pipenv install deepface |
使用
1 | from deepface import DeepFace |
注意
这个库主要用于对比人脸相似度,人脸的特征等功能。
接口对接人脸识别
1 | # -*- coding:utf-8 -*- |
WEB获取摄像头做识别
1 |
|
web端只能传base64,后端也要处理base64
1 | import base64 |
Docker
配置文件Dockerfile
1 | # Pull base image |
构建
1 | docker build -t psvmc/face_recognition . |
运行
1 | docker run -d -p 8000:8000 --name face_recognition --restart=always psvmc/face_recognition |
查看启动日志
1 | docker logs face_recognition |
删除
1 | docker stop face_recognition |