一、说明

近来半个月的时间沉迷于python不能自拔,不是初学,而是好久没有写程序了。在此记录pycharm建立Django项目基于百度AI实现的人脸检测。该项目参考了知乎的一篇文章,详情点击这里,原文是在Linux环境下搭建的,用了Anaconda作为python的解析器,个人对Anaconda不是很感兴趣,再有一点就是Anaconda下安装的一些库并不是最新的版本。本项目对原文项目有一些改动,但是大部分还是依照原文项目的架构和逻辑。

二、项目开始

2.1注册获得百度AI的接口

注册网址在这里,进入页面后点击控制台,选择人脸识别,需要百度账号登陆,有则登陆,无则注册

2.2创建应用

进入“人脸识别”后,点击“创建应用”按钮

进入创建页面后如图设置便可

填写好点击下面的“立即创建”,提示创建成功,点击“查看应用详情”

记下如图所示的三个参数,Secret Key可以点击显示查看

2.3安装所需的库

在CMD中使用pip安装即可,所需的库包含以下几个:

Django

requests(非必需)

simplejson

pillow

baidu-aip

三、程序编写

在处理好所需的基础条件后,进入程序的编写,因为是一个在线的人脸检测,所以需要一个WEB框架,在此使用的是Django

3.1pycharm新建Django项目

首先在pycharm中建立Django项目,关于建立pycharm如何建立Django项目,在此不再赘述,必要时可以搜索教程

建立好Django项目后,在项目的根目录有一个manage.py的文件,在CMD中使用命令python manage.py runserver 0.0.0.0:8000开启服务(此时不要关闭CMD,让其始终运行),打开浏览器,输入127.0.0.1:8000便可看到如图所示,说明成功

3.2创建(修改)重要的程序文件

此步骤为该项目的重要部分,在此过程中容易出错,需留意

recognition.py

view.html

settings.py

建立static文件夹以及其子文件夹images

1)手动在Django项目中建立recognition.py ,使其与pycharm自动生成的结构中的urls.py位于同一个文件夹下

2)手动在Django项目中建立view.html ,使其位于在templates 文件夹下,在pycharm建立Django时会自动生成 templates 文件夹,在此需要确定templates文件夹与 manage.py 在同一个目录中

3)在settings.py文件的最后一行添加

STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static').replace('\\', '/'), )

4)为了让django框架知道这个模板文件的路径,需要修改settings.py 文件,将 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",],如下所示:

4)建立文件夹static,并在其中建立子文件夹images,用以保存需要识别的人脸图片,确保static文件夹与templates文件夹是同级

3.3编辑view.html文件

在view.html文件中写入如下代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>人脸识别</title>
</head>
<body>
<form action="/recognition" method="post" enctype="multipart/form-data">{% csrf_token %}<input type="file" name="Photo"><input type="submit" value="提交">
</form>{% if Photo %}
<p><img src={{ Photo }} width="300">
{% if target_img %}<img src={{ target_img }} width="300">{% endif %}
</p>
<p>年龄:{{ age }}岁<p>
<p>颜值:{{ beauty }}分<p>
<p>性别:{{ gender }}{{ face_type }}<p>
{% endif %}
</body></html>

3.4编辑recognition.py文件

在recognition.py文件中写入如下代码。重要说明:在该程序中,所有的路径均为绝对路径,注意路径的斜杠方向,这也是windows与linux的重要区别。

from django.shortcuts import render
from aip import AipFace
import base64
import jsonfrom PIL import Image
from PIL import ImageDraw#百度接口信息
APP_ID = '******'       #在此填写之前百度页面上显示的AppID参数
API_KEY = '*****'       #在此填写之前百度页面上显示的ApiKEY参数
SECRET_KEY = '******'   #在此填写之前百度页面上现实的SecretyKEY参数
client = AipFace(APP_ID,API_KEY,SECRET_KEY)
imageType = "BASE64"#定义参数变量
options = {}
options["max_face_num"] = 1
options["face_field"] = "age,beauty,gender,landmark"def recognition_post(request):context ={}    #此处将原文的content改为context,下同if request.POST:with open(".\\static\\images\\" +str(request.FILES['Photo']),"rb") as f:     #所有路径均为绝对路径,下同base64_date = base64.b64encode(f.read())image = str(base64_date,encoding='utf-8');result = client.detect(image, imageType, options)context['Photo'] = "\\static\\iamges\\"+str(request.FILES['Photo'])  #将百度接口返回的数据转成json对象json_str = json.dumps(result)#对数据进行解码json_data = json.loads(json_str)context['age'] = json_data['result']['face_list'][0]['age']context['beauty'] = json_data['result']['face_list'][0]['beauty']gender = json_data['result']['face_list'][0]['gender']['type']if gender == 'female':context['gender'] = "女性"else:context['gender'] = "男性"landmark72 = json_data['result']['face_list'][0]['landmark72']im1=Image.open(".\\static\\images\\"+str(request.FILES['Photo']))draw = ImageDraw.Draw(im1)for index in range(72):xy = landmark72[index]draw.text((xy['x'],xy['y']),"o",(255,255,0))draw = ImageDraw.Draw(im1)im1.save("static\\images\\target_img.jpg")context['target_img'] = "static\\images\\target_img.jpg"return render(request, "view.html", context)

四、测试程序

将上述程序编写完成之后,在pycharm中运行recognition.py,同时在浏览器中打开127.0.0.1:8000/recognition,便可进入如下界面:

点击选择文件,从之前建立的文件夹static\images中选择需要识别的人脸图片,点击提交,便可得到如下结果:

五、最后说明

