基于Flutter 的視障人群輔助_第1頁
基于Flutter 的視障人群輔助_第2頁
基于Flutter 的視障人群輔助_第3頁
基于Flutter 的視障人群輔助_第4頁
基于Flutter 的視障人群輔助_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于Flutter的視障人群輔助APPAssistingAPPforvisuallyimpairedpeoplebasedonFlutter摘要中國視障群體約有1731萬人,平均不到100個人里就有一個視障人士。隨著社會的發(fā)展進步,中國對特殊群體的公共保障越來越完善。在現(xiàn)實生活中,盲人最主要的需求就是出行,但是在室外的環(huán)境下盲人想獨立出行還是一件難事,很多時候都需要人陪同,公共設(shè)施還是有待提升。深度學(xué)習的原理是利用明眼人標注的已知樣本來學(xué)習一種規(guī)則進行預(yù)測未知的樣本,這種理念和需要人陪同很相似。Flutter是跨平臺的開發(fā)框架,可以利用它快速開發(fā)移動應(yīng)用。本文實現(xiàn)的是一款結(jié)合深度學(xué)習、跨屏臺開發(fā)框架的手機應(yīng)用程序,能夠幫助盲人在室外環(huán)境下出行。關(guān)鍵詞:視障群體軟件、深度學(xué)習、目標檢測、跨平臺開發(fā)AbstractThereareapproximately17.31millionvisuallyimpairedgroupsinChina,andthereisanaverageofonevisuallyimpairedpersonper100people.Withthedevelopmentofsociety,China'spublicsecurityforspecialgroupsisbecomingmoreandmoreperfect.Inreallife,themainneedoftheblindistotravel,butintheoutdoorenvironment,itisstilldifficultforblindpeopletotravelindependently.Manytimestheyneedtobeaccompanied,andpublicfacilitiesstillneedtobeimproved.Theprincipleofdeeplearningistouseaknownsamplemarkedbyabrighteyetolearnaruletopredictanunknownsample.Thisconceptisverysimilartotheneedforsomeonetoaccompany.Flutterisacross-platformdevelopmentframeworkthatcanbeusedtoquicklydevelopmobileapplications.Thisarticleimplementsamobileapplicationthatcombinesdeeplearningandacross-screenplatformdevelopmentframeworktohelpblindpeopletravelinoutdoorenvironments.Keywords: visuallyimpairedgroupsoftware,deeplearning,targetdetection,cross-platformdevelopment目錄TOC\o"1-3"\h\u25609第一章研究背景與意義 研究背景與意義研究背景中國視障群體是全世界人口是最大的視障群體。據(jù)衛(wèi)生部統(tǒng)計,中國有1731萬的視障人士,數(shù)量是世界之首。其中視障人士也是占有障礙人士的很大一部分比例,受社會的廣泛關(guān)注,但現(xiàn)有市場上對與視障群體的軟硬件開發(fā)還沒有得到人們的關(guān)注,與視障群體有關(guān)的產(chǎn)品少之又少。正因如此,視障群體更應(yīng)該受到大家的廣泛重視與關(guān)注、,需要社會給予關(guān)愛和幫助。使其提高生活質(zhì)量。據(jù)2015年《中國互聯(lián)網(wǎng)視障用戶基本情況報告》中調(diào)查,一周出行1-6次不需要人陪伴的比率占到總調(diào)查人數(shù)的24%,需要人陪伴的46%,其中一周基本不出行的占比高達30%。盲人的出行障礙主要有無法辨別方向、出行過程中被障礙物遮擋等困難。盲道是現(xiàn)在盲人出行的一個輔助工具,但是現(xiàn)在的盲道占有率很高,視障群體實際使用過程并不友好,會出現(xiàn)前方有物體占用盲道,這些物體例如消防栓、垃圾桶等等。研究意義目標檢測任務(wù)是人工智能圖像處理方面的一個重要任務(wù),目標檢測的數(shù)據(jù)集一般為一張圖片里物體的坐標以及物體的類別,通過神經(jīng)網(wǎng)絡(luò)的權(quán)重最后可以達到輸入任意一張圖片返回物體信息的效果。深度學(xué)習領(lǐng)域近年來隨著硬件的升級更新,算力有了極大的提升,許多目標檢測網(wǎng)絡(luò)也在工業(yè)界發(fā)揮著至關(guān)重要的作用。Flutter是一個跨平臺開發(fā)框架,它是非常新的平臺,它的主要開發(fā)語言是Dart,dart和Java很相似。開發(fā)者可以用一套代碼可以同時編譯在安卓和蘋果兩個平臺上。Flutter還提供了很多小插件、接口、小部件供開發(fā)者使用。Flutter開發(fā)的應(yīng)用性能上并可以與原生的應(yīng)用媲美,這為用戶提供了友好的體驗。本系統(tǒng)采用深度學(xué)習中的目標檢測及跨平臺開發(fā)框架Flutter為視障者們開發(fā)一個有好的、高效的視障輔助APP,讓每一個人都能享受AI技術(shù)帶來的便利。

