2017-07-07 67 views
10

雖然我一直在研究的最佳實踐和嘗試多種選擇一個正在進行的項目(即Unity3D iOS的項目Vuforia與本地集成,提取出與AVFoundation然後通過基於雲的圖像識別的圖像幀) ,我得出的結論是我想使用ARkit,Vision Framework和CoreML;讓我解釋。視覺框架與ARkit和CoreML

我不知道我怎麼會是能夠捕捉ARFrames,使用視覺框架來檢測和使用CoreML模型跟蹤給定的對象。

此外,這將是很好有一個邊框,一旦對象被識別一起在手勢觸摸添加一個AR對象的能力,但是這是有可能獲得實實在在的項目下來後方可實施。

這無疑是可能的,但我不確定如何通過視覺的ARFrames到CoreML通過進行處理。

任何想法?

+0

從基礎開始。哦,理解你**必須**使用Xcode 9和iOS 11.現在,通過「基礎知識」,我的意思是瞭解每件* *和* *不是*。 Vision將成爲最高級別 - 它可以跟蹤和使用CoreML模型。但你知道嗎?如何訓練模型?如果不是,那麼先學習ML,然後*然後*學習如何將訓練好的模型導入到CoreML中。我不會解決ARKit問題(對不起,這對於我的利基來說太廣泛了 - 你確定它需要你的?),但是如果你想直接解決CoreML,你需要了解CVPixelBuffer是什麼。祝你好運! – dfd

+0

感謝您的回覆;是的,我同時使用Xcode 9和iOS 11.我可以訓練一個模型,因爲這是我真正進入編程的開始(在Python中的NLP),我可以將模型轉換並插入Xcode。除此之外,我還可以使用預先訓練好的模型來暫時測試應用程序的功能。我無法理解使用CoreML模型提取ARframe並通過Vision傳遞它的方法。還沒有真正的深層文件,並且很好奇,如果有人可以擺脫見解@dfd – pythlang

+0

不客氣。現在,你有什麼特定的問題?使用Vision跟蹤對象的東西?將訓練有素的模型導入CoreML?顯示邊界框? – dfd

回答

38

就在條關於大家都在爲你想要做什麼......你大多隻是需要把它們放在一起。


您通過定期輪詢ARSessioncurrentFrame或讓他們推到您的會議代表獲得ARFrame小號兩種。 (如果您正在構建自己的渲染器,那是ARSessionDelegate;如果您使用的是ARSCNViewARSKView,則它們的代表回調將引用該視圖,因此您可以從那裏回到會話以獲取導致回調的currentFrame

ARFrameCVPixelBuffer的形式提供當前的capturedImage

您傳遞圖像以Vision用於使用任一VNImageRequestHandlerVNSequenceRequestHandler類,這兩者具有采取CVPixelBuffer作爲輸入圖像處理方法的處理。像發現rectanglesQR codesfaces,或using a Core ML model to identify the image -

你可以找到通過連接到WWDC17 session on Vision圖像視覺+核心ML通用代碼,如果你看這屆會議的現場演示還包括通過CVPixelBuffer s到視力。 (他們得到像素緩衝區從AVCapture在該演示中,但如果你從ARKit得到緩衝的視覺部分是一樣的。)


一個棘手的問題,你很可能有被識別/定位對象。 Core ML + Vision使用的大多數「物體識別」模型(包括那些在ML developer page上提供預轉換版本的模型)都是場景分類器。也就是說,他們看的圖像,並說,「這是一個(事)圖片」,而不是像「在這張照片有一個(事),位於(邊框)」 。

Vision爲處理分類器提供了簡單的API - 您的請求的結果數組填充了VNClassificationObservation對象,告訴你場景是什麼(或「可能是」,並具有置信度等級)。

如果發現或火車,無論識別和定位對象的模型 - 和那一部分,我必須強調,球在你的場內 - 用視覺與它會導致VNCoreMLFeatureValueObservation對象。這些有點像任意的鍵值對,所以你如何從這些對象中識別出一個對象取決於你如何構建和標記模型中的輸出。

如果您正在處理Vision已經知道如何識別的內容,而不是使用自己的模型(例如面部和QR碼),則可以使用Vision的API獲取圖像幀中的位置。


如果2D圖像中定位的對象之後,你要顯示它在AR相關的3D內容(或顯示2D內容,但與所述內容定位在3D與ARKit),你需要這些2D圖像點與3D世界相對。

一旦您完成這一步,將AR內容與熱門測試放在一起已經很好涵蓋其他地方,包括by Applethe community

+0

儘管我知道一些這方面的信息,但是把它們放在一起是非常令人耳目一新的,所以......哇,非常感謝這麼一個很棒的,詳細的回覆。我喜歡這樣的答案,因爲雖然每個人都喜歡細節和演練,但是您提供的指南會讓我忙於研究和實施一段時間。再次感謝@rickster – pythlang