win10+python3.6+百度AI——實現人臉識別


 一、說明

近來半個月的時間沉迷於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 json

from 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)最后吐槽一下搜索機制,即使在國內最大的搜索引擎中完全搜索參考文章的題目,也是無法搜索到的,呵呵噠

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM