當前位置:首頁 » 雲伺服器 » 怎麼載入模型文件到伺服器

怎麼載入模型文件到伺服器

發布時間: 2023-02-04 14:03:31

Ⅰ cs1.6 如何把模型放在伺服器上

如果在互聯網上玩的伺服器的話 別人進去那個伺服器 就會下載那個伺服器里的東西包括人物 如果你是在區域網上玩 你進去別人的伺服器或者別人進你的伺服器 是不會下載的 他們是按自己的版本的 除非你有伺服器在互聯網上 就可以

我的世界怎麼把MOD裝到伺服器裡面

下個開服器,開服器文件夾里有個mods文件夾,把你要用的mod直接復制到mods文件夾裡面就好了,然後開服,如果正常開服的話就是成功安裝mod了

Ⅲ 如何在後台部署深度學習模型

搭建深度學習後台伺服器

我們的Keras深度學習REST API將能夠批量處理圖像,擴展到多台機器(包括多台web伺服器和Redis實例),並在負載均衡器之後進行循環調度。

為此,我們將使用:

  • KerasRedis(內存數據結構存儲)

  • Flask (python的微web框架)

  • 消息隊列和消息代理編程範例

  • 本篇文章的整體思路如下:

    我們將首先簡要討論Redis數據存儲,以及如何使用它促進消息隊列和消息代理。然後,我們將通過安裝所需的Python包來配置Python開發環境,以構建我們的Keras深度學習REST API。一旦配置了開發環境,就可以使用Flask web框架實現實際的Keras深度學習REST API。在實現之後,我們將啟動Redis和Flask伺服器,然後使用cURL和Python向我們的深度學習API端點提交推理請求。最後,我們將以對構建自己的深度學習REST API時應該牢記的注意事項的簡短討論結束。

    第一部分:簡要介紹Redis如何作為REST API消息代理/消息隊列

    測試和原文的命令一致。


    第三部分:配置Python開發環境以構建Keras REST API

    文章中說需要創建新的虛擬環境來防止影響系統級別的python項目(但是我沒有創建),但是還是需要安裝rest api所需要依賴的包。以下為所需要的包。


    第四部分:實現可擴展的Keras REST API

    首先是Keras Redis Flask REST API數據流程圖

    讓我們開始構建我們的伺服器腳本。為了方便起見,我在一個文件中實現了伺服器,但是它可以按照您認為合適的方式模塊化。為了獲得最好的結果和避免復制/粘貼錯誤,我建議您使用本文的「下載」部分來獲取相關的腳本和圖像。

    為了簡單起見,我們將在ImageNet數據集上使用ResNet預訓練。我將指出在哪裡可以用你自己的模型交換ResNet。flask模塊包含flask庫(用於構建web API)。redis模塊將使我們能夠與redis數據存儲介面。從這里開始,讓我們初始化將在run_keras_server.py中使用的常量.


    我們將向伺服器傳遞float32圖像,尺寸為224 x 224,包含3個通道。我們的伺服器可以處理一個BATCH_SIZE = 32。如果您的生產系統上有GPU(s),那麼您需要調優BATCH_SIZE以獲得最佳性能。我發現將SERVER_SLEEP和CLIENT_SLEEP設置為0.25秒(伺服器和客戶端在再次輪詢Redis之前分別暫停的時間)在大多數系統上都可以很好地工作。如果您正在構建一個生產系統,那麼一定要調整這些常量。

    讓我們啟動我們的Flask app和Redis伺服器:


    在這里你可以看到啟動Flask是多麼容易。在運行這個伺服器腳本之前,我假設Redis伺服器正在運行(之前的redis-server)。我們的Python腳本連接到本地主機6379埠(Redis的默認主機和埠值)上的Redis存儲。不要忘記將全局Keras模型初始化為None。接下來我們來處理圖像的序列化:


    Redis將充當伺服器上的臨時數據存儲。圖像將通過諸如cURL、Python腳本甚至是移動應用程序等各種方法進入伺服器,而且,圖像只能每隔一段時間(幾個小時或幾天)或者以很高的速率(每秒幾次)進入伺服器。我們需要把圖像放在某個地方,因為它們在被處理前排隊。我們的Redis存儲將作為臨時存儲。

    為了將圖像存儲在Redis中,需要對它們進行序列化。由於圖像只是數字數組,我們可以使用base64編碼來序列化圖像。使用base64編碼還有一個額外的好處,即允許我們使用JSON存儲圖像的附加屬性。

    base64_encode_image函數處理序列化。類似地,在通過模型傳遞圖像之前,我們需要反序列化圖像。這由base64_decode_image函數處理。

    預處理圖片


    我已經定義了一個prepare_image函數,它使用Keras中的ResNet50實現對輸入圖像進行預處理,以便進行分類。在使用您自己的模型時,我建議修改此函數,以執行所需的預處理、縮放或規范化。

    從那裡我們將定義我們的分類方法


    classify_process函數將在它自己的線程中啟動,我們將在下面的__main__中看到這一點。該函數將從Redis伺服器輪詢圖像批次,對圖像進行分類,並將結果返回給客戶端。

    在model = ResNet50(weights="imagenet")這一行中,我將這個操作與終端列印消息連接起來——根據Keras模型的大小,載入是即時的,或者需要幾秒鍾。

    載入模型只在啟動這個線程時發生一次——如果每次我們想要處理一個映像時都必須載入模型,那麼速度會非常慢,而且由於內存耗盡可能導致伺服器崩潰。

    載入模型後,這個線程將不斷輪詢新的圖像,然後將它們分類(注意這部分代碼應該時尚一部分的繼續)


    在這里,我們首先使用Redis資料庫的lrange函數從隊列(第79行)中獲取最多的BATCH_SIZE圖像。

    從那裡我們初始化imageIDs和批處理(第80和81行),並開始在第84行開始循環隊列。

    在循環中,我們首先解碼對象並將其反序列化為一個NumPy數組image(第86-88行)。

    接下來,在第90-96行中,我們將向批處理添加圖像(或者如果批處理當前為None,我們將該批處理設置為當前圖像)。

    我們還將圖像的id附加到imageIDs(第99行)。

    讓我們完成循環和函數

    在這個代碼塊中,我們檢查批處理中是否有圖像(第102行)。如果我們有一批圖像,我們通過模型(第105行)對整個批進行預測。從那裡,我們循環一個圖像和相應的預測結果(110-122行)。這些行向輸出列表追加標簽和概率,然後使用imageID將輸出存儲在Redis資料庫中(第116-122行)。

    我們使用第125行上的ltrim從隊列中刪除了剛剛分類的圖像集。最後,我們將睡眠設置為SERVER_SLEEP時間並等待下一批圖像進行分類。下面我們來處理/predict我們的REST API端點


    稍後您將看到,當我們發布到REST API時,我們將使用/predict端點。當然,我們的伺服器可能有多個端點。我們使用@app。路由修飾符以第130行所示的格式在函數上方定義端點,以便Flask知道調用什麼函數。我們可以很容易地得到另一個使用AlexNet而不是ResNet的端點,我們可以用類似的方式定義具有關聯函數的端點。你懂的,但就我們今天的目的而言,我們只有一個端點叫做/predict。

    我們在第131行定義的predict方法將處理對伺服器的POST請求。這個函數的目標是構建JSON數據,並將其發送回客戶機。如果POST數據包含圖像(第137和138行),我們將圖像轉換為PIL/Pillow格式,並對其進行預處理(第141-143行)。

    在開發這個腳本時,我花了大量時間調試我的序列化和反序列化函數,結果發現我需要第147行將數組轉換為C-contiguous排序(您可以在這里了解更多)。老實說,這是一個相當大的麻煩事,但我希望它能幫助你站起來,快速跑。

    如果您想知道在第99行中提到的id,那麼實際上是使用uuid(通用唯一標識符)在第151行生成的。我們使用UUID來防止hash/key沖突。

    接下來,我們將圖像的id和base64編碼附加到d字典中。使用rpush(第153行)將這個JSON數據推送到Redis db非常簡單。

    讓我們輪詢伺服器以返回預測

    我們將持續循環,直到模型伺服器返回輸出預測。我們開始一個無限循環,試圖得到157-159條預測線。從這里,如果輸出包含預測,我們將對結果進行反序列化,並將結果添加到將返回給客戶機的數據中。我們還從db中刪除了結果(因為我們已經從資料庫中提取了結果,不再需要將它們存儲在資料庫中),並跳出了循環(第163-172行)。

    否則,我們沒有任何預測,我們需要睡覺,繼續投票(第176行)。如果我們到達第179行,我們已經成功地得到了我們的預測。在本例中,我們向客戶機數據添加True的成功值(第179行)。注意:對於這個示例腳本,我沒有在上面的循環中添加超時邏輯,這在理想情況下會為數據添加一個False的成功值。我將由您來處理和實現。最後我們稱燒瓶。jsonify對數據,並將其返回給客戶端(第182行)。這就完成了我們的預測函數。

    為了演示我們的Keras REST API,我們需要一個__main__函數來實際啟動伺服器

    第186-196行定義了__main__函數,它將啟動classify_process線程(第190-192行)並運行Flask應用程序(第196行)。

    第五部分:啟動可伸縮的Keras REST API

    要測試我們的Keras深度學習REST API,請確保使用本文的「下載」部分下載源代碼示例圖像。從這里,讓我們啟動Redis伺服器,如果它還沒有運行:

  • redis-server

  • 然後,在另一個終端中,讓我們啟動REST API Flask伺服器:

  • python run_keras_server.py

  • 另外,我建議在向伺服器提交請求之前,等待您的模型完全載入到內存中。現在我們可以繼續使用cURL和Python測試伺服器。

    第七部分:使用cURL訪問Keras REST API

    使用cURL來測試我們的Keras REST API伺服器。這是我的家庭小獵犬Jemma。根據我們的ResNet模型,她被歸類為一隻擁有94.6%自信的小獵犬。

  • curl -X POST -F [email protected] 'http://localhost:5000/predict'

  • 你會在你的終端收到JSON格式的預測:

  • {"predictions": [{"label": "beagle","probability": 0.9461546540260315},{"label": "bluetick","probability": 0.031958919018507004},{"label": "redbone","probability": 0.006617196369916201},{"label": "Walker_hound","probability": 0.0033879687543958426},{"label": "Greater_Swiss_Mountain_dog","probability": 0.0025766862090677023}],"success": true}

  • 第六部分:使用Python向Keras REST API提交請求

    如您所見,使用cURL驗證非常簡單。現在,讓我們構建一個Python腳本,該腳本將發布圖像並以編程方式解析返回的JSON。

    讓我們回顧一下simple_request.py

  • # import the necessary packagesimport requests# initialize the Keras REST API endpoint URL along with the input# image pathKERAS_REST_API_URL = "http://localhost:5000/predict"IMAGE_PATH = "jemma.png"

  • 我們在這個腳本中使用Python請求來處理向伺服器提交數據。我們的伺服器運行在本地主機上,可以通過埠5000訪問端點/predict,這是KERAS_REST_API_URL變數(第6行)指定的。

    我們還定義了IMAGE_PATH(第7行)。png與我們的腳本在同一個目錄中。如果您想測試其他圖像,請確保指定到您的輸入圖像的完整路徑。

    讓我們載入圖像並發送到伺服器:

  • # load the input image and construct the payload for the requestimage = open(IMAGE_PATH, "rb").read()payload = {"image": image}# submit the requestr = requests.post(KERAS_REST_API_URL, files=payload).json()# ensure the request was sucessfulif r["success"]: # loop over the predictions and display them for (i, result) in enumerate(r["predictions"]): print("{}. {}: {:.4f}".format(i + 1, result["label"], result["probability"]))# otherwise, the request failedelse: print("Request failed")

  • 我們在第10行以二進制模式讀取圖像並將其放入有效負載字典。負載通過請求發送到伺服器。在第14行發布。如果我們得到一個成功消息,我們可以循環預測並將它們列印到終端。我使這個腳本很簡單,但是如果你想變得更有趣,你也可以使用OpenCV在圖像上繪制最高的預測文本。

    第七部分:運行簡單的請求腳本

    編寫腳本很容易。打開終端並執行以下命令(當然,前提是我們的Flask伺服器和Redis伺服器都在運行)。

  • python simple_request.py

  • 使用Python以編程方式使用我們的Keras深度學習REST API的結果

    第八部分:擴展深度學習REST API時的注意事項

    如果您預期在深度學習REST API上有較長一段時間的高負載,那麼您可能需要考慮一種負載平衡演算法,例如循環調度,以幫助在多個GPU機器和Redis伺服器之間平均分配請求。

    記住,Redis是內存中的數據存儲,所以我們只能在隊列中存儲可用內存中的盡可能多的圖像。

    使用float32數據類型的單個224 x 224 x 3圖像將消耗602112位元組的內存。

