0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

討論游戲Emoji Scavenger Hunt的內(nèi)部運(yùn)作方式

Tensorflowers ? 來(lái)源:未知 ? 作者:李倩 ? 2018-10-13 10:41 ? 次閱讀

在這篇文章中,我們將討論游戲 Emoji Scavenger Hunt 的內(nèi)部運(yùn)作方式。我們將向您展示如何使用 TensorFlow 訓(xùn)練用于對(duì)象識(shí)別的自定義模型以及如何在 Web 前端使用 TensorFlow.js 使用該模型。在使用瀏覽器 API 進(jìn)行攝像頭訪問(wèn)和文本到語(yǔ)音的轉(zhuǎn)換時(shí),我們還將介紹一些挑戰(zhàn)和解決方法。這個(gè)游戲的所有代碼都是開(kāi)源的,可以在 Github 上找到(https://github.com/google/emoji-scavenger-hunt)。

介紹游戲 Emoji Scavenger Hunt

Emoji Scavenger Hunt 是一個(gè)有趣的游戲,你會(huì)看到一個(gè)表情符合,并在秒數(shù)之內(nèi)找到真實(shí)世界的等效物體。當(dāng)你在現(xiàn)實(shí)世界中發(fā)現(xiàn)表情符號(hào)時(shí),隨后的表情符號(hào)顯示難度增加。從你可能擁有的物品開(kāi)始,比如鞋子,書(shū)本或者你自己的手以及像香蕉,蠟燭甚至踏板車這樣的東西。

我們的目標(biāo)是以有趣,互動(dòng)的方式展示機(jī)器學(xué)習(xí)技術(shù)。

訓(xùn)練對(duì)象識(shí)別模型

Emoji Scavenger Hunt 游戲的核心功能是識(shí)別您的相機(jī)所看到的物體,并將其與游戲要求您找到的物體(表情符號(hào))相匹配。但相機(jī)如何知道它看到了什么?我們需要一個(gè)可以幫助識(shí)別物體的模型。最初我們開(kāi)始使用名為 MobileNet 的預(yù)訓(xùn)練模型。這個(gè)模型是輕量級(jí)的,并針對(duì)移動(dòng)設(shè)備進(jìn)行了優(yōu)化,但其中的對(duì)象太具體,不適合我們的游戲。例如,確定了像 “金毛獵犬” 這樣的犬種,但沒(méi)有 “狗” 的通用對(duì)象類。我們逐漸意識(shí)到需要訓(xùn)練自定義的圖像識(shí)別模型。

這是轉(zhuǎn)移學(xué)習(xí)可以派上用場(chǎng)的地方。轉(zhuǎn)移學(xué)習(xí)是一種技術(shù),它通過(guò)將其用于另一個(gè)目標(biāo)任務(wù)來(lái)重用針對(duì)特定任務(wù)而訓(xùn)練的機(jī)器學(xué)習(xí)模型。我們通過(guò)使用此教程中描述的過(guò)程重新訓(xùn)練基于 MobileNet 的模型來(lái)構(gòu)建我們自己的自定義模型。我們添加了一個(gè)全連接層,它將默認(rèn)輸出 logits 映射到我們想要的表情符號(hào)對(duì)象,如 “手” 和 “鍵盤(pán)” 等。我們列出了大約400個(gè)對(duì)象用于物體識(shí)別并收集 100-1000 個(gè)圖像作為每個(gè)對(duì)象的訓(xùn)練數(shù)據(jù)。添加的全連接層通過(guò)組合來(lái)自 MobileNet 輸出層的 1000 個(gè)信號(hào)來(lái)推斷這 400 個(gè)對(duì)象。

注:教程 鏈接

https://www.tensorflow.org/hub/tutorials/image_retraining

訓(xùn)練腳本可在 TensorFlow Github 存儲(chǔ)庫(kù)中找到(https://github.com/tensorflow/hub/blob/master/examples/image_retraining/retrain.py)。我們將訓(xùn)練過(guò)程編譯為 Dockerfile,以便您可以通過(guò)指向自己的圖像數(shù)據(jù)集來(lái)訓(xùn)練自己的模型

我們運(yùn)行腳本將訓(xùn)練圖像數(shù)據(jù)提供給模型。為了簡(jiǎn)化我們的訓(xùn)練流程,我們?cè)?Google Cloud Platform 上構(gòu)建了整個(gè)管道。所有的訓(xùn)練數(shù)據(jù)都將存儲(chǔ)在 Google Cloud 存儲(chǔ)桶中。通過(guò)在 Google Functions 設(shè)置云存儲(chǔ)觸發(fā)器,一旦在存儲(chǔ)桶中檢測(cè)到任何變化,就會(huì)啟動(dòng)計(jì)算引擎上的 GPU 實(shí)例。GPU 實(shí)例以 TensorFlow SavedModel 格式輸出再訓(xùn)練模型,并將其保存在云存儲(chǔ)上的另一個(gè)存儲(chǔ)桶中。

模型培訓(xùn)的數(shù)據(jù)管道

我們?nèi)绾闻c TensorFlow.js 集成