研究現(xiàn)狀與分析跨平臺開發(fā)框架研究現(xiàn)狀及分析近年來,消費者們已經(jīng)從PC轉(zhuǎn)向移動端來進行上網(wǎng)的操作,跨平臺開發(fā)框架大多數(shù)應(yīng)用在移動設(shè)備上,所以顯得至關(guān)重要。跨平臺開發(fā)技術(shù)可以增加代碼的復(fù)用,降低開發(fā)時間于成本,實現(xiàn)一套代碼,多個平臺部署,在移動終端設(shè)備上也有許多框架大展身手例如Futter、ReactNative等,這些跨平臺的開技術(shù)有的時候甚至超過了平臺的原生語言ReactNative是Facebook開發(fā)的框架如圖2.1.1,是使用JavaScript開發(fā)IOS和Android的前端樣式,最初ReactNatives是用來開發(fā)IOS系統(tǒng)的,最近也支持了Android系統(tǒng)。該庫現(xiàn)在可以為兩個平臺呈現(xiàn)移動UI。每當使用Swift/Objective-C或Java編寫的應(yīng)用程序有更新時,都需要重新編譯整個應(yīng)用程序,并且必須將新版本再次分發(fā)到AppStore。根據(jù)AppStore的審查程序,所有這一切可能需要幾個星期。為了避免這種麻煩,ReactNative應(yīng)用程序以不同的方式工作,本機應(yīng)用程序能夠找到特定的JavaScript代碼,然后在實際設(shè)備上啟動該應(yīng)用程序時下載并編譯該JavaScript代碼。這樣,可以立即完成應(yīng)用程序更新,而無需一次又一次地向AppStore提交新版本。圖2.1.1RN框架圖Flutter是一個非常新的平臺,該平臺框架如圖2.1.2所示但是它是一個很有發(fā)展的平臺,已經(jīng)吸引了已經(jīng)發(fā)布了應(yīng)用程序的大公司的關(guān)注。例如阿里巴巴開發(fā)的閑魚,騰訊開發(fā)的Now直播等。與開發(fā)Web應(yīng)用程序相比,它比較簡單,并且與本地的應(yīng)用程序相比,它具有開發(fā)快部署快的特點。Flutter的高性能和高生產(chǎn)率是通過以下幾種技術(shù)實現(xiàn)的。與許多其他流行的移動平臺不同,F(xiàn)lutter完全不使用JavaScript。Dart是編程語言。它可以編譯為二進制代碼,這就是為什么它以O(shè)bjective-C,Swift,Java或Kotlin的本機性能運行的原因。Flutter不使用本機UI組件。起初聽起來很尷尬。但是,由于組件是在Flutter本身中實現(xiàn)的,因此視圖和的代碼之間沒有通信層。因此,游戲在智能手機中以最快的速度獲得其圖形效果。因此,按鈕,文本,媒體元素,背景都由Flutter的圖形引擎繪制。順便說一句,F(xiàn)lutter的“Hello,World”應(yīng)用程序的捆綁包非常?。篿OS≈2.5Mb和Android≈4Mb。Flutter在ReactWeb框架的啟發(fā)下使用了一種聲明式方法,基于小部件(在網(wǎng)絡(luò)世界中稱為“組件”)構(gòu)建其UI。為了從小部件中獲取更多信息,通常僅在必要時才渲染它們,通常是當它們的狀態(tài)已更改時。該框架還集成了Hot-reload,這對于Web來說很典型,但在本機平臺上仍然缺少。這使Flutter框架可以自動重建窗口小部件樹,從而可以快速查看更改的效果。圖2.1.1Flutter框架圖目標檢測研究現(xiàn)狀及分析卷積網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)是一種特殊的神經(jīng)網(wǎng)絡(luò),用于處理具有已知網(wǎng)格狀拓撲的數(shù)據(jù)。包括時間序列數(shù)據(jù)(可以認為是以規(guī)則的時間間隔采樣的1D網(wǎng)格)和圖像數(shù)據(jù)(可以認為是像素的2D網(wǎng)格)。卷積網(wǎng)絡(luò)在實際應(yīng)用中已經(jīng)取得了巨大的成功?!熬矸e神經(jīng)網(wǎng)絡(luò)”表示該網(wǎng)絡(luò)采用稱為卷積的數(shù)學(xué)運算。卷積是一種特殊的線性運算。卷積與普通的神經(jīng)網(wǎng)絡(luò)非常相似-它們由具有可學(xué)習的權(quán)重和偏見的神經(jīng)元組成。每個神經(jīng)元接收一些輸入,執(zhí)行點積,并可選地跟隨其非線性。卷積神經(jīng)網(wǎng)絡(luò)的起源是根據(jù)哺乳動物使用大腦中神經(jīng)元的分層結(jié)構(gòu)在視覺上感知周圍世界的方式,這反過來又激發(fā)了工程師嘗試在計算機視覺中開發(fā)類似的模式識別機制。在他們的假設(shè)中,在視覺皮層中,“復(fù)雜細胞”產(chǎn)生的復(fù)雜功能反應(yīng)是由“簡單細胞”產(chǎn)生的更為簡單的反應(yīng)構(gòu)建而成的。例如,簡單單元將對定向邊緣等做出響應(yīng),而復(fù)雜單元也將對定向邊緣做出響應(yīng),但具有一定程度的空間不變性。卷積神經(jīng)網(wǎng)絡(luò)可以描述人類如何識別物體和場景的圖像、人類如何看待和識別物體,類似神經(jīng)元的的感受野,其中一個細胞對來自其他局部細胞的輸入總和做出響應(yīng),深度卷積神經(jīng)網(wǎng)絡(luò)的架構(gòu)受到上述思想的啟發(fā)。卷及網(wǎng)絡(luò)還有空間不變性,我們大多數(shù)人可以在各種條件下識別特定的面孔,因為我們學(xué)習了抽象。因此,這些抽象對于大小,對比度,旋轉(zhuǎn),方向都是不變的。以汽車為例。人們?nèi)绾巫R別它是汽車?我們基本上是在尋找汽車特有的特征。我們尋找車輪,前大燈,門,后行李箱,玻璃窗,引擎蓋和其他與其他運輸方式不同的功能。同樣,在識別車輪的同時,我們尋找位于汽車主體下方的圓形物體,其顏色相對較暗,且質(zhì)地粗糙。我們考慮了所有的小細節(jié),它們共同構(gòu)成了一些基本信息。這些小信息聚集在一起,形成了我們正在識別的對象所特有的特定特征。卷積網(wǎng)絡(luò)分為三個結(jié)構(gòu):卷積層、連接層、池化層。卷積層:該卷積層與特征提取。這是使用一個矩陣(通常是濾波器矩陣)應(yīng)用于特定矩陣(通常是圖像矩陣)的特殊操作。該操作涉及將對應(yīng)于圖像矩陣的特定行和列的單元格的值與濾波器矩陣中相應(yīng)單元格的值相乘。我們對濾波器矩陣范圍內(nèi)的所有單元格的值執(zhí)行此操作,并將它們加在一起以形成輸出。池化層:該層包括執(zhí)行從一組值中提取特定值的過程,通常是所有值的最大值或平均值。這減小了輸出矩陣的大小。例如,對于MAX-POOLING,我們?nèi)【仃嚨?X2部分的所有值中的最大值。因此,我們實際上是采用表示該圖像的該部分中存在特征的值。通過這種方式,我們擺脫了關(guān)于圖像特定部分中特征存在的不想要的信息,而僅考慮需要知道的內(nèi)容。通常在CNN體系結(jié)構(gòu)中的連續(xù)卷積塊之間定期插入池化層。它的功能是逐漸減小表示的空間大小,以減少網(wǎng)絡(luò)中的參數(shù)和計算量。全連接層:該層構(gòu)成卷積神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)的最后一塊,與分類任務(wù)有關(guān)。這實際上是一個完全連接的簡單神經(jīng)網(wǎng)絡(luò),由兩個或三個隱藏層以及一個通常使用“Softmax回歸”實現(xiàn)的輸出層組成,該輸出層可在眾多類別中執(zhí)行分類工作。目標檢測目標檢測是一種與計算機視覺和圖像處理相關(guān)的計算機技術(shù),用于檢測數(shù)字圖像和視頻中某一類語義對象(如人、建筑物或汽車)的實例。早期工作是基于模板匹配技術(shù)和簡單的基于零件的模型。后來,基于統(tǒng)計分類器的方法,例如神經(jīng)網(wǎng)絡(luò),SVM,Adaboost,貝葉斯等。最初成功的目標檢測器系列(均基于統(tǒng)計分類器)為以下大多數(shù)研究奠定了基礎(chǔ),這些研究在訓(xùn)練和評估以及分類技術(shù)方面均得到了發(fā)展。大多數(shù)對象檢測系統(tǒng)都考慮相同的基本方案,通常稱為滑動窗口,這是一種為了檢測圖像中不同比例和位置出現(xiàn)的窗口,它會進行詳盡的搜索。該搜索利用了分類器(檢測器的核心部分),該分類器指示給定的圖像斑塊是否與對象相對應(yīng)。假設(shè)分類器基本上在給定的比例和補丁大小下工作,則輸入圖像的多個版本將以不同的比例生成,并且分類器用于對圖像的每個縮小版本對給定大小的所有可能的補丁進行分類。目標檢測在計算機視覺的許多領(lǐng)域都有應(yīng)用,包括圖像檢索和視頻監(jiān)控。它廣泛應(yīng)用于圖像標注、活動識別、人臉檢測、人臉識別、視頻對象共分割等計算機視覺任務(wù)中。它還用于跟蹤對象,例如在足球比賽中跟蹤球、或在視頻中跟蹤人等任務(wù)。SSD-MobileNet介紹SSD-Mobilenet是一種目標檢測的神經(jīng)網(wǎng)絡(luò)。如圖2.3.1中從上到下分別是MobileNetv1模型(統(tǒng)一輸入大小為300x300)、chuanqi305的Mobilenet-SSD網(wǎng)絡(luò)、VGG16-SSD網(wǎng)絡(luò)。且默認都是用3x3大小的卷積核,除了MobileNet-SSD的Conv14_1、Conv15_1、Conv16_1、Conv17_1和VGG16-SSD的Conv8_1、Conv9_1、Conv10_1、Conv11_1用的是1x1大小的卷積核。圖2.3.1同類產(chǎn)品研究現(xiàn)狀及分析盲人出行途徑有四個,分別是盲道、盲杖、明眼人的陪伴、導(dǎo)盲犬,下面我將分別介紹這四種。盲道是屬于公共設(shè)施,他是靠地上的花紋提示盲人能不能行走,屬于盲人主要的出行工具,盲道是非常重要的。但是設(shè)計時、使用時、會出現(xiàn)有固定或者非固定的東西被隨意占用,各種電動車、私家車、雜物隨意堆放,這種情況在現(xiàn)實生活中很常見。盲杖,盲杖就是盲人前行的第三只眼,可探索前方是否有障礙物,是否被物體阻擋。這種只能判斷很近的物體,前方有無障礙物。明眼人的陪伴,對于有明眼人的陪伴,自然不需以上的輔助工具。導(dǎo)盲犬,導(dǎo)盲犬在當下必定還屬奢侈存在,不是每一個盲人都能申請到導(dǎo)盲犬,申請導(dǎo)盲犬有著種種條件的限制。以上總結(jié),各種設(shè)施有利有弊,但是當下互聯(lián)網(wǎng)時代的盲人出行工具還沒有。

