色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

討論游戲Emoji Scavenger Hunt的內部運作方式

Tensorflowers ? 來源:未知 ? 作者:李倩 ? 2018-10-13 10:41 ? 次閱讀

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

介紹游戲 Emoji Scavenger Hunt

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

我們的目標是以有趣,互動的方式展示機器學習技術。

訓練對象識別模型

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

這是轉移學習可以派上用場的地方。轉移學習是一種技術,它通過將其用于另一個目標任務來重用針對特定任務而訓練的機器學習模型。我們通過使用此教程中描述的過程重新訓練基于 MobileNet 的模型來構建我們自己的自定義模型。我們添加了一個全連接層,它將默認輸出 logits 映射到我們想要的表情符號對象,如 “手” 和 “鍵盤” 等。我們列出了大約400個對象用于物體識別并收集 100-1000 個圖像作為每個對象的訓練數據。添加的全連接層通過組合來自 MobileNet 輸出層的 1000 個信號來推斷這 400 個對象。

注:教程 鏈接

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

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

我們運行腳本將訓練圖像數據提供給模型。為了簡化我們的訓練流程,我們在 Google Cloud Platform 上構建了整個管道。所有的訓練數據都將存儲在 Google Cloud 存儲桶中。通過在 Google Functions 設置云存儲觸發器,一旦在存儲桶中檢測到任何變化,就會啟動計算引擎上的 GPU 實例。GPU 實例以 TensorFlow SavedModel 格式輸出再訓練模型,并將其保存在云存儲上的另一個存儲桶中。

模型培訓的數據管道

我們如何與 TensorFlow.js 集成

完成上述模型訓練中的步驟后,我們最終得到了一個用于對象識別的 TensorFlow SavedModel。為了通過 TensorFlow.js 在瀏覽器中訪問和使用此模型,我們使用 TensorFlow.js 轉換器將此 SavedModel 轉換為 TensorFlow.js 可以加載的格式。

識別對象的行為可以分為兩個子任務。首先,從相機中抓取像素,然后將圖像數據發送到 TensorFlow.js,以根據我們之前訓練過的模型預測它的想法。

相機和模型設置

在我們開始預測對象之前,我們需要確保相機(通過 MediaDevices.getUserMedia)準備好顯示內容,并且我們的機器學習模型已加載并準備好開始預測。在我們開始預測之前,我們使用以下代碼段來啟動這兩個代碼并執行一些任務設置。

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});

一旦成功完成,相機設置和模型加載都將以 Promise 解析。您會注意到,一旦加載了模型,我們就會調用 this.warmUpModel()。這個函數只是做一個預測調用來編譯程序并將權重上傳到 GPU,這樣當我們想要傳遞真實數據進行預測時,模型就會準備就緒。

將圖像數據發送到 TensorFlow.js

以下代碼片段(已刪除注釋)是我們的預測函數調用,它從相機中獲取數據,將其解析為正確的圖像大小,將其發送到我們的 TensorFlow.js 并使用生成的識別對象來查看我們是否找到了表情符號。

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}

讓我們更詳細地看一下這個片段。我們將整個預測代碼邏輯包裝在 requestAnimationFrame 調用中,以確保瀏覽器在進行屏幕繪制更新時以最有效的方式執行此邏輯。如果游戲處于運行狀態,我們只執行預測邏輯。通過這種方式,我們可以確保在執行屏幕動畫(如結束和贏取屏幕)時,我們不會運行任何 GPU 密集型預測代碼。

另一個小而重要的性能改進是將 TensorFlow.js 邏輯包裝在對 tf.tidy() 的調用中。這將確保在執行該邏輯期間創建的所有 TensorFlow.js 張量都將在之后得到清理,從而確保更好的長期運行性能。請參閱https://js.tensorflow.org/api/latest/#tidy

我們預測邏輯的核心與從相機中提取圖像以發送到 TensorFlow.js 有關。我們不是簡單地拍攝整個相機圖像并將其發送出去,而是從相機中心切出一部分屏幕并將其發送到 TensorFlow.js。在我們的游戲中,我們使用 224 像素x 224 像素的參考圖像訓練我們的模型。將與我們的參考訓練數據具有相同尺寸的圖像發送到 TensorFlow.js,從而確保更好的預測性能。我們的相機元素(它只是一個 HTML 視頻元素)不是 224 像素的原因是因為我們想要確保用戶的全屏體驗,這意味著使用 CSS 將相機元素擴展到 100% 的屏幕。

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