完成上述模型訓(xùn)練中的步驟后,我們最終得到了一個(gè)用于對(duì)象識(shí)別的 TensorFlow SavedModel。為了通過(guò) TensorFlow.js 在瀏覽器中訪問(wèn)和使用此模型,我們使用 TensorFlow.js 轉(zhuǎn)換器將此 SavedModel 轉(zhuǎn)換為 TensorFlow.js 可以加載的格式。

識(shí)別對(duì)象的行為可以分為兩個(gè)子任務(wù)。首先,從相機(jī)中抓取像素,然后將圖像數(shù)據(jù)發(fā)送到 TensorFlow.js,以根據(jù)我們之前訓(xùn)練過(guò)的模型預(yù)測(cè)它的想法。

相機(jī)和模型設(shè)置

在我們開(kāi)始預(yù)測(cè)對(duì)象之前,我們需要確保相機(jī)(通過(guò) MediaDevices.getUserMedia)準(zhǔn)備好顯示內(nèi)容,并且我們的機(jī)器學(xué)習(xí)模型已加載并準(zhǔn)備好開(kāi)始預(yù)測(cè)。在我們開(kāi)始預(yù)測(cè)之前,我們使用以下代碼段來(lái)啟動(dòng)這兩個(gè)代碼并執(zhí)行一些任務(wù)設(shè)置。

1Promise.all([

2this.emojiScavengerMobileNet.load().then(() => this.warmUpModel()),

3camera.setupCamera().then((value: CameraDimentions) => {

4camera.setupVideoDimensions(value[0], value[1]);

5}),

6]).then(values => {

7// Both the camera and model are loaded, we can start predicting

8this.predict();

9}).catch(error => {

10// Some errors occurred and we need to handle them

11});

一旦成功完成,相機(jī)設(shè)置和模型加載都將以 Promise 解析。您會(huì)注意到,一旦加載了模型,我們就會(huì)調(diào)用 this.warmUpModel()。這個(gè)函數(shù)只是做一個(gè)預(yù)測(cè)調(diào)用來(lái)編譯程序并將權(quán)重上傳到 GPU,這樣當(dāng)我們想要傳遞真實(shí)數(shù)據(jù)進(jìn)行預(yù)測(cè)時(shí),模型就會(huì)準(zhǔn)備就緒。

將圖像數(shù)據(jù)發(fā)送到 TensorFlow.js

以下代碼片段(已刪除注釋)是我們的預(yù)測(cè)函數(shù)調(diào)用,它從相機(jī)中獲取數(shù)據(jù),將其解析為正確的圖像大小,將其發(fā)送到我們的 TensorFlow.js 并使用生成的識(shí)別對(duì)象來(lái)查看我們是否找到了表情符號(hào)。

1async predict() {

2if (this.isRunning) {

3const result = tfc.tidy(() => {

4

5const pixels = tfc.fromPixels(camera.videoElement);

6const centerHeight = pixels.shape[0] / 2;

7const beginHeight = centerHeight - (VIDEO_PIXELS / 2);

8const centerWidth = pixels.shape[1] / 2;

9const beginWidth = centerWidth - (VIDEO_PIXELS / 2);

10const pixelsCropped =

11pixels.slice([beginHeight, beginWidth, 0],

12[VIDEO_PIXELS, VIDEO_PIXELS, 3]);

13

14return this.emojiScavengerMobileNet.predict(pixelsCropped);

15});

16

17const topK =

18await this.emojiScavengerMobileNet.getTopKClasses(result, 10);

19

20this.checkEmojiMatch(topK[0].label, topK[1].label);

21}

22requestAnimationFrame(() => this.predict());

21}