實驗環(huán)境搭建安裝CUDA和CudnnCUDA是Nvidia創(chuàng)建的并行計算平臺和應(yīng)用程序編程接口(API)模型。它允許軟件開發(fā)人員和軟件工程師使用具有CUDA功能的圖形處理單元進行通用處理—一種稱為GPGPU(圖形處理單元上的通用計算)的方法。在NVIDIACUDA深層神經(jīng)網(wǎng)絡(luò)庫(cuDNN)是深層神經(jīng)網(wǎng)絡(luò)的GPU加速的庫。cuDNN為標準例程提供了高度優(yōu)化的實現(xiàn),例如向前和向后卷積,池化,規(guī)范化和激活層。cuDNN是NVIDIADeepLearningSDK的一部分。下載安裝文件。首先去英偉達官網(wǎng)下載cuda安裝包(圖3.1.1):圖3.1.1cuda下載runfile(后綴為.run)文件來安裝。安裝cuda,cuda中含有nvidia的顯卡驅(qū)動一般為專用的驅(qū)動非消費者級別的驅(qū)動,下載后點擊安裝即可。根據(jù)顯卡的配置來進行下載安裝AnacondaConda是一個在windows等系統(tǒng)上運行的包管理系統(tǒng)和環(huán)境管理系統(tǒng),利用他可以進行多個環(huán)境之間的切換。Conda的安裝也很簡單只需要執(zhí)行官網(wǎng)的腳本即可,他可以在不同環(huán)境之間進行包的預(yù)下載等操作,其中python是conda包管理系統(tǒng)的主要語言。從其官方網(wǎng)站下載最新版本的Anaconda安裝程序bash腳本(如圖3.2.1)圖3.2.1Anaconda安裝完成后輸入condainfo-e查看有無安裝成功新建一個環(huán)境condacreate-ncs_tf_py36python=3.6安裝TensorflowTensorFlow是一個開源軟件庫。他是由谷歌公司中的谷歌大腦團隊進行主要開發(fā)的,用于進行機器學(xué)習、深度學(xué)習等神經(jīng)網(wǎng)絡(luò)的研究、Tensorflow適用于生產(chǎn)環(huán)境下的部署、并且在很多工業(yè)設(shè)備上有著成功的案例。Tensorflow也是一個用于計算的開源庫TensorFlow根據(jù)Apache2.0開源許可證發(fā)行。盡管可以訪問基礎(chǔ)C++API,但該API主要用于Python編程語言。與旨在深度學(xué)習的其他數(shù)值庫(例如Theano)不同,TensorFlow則用于開發(fā)和生產(chǎn)系統(tǒng)。它可以在移動設(shè)備和數(shù)百臺機器上的單個CPU系統(tǒng),GPU和大規(guī)模分布式系統(tǒng)上運行。TensorFlow基本上是一個使用數(shù)據(jù)流程圖進行數(shù)值計算的軟件庫,其中包括表示圖中數(shù)學(xué)運算的節(jié)點和圖中邊緣表示的多維數(shù)據(jù)數(shù)組(稱為張量在它們之間傳遞)。請注意,張量是TensorFlow中數(shù)據(jù)的中心單元。TensorFlow提供了多個API(應(yīng)用程序編程接口)。它們可以分為兩個主要類別:低級API:完整的編程控制,推薦給機器學(xué)習研究人員,提供對模型的精細控制,而TensorFlowCore是TensorFlow的低級API。進階API:與TensorFlowCore相比,在TensorFlowCore上構(gòu)建更容易學(xué)習和使用,從而使重復(fù)任務(wù)更容易且在不同用戶之間更加一致。Tf.contrib是高級API的示例。TensorFlowLite,它運行在許多不同的硬件類型,包括移動電話,嵌入式Linux設(shè)備,以及微控制器經(jīng)過專門優(yōu)化過的模式。它變換TensorFlow模型轉(zhuǎn)換成一個有效的形式解釋使用,可引入優(yōu)化提高二進制文件的大小和性能。TensorFlow精簡版的設(shè)計,可以很容易地在設(shè)備上的網(wǎng)絡(luò)“邊緣”的執(zhí)行機器學(xué)習,而不是將數(shù)據(jù)從服務(wù)器來回。對于開發(fā)商來說,在設(shè)備上進行機器學(xué)習可以用下面的改進有助于:潛伏期(無往返于服務(wù)器),隱私(沒有數(shù)據(jù)離開設(shè)備),連接(無互聯(lián)網(wǎng)連接)和電源(網(wǎng)絡(luò)連接消耗功率)。使用模型優(yōu)化工具包來減少模型的大小并提高其效率,同時將對精度的影響降到最低。使用TensorFlowLite的工作流程要完成以下步驟:1.選擇一個模型,可以是自己的TensorFlow模型,在線查找模型,或從預(yù)訓(xùn)練模型中選擇一個模型進行遷移學(xué)習或重新訓(xùn)練。2.轉(zhuǎn)換模型。使用TensorFlowLite轉(zhuǎn)換器和幾行Python將其轉(zhuǎn)換為TensorFlowLite格式。3.使用TensorFlowLite解釋器,使用多種語言的api,部署到設(shè)備并在設(shè)備上運行模型。4.優(yōu)化模型。使用我們的模型優(yōu)化工具包來減小模型的大小并提高其效率,同時最大程度地減少對準確性的影響。在終端輸入Pipinstalltensorflow-gpu安裝AndroidStudioAndroidStudio是一個集成開發(fā)環(huán)境,用于編寫適用于移動終端設(shè)備的程序,基于JetBrains的IntelliJIDEA軟件構(gòu)建,并專門為Android開發(fā)而設(shè)計。它可以在基于Windows,macOS和Linux的操作系統(tǒng)上下載。它替代了EclipseAndroid開發(fā)工具(ADT),作為本機Android應(yīng)用程序開發(fā)的主要IDE。AndroidStudio是用于編寫安卓程序的一個集成開發(fā)環(huán)境,可以用來編寫手機、手表、電視等等使用安卓系統(tǒng)終端設(shè)備上的程序,他是從JetBrains的IntelliJIDEA來開發(fā)的可以軟件,且專用于Android的開發(fā),可以在Windows、Mac、Linux環(huán)境下來進行開發(fā),同時也他也取代了早起安卓開發(fā)使用的Eclipse的環(huán)境,作為安卓開發(fā)者主要的集成開發(fā)環(huán)境下載AndroidStudio在此網(wǎng)址上/studio/install?hl=zh-cn啟動AndroidStudioDMG文件。將AndroidStudio拖放到“Applications”文件夾中,然后啟動AndroidStudio。選擇是否想要導(dǎo)入之前的AndroidStudio設(shè)置,然后點擊OK。AndroidStudio設(shè)置向?qū)⒁龑?dǎo)一些的設(shè)置步驟,包括下載開發(fā)所需的AndroidSDK組件等等。安裝Flutter環(huán)境下載FlutterSDK在網(wǎng)址上https://flutter.io/sdk-archive/#macos,選擇Stablechannel。解壓zip安裝包添加flutter到環(huán)境變量中exportPATH=`pwd`/flutter/bin:$PATH運行flutterdoctor所有檢查都成功時,安裝完成。