Ⅳ 如何將cnn模型放到伺服器上運行

一、模型載入

用已經訓練好的模型來檢測,rcnn_model_file指模型路徑。

二、候選區域提取(Region proposals)

本論文採用selective search[3]方法生成候選區域,代碼作者以給出,rcnn代碼中的selective_search_boxes.m是根據selective search源代碼中的demo.m修改的,參數im是矩陣圖,不是圖片路徑,最後輸出格式為N * 4的矩陣,N表示region proposals 的個數,每行表示一個region proposal對角線坐標。

三、特徵提取(Feature extraction)

使用rcnn_features為每一個region proposals提取cnn特徵,輸出結果為N * 4096,每行表示一個region proposal的特徵。

四、分類(classification)

調用下面函數為每一個region proposal計算各類的score,結果為N * C 矩陣,C表示物體類別個數,每行表示一個region proposal對應各個類別的score。

Ⅳ xml樣式文件放伺服器上應該怎麼載入

配置一個Servlet,啟動的時候載入Servlet,在servlet的初始化方法中,寫代碼讀取你的xml文件中的信息,放到內存中即可。

Ⅵ eps怎麼載入三維模型

eps載入三維模型的方法是:使用OSGB生成DSM文件。

eps它有一個osgb數據轉換,也就這是我們的轉換格式。這是smart3D生成的OS gb格式。這個也是一樣,首先我先把路徑所有的都給它清空,然後自己在選擇新的選擇路徑名。這個是要選擇smart3D的數據。