讓我們更詳細(xì)地看一下這個(gè)片段。我們將整個(gè)預(yù)測(cè)代碼邏輯包裝在 requestAnimationFrame 調(diào)用中,以確保瀏覽器在進(jìn)行屏幕繪制更新時(shí)以最有效的方式執(zhí)行此邏輯。如果游戲處于運(yùn)行狀態(tài),我們只執(zhí)行預(yù)測(cè)邏輯。通過(guò)這種方式,我們可以確保在執(zhí)行屏幕動(dòng)畫(huà)(如結(jié)束和贏取屏幕)時(shí),我們不會(huì)運(yùn)行任何 GPU 密集型預(yù)測(cè)代碼。

另一個(gè)小而重要的性能改進(jìn)是將 TensorFlow.js 邏輯包裝在對(duì) tf.tidy() 的調(diào)用中。這將確保在執(zhí)行該邏輯期間創(chuàng)建的所有 TensorFlow.js 張量都將在之后得到清理,從而確保更好的長(zhǎng)期運(yùn)行性能。請(qǐng)參閱https://js.tensorflow.org/api/latest/#tidy

我們預(yù)測(cè)邏輯的核心與從相機(jī)中提取圖像以發(fā)送到 TensorFlow.js 有關(guān)。我們不是簡(jiǎn)單地拍攝整個(gè)相機(jī)圖像并將其發(fā)送出去,而是從相機(jī)中心切出一部分屏幕并將其發(fā)送到 TensorFlow.js。在我們的游戲中,我們使用 224 像素x 224 像素的參考圖像訓(xùn)練我們的模型。將與我們的參考訓(xùn)練數(shù)據(jù)具有相同尺寸的圖像發(fā)送到 TensorFlow.js,從而確保更好的預(yù)測(cè)性能。我們的相機(jī)元素(它只是一個(gè) HTML 視頻元素)不是 224 像素的原因是因?yàn)槲覀兿胍_保用戶的全屏體驗(yàn),這意味著使用 CSS 將相機(jī)元素?cái)U(kuò)展到 100% 的屏幕。

以下參考圖像顯示左上角的切片,該切片將發(fā)送到 TensorFlow.js。

然后,模型使用該圖像數(shù)據(jù)生成前 10 個(gè)最可能項(xiàng)目的列表。您會(huì)注意到我們獲取前 2 個(gè)值并將其傳遞給 checkEmojiMatch 以確定我們是否找到了匹配項(xiàng)。我們選擇使用前 2 個(gè)匹配而不是最頂級(jí)的項(xiàng)目,因?yàn)樗褂螒蚋腥ぃ⒃试S我們根據(jù)模型在匹配中留有一些余地。擁有一個(gè)過(guò)于準(zhǔn)確和嚴(yán)格的模型會(huì)導(dǎo)致用戶在無(wú)法識(shí)別對(duì)象時(shí)感到沮喪。

在上面的圖像示例中,您可以看到我們目前的任務(wù)是找到 “鍵盤(pán)” 表情符號(hào)。在此示例中,我們還顯示了一些調(diào)試信息,因此您可以根據(jù)輸入圖像查看模型預(yù)測(cè)的所有 10 個(gè)可能項(xiàng)目。這里的前兩個(gè)匹配是 “鍵盤(pán)” 和 “手”,它們都在圖像中,而 “手” 具有稍大的可能性。雖然 “鍵盤(pán)” 在第二個(gè)檢測(cè)到的位置,但游戲在這里檢測(cè)到匹配,因?yàn)槲覀兪褂们皟蓚€(gè)匹配進(jìn)行檢查。

為我們的模型提供文本到語(yǔ)音的轉(zhuǎn)換

