【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è)圖像處理庫(kù)媳禁。安裝語句: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)系作者
  • 序言:七十年代末生音,一起剝皮案震驚了整個(gè)濱河市宁否,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缀遍,老刑警劉巖慕匠,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異域醇,居然都是意外死亡台谊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門譬挚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锅铅,“玉大人,你說我怎么就攤上這事减宣⊙涡耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵漆腌,是天一觀的道長(zhǎng)贼邓。 經(jīng)常有香客問我,道長(zhǎng)屉凯,這世上最難降的妖魔是什么立帖? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任眼溶,我火速辦了婚禮悠砚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堂飞。我一直安慰自己灌旧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布绰筛。 她就那樣靜靜地躺著枢泰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铝噩。 梳的紋絲不亂的頭發(fā)上衡蚂,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音骏庸,去河邊找鬼毛甲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛具被,可吹牛的內(nèi)容都是我干的玻募。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼一姿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼七咧!你這毒婦竟也來了跃惫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤艾栋,失蹤者是張志新(化名)和其女友劉穎爆存,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝗砾,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡终蒂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遥诉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拇泣。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矮锈,靈堂內(nèi)的尸體忽然破棺而出霉翔,到底是詐尸還是另有隱情,我是刑警寧澤苞笨,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布债朵,位于F島的核電站,受9級(jí)特大地震影響瀑凝,放射性物質(zhì)發(fā)生泄漏序芦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一粤咪、第九天 我趴在偏房一處隱蔽的房頂上張望谚中。 院中可真熱鬧,春花似錦寥枝、人聲如沸宪塔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽某筐。三九已至,卻和暖如春冠跷,著一層夾襖步出監(jiān)牢的瞬間南誊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工蜜托, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抄囚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓盗冷,卻偏偏與公主長(zhǎng)得像怠苔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仪糖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容