日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python h5游戏_从零开始制作H5人脸融合小游戏

發布時間:2025/4/5 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python h5游戏_从零开始制作H5人脸融合小游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

去年的建軍節,一個展示軍裝照的H5人臉融合游戲火遍朋友圈,帶來很好的傳播效果。最近歐冠決賽要來了,公司決定做一個尋找和你最像的歐冠球星的H5游戲,那么該怎么做呢?認真分析了一下,這個游戲其實用到的技術還是挺多的,是一個比較綜合的項目。主要用到技術如下:

人臉識別

Python web和Java web

域名解析和nginx

微信JS

H5頁面

人臉識別

人臉識別的API各大平臺都有提供,百度,阿里,優圖(騰訊),Face++. 各家的API大體相似,主要區別只是取的點的個數和返回結果的數據結構,都可用。BAT的都有免費可用(如果對QPS沒有過高要求的話),Face++ 需要收費1元/次(墻裂懷疑失了智)。綜合比較之后選擇使用優圖。

http://open.youtu.qq.com/#/develop/api-face-analysis-detect

SDK下載

http://open.youtu.qq.com/#/develop/tool-sdk

后端采用python,所以下載python版本的SDK。

youtu配置

從優圖獲取的人臉識別之后的信息全部是面部點的信息,需要進行處理,具體的處理方法全部在

https://github.com/tonyiweb/face_merge_master (star,fork來一套?)

感興趣的star,fork一下

人臉融合大師,可以滿足你10分鐘做出人臉融合功能的理想工具,你值得擁有。

Python web和Java web

基于性能和表現的考慮,做了一個分離。圖片識別和融合的功能全部放在一個Python web項目中,作為一個api,然后在Java web項目中調用這個API,將返回的結果或者錯誤信息返回到H5頁面。

Python web

python是一個能快速開發的語言,有很多易用的web框架可以使用,這里就選擇Tornado這個框架。

Tornado使用

服務器上通過nohup python -u run.py& 就可以啟動一個端口號為9010(代碼中可以指定,一般在7000以后)的服務。 nohup可以保證服務長期后臺運行,并且可以通過tail -f nohup.out來查看日志。服務可以通過ps -ef|grep python查詢服務的pid,再通過kill -9 pid來停止。

Java web

采用SpringBoot搭建的微服務,沒有任何界面。接受H5頁面傳過來的圖片,去調用人臉融合的API,根據結果返回調用結果或者錯誤信息。

API返回結果

域名解析和nginx

域名解析的過程其實就是一個通過名字(相對好記一些)找IP地址(相對難以記憶)的過程,而IP地址又對應一臺服務器,也就是通過名字定位服務器。在控制臺的域名解析中新加一條記錄,指向代碼部署的服務器。

因為一臺服務器上其實是部署多個服務,也會被多個域名所指向,所以其實還需要一個東西來指引服務所要對應的域名,這個東西就是nginx。 一個服務一般是要對應一個端口的,nginx可以監聽一個端口,然后將這個端口的服務定向到某個域名。

僅支持https

既支持http也支持https

注意:1,https服務需要安全證書,可以在阿里云的安全中的CA證書服務中購買(有免費的Symantic的證書)

2,一般默認的是http的,如果沒有必要可以不用帶安全證書的https服務

3,通過whereis nginx命令查找nginx的位置,通過vhost統一管理nginx配置文件

4,配置完nginx之后,需要重啟nginx服務,命令: ./nginx -s reload 如果沒有錯誤,就說明已經重啟了。

微信JS

1,配置微信。需要在后臺根據jsapi_ticket等信息生成簽名

(1)前臺

//這里的url為當前頁面的路徑,為了使得分享之后的鏈接也是可用

var url = window.location.href;

$.get(baseUrl+"/common/get_wx_config",{url:url},

function(data){

wx.config({

debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。

appId: data.appId, // 必填,公眾號的唯一標識

timestamp: data.timestamp, // 必填,生成簽名的時間戳

nonceStr: data.nonceStr, // 必填,生成簽名的隨機串

signature: data.signature,// 必填,簽名,

jsApiList: ['checkJsApi','chooseImage','uploadImage','onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone'] // 必填,需要使用的JS接口列表

});

setShareInfo('','');

})

(2)后臺,微信簽名過程

微信簽名過程