詳細設(shè)計與實現(xiàn)訓(xùn)練神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集COCO數(shù)據(jù)集是微軟構(gòu)建的一個數(shù)據(jù)集,其包含detection,segmentation,keypoints等任務(wù)。MSCOCO總共包含91個類別,每個類別的圖片數(shù)量如下:COCO數(shù)據(jù)集和包括了很多任務(wù)、例如目標檢測、目標分割、關(guān)鍵點等任務(wù),COCO數(shù)據(jù)集是微軟提供的一個大型數(shù)據(jù)集,其中目標檢測任務(wù)共包含了91類、每個類別的情況如圖4.1.1圖4.1.1相比于ImageNet數(shù)據(jù)集COCO的總數(shù)還是比較少,但是每個類別的數(shù)量要多很多,這樣也帶來了很多好處沒有長尾數(shù)據(jù)的情況。標注例子如圖4.1.2圖4.1.2訓(xùn)練模型這里我使用了tf版本ObjectdetectionAPI,這個庫包含了時下比較熱門的一些網(wǎng)絡(luò)框架,例如FasterR-CNN、R-FCN和SSD等,這個庫因為在經(jīng)典的沙灘圖片上進行測試,以及眾多模型的結(jié)果,使得目標檢測技術(shù)在計算機視覺領(lǐng)域收到極大的關(guān)注,也帶動了各種目標檢測框架開始流行。TensorFlowObjectdetectionAPI是在TensorFlow之上構(gòu)建的開源框架,可輕松構(gòu)建,訓(xùn)練和部署對象檢測模型,此代碼庫可滿足我們的計算機視覺需求,經(jīng)典的沙灘圖片一般作為示例(圖4.1.2)。圖4.1.2ObjectDetection也包括了許多最新的目標檢測任務(wù)的網(wǎng)絡(luò)框架:帶有MobileNets的SSD(SingleShotMultiboxDetector)。帶有IceptionV2的SSD.帶有Resnet101的R-FCN(Region-BasedFullyConvolutionalNetworks)。帶有Resnet101的FasterRCNN。帶有Inception-Resenetv2的FasterRCNN。等等選用的是第一個MobileNets的SSD首先我們需要下載完整的tensorflowObjectDetectionAPI,使用git命令下載并編譯好所需環(huán)境gitclone/tensorflow/models.gitmvmodelsgoogle_obj_detectioncdgoogle_obj_detection/researchpythonsetup.pybuildpythonsetup.pyinstallcdslimpipinstall-e.新建一個linux腳本文件以.sh為結(jié)尾vimenv_obj_detection.sh添加以下內(nèi)容(設(shè)置顯卡以及protoc)cd~/works/google_obj_detection/research/protocobject_detection/protos/*.proto--python_out=.exportPYTHONPATH=$PYTHONPATH:pwd:pwd/slimexportCUDA_VISIBLE_DEVICES=0準備訓(xùn)練數(shù)據(jù)訓(xùn)練自己的model,下載預(yù)訓(xùn)練的模型權(quán)重和配置做遷移學(xué)習模型權(quán)重地址:/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md配置文件地址:/tensorflow/models/tree/master/research/object_detection/samples/configs將模型解壓后放到research文件夾內(nèi)將模型配置文件放到任意位置(需要記住路徑)修改模型配置文件num_classes:2class的數(shù)量batch_size:8幾組數(shù)據(jù)組成一個序列(根據(jù)GPUram設(shè)定)fine_tune_checkpoint:../../模型文件路徑train_input_reader:{tf_record_input_reader{input_path:../../}}路徑填訓(xùn)練集路徑eval_input_reader:{tf_record_input_reader{input_path:../../}}路徑填訓(xùn)練集路徑label_map_path:.../../標簽路徑修改config后就可訓(xùn)練了cdresearchpythontrain.py--logtostderr--train_dir=training/--pipeline_config_path=paint_on_air_mobilenet/ssd_mobilenet_v2_coco.config訓(xùn)練過程如圖4.1.3圖4.1.3訓(xùn)練過程訓(xùn)練結(jié)果會保存在train_dir指定的路徑下模型轉(zhuǎn)換TensorFlowLite轉(zhuǎn)換器用于將TensorFlow模型轉(zhuǎn)換為優(yōu)化的FlatBuffer格式,以便TensorFlowLite解釋器可以使用它們。FlatBuffer是高效的開源跨平臺序列化庫。它類似于協(xié)議緩沖區(qū),區(qū)別在于FlatBuffer在訪問數(shù)據(jù)之前不需要對輔助表示進行解析/解包步驟,從而避免了按對象分配內(nèi)存。FlatBuffers的代碼占用空間比協(xié)議緩沖區(qū)小一個數(shù)量級。TensorFlowLite轉(zhuǎn)換器從TensorFlow模型生成TensorFlowLiteFlatBuffer文件(.tflite)。TensorFlowLite是一個可以提供將tf模型到flatbuffer格式的轉(zhuǎn)換工具,轉(zhuǎn)換成flatbuffer格式,tflite就可以使用他們,flatbuffer是一個跨平臺搞笑的序列化庫,類似于協(xié)議緩沖期,但是和協(xié)議緩沖期還有缺別,他不會在訪問數(shù)據(jù)之前對其進行解包的操作,從而避免了按對象分配內(nèi)存,flatbuffers占用的空間也小了一個量級。從而可以節(jié)省安卓或ios的本地資產(chǎn)空間,使應(yīng)用程序更小,總的來說TnsorFlowLite轉(zhuǎn)換器就是從從TensorFlow模型生成TensorFlowLiteFlatBuffer文件(.tflite)的一個轉(zhuǎn)換工具。主要轉(zhuǎn)化過程為圖4.3.1圖4.3.1主要轉(zhuǎn)化過程通過以下代碼進行轉(zhuǎn)換(圖4.3.2)圖4.3.2Flutter開發(fā)語音播放數(shù)據(jù)準備這里我使用了訊飛語音的api進行tts(根據(jù)文字生成語音)。訊飛TTS的聲音更接近真實人聲,它們也是使用了一些深度學(xué)習的技術(shù)是語音更真實。訊飛也是一些大型企業(yè)的合作提供商。可以讓語音技術(shù)結(jié)合AI變得更完善(如圖)。注冊訊飛語音開發(fā)平臺用戶獲取API如圖安裝python的包環(huán)境cffi==1.12.3gevent==1.4.0greenlet==0.4.1pycparser==2.19six==1.12.0websocket==0.2.1websocket-client==0.56.0運行pythontts_ws_python3_demo.py這個文件的流程主要是上傳文字,接受返回的pcm語音數(shù)據(jù),轉(zhuǎn)換成wav格式,其中訊飛提供的案例是語音生成文字,為了達到播報的目的,我做了改寫,新增了兩個功能,根據(jù)列表生成語音文件;將pcm格式語音轉(zhuǎn)換成wav格式音頻。會在tts_ws_python3_demo.py同級目錄下產(chǎn)生文件(如圖)圖應(yīng)用搭建Flutter開發(fā)深度學(xué)習應(yīng)用應(yīng)該使用很多插件以達到目的應(yīng)該在pubspec.yaml中添加以下插件camera:^0.5.7+4tflite:^1.0.5audiofileplayer:^1.1.1assets_audio_player:^1.2.3關(guān)于camera這是一個適用于ios和Android的插件,他可以使flutter訪問設(shè)備的相機。有三個特性:1、在手機上可以實現(xiàn)幾乎實時的攝像。2、可以拍照保存到本地設(shè)備中3、錄視頻。4、從Dart添加對圖像流的訪問。需要的正是第四點功能從Dart添加對圖像流的訪問安裝過程首先,將camera作為依賴項添加到pubspec.yaml文件中。在IOS中在ios/Runner/Info.plist中添加兩行:<key>NSCameraUsageDescription</key><string>我可以使用相機嗎?</string><key>NSMicrophoneUsageDescription</key><string>我可以使用麥克風嗎?</string>在安卓中:在的android/app/build.gradle文件中將最低的Androidsdk版本更改為21(或更高版本)。關(guān)于tflite這是一個Flutter插件,他可以提供一個移動終端與tf模型的使用接口,用于在移動設(shè)備上進行模型的前向推導(dǎo),以便之后的前端顯示、對象檢測等任務(wù)。在ios中在Xcode中打開ios/Runner.xcworkspace,單擊Runner>Tagets>Runner>構(gòu)建設(shè)置,搜索“將源編譯為”,將值更改為Objective-C++在Android中在android/app/build.gradle添加以下設(shè)置aaptOptions{noCompress'tflite'noCompress'lite'}將模型文件、語音文件放到flutter的asset文件夾中作為本地資產(chǎn),在pubspec.yaml中添加本地資產(chǎn)位置assets:-assets/ssd_mobilenet.tflite-assets/ssd_mobilenet.txt-assets/dingding.wav-assets/person.wav-assets/bicycle.wav-assets/car.wav-assets/motorcycle.wav-assets/airplane.wav-assets/bus.wav-assets/train.wav-assets/truck.wav-assets/boat.wav以下部分省略該軟件是由4個lib文件組成,main是程序的入口,home是程序的界面第一屏也是一個stack的結(jié)構(gòu),camera是獲取視頻流用戶預(yù)測返回信息的文件,bnd是在camera層上進行繪圖的文件,接下來逐一介紹每個文件的內(nèi)容與作用(如圖)。圖Main.dart這是一個入口文件,flutter會找到這個文件作為啟動首要文件,這個文件會調(diào)用home.dart作為主頁的顯示Home.dart這是整個項目的集合文件,其中有一個按鈕,點擊之后會彈出一個Stack,上層是畫框的顯示,下層是視頻流(如圖)圖camera.dart與bnd.dartcamera負責視頻流處理,通過camera插件獲取視頻流。輸出的CameraImage類具有4個成員:圖像格式,高度,寬度以及最后一個由圖像字節(jié)組成的平面。classCameraImage{finalImageFormatformat;finalintheight;finalintwidth;finalList<Plane>planes;}由于格式不同,iOS和Android上的輸出CameraImage也不同:Android:planes是圖像的Y,U和V平面的字節(jié)數(shù)組的列表。iOS:僅包含一個數(shù)組,其中包含圖像的RGBA字節(jié)。知道格式對于正確解碼圖像并將其饋送到TensorFlowLite很重要。有了原始位圖后,我們可以調(diào)整其大小以所需的輸入大小,并將RGB值輸入到輸入張量中。使用tflite進行目標檢測任務(wù)輸入視頻流處理過的張量返回,返回的信息下處理音頻視頻異步其中對視頻流的操作如圖,其中涉及到異步等操作,視頻幀和音頻幀存在著異步與等待的關(guān)系:圖視頻流的幀是跟手機的相機有關(guān)系的,一直是有輸入的,一般來說是每秒25幀,但是其中很多幀都是相同的所以不必幀都進行檢測,可以預(yù)先設(shè)定一個狀態(tài)(是否在檢測),如果是這正在檢測就跳過這幀,如果沒有在檢測就跳過這個幀的處理。在檢測中的時候會進行記錄上一幀的物體,會對比上一幀與現(xiàn)在的幀的區(qū)別,然后通過語音播放出來,播放是異步的操作,其中異步的操作是等待音頻播放后才會播放下一個音頻內(nèi)容,視頻流處理的幀返回的信息有物體的名稱,物體的長寬,位置信息,以及物體的置信度,其中會設(shè)定一個置信度的過濾器進行過濾一些置信度比較低的物體信息,還會涉設(shè)定一個小目標過濾器,負責過濾小目標,其原理是根據(jù)物體長寬處理成面積進行對整個屏幕的面積對比進行過濾。接近警報:為了提示物體的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論