1)鄙人不是python的大神,在很多方面还处于练习阶段,本篇文章写作仓促,如有依照本教程操作的过程中有什么问题,请先查看所需库的安装是否完整,如有问题可留言,看到回复

2)如最终结果所示,在识别图片的左边有一个图片无法显示,看过原文应该知道左边应该会显示原图,但是鄙人这边无法显示,换了浏览器(甚至用了IE)也不行,如果有大神知道原因,希望可以留言赐教

3)在此感谢参考文章及作者,如有侵权必删

4)此为鄙人项目中各个文件的位置(对应3.2步骤的说明):

5)最后吐槽一下搜索机制,即使在国内最大的搜索引擎中完全搜索参考文章的题目,也是无法搜索到的,呵呵哒

转载于:https://www.cnblogs.com/dmass36/p/10182183.html

win10+python3.6+百度AI——实现人脸识别相关推荐

  1. Python基于百度AI的人脸识别系统--颜值检测

    基于百度AI的人脸识别系统–颜值检测 刚开始学,觉得好玩就写了这个 主要是分为人脸识别系统的对接,UI的设计 人脸识别系统: 用的百度的AI,其中的AK,SK可以换成自己的,在百度开放平台上注册就能获 ...

  2. Qt+百度AI实现人脸识别之人脸检测

    文章目录 简单需求 Demo运行结果 百度AI人脸识别接入 为什么使用百度AI接口 接入步骤 如何获取Access Token Qt软件开发 人脸检测Qt编程步骤 知识点 网络编程 get.put.p ...

  3. python3调用百度API完成人脸识别,检测人种-年龄-性别-颜值-眼镜

    https://ai.baidu.com/docs#/Face-Detect/top 这个是百度人脸识别api 参考博客:https://blog.csdn.net/qq_38412868/artic ...

  4. java 正規表示 group_经验分享|Java+百度AI实现人脸识别

    之前尝试用python+opencv实现过人脸识别,接下来我们使用Java+百度AI来实现人脸识别的尝试. I 注册百度开放平台账号 打开百度AI官方网站(https://ai.baidu.com/? ...

  5. 基于python3,百度AI实现人脸检测,人脸识别

    我感觉百度是BAT三家里面AI能力最强的了,在图像和语音的处理上面是很强的,很全面.百度AI里面功能齐全,提供的语言也是很多.唯一不太好的是目前对python3不是很支持,还是支持python2.但也 ...

  6. SpringBoot集成百度AI实现人脸识别

    文章目录 1. 百度AI开放平台 2. 文档集成 3. 代码实现 3.1 创建SpringBoot工程 3.2 添加百度AI依赖 3.3 创建AipFace 3.4 注册人脸接口 3.5 人脸登录接口 ...

  7. php调用人脸识别接口,PHP调用百度AI接口人脸识别-语音技术-文本识别-图像识别...

    Rain-AI系统基于百度人工智能接口二次开发 有问题的可以加入这个群:226520254,大家一起交流 说明:这个代码是原生PHP开发的,在6个月前我为了效率和安全性能使用框架进行重写,测试站里的是 ...

  8. 百度ai 人脸识别 java_百度ai 接口 人脸识别

    api文档 能力介绍 接口能力 人脸检测:检测图片中的人脸并标记出位置信息; 人脸关键点:展示人脸的核心关键点信息,及72个关键点信息. 人脸属性值:展示人脸属性信息,如年龄.性别等. 人脸质量信息: ...

  9. 百度AI进行人脸识别

    获取token # encoding:utf-8 import requests # client_id 为官网获取的AK, client_secret 为官网获取的SK host = 'https: ...

最新文章

  1. linux应用程序接收文件,Linux应用程序学习之文件编程
  2. 数字孪生+交通,到底有啥用?
  3. 一题多解(三)—— Python 字符串的拼接
  4. 【cornerstone】撤销标注点位(通过ctrl+z)
  5. flask html缓存,flask_cache如何缓存动态数据,如何调用缓存数据
  6. [2005.04.24 20:47:26] 实践与思考之窥索[原创]
  7. mysql characterencoding 枚举值_MySQL 事务锁基础部分详解
  8. linux 服务状态命令,Linux 查看服务列表,查看服务状态
  9. 六祎-网易云视频下载
  10. 快门光圈感光度口诀_曝光补偿怎么调,快门光圈感光度口诀,深度解析曝光补偿...
  11. 电子银行卡的优势分析
  12. LocalDateTime查找最近的五分钟点
  13. 【yolov5 v6.0】中断以后重新训练,增加epochs,冻结层
  14. c# picturebox 刷新_C# picturebox画图问题
  15. CAD图纸比例设置不同时CAD标注样式设置为相同的操作教程
  16. python识别手写数字字体_基于tensorflow框架对手写字体MNIST数据集的识别
  17. android listview 切换,Android ListView切换按钮
  18. 如何用python实现题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  19. laravel mysql exists_laravel exists怎么使用
  20. 【盘点】2022上半年十大网络安全事件

热门文章

  1. 大厂对软件测试的误解这么深吗?测试岗会越来越少吗?该怎样提升技术?
  2. 数字电路基础04(查找表LUT)
  3. 注意力机制(attention)学习记录(二)
  4. 我在京东的第417天:陷入了情绪的泥沼
  5. abaqus切削为什么没有切屑_Abaqus在金属切削方面的实例
  6. android零宽空格,零宽字符文本水印原理
  7. 将电子版照片信息或者扫描件快速识别导出 OCR识别技术
  8. 自动驾驶两大领域的研究热点:计算机视觉&机器人技术
  9. 异构计算给我们带来了哪些思考?
  10. 树莓派对RGB-LED传感的实验