2,拍照或者從相冊中選擇照片

var serverId='0';

function getPic(){

wx.checkJsApi({

jsApiList: ['chooseImage'], // 需要檢測的JS接口列表,所有JS接口列表見附錄2,

success: function(res) {

if(res.checkResult.chooseImage){

wx.chooseImage({

count: 1, // 默認9

sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有

sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有

success: function (res) {

var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標簽的src屬性顯示圖片

$("#selfImg").attr("src",localIds);

wx.uploadImage({

localId: localIds[0], // 需要上傳的圖片的本地ID,由chooseImage接口獲得

isShowProgressTips: 1, // 默認為1,顯示進度提示

success: function (res) {

serverId = res.serverId; // 返回圖片的服務器端ID

$("#nextBtn").css("display","block");

}

});

}

});

}else{

showAlert("微信版本過低,無法使用相機和相冊功能","fail");

}

}

});

}

3,上傳圖片并獲得人臉融合結果

(1)前臺

if(serverId!='0'){

if(gender==1){

showAlert("正在玩命給小主兒尋找最像你的球星...","loading");

}else{

showAlert("正在玩命給小主兒尋找最像你的球星太太...","loading");

}

//在服務器端下載圖片,并作人臉融合,返回融合后的結果給img的src

$.get(baseUrl+"/common/download_image",{serverId:serverId,gender:gender},

function(data){

if(data.status=='success'){

hideAlert();

$("#loadingPage").css("display","none");

$("#firstPage").css("display","none");

$("#secondPage").css("display","none");

$("#thirdPage").css("display","block");

var imageData = JSON.parse(data.data);

$("#resultName").html(imageData.modelShortName);

if(gender==1){

$("#discriptionText").html(imageData.description+',要被你迷倒啦(^_-');

setShareInfo(imageData.imageUrl[2],'和我最像的歐冠球星是'+imageData.modelShortName+','+imageData.description)

}else{

$("#discriptionText").html(imageData.modelName+','+imageData.description+',要被你迷倒啦(^_-');

setShareInfo(imageData.imageUrl[2],'和我最像的歐冠女神是'+imageData.modelShortName+','+imageData.description)

}

$('#firstResultImg').animateCss('fadeIn', function() {

$("#firstResultImg").attr("src",imageData.imageUrl[0]);

$("#firstResultImg").addClass('animated flash');

$("#secondResultImg").animateCss('fadeIn',function(){

$("#secondResultImg").attr("src",imageData.imageUrl[1]);

$("#secondResultImg").addClass('animated flash');

$("#thirdResultImg").animateCss('fadeIn',function(){

$("#thirdResultImg").attr("src",imageData.imageUrl[2]);

$("#thirdResultImg").addClass('animated flash');

$("#fourthResultImg").animateCss('fadeIn',function(){

$("#fourthResultImg").attr("src",imageData.imageUrl[3]);

$("#fourthResultImg").addClass('animated flash');

$("#resultName").addClass('animated bounceIn');

});

});

});

});

}else{

if(gender==1){

showAlert("好遺憾,沒有找到和你相像的球星呢...換張照片,再玩一次吧","fail");

}else{

showAlert("好遺憾,沒有找到和你相像的球星太太呢...換張照片,再玩一次吧","fail");

}

}

})

}else{

showAlert("好遺憾,你還沒有上傳任何照片哦...","fail");

}

(2)后臺,上傳照片并進行人臉融合

上傳照片并進行人臉融合

注意:需要在真機上才可以調用相機和相冊

注意:要使用的域名必須在公眾號設置——>功能設置中添加

H5頁面

頁面的大半是要依賴UI設計師,下面放些設計圖,實現過程就省略掉(假裝不重要.)...

啟動頁

性別選擇頁

上傳照片頁

結果頁

注意:H5頁面的難點其實是在于兼容,這里通過計算設備寬度,得到相對尺寸rem,然后給元素設置以rem為單位的位置尺寸等信息,做到全部兼容ios移動設備和大部分Android設備

注意:頁面中使用到了Animate.css這個CSS動畫框架,鏈接:http://blog.superwr.top/2018/%E5%8A%A8%E7%94%BB%E6%8F%92%E4%BB%B6animate-css%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E/

總結

以上是生活随笔為你收集整理的python h5游戏_从零开始制作H5人脸融合小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。