用java做網(wǎng)站要學(xué)什么谷歌獨(dú)立站推廣
1.摘要
? ? 本文主要研究?jī)?nèi)容是開(kāi)發(fā)一種發(fā)型推薦系統(tǒng),旨在識(shí)別用戶(hù)的面部形狀,并根據(jù)此形狀推薦最適合的發(fā)型。首先,收集具有各種面部形狀的用戶(hù)照片,并標(biāo)記它們的臉型,如長(zhǎng)形、圓形、橢圓形、心形或方形。接著構(gòu)建一個(gè)面部分類(lèi)器,以確定用戶(hù)的臉型,如長(zhǎng)形、圓形、橢圓形、心形或方形。然后,使用機(jī)器學(xué)習(xí)或深度學(xué)習(xí)技術(shù)構(gòu)建一個(gè)面部分類(lèi)器模型。該模型接受用戶(hù)照片作為輸入,并輸出對(duì)應(yīng)的面部形狀分類(lèi)結(jié)果?;诜诸?lèi)結(jié)果,根據(jù)面部分類(lèi)器的輸出結(jié)果,為每種面部形狀設(shè)計(jì)一組適合的發(fā)型。最終實(shí)現(xiàn)的系統(tǒng)將推薦適合用戶(hù)面部形狀的發(fā)型。該系統(tǒng)將利用用戶(hù)對(duì)不同發(fā)型的偏好和不喜歡程度進(jìn)行持續(xù)更新,以提供個(gè)性化的推薦。
2. 算法研究
2.1 數(shù)據(jù)分析及數(shù)據(jù)集收集過(guò)程:
????????通過(guò)查閱22個(gè)網(wǎng)站和234位名人的信息來(lái)收集具有正確面部形狀標(biāo)簽的圖像。其中,有33位名人的面部形狀在3個(gè)或更多網(wǎng)站中得到了一致的分類(lèi)(65位在2個(gè)或更多網(wǎng)站中一致)。還有49位名人雖然在某些網(wǎng)站上的分類(lèi)存在沖突,但有強(qiáng)烈的共識(shí)可以用于分類(lèi)。最終,利用74位名人的數(shù)據(jù)進(jìn)行了分析。
????????面部形狀特征描述:
- 心形臉形(heart-shaped face):具有寬闊的顴骨,逐漸變窄至下巴。
- 長(zhǎng)形臉形(long face):長(zhǎng)而非常狹窄。
- 橢圓形臉形(oval face):類(lèi)似于長(zhǎng)形臉,但比長(zhǎng)形臉更豐滿(mǎn)。
- 圓形臉形(round face):短而寬的形狀,與其他臉形明顯不同。
- 方形臉形(square-shaped face):具有強(qiáng)烈的下頜線(xiàn)。
????????最終,數(shù)據(jù)集包含了約 74 名名人的約 1500 張圖像,存儲(chǔ)到DATA 文件夾中。
? ? ? ? 基于上述收集的data數(shù)據(jù),創(chuàng)建了一個(gè)包含各種特征的數(shù)據(jù)框,這些特征包括面部關(guān)鍵點(diǎn)的坐標(biāo)、計(jì)算出的長(zhǎng)度和比率,以及圖像名稱(chēng)和分類(lèi)形狀。該數(shù)據(jù)框的列包括了大量的特征,如面部關(guān)鍵點(diǎn)坐標(biāo)、長(zhǎng)度、比率以及圖像名稱(chēng)和分類(lèi)形狀等。接著,通過(guò)調(diào)用主要函數(shù)和第二個(gè)用于推薦目的的函數(shù),對(duì)上述目錄中的所有照片運(yùn)行主要函數(shù),從而生成了一個(gè)整潔的數(shù)據(jù)集。
data = pd.DataFrame()
data.reset_index
shape_df = pd.DataFrame(columns = ['filenum','filename','classified_shape'])
shape_array = []
def store_features_and_classification():filenum = -1sub_dir = [q for q in pathlib.Path(image_dir).iterdir() if q.is_dir()]start_j = 0end_j = len(sub_dir)for j in range(start_j, end_j):images_dir = [p for p in pathlib.Path(sub_dir[j]).iterdir() if p.is_file()]for p in pathlib.Path(sub_dir[j]).iterdir():print(p)shape_array= []if 1 == 1:face_file_name = os.path.basename(p)classified_face_shape = os.path.basename(os.path.dirname(p)) filenum += 1make_face_df(p,filenum)shape_array.append(filenum)shape_array.append(face_file_name) shape_array.append(classified_face_shape)shape_df.loc[filenum] = np.array(shape_array)store_features_and_classification()
data = pd.concat([df, shape_df], axis=1)
# Add all the faces features with shape to a DATA CSV file for model purpose.
data.to_csv('all_features.csv')
????????這段代碼的主要目的是創(chuàng)建一個(gè)數(shù)據(jù)集,其中包含了面部特征和分類(lèi)形狀的信息,并將其保存到一個(gè)CSV文件中以供模型使用。
2.2 模型訓(xùn)練過(guò)程
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, normalize
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.neural_network import MLPClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import matplotlib.pyplot as plt# 導(dǎo)入數(shù)據(jù)
data = pd.read_csv('all_features.csv', index_col=None).drop('Unnamed: 0', axis=1).dropna()# 準(zhǔn)備數(shù)據(jù)
X = normalize(data.drop(['filenum', 'filename', 'classified_shape'], axis=1))
Y = data['classified_shape']# 標(biāo)準(zhǔn)化特征
scaler = StandardScaler()
X = scaler.fit_transform(X)# PCA降維
pca = PCA(n_components=18, svd_solver='randomized', whiten=True).fit(X)
X = pca.transform(X)# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25, random_state=1200)# MLP模型
mlp_best = MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', hidden_layer_sizes=(60, 100, 30, 100),learning_rate='constant', learning_rate_init=0.01, max_iter=100, random_state=525)
mlp_best.fit(X_train, Y_train)# KNN模型
neigh = KNeighborsClassifier(n_neighbors=5)
neigh.fit(X_train, Y_train)# 隨機(jī)森林模型
clf = RandomForestClassifier(n_estimators=100, max_depth=None, random_state=5)
clf.fit(X_train, Y_train)# 梯度提升模型
gb_best = GradientBoostingClassifier(n_estimators=300, max_depth=5, learning_rate=0.1)
gb_best.fit(X_train, Y_train)# LDA模型
lda = LinearDiscriminantAnalysis()
lda.fit(X_train, Y_train)# 可視化模型比較結(jié)果
def model_graph():models = [mlp_best, neigh, clf, gb_best, lda]model_names = ['MLP', 'KNN', 'Random Forest', 'Gradient Boosting', 'LDA']accuracies = [model.score(X_test, Y_test) for model in models]plt.figure(figsize=(10, 6))plt.bar(model_names, accuracies, color=['blue', 'green', 'pink', 'orange', 'purple'])plt.xlabel('Model')plt.ylabel('Accuracy')plt.title('Comparison of Models')plt.show()model_graph()
該代碼的主要目的為比較不同機(jī)器學(xué)習(xí)模型在識(shí)別面部形狀方面的性能,以幫助選擇最佳的模型用于面部形狀分類(lèi)任務(wù)。功能如下:
-
數(shù)據(jù)預(yù)處理:首先,導(dǎo)入必要的庫(kù),并加載以前處理過(guò)的數(shù)據(jù)。然后,將數(shù)據(jù)進(jìn)行清理,去除任何包含NaN值的行,并準(zhǔn)備好用于模型訓(xùn)練的特征矩陣 X 和目標(biāo)向量 Y。
-
標(biāo)準(zhǔn)化:使用
StandardScaler
對(duì)特征矩陣 X 進(jìn)行標(biāo)準(zhǔn)化,即移除平均值并縮放到單位方差,以確保每個(gè)特征對(duì)模型的貢獻(xiàn)大致相等。 -
PCA降維:對(duì)標(biāo)準(zhǔn)化后的特征矩陣 X 進(jìn)行主成分分析(PCA)降維,以減少特征的數(shù)量。作者選擇了包含 18 個(gè)主成分的 PCA 模型,通過(guò)
fit
方法擬合 PCA 模型,并使用transform
方法將數(shù)據(jù)轉(zhuǎn)換為新的主成分空間。 -
模型選擇與訓(xùn)練:作者嘗試了多種監(jiān)督學(xué)習(xí)模型,包括多層感知機(jī)(MLP)、K最近鄰分類(lèi)器(KNN)、隨機(jī)森林分類(lèi)器(Random Forest)、梯度提升分類(lèi)器(Gradient Boosting)和線(xiàn)性判別分析(LDA)。對(duì)于每個(gè)模型,作者通過(guò)調(diào)整超參數(shù)和使用交叉驗(yàn)證選擇最佳模型,并使用最佳模型在測(cè)試集上進(jìn)行評(píng)估。
-
模型評(píng)估:評(píng)估了每個(gè)模型在測(cè)試集上的性能,并將結(jié)果可視化為條形圖,展示了不同模型在識(shí)別不同面部形狀上的準(zhǔn)確率。最后,生成一個(gè)結(jié)果表格,匯總了每個(gè)模型對(duì)不同面部形狀的識(shí)別準(zhǔn)確率。實(shí)驗(yàn)結(jié)果如下:
3. 應(yīng)用實(shí)現(xiàn)
????????基于flask技術(shù)實(shí)現(xiàn)一個(gè)用于面部特征識(shí)別和發(fā)型推薦的應(yīng)用程序。
?????????該系統(tǒng)包含:
-
上傳照片功能:用戶(hù)可以在頁(yè)面中上傳自己的照片。上傳后,會(huì)顯示用戶(hù)的照片,并提供預(yù)測(cè)和推薦功能。
-
預(yù)測(cè)功能:用戶(hù)可以點(diǎn)擊“預(yù)測(cè)”按鈕,對(duì)上傳的照片進(jìn)行預(yù)測(cè),以推薦適合用戶(hù)臉型和其他特征的發(fā)型。
????????點(diǎn)擊開(kāi)始預(yù)測(cè)
輸出結(jié)果為:
4. 結(jié)語(yǔ)
????????該研究主要關(guān)注開(kāi)發(fā)一種發(fā)型推薦系統(tǒng),其目標(biāo)是根據(jù)用戶(hù)的面部形狀識(shí)別最適合的發(fā)型。主要研究?jī)?nèi)容包括:
????????1.數(shù)據(jù)收集和分析:收集具有各種面部形狀的用戶(hù)照片,并標(biāo)記其臉型,如長(zhǎng)形、圓形、橢圓形、心形或方形。構(gòu)建面部分類(lèi)器以確定用戶(hù)的臉型,使用機(jī)器學(xué)習(xí)技術(shù)構(gòu)建模型。數(shù)據(jù)集包含約74位名人的約1500張圖像,并存儲(chǔ)到CSV文件中以供模型使用。
????????2.模型訓(xùn)練過(guò)程:導(dǎo)入數(shù)據(jù),準(zhǔn)備數(shù)據(jù),并對(duì)特征進(jìn)行標(biāo)準(zhǔn)化和降維。使用多種機(jī)器學(xué)習(xí)模型進(jìn)行訓(xùn)練,包括MLP、KNN、隨機(jī)森林、梯度提升和LDA模型。比較不同模型在面部形狀分類(lèi)任務(wù)上的性能,并選擇最佳模型。
????????3.應(yīng)用實(shí)現(xiàn):基于Flask技術(shù)實(shí)現(xiàn)一個(gè)用于面部特征識(shí)別和發(fā)型推薦的應(yīng)用程序。應(yīng)用程序包括一個(gè)點(diǎn)擊開(kāi)始預(yù)測(cè)的功能,輸出用戶(hù)的面部形狀分類(lèi)結(jié)果和推薦的發(fā)型。
????????總的來(lái)說(shuō),該研究旨在幫助用戶(hù)了解適合其臉型的最佳發(fā)型,并提供個(gè)性化的發(fā)型推薦服務(wù)。
????????上述代碼的運(yùn)行環(huán)境為基于python3.7.0配置pandas==1.1.5 Flask==1.0.2 sklearn==0.0 scikit-learn==0.23.1 Werkzeug==0.16.0 opencv-python==4.1.0.25 numpy==1.19.5 matplotlib==3.3.4 Pillow==8.4.0 requests==2.18.4 bs4==0.0.1 beautifulsoup4==4.7.1 seaborn==0.11.0 scipy==1.5.4。
完整代碼:
https://download.csdn.net/download/weixin_40651515/89136480