然后,模型使用該圖像數據生成前 10 個最可能項目的列表。您會注意到我們獲取前 2 個值并將其傳遞給 checkEmojiMatch 以確定我們是否找到了匹配項。我們選擇使用前 2 個匹配而不是最頂級的項目,因為它使游戲更有趣,并允許我們根據模型在匹配中留有一些余地。擁有一個過于準確和嚴格的模型會導致用戶在無法識別對象時感到沮喪。

在上面的圖像示例中,您可以看到我們目前的任務是找到 “鍵盤” 表情符號。在此示例中,我們還顯示了一些調試信息,因此您可以根據輸入圖像查看模型預測的所有 10 個可能項目。這里的前兩個匹配是 “鍵盤” 和 “手”,它們都在圖像中,而 “手” 具有稍大的可能性。雖然 “鍵盤” 在第二個檢測到的位置,但游戲在這里檢測到匹配,因為我們使用前兩個匹配進行檢查。

為我們的模型提供文本到語音的轉換

作為游戲的一個有趣的補充,我們實施了 SpeechSynthesis API。從而當你在尋找表情符號的時候,大聲朗讀出模型預測。在 Android 上的 Chrome 中,通過以下代碼實現這一點非常簡單:

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 上即時運行,但 iOS 將任何 SpeechSynthesis 調用限制為直接與用戶操作相關的調用(例如點擊事件),因此我們需要為該平臺找到替代解決方案。我們已經熟悉 iOS 將音頻播放事件綁定到用戶操作的要求,我們通過啟動用戶最初單擊 “播放” 按鈕時播放的所有音頻文件來處理我們游戲中的其他聲音,然后立即暫停所有這些音頻文件。最后,我們最終制作了一個音頻精靈,其中包含了所有 “成功” 的語音線(例如,“嘿,你找到了啤酒”)。這種方法的缺點是這個音頻精靈文件變得非常大,對話需要更多。

我們嘗試過的一種方法是將音頻精靈分解為前綴(“嘿,你找到了”,“是那個”)和后綴(“啤酒”,“香蕉” 等),但我們發現 iOS 在播放一個音頻文件的片段,暫停,移動播放頭,然后播放同一文件的另一個片段之間增加了不可避免的一秒延遲。前綴和后綴之間的差距很長,以至于感覺很刺耳,我們經常發現語音會遠遠落后于實際的游戲玩法。我們仍在調查 iOS 上語音改進的其他選項。

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

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}

通過 getUserMedia 進行相機訪問時可能存在的風險

Emoji Scavenger Hunt 在很大程度上依賴于能夠通過瀏覽器中的 Javascript 訪問相機。我們在瀏覽器中使用 MediaDevices.getUserMedia API 來訪問攝像頭。并非所有瀏覽器都支持此 API,但大多數主流瀏覽器的最新版本都有很好的支持。

要通過此 API 訪問相機,我們使用以下代碼段:

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 提供了一種通過傳入配置對象并指定 facingMode 來訪問前置和后置攝像頭的方法。

無法通過 UIWebViews 訪問

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

為解決此問題,我們會檢測到相機初始化失敗,并提示用戶在本機 Safari 瀏覽器中打開體驗。

致謝