該文件內它包含的這些都是他的文件夾,我們直接選擇data目錄就可以,然後這個元數據是選它的xml文件。

我們選一下傾斜攝影的XML文件,然後我們點擊確定,他在轉換轉換的話,它也會在它的同目錄生成一個DSM這個是很快的,我們可以看一下。

因為這是在本機器,然後下邊我們還有一個在網路的話,一般是為了統一管理。我們看一下它的路徑,我們載入Dsm,現在這一片我們就是要生產的smart3D生成的OSGB的格式生成的數據,我們左邊同時也可以載入超大影像,它也是有相對應的正射影像的。

eps三維模型旋轉模型的方法是:

我們看一下剛剛我們看的垂直攝影的立面,就是側面的紋理就非常的不清晰,都是拉花的狀態。現在咱們看一下,特別清晰了。

你360度的旋轉,咱們旋轉的時候按住滑鼠的左鍵按鈕,然後他就可以360度旋轉了。你看他側面的所有的紋理都是非常清晰的,而且包括你從視覺上你就可以數出來這個樓到底是幾層。

Ⅶ 如何在unitywebgl上載入10g模型

前言

大部分的webgl框架,比如threejs和babylon等,都可以載入obj和gltf模型。 我們的引擎,基於three封裝,同樣有載入模型的loader,因此載入obj和gltf模型也是很簡單就可以實現的。

