【AI產(chǎn)品】零基礎(chǔ)實(shí)現(xiàn)圖像識(shí)別小功能

在我們身邊,到處都有人臉識(shí)別的技術(shù),像我們平時(shí)使用的iPhone手機(jī),照片里面有一個(gè)“人物”的功能,它能夠?qū)⒄掌锩娴娜宋镒R(shí)別出來,然后進(jìn)行分類,iPhoneX還可以掃臉解鎖手機(jī)。再比如,家里面的智能電視,當(dāng)你看到某個(gè)片段某個(gè)人時(shí),電視就可以告訴你這個(gè)人是誰,演過些什么電影。這些背后都離不開人臉識(shí)別的技術(shù)。

這篇文章將詳細(xì)介紹,怎樣安裝和使用Python語言,利用百度大腦提供的AI接口,從0開始,一步一步來做一個(gè)人臉識(shí)別的功能,通過人臉識(shí)別分析人物的年齡、性別和顏值,以及在人臉上描出72個(gè)特征點(diǎn),最后我們將在瀏覽器查看效果。

先來看一下最終實(shí)現(xiàn)的效果:

spyder7.jpg

準(zhǔn)備

電腦與windows系統(tǒng)

第一步 安裝開發(fā)環(huán)境

我們選擇用Python語言,Python目前是機(jī)器學(xué)習(xí)中比較流行的語言,入門簡(jiǎn)單,功能強(qiáng)大。安裝Python的方式有很多種,我們選擇用anaconda的方式,anaconda相當(dāng)于一個(gè)工具包,將Python和一些常用的包打包一起,下載好就可以直接使用,非常方便,而且是免費(fèi)的。

1.1 下載anaconda

直接登錄anaconda官網(wǎng)下載 <u>https://www.anaconda.com/download/</u>

<figure>
image

</figure>

下載完,雙擊安裝文件,開始安裝anaconda

<figure>
image

</figure>

點(diǎn)擊“Next”

<figure>
image

</figure>

點(diǎn)擊“I Agree”

<figure>
image

</figure>

點(diǎn)擊“Next”

<figure>
image

</figure>

選擇安裝位置(可以默認(rèn)不變),點(diǎn)擊“Next”

<figure>
image

</figure>

點(diǎn)擊“Install”開始安裝

<figure>
image

</figure>

點(diǎn)擊“Finsh”,安裝完成。

1.2 安裝 spyder

打開anaconda

<figure>
image

</figure>

進(jìn)入anaconda首頁

<figure>
image

</figure>

在anaconda首頁,上圖紅框spyder這里點(diǎn)擊“install”,spyder是Python的一個(gè)簡(jiǎn)單的集成開發(fā)環(huán)境。如果是已安裝的話,“install”的按鈕會(huì)顯示“Launch”,點(diǎn)擊就可以啟動(dòng)spyder,我們可以在spyder里面編寫代碼。

1.3 檢查Python環(huán)境是否正常

打開anaconda,點(diǎn)擊左側(cè)“Environments”,然后點(diǎn)擊“base(root)”右邊的小三角,在彈出的內(nèi)容里面,選擇“Open with Python”

<figure>
image

</figure>

彈出系統(tǒng)命令窗口,如顯示下面內(nèi)容,則表示Python安裝成功。

<figure>
image

</figure>

第二步 注冊(cè)獲取百度AI接口

要實(shí)現(xiàn)人臉識(shí)別有很多方式,可以自己寫算法,也可以利用一些AI平臺(tái)提供的開放接口,我們選擇用百度大腦提供的人臉識(shí)別接口來實(shí)現(xiàn)。

2.1 登錄百度AI開放平臺(tái)

打開 <u>http://ai.baidu.com/</u>

<figure>
image

</figure>

點(diǎn)擊頁面右上角“控制臺(tái)”,選擇“人臉識(shí)別”

PS:需要先登錄百度賬號(hào),如果沒有百度賬號(hào)需要注冊(cè)一個(gè)。

2.2 創(chuàng)建應(yīng)用

