天天看點

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

功能:項目分為前端和後端兩個部分,調用阿裡雲人臉識别、表情識别的功能,對電子相冊裡面的照片進行自動标簽和分類。

API位址

阿裡達摩院視覺識别平台(

https://vision.aliyun.com/

一、後端

代碼是Java的srping-boot項目

項目代碼下載下傳位址:

https://github.com/aliyun/alibabacloud-viapi-demo/tree/master
  • Application:啟動的入口函數,
  • common:一般就是存放公共的類或者常量,或者枚舉值,
  • config:裝載或者是資料庫的配置。
  • Controller:用于接收外部的請求,通過接口調用或得到的資料傳回給前端
  • Service: 把不同的請求 , 不同的服務抽象成一個 service。
  • Utils: 用于存放公共的類或者工具函數。

1.controller

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

擷取圖檔、分類等,上傳檔案。

2.ResourceService

存儲資料,資源管理

3.VisionService

上傳圖檔,識别圖檔中的表情和場景

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

VisionService,識别場景,表情。我們上傳圖檔流,我們把整個圖檔流傳到接口裡面,然後從服務端去識别這個場景。新的版本的 SDK支援通過本地上傳圖檔來進行識别

4.在控制台開通相應功能

圖檔檔案需要上傳到對象存儲oss中

新的版本的 SDK支援通過本地上傳圖檔來進行識别

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

5.ResourceService 是一個資源的管理器

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

6.allImg 将所有上傳的圖檔,放在數組裡面。

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

7.json檔案

cateMap 之後又分成兩個場景 expression、scene,可以看到不同的分類,表情識别,場景識别,裡面存放所有識别出來的表情,比如說驚訝、生氣、開心,場景識别,存放運動、戶外,這樣存儲是為了我們能夠快速的進行查詢,比如說可以通過分類,快速的找到某一個分類下面的所有的識别。

expressionMap 是表示某類标簽下面都包括哪些圖檔,senceMap 也是同樣的意思。

imgLabels 是一個反向的查找的過程,即通過一個圖檔,識别出來了哪些場景,比如說我們可以看到它可能這張圖檔它可能直接識别出來了,它是屬于人物場景,屬于運動場景,然後屬于生氣的表情,屬于演出等場景。

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

二、前端

1.利用上傳的元件實作圖檔上傳

2.實作輪播圖、清單

3.實作自定義的标簽

前端采用視訊所述方法

前端頁面通過 vue,然後加上 element-ui 這個兩個元件來實作前端的邏輯。大概可以看一下整個的結構,它可以分成三部分。

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

第一部分是通過一個上傳的元件來實作拖拽上傳以及點選。

找到一個圖檔,可以看到兩種方式,一種拖拽,一種是點選上傳,這是通過一個元件來實作的。action是在上傳圖檔要去通路後端的 upload 接口,之後有一個事件,是在成功之後應該做哪些事情,也就是對應的要執行的函數。 比如 UploadSuccess 指上傳成功之後,重新整理頁面,添加下面的标簽分類等。

第二部分是實作輪播圖部分

通過vue 的一個元件。vue-gallery, 實作自定義的标簽名,之後定義了一個屬性:photos。photos 從背景去取回資料,之後把它渲染到前端的 html 頁面當中。由于我們這是一個元件,它會有對應的自己一個模闆,這個就是我們整個的模闆部分,之後對它進行背景圖檔的處理,然後以及一些事件的定義。

vue,它的整個是一個事件的資料流,通過資料的不同的變化,然後我們就可以去觸發它的渲染,比如上傳一張圖檔,它是可以對應不同的元件進行互動,利用不同的标簽,事件來驅動資料的變化。

mounted定義一些事件,比如圖檔變化,怎麼調用,以及監聽按下不同的鍵,應該做哪些操作,然後是前張圖檔還是後一張圖檔等。

el 是一個 ID 的綁定,比如 #app, 在這個标簽上層父級,定義了一個 ID 叫 app,這時候可以把元件放在父級 div 下面,然後在這個裡面去根據模闆進行渲染。

第三部分是自定義标簽的元件。

V-tag 對應的是這塊,我們把它分成不同的分類,下面有不同的标簽是元件來實

現的。

Data 是指在初始化的時候,需要進行哪些渲染。這裡面自定義了不同的顔色。cateMap,将傳回的英文轉化成漢字去顯示出來。去取一個不同的 ID,然後給它選成不同的顔色,通過取一個随機的下标,然後去把它選成不同的顔色。

Tag 是一個兩層 map 結構。就是第一層這裡面某比每層結構,表情,下面有幾種表情,場景下面有幾種場景,這是一個兩層的 map 結構。是以在渲染的時候,會對兩層的 map 進行渲染,第一層完成之後,再渲染第二層資料。實作不同的觸發,上傳檔案,成功之後要進行不同的事件操作。

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端

因為要實作不同的元件之間進行通信,自定義了一個虛拟的 Event 的 vue 的執行個體,然後通過 Event 将所有的不同的 vue 執行個體串聯起來。比如 uploadSuccess 去發送一個事件。通過 upload vue 執行個體去給其他的執行個體去發事件,在上傳成功之後加載到輪播圖裡面。on 就對應去接收 emit 傳過來的事件。如果我們得到了 uploadSuccess 事件 ,那麼就會通過從後端去擷取資料,對這個頁面進行一個重新整理操作。refresh 也是同樣的道理,上傳成功之後,要對整個的 tag 進行一個重新整理,把新識别出來的不同的場景,不同标簽,進行一個重新整理。

Class 3 - 電子相冊搭建(人臉、表情識别)一、後端二、前端