不過載入文件都是在線的文件,也就是通過url的形式進行載入。 團隊開發的三維可視化平台框架,需要能夠上傳obj和gltf等格式的模型,在上傳前,需要先對模型預覽,這就涉及到如何載入本地模型的問題了。

載入本地模型

本文以gltf為例,進行說明。 載入本地模型的思路是這樣的: 既然引擎可以通過url的機制,載入模型。 那麼如果有一種機制,可以把本地文件及其關聯的資源(比如貼圖)等轉換成url的形式,就可以進行使用loader進行訪問了。

Blob & File

首先我們學習下Blob和File對象,以下內容來自MDN:

Blob對象表示一個不可變、原始數據的類文件對象。它的數據可以按文本或二進制的格式進行讀取,也可以轉換成 ReadableStream 來用於數據操作。

Blob 表示的不一定是JavaScript原生格式的數據。File 介面基於Blob,繼承了 blob 的功能並將其擴展使其支持用戶系統上的文件。

File 對象是特殊類型的 Blob,且可以用在任意的 Blob 類型的 context 中。比如說, FileReader, URL.createObjectURL(), createImageBitmap() (en-US), 及 XMLHttpRequest.send() 都能處理 Blob 和 File。

Ⅷ 如何載入資料庫Fbx文件,不是assetbundle