進(jìn)入“人臉識(shí)別”后,點(diǎn)擊“創(chuàng)建應(yīng)用”按鈕

<figure>
image

</figure>

進(jìn)入創(chuàng)建應(yīng)用頁面

<figure>
image

</figure>

填寫好點(diǎn)擊下面的“立即創(chuàng)建”,提示創(chuàng)建成功。

<figure>
image

</figure>

點(diǎn)擊“查看應(yīng)用詳情”

<figure>
image

</figure>

如上截圖,紅框里面的 AppID、API Key 和 Secret Key 這三個(gè)內(nèi)容很重要,等下調(diào)用接口時(shí)候,需要它們做簽名驗(yàn)證。

第三步 安裝web應(yīng)用框架

在開始編寫代碼之前,為了讓我們編寫的代碼,可以通過網(wǎng)頁的形式展示出來,方便我們?yōu)g覽效果,我們還需要做多一步。我們需要搭建一個(gè)簡(jiǎn)單的Web應(yīng)用,對(duì)于Python來說,有很多Web框架可以讓我們快速搭建Web應(yīng)用,這里我們選擇Django框架。

3.1 安裝Django框架

打開anaconda,點(diǎn)擊左側(cè)“Environments”,然后點(diǎn)擊“base(root)”右邊的小三角,在彈出的內(nèi)容里面,選擇“Open Terminal”

<figure>
image

</figure>

彈出命令窗口

<figure>
image

</figure>

在彈出的這個(gè)命令窗口,我們使用pip來安裝django框架

PS:pip是一個(gè)安裝和管理 Python 包的工具,在我們使用python開發(fā)項(xiàng)目的過程,很多時(shí)候需要下載一些包,都可以通過pip來安裝,非常簡(jiǎn)單,也很方便。我們安裝anaconda后,默認(rèn)都會(huì)安裝pip的工具,所以我們直接使用就可以。

在上面的命令窗口輸入以下命令:

pip install django

然后按回車開始安裝

<figure>
image

</figure>

<figure>
image

</figure>

按回車后,大概需要幾分鐘時(shí)間,就會(huì)自動(dòng)安裝好,中間不需要任何操作,直到出現(xiàn)上面這個(gè)提示,就代表已經(jīng)安裝成功!

第四步 編寫代碼

好了,該準(zhǔn)備的工作我們都準(zhǔn)備好了,接下來就可以創(chuàng)建項(xiàng)目,然后正式編寫代碼。這一步其實(shí)沒大家想的復(fù)雜,只需要幾十行代碼就可以實(shí)現(xiàn)我們要的效果,當(dāng)然,如果要完全熟悉代碼,甚至了解背后更深的邏輯,需要付出更多時(shí)間去學(xué)習(xí)。

4.1 創(chuàng)建項(xiàng)目

我們先創(chuàng)建一個(gè)web項(xiàng)目,通過anaconda打開命令窗口(參考上一步)

<figure>
image

</figure>

然后切換路徑,切換到我們想創(chuàng)建項(xiàng)目的位置,注意,我這里是放在電腦的F盤里面的test文件夾,所以先在上面的命令窗口中,輸入f: 按回車切換到F盤

<figure>
image

</figure>

再輸入 cd test 按回車進(jìn)入test文件夾

<figure>
image

</figure>

如上截圖,我們現(xiàn)在已經(jīng)進(jìn)入F盤的test文件夾目錄下了,在這里我們創(chuàng)建一個(gè)名稱為 Face_Recognition 的項(xiàng)目,直接輸入以下命令創(chuàng)建項(xiàng)目,然后按回車:

django-admin.py startproject Face_Recognition

<figure>
image

</figure>

創(chuàng)建后我們打開電腦對(duì)應(yīng)的目錄,如果看到 Face_Recognition 的文件夾,就說明創(chuàng)建成功了

PS:如果沒看到 Face_Recognition 的文件夾,說明創(chuàng)建失敗,可以將創(chuàng)建命令改成:

django-admin startproject Face_Recognition

<figure>
image

</figure>