通過這個實驗,我們想要創建一個有趣和愉快的游戲,利用當今瀏覽器中提供的驚人的機器學習技術。這只是一個開始,我們希望您能使用 TensorFlow.js 和 TensorFlow.js 轉換器實現您所有的想法。如上所述,我們的代碼可以在 Github 上找到(https://github.com/google/emoji-scavenger-hunt),所以請用它來開始你自己的想法。

在構建這個實驗的過程中,我們要感謝 Takashi Kawashima,Daniel Smilkov,Nikhil Thorat 和 Ping Yu 的幫助。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像
    +關注

    關注

    2

    文章

    1085

    瀏覽量

    40477
  • 機器學習
    +關注

    關注

    66

    文章

    8420

    瀏覽量

    132680
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60536

原文標題:讓我們看看,如何使用 TensorFlow.js 構建 Emoji Scavenger Hunt

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    游戲融網:結婚的正確打開方式

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

    我用這種方式停止程序運行為啥導致循環里面都不運作

    我用這種方式停止程序運行為啥導致循環里面都不運作,我把這個停止的結構刪除程序就可以正常運轉了
    發表于 09-12 15:09

    MySql支持Emoji表情?

    MySql支持Emoji表情
    發表于 05-15 13:54

    Linux-Mysql插入emoji表情問題怎么回事

    Linux-Mysql插入emoji表情問題
    發表于 06-15 06:55

    超高速電機控制方式討論

    超高速10萬轉電機(1對極)控制方式討論
    發表于 08-27 08:22

    ADC內部模數轉換查詢方式實驗

    ADC內部模數轉換查詢方式實驗
    發表于 12-16 21:48 ?0次下載

    惠普ENVY15游戲本拆解 這款游戲內部做工如何

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

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

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

    基于一種完善運作的跨平臺卡牌游戲Nova Blitz介紹

    Nova Blitz 是一種完善運作的跨平臺卡牌游戲,是第一個使用 Nova Token 的卡牌游戲。它已經擁有超過 300 種卡牌,每月可能推出超過 50 種新卡。
    發表于 08-21 11:39 ?438次閱讀

    云計算正在改變業務的運作方式

    在2021年消費電子展會舉辦期間,行業專家針對組織領導者應該了解有關云計算的當前狀態以及未來的發展前景進行了探討。來自IBM、微軟、埃森哲等知名公司的行業專家參加了會議,他們分析了云計算正在改變業務的運作方式以及云計算架構對軟件開發的意義。
    的頭像 發表于 02-03 14:03 ?2434次閱讀

    谷歌或將關閉所有Stadia內部游戲開發團隊

    3月1日消息,近日根據外媒報道,谷歌將關閉所有Stadia內部游戲開發團隊,同時取消所有正在開發的游戲項目。這一舉措意味著Stadia將徹底轉型為一個單純的平臺工具,也宣告了谷歌在云游戲
    的頭像 發表于 03-02 14:26 ?1574次閱讀

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

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

    Kawaii Emoji Messenger多平臺的Facebook客戶端

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

    現在Android平臺也能順利使用Emoji

    在移動互聯網如此發達的今天,Emoji 已無處不在,并成為我們日常交流中不可或缺的一部分。據統計,Emoji 的使用率在過去 10 年內不斷攀升,2021 年更是達到了歷史新高,每天有超過五分之一
    的頭像 發表于 06-02 15:08 ?3270次閱讀
    現在Android平臺也能順利使用<b class='flag-5'>Emoji</b>了

    微軟Windows 11新增支持Emoji表情符號

    據Windows Developer官方賬號發布的信息顯示,用戶可在Windows Terminal應用中使用命令提示符輸入各類Emoji,以實現更具個性和趣味性的命令輸入體驗。
    的頭像 發表于 04-11 11:26 ?599次閱讀
    主站蜘蛛池模板: 偷窥 亚洲 色 国产 日韩| 欧美亚洲日韩自拍高清中文| 伦理片飘花免费影院| 亚洲狠狠网站色噜噜| 高h肉文合集| 日韩经典欧美一区二区三区| 97超碰免费人妻中文| 乱奷XXXXXHD| 中文字幕亚洲乱码熟女在线萌芽| 精品一区二区免费视频蜜桃网| 亚洲免费视频日本一区二区| 国产午夜精品福利久久| 亚洲AV一宅男色影视| 国产亚洲制服免视频| 亚洲国产高清视频在线观看| 国产亚洲精品AV片在线观看播放| 午夜影视不充值观看| 国产亚洲视频在线| 亚洲色图p| 老湿影院色情a| 99C视频色欲在线| 胖老太与人牲交BBWBBW高潮| 成人免费看片45分钟| 上课失禁丨vk| 国产午夜AV无码无片久久96 | 在线观看日本污污ww网站| 久久精品AV一区二区无码| 在线播放毛片| 免费人成视频X8X8国产更快乐 | 99爱在线精品视频网站| 欧美另类z0z000高清| 国产h视频免费观看| 亚洲精品成人a在线观看| 久久精品黄色| caoporen超碰在线视频| 日本熟妇乱妇熟色在线电影| 国产高清在线观看视频| 亚洲人成77777| 美女被抽插到哭内射视频免费| 把腿张开老子CAO烂你动态图 | 色噜噜噜视频|