由於我們要將模型資源放在遠程的伺服器端,但如果直接放fbx模型是不可以載入的,所以我們可以將fbx做成預設或者是直接將其打包成assetbundle格式的,然後通過www來載入獲取。

1.首先要講一下不同平台下的一個StreamingAssets路徑,這是不同的。

//不同平台下StreamingAssets的路徑是不同的,這里需要注意一下。
public static readonly string PathURL =
#if UNITY_ANDROID //安卓
"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE //iPhone
Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR //windows平台和web平台
"file://" + Application.dataPath + "/StreamingAssets/";
#else
string.Empty;
#endif

這就獲取到了不同平台的一個路徑,我們可以將打包的文件放在這些路徑下,然後再從這路徑去讀取資源。

2.關於打包assetbundle的腳本

using UnityEngine;
using System.Collections;
using UnityEditor;

public class Test : Editor
{
//打包單個
[MenuItem("Custom Editor/Create AssetBunldes Main")]
static void CreateAssetBunldesMain ()
{
//獲取在Project視圖中選擇的所有游戲對象
Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);

//遍歷所有的游戲對象
foreach (Object obj in SelectedAsset)
{
//本地測試:建議最後將Assetbundle放在StreamingAssets文件夾下,如果沒有就創建一個,因為移動平台下只能讀取這個路徑
//StreamingAssets是只讀路徑,不能寫入
//伺服器下載:就不需要放在這里,伺服器上客戶端用www類進行下載。
string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle";
if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) {
Debug.Log(obj.name +"資源打包成功");
}
else
{
Debug.Log(obj.name +"資源打包失敗");
}
}
//刷新編輯器
AssetDatabase.Refresh ();

}

[MenuItem("Custom Editor/Create AssetBunldes ALL")]
static void CreateAssetBunldesALL ()
{

Caching.CleanCache ();

string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle";

Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);

foreach (Object obj in SelectedAsset)
{
Debug.Log ("Create AssetBunldes name :" + obj);
}

//這里注意第二個參數就行
if (BuildPipeline.BuildAssetBundle (null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies)) {
AssetDatabase.Refresh ();
} else {

}
}

[MenuItem("Custom Editor/Create Scene")]
static void CreateSceneALL ()
{
//清空一下緩存
Caching.CleanCache();
string Path = Application.dataPath + "/MyScene.unity3d";
string []levels = {"Assets/Level.unity"};
//打包場景
BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
AssetDatabase.Refresh ();
}

}

前提要新手動創建一個StreamingAssets文件夾
3.讀取資源,這里只舉例從本地讀取,跟從網路讀取是一樣的,可以參考官方文檔:

using UnityEngine;
using System.Collections;