雙擊打開Face_Recognition這個(gè)文件夾,里面有一個(gè)文件夾和一個(gè)py的文件

<figure>
image

</figure>

然后我們啟動(dòng)服務(wù)器,啟動(dòng)后,我們就可以通過瀏覽器來訪問這個(gè)項(xiàng)目。

回到剛才的命令窗口,先進(jìn)入到Face_Recognition的目錄里面,然后輸入以下命令,按回車:
python manage.py runserver 0.0.0.0:8000

<figure>
image

</figure>

這樣我們就啟動(dòng)服務(wù)器了,接下來我們打開瀏覽器,在瀏覽器地址欄輸入:

127.0.0.1:8000

如果正常啟動(dòng),瀏覽器會(huì)顯示下面的頁面

<figure>
image

</figure>

PS:服務(wù)器啟動(dòng)后,這個(gè)命令窗口不要關(guān)掉哦,讓它運(yùn)行著就可以,如果關(guān)掉的話,瀏覽器將無法訪問頁面。后面需要使用命令窗口,可以重新打開一個(gè)。

4.2 創(chuàng)建頁面

項(xiàng)目創(chuàng)建成功后,接下來,我們就可以打開spyder,新建頁面,然后開始編寫代碼了。

我們需要新建兩個(gè)頁面,分別是:

recognition.py 用來處理人臉識(shí)別

view.html 模板文件,用來處理頁面展示

我們先了解下這兩個(gè)頁面的邏輯:

1)首先,我們?cè)?view.html 里面選擇圖片,提交給 recognition.py 處理;

2)recognition.py 接收到圖片后,進(jìn)行人臉識(shí)別,然后將分析結(jié)果返回給 view.html;

3)view.html 將 recognition.py 返回的分析結(jié)果展示出來。

PS:新建這兩個(gè)頁面的時(shí)候,需要注意文件所放的目錄。

recognition.py 是放在 F:\test\Face_Recognition\Face_Recognition,即跟urls.py 在同個(gè)目錄。

view.html 是放在 templates 文件夾里面,我們需要在 F:\test\Face_Recognition 創(chuàng)建 templates 文件夾,即跟 manage.py 在同個(gè)目錄。

好了,我們開始動(dòng)手做吧

首先打開 spyder

<figure>
image

</figure>

點(diǎn)擊上圖左上角的按鈕,新建頁面

<figure>
image

</figure>

新建后,我們先點(diǎn)擊左上角紅框位置的保存按鈕,把它保存為 recognition.py,然后再新建和保存 view.html

<figure>
image

</figure>

4.3 編寫代碼
按照兩個(gè)頁面邏輯順序,我們先編寫view.html頁面,讓它可以選擇圖片傳給recognition.py,打開剛才新建的view.html,并輸入下面代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>人臉識(shí)別demo</title>
</head>
<body>
<form action="/recognition" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="pic">
    <input type="submit" value="提交">
</form>
{{ pic }}
</body>
</html>

上面這段代碼通過表單提交圖片,然后傳給 /recognition路徑去處理

為了讓django框架知道這個(gè)模板文件的路徑,我們需要修改 F:\test\Face_Recognition\Face_Recognition\settings.py 文件,修改 TEMPLATES 中的 DIRS 為 [BASE_DIR+"/templates",],如下所示:

<figure>
image

</figure>

接下來,我們打開 recognition.py 文件,輸入以下代碼:

from django.shortcuts import render

def recognition_post(request):
    context ={}
    if request.POST:
        context['pic'] = request.FILES['pic']
 return render(request, "view.html", context)

這段代碼創(chuàng)建 recognition_post 函數(shù),用來接收表單提交的照片,提交數(shù)據(jù)給 view.html

為了讓 view.html 這個(gè)頁面和 recognition_post 函數(shù)能夠完成這樣的操作,我們需要配置URL,打開 F:\test\Face_Recognition\Face_Recognition\urls.py,刪除原來代碼,將以下代碼復(fù)制粘貼到 urls.py 文件中:

from django.conf.urls import url
from . import recognition

urlpatterns = [
    url(r'^recognition$', recognition.recognition_post),
]