作為游戲的一個(gè)有趣的補(bǔ)充,我們實(shí)施了 SpeechSynthesis API。從而當(dāng)你在尋找表情符號(hào)的時(shí)候,大聲朗讀出模型預(yù)測(cè)。在 Android 上的 Chrome 中,通過(guò)以下代碼實(shí)現(xiàn)這一點(diǎn)非常簡(jiǎn)單:

1speak(msg: string) {

2if (this.topItemGuess) {

3if ('speechSynthesis' in window) {

4let msgSpeak = new SpeechSynthesisUtterance();

5msgSpeak.voice = this.sleuthVoice['activeVoice'];

6

7msgSpeak.text = msg;

8speechSynthesis.speak(msgSpeak);

9}

10}

11}

此 API 在 Android 上即時(shí)運(yùn)行,但 iOS 將任何 SpeechSynthesis 調(diào)用限制為直接與用戶操作相關(guān)的調(diào)用(例如點(diǎn)擊事件),因此我們需要為該平臺(tái)找到替代解決方案。我們已經(jīng)熟悉 iOS 將音頻播放事件綁定到用戶操作的要求,我們通過(guò)啟動(dòng)用戶最初單擊 “播放” 按鈕時(shí)播放的所有音頻文件來(lái)處理我們游戲中的其他聲音,然后立即暫停所有這些音頻文件。最后,我們最終制作了一個(gè)音頻精靈,其中包含了所有 “成功” 的語(yǔ)音線(例如,“嘿,你找到了啤酒”)。這種方法的缺點(diǎn)是這個(gè)音頻精靈文件變得非常大,對(duì)話需要更多。

我們嘗試過(guò)的一種方法是將音頻精靈分解為前綴(“嘿,你找到了”,“是那個(gè)”)和后綴(“啤酒”,“香蕉” 等),但我們發(fā)現(xiàn) iOS 在播放一個(gè)音頻文件的片段,暫停,移動(dòng)播放頭,然后播放同一文件的另一個(gè)片段之間增加了不可避免的一秒延遲。前綴和后綴之間的差距很長(zhǎng),以至于感覺(jué)很刺耳,我們經(jīng)常發(fā)現(xiàn)語(yǔ)音會(huì)遠(yuǎn)遠(yuǎn)落后于實(shí)際的游戲玩法。我們?nèi)栽谡{(diào)查 iOS 上語(yǔ)音改進(jìn)的其他選項(xiàng)。

下面是我們播放音頻文件的函數(shù),其中包含通過(guò)開(kāi)始和停止時(shí)間戳處理播放音頻精靈片段的附加代碼:

1playAudio(audio: string, loop = false, startTime = 0,

2endTime:number = undefined) {

3let audioElement = this.audioSources[audio];

4if (loop) {

5audioElement.loop = true;

6}

7if (!this.audioIsPlaying(audio)) {

8audioElement.currentTime = startTime;

9let playPromise = audioElement.play();

10if (endTime !== undefined) {

11const timeUpdate = (e: Event) => {

12if (audioElement.currentTime >= endTime) {

13audioElement.pause();

14audioElement.removeEventListener('timeupdate', timeUpdate);

15}

16};

17audioElement.addEventListener('timeupdate', timeUpdate);

18}

19if (playPromise !== undefined) {

20playPromise.catch(error => {

21console.log('Error in playAudio: ' + error);

22});

23}

24}

25}

通過(guò) getUserMedia 進(jìn)行相機(jī)訪問(wèn)時(shí)可能存在的風(fēng)險(xiǎn)

Emoji Scavenger Hunt 在很大程度上依賴于能夠通過(guò)瀏覽器中的 Javascript 訪問(wèn)相機(jī)。我們?cè)跒g覽器中使用 MediaDevices.getUserMedia API 來(lái)訪問(wèn)攝像頭。并非所有瀏覽器都支持此 API,但大多數(shù)主流瀏覽器的最新版本都有很好的支持。

要通過(guò)此 API 訪問(wèn)相機(jī),我們使用以下代碼段:

1if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {

2const stream = await navigator.mediaDevices.getUserMedia({

3'audio': false,

4'video': {facingMode: 'environment'}

5});

6(window).stream = stream;

7this.videoElement.srcObject = stream;

8}