public class RunScript : MonoBehaviour
{

//不同平台下StreamingAssets的路徑是不同的,這里需要注意一下。
public static readonly string PathURL =
#if UNITY_ANDROID
"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE
Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
"file://" + Application.dataPath + "/StreamingAssets/";
#else
string.Empty;
#endif

void OnGUI()
{
if(GUILayout.Button("Main Assetbundle"))
{
//StartCoroutine(LoadMainGameObject(PathURL + "Prefab0.assetbundle"));
//StartCoroutine(LoadMainGameObject(PathURL + "Prefab1.assetbundle"));

StartCoroutine(LoadMainCacheGameObject(PathURL + "Prefab0.assetbundle"));
StartCoroutine(LoadMainCacheGameObject(PathURL + "Prefab1.assetbundle"));
}

if(GUILayout.Button("ALL Assetbundle"))
{
StartCoroutine(LoadALLGameObject(PathURL + "ALL.assetbundle"));
}

if(GUILayout.Button("Open Scene"))
{
StartCoroutine(LoadScene());
}

}

//讀取一個資源

private IEnumerator LoadMainGameObject(string path)
{
WWW bundle = new WWW(path);

yield return bundle;

//載入到游戲中
yield return Instantiate(bundle.assetBundle.mainAsset);

bundle.assetBundle.Unload(false);
}

//讀取全部資源

private IEnumerator LoadALLGameObject(string path)
{
WWW bundle = new WWW(path);

yield return bundle;

//通過Prefab的名稱把他們都讀取出來
Object obj0 = bundle.assetBundle.Load("Prefab0");
Object obj1 = bundle.assetBundle.Load("Prefab1");

//載入到游戲中
yield return Instantiate(obj0);
yield return Instantiate(obj1);
bundle.assetBundle.Unload(false);
}

private IEnumerator LoadMainCacheGameObject(string path)
{
WWW bundle = (path,5);

yield return bundle;

//載入到游戲中
yield return Instantiate(bundle.assetBundle.mainAsset);

bundle.assetBundle.Unload(false);
}

private IEnumerator LoadScene()
{
WWW download = ("file://"+Application.dataPath + "/MyScene.unity3d", 1);

yield return download;
var bundle = download.assetBundle;
Application.LoadLevel ("Level");
}
}

Ⅸ 網游的地圖人物模型在伺服器哪裡

問題說簡單也簡單,說難也難,給你個大體的說法首先找到1個模型,然後解壓在桌。然後打開1個地圖(沒有加密的)然後按F12,找到一個像左箭頭的那個(文件,模型導入)。然後導入你放在桌面上的東西。在這里我要說明下。一般來說是有2個樣式。2個文件,一個是BIP,還有一個是MDX文件。一般就這2個。我們先將這2個文件的名字叫123.mdx 和123.blp.(他文件前面名字一樣後面的格式不一樣)。然後這里重點出來了。你導入成功之後你就看見這個,war3....\123.mdx ,war3....\123.blp,這是不能用的,你必須要刪除掉一個東西才可以。你雙擊「war3....\123.blp」,然後點擊自定義然後把前面的東西全部刪除只剩下這:「123.blp」,而那個MDX文件不要管他,刪除完成之後保存地圖,然後關閉WE工具。是完完全全的關閉。再然後打開你那個地圖之後隨便找個單位在模型中選擇第2個,你導入的模型即可。如果這樣你還不懂, 我已經加你QQ,可以問我。

Ⅹ prprlive下載好的模型文件怎麼導入


首先打開prprlive(steam有下載)
左上角導入模型。
點擊載入,尋找本地模型目錄。
找到對應模型文件夾的json雙擊導入。
再次點擊左上角雙擊已經導入的模型。
出現模型後alt+滾輪縮放。
點擊面捕設置。
自動眨眼建議關閉有時影響眼睛識別。
選擇好攝像頭後開啟面捕。
按鍵設置選擇左上角第二項。

熱點內容
只狼和看門狗哪個配置高 發布:2025-05-17 12:50:21 瀏覽:205
扁桃玩的伺服器地址 發布:2025-05-17 12:18:25 瀏覽:509
u盤上傳歌 發布:2025-05-17 12:14:51 瀏覽:613
入門c語言設計 發布:2025-05-17 12:08:31 瀏覽:41
c3演算法 發布:2025-05-17 12:04:19 瀏覽:365
phprecv 發布:2025-05-17 11:55:00 瀏覽:613
福建時鍾監控網關伺服器雲主機 發布:2025-05-17 11:54:28 瀏覽:251
c資料庫壓縮 發布:2025-05-17 11:39:22 瀏覽:965
安卓手機如何連接音響功放 發布:2025-05-17 11:37:48 瀏覽:965
破解exe加密視頻 發布:2025-05-17 11:23:41 瀏覽:981