OK,我們可以在瀏覽器輸入 http://127.0.0.1:8000/recognition,瀏覽下效果

<figure>
image

</figure>

PS:為了解決在django里面圖片路徑顯示的問題,我們需要?jiǎng)?chuàng)建一個(gè)和templates同級(jí)的文件夾static,在static下創(chuàng)建images文件夾,然后將用來測(cè)試的圖片存在images里面。

然后,打開 settings.py 文件文件,在末尾添加如下代碼:

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

接下來,我們?cè)?recogniton.py 使用百度人臉識(shí)別的接口,來識(shí)別提交的圖片,在調(diào)用接口前,我們需要先安裝一下Python SDK,在anaconda中打開命令窗口(參考前面第三步),在命令窗口輸入:

pip install baidu-aip

<figure>
image

</figure>

出現(xiàn)紅框的 Successfully installed baidu-aip-2.2.5.2 提示安裝成功。

我們重新編輯 recognition.py,完整代碼如下:

# -*- coding: utf-8 -*-
from django.shortcuts import render
from aip import AipFace
import base64
import json

# 需要安裝PIL,它是一個(gè)圖像處理庫。安裝語句:pip install pillow  安裝方法參考上面安裝django
import PIL
from PIL import Image
from PIL import ImageDraw

## 百度接口信息
APP_ID = '1******7'
API_KEY = 'y7VFQ**********0wRiplh'
SECRET_KEY = '2zLjGOD***********roqFg6ViHrpa'

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

imageType = "BASE64"

# 定義參數(shù)變量  
options = {}
options["max_face_num"] = 1
options["face_field"] = "age,beauty,gender,landmark"
## 百度接口信息

def recognition_post(request):
    content ={}

    if request.POST:

         with open("./static/images/"+str(request.FILES['Photo']),"rb") as f:  
            base64_data = base64.b64encode(f.read())
            image = str(base64_data, encoding='utf-8');
            result = client.detect(image, imageType, options)

        content['Photo'] = "/static/images/"+str(request.FILES['Photo'])

        # 將百度接口返回的數(shù)據(jù)轉(zhuǎn)成json對(duì)象
        json_str = json.dumps(result)
        # 對(duì)數(shù)據(jù)進(jìn)行解碼
        json_data = json.loads(json_str)

        content['age'] = json_data['result']['face_list'][0]['age']
        content['beauty'] = json_data['result']['face_list'][0]['beauty']
        gender = json_data['result']['face_list'][0]['gender']['type']
        if gender == 'female':
            content['gender'] = "女性"
        else:
            content['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")
        content['target_img'] = "/static/images/target_img.jpg"

    return render(request, "view.html", content)

以上代碼,主要是通過接口來識(shí)別照片里面的人物,分析人物的年齡和性別,給人物的顏值打分,以及標(biāo)記人臉的72個(gè)特征點(diǎn),然后通過最后一句代碼將這些內(nèi)容傳給 view.html

PS:代碼中APP_ID、API_KEY和SECRET_KEY就是我們?cè)诘诙絼?chuàng)建百度AI應(yīng)用時(shí)獲取的,請(qǐng)?zhí)顚懽约韩@取的對(duì)應(yīng)內(nèi)容。

然后我們?cè)俅蜷_ view.html,將 recognition.py 識(shí)別后傳過來的分析結(jié)果呈現(xiàn)出來,完整代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>人臉識(shí)別</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>

好了,以上就是所有的代碼了,接下來,我們打開瀏覽器,看一下整個(gè)效果吧

<figure>
image

</figure>

恭喜,走到這一步,我們就完成了人臉識(shí)別的效果,是不是有點(diǎn)激動(dòng),呵呵!

從開始安裝環(huán)境到通過瀏覽器訪問效果,對(duì)于熟悉代碼的人來說,其實(shí)很簡(jiǎn)單,但對(duì)于剛接觸的小白來說,卻是挺不容易,整個(gè)過程必然會(huì)遇到很多坑,希望通過這篇文章,大家盡量少走些坑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容