此 API 提供了一種通過(guò)傳入配置對(duì)象并指定 facingMode 來(lái)訪問(wèn)前置和后置攝像頭的方法。

無(wú)法通過(guò) UIWebViews 訪問(wèn)

在測(cè)試期間,我們意識(shí)到 Apple 不支持任何基于 webkit 瀏覽器的 UIWebView 使用 getUserMedia API,這意味著 iOS 上任何實(shí)現(xiàn)自己瀏覽器的應(yīng)用程序,如第三方 Twitter 客戶端或 iOS 上的 Chrome,都無(wú)法訪問(wèn)攝像頭。

為解決此問(wèn)題,我們會(huì)檢測(cè)到相機(jī)初始化失敗,并提示用戶在本機(jī) Safari 瀏覽器中打開(kāi)體驗(yàn)。

致謝

通過(guò)這個(gè)實(shí)驗(yàn),我們想要?jiǎng)?chuàng)建一個(gè)有趣和愉快的游戲,利用當(dāng)今瀏覽器中提供的驚人的機(jī)器學(xué)習(xí)技術(shù)。這只是一個(gè)開(kāi)始,我們希望您能使用 TensorFlow.js 和 TensorFlow.js 轉(zhuǎn)換器實(shí)現(xiàn)您所有的想法。如上所述,我們的代碼可以在 Github 上找到(https://github.com/google/emoji-scavenger-hunt),所以請(qǐng)用它來(lái)開(kāi)始你自己的想法。

在構(gòu)建這個(gè)實(shí)驗(yàn)的過(guò)程中,我們要感謝 Takashi Kawashima,Daniel Smilkov,Nikhil Thorat 和 Ping Yu 的幫助。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1079

    瀏覽量

    40375
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8353

    瀏覽量

    132315
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    328

    瀏覽量

    60474

原文標(biāo)題:讓我們看看,如何使用 TensorFlow.js 構(gòu)建 Emoji Scavenger Hunt

文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    游戲融網(wǎng):結(jié)婚的正確打開(kāi)方式

    游戲的正確打開(kāi)方式是什么呢?是眾籌!發(fā)行商只有提前調(diào)研、預(yù)售,才能知道玩家的心理;玩家也只有在游戲成型前提出意見(jiàn)、給予支持,才能得到自己真正喜歡的游戲。林心如與霍建華非常聰明地運(yùn)用了正
    發(fā)表于 07-15 14:27

    我用這種方式停止程序運(yùn)行為啥導(dǎo)致循環(huán)里面都不運(yùn)作

    我用這種方式停止程序運(yùn)行為啥導(dǎo)致循環(huán)里面都不運(yùn)作,我把這個(gè)停止的結(jié)構(gòu)刪除程序就可以正常運(yùn)轉(zhuǎn)了
    發(fā)表于 09-12 15:09

    MySql支持Emoji表情?

    MySql支持Emoji表情
    發(fā)表于 05-15 13:54

    Linux-Mysql插入emoji表情問(wèn)題怎么回事

    Linux-Mysql插入emoji表情問(wèn)題
    發(fā)表于 06-15 06:55

    超高速電機(jī)控制方式討論

    超高速10萬(wàn)轉(zhuǎn)電機(jī)(1對(duì)極)控制方式討論
    發(fā)表于 08-27 08:22

    ADC內(nèi)部模數(shù)轉(zhuǎn)換查詢方式實(shí)驗(yàn)

    ADC內(nèi)部模數(shù)轉(zhuǎn)換查詢方式實(shí)驗(yàn)
    發(fā)表于 12-16 21:48 ?0次下載

    惠普ENVY15游戲本拆解 這款游戲內(nèi)部做工如何

    惠普今年推出了新一代惠普ENVY 15游戲本,配備高端i7處理器,搭載最新Geforce GTX 850M中高端獨(dú)立顯卡、內(nèi)置1TB大硬盤(pán),并采用1080P全高清屏幕,具備非常出色的游戲性能。以下是百事網(wǎng)為大家?guī)?lái)的惠普ENVY 15
    的頭像 發(fā)表于 10-26 14:46 ?1.6w次閱讀

    三星電子繼蘋(píng)果之后也宣布推出迪士尼AR Emoji角色

    在蘋(píng)果宣布了新一批 Animoji 角色和多樣的 Memojis 之后,三星也宣布為自家 AR Emoji 家族引入了兩個(gè)全新的迪士尼動(dòng)畫(huà)角色黛絲鴨(Daisy Duck)和高飛犬(Goofy
    發(fā)表于 06-22 09:01 ?2607次閱讀

    基于一種完善運(yùn)作的跨平臺(tái)卡牌游戲Nova Blitz介紹

    Nova Blitz 是一種完善運(yùn)作的跨平臺(tái)卡牌游戲,是第一個(gè)使用 Nova Token 的卡牌游戲。它已經(jīng)擁有超過(guò) 300 種卡牌,每月可能推出超過(guò) 50 種新卡。
    發(fā)表于 08-21 11:39 ?423次閱讀

    云計(jì)算正在改變業(yè)務(wù)的運(yùn)作方式

    在2021年消費(fèi)電子展會(huì)舉辦期間,行業(yè)專家針對(duì)組織領(lǐng)導(dǎo)者應(yīng)該了解有關(guān)云計(jì)算的當(dāng)前狀態(tài)以及未來(lái)的發(fā)展前景進(jìn)行了探討。來(lái)自IBM、微軟、埃森哲等知名公司的行業(yè)專家參加了會(huì)議,他們分析了云計(jì)算正在改變業(yè)務(wù)的運(yùn)作方式以及云計(jì)算架構(gòu)對(duì)軟件開(kāi)發(fā)的意義。
    的頭像 發(fā)表于 02-03 14:03 ?2398次閱讀

    谷歌或?qū)㈥P(guān)閉所有Stadia內(nèi)部游戲開(kāi)發(fā)團(tuán)隊(duì)

    3月1日消息,近日根據(jù)外媒報(bào)道,谷歌將關(guān)閉所有Stadia內(nèi)部游戲開(kāi)發(fā)團(tuán)隊(duì),同時(shí)取消所有正在開(kāi)發(fā)的游戲項(xiàng)目。這一舉措意味著Stadia將徹底轉(zhuǎn)型為一個(gè)單純的平臺(tái)工具,也宣告了谷歌在云游戲
    的頭像 發(fā)表于 03-02 14:26 ?1544次閱讀

    open-source-emoji WordPress的emoji表情插件

    ./oschina_soft/open-source-emoji.zip
    發(fā)表于 05-18 14:28 ?3次下載
    open-source-<b class='flag-5'>emoji</b> WordPress的<b class='flag-5'>emoji</b>表情插件

    Kawaii Emoji Messenger多平臺(tái)的Facebook客戶端

    ./oschina_soft/kawaii-emoji-messenger.zip
    發(fā)表于 05-27 10:30 ?1次下載
    Kawaii <b class='flag-5'>Emoji</b> Messenger多平臺(tái)的Facebook客戶端

    現(xiàn)在Android平臺(tái)也能順利使用Emoji

    在移動(dòng)互聯(lián)網(wǎng)如此發(fā)達(dá)的今天,Emoji 已無(wú)處不在,并成為我們?nèi)粘=涣髦胁豢苫蛉钡囊徊糠帧?jù)統(tǒng)計(jì),Emoji 的使用率在過(guò)去 10 年內(nèi)不斷攀升,2021 年更是達(dá)到了歷史新高,每天有超過(guò)五分之一
    的頭像 發(fā)表于 06-02 15:08 ?3133次閱讀
    現(xiàn)在Android平臺(tái)也能順利使用<b class='flag-5'>Emoji</b>了

    微軟Windows 11新增支持Emoji表情符號(hào)

    據(jù)Windows Developer官方賬號(hào)發(fā)布的信息顯示,用戶可在Windows Terminal應(yīng)用中使用命令提示符輸入各類Emoji,以實(shí)現(xiàn)更具個(gè)性和趣味性的命令輸入體驗(yàn)。
    的頭像 發(fā)表于 04-11 11:26 ?546次閱讀