




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄摘要1Absrtact11緒論21.1選題背景21.2選題意義21.3主要工作21.4論文結構32相關技術介紹32.1 Inception v3模型32.2 PyCharm軟件42.3 Android studio軟件52.4 Anaconda軟件52.5 Tensorflow軟件52.6 Python語言53系統(tǒng)設計63.1系統(tǒng)功能模塊63.2 系統(tǒng)訓練流程64訓練模型實現74.1環(huán)境搭建74.1.1 Anacona環(huán)境的配置74.1.2 創(chuàng)建Python環(huán)境84.1.3 Tensorflow的安裝94.1.4 Retrain.py的修改94.2 訓練樣本準備104.3 訓練模型搭建10
2、4.4 訓練模型114.5測試模型125 系統(tǒng)實現125.1 SQLite數據庫的建立125.2 移動端主界面135.3整合Android項目145.4 花卉識別功能145.5 登錄、注冊功能155.6查詢記錄功能155.7顯示數據功能165.8設置功能176實現結果與測試186.1模型訓練結果測試186.2 模型測試功能測試196.3 系統(tǒng)識別功能測試217總結與展望22參考文獻22致謝23基于深度學習的鳥類識別系統(tǒng)的設計與開發(fā)摘要:對于鳥類種類的分類一直都是一個棘手的問題,他對人類和計算機視覺能力都有更高的要求。本課題基于Tensorflow平臺的InceptionV3模型實現了鳥類識別系
3、統(tǒng)的設計和實現。用Google大神開發(fā)好的神經網絡模型對包含200中鳥類1788張圖片的CUB_200_2011圖像庫進行訓練。將訓練好的鳥類特征模型封裝成鳥類分類器,將結果通過ajax返回給用戶界面,再由數據庫完成與安卓系統(tǒng)的對接,實現在移動端多用戶訪問的鳥類圖形分類器。系統(tǒng)經測試,可以完成對200中鳥類的識別率達到90%左右的精確度。關鍵詞:Tensorflow;inception v3;圖像識別;遷移學習;鳥類識別;安卓軟件Design and development of bird recognition system based on deep learningAbsrtact: B
4、ird species classification is a difficult problem that pushes the limits of the visual abilities for both humans and computers. Based on the InceptionV3 model of Tensorflow platform, the design and implementation of bird recognition system is realized. The CUB_200_2011 image library containing 1,788
5、 images of 200 birds was trained using a neural network model developed by Google. The trained bird feature model is encapsulated into a bird classifier. The result is returned to the user interface via ajax. Then the database completes the docking with the android system to realize the bird graphic
6、 classifier accessed by multiple users on the mobile terminal. The system has been tested to identify 200 birds with an accuracy of around 90%.Keywords: Tensorflow; inception v3; image recognition; transfer learning; bird recognition;android app1緒論1.1選題背景由于網絡的持續(xù)發(fā)展和存儲技術的日益強大,可以提供給人們使用的各個種類的信息量也在極速的增長
7、當中。在圖像領域中,很多圖像數據集的出現,能否在面對巨大圖像庫的時候,都能夠提取出當下圖片的信息,并根據提取出的特征進行分類1,成為人們關注與研究的方向。傳統(tǒng)的圖像識別技術是基于特征的檢測與分類,它需要大量的人工對圖像進行注解,然后再進行圖像的識別工作。遷移學習1就是將訓練模型的參數轉移到新模型,以幫助新模型的訓練。我們認為大多數的數據或任務都是相關的,因此通過遷移學習,我們可以以某種方式共享我們與新模型學習的模型參數,以提高和優(yōu)化模型的學習效率,而不是像大部分網絡那樣從零學習。遷移學習是機器學習領域的一個非常重要的組成部分,它可以用于文本的分類、定位處理、視頻的監(jiān)控等等領域?;谏疃葘W習的發(fā)
8、展,大部分研究人員都開始使用深度神經網絡來實現遷移學習。我選用的Inception v32模型是通過大量的圖像訓練與深度學習從而達到精確識別圖片的類型等信息的。由于我們樣本的不同、訓練方式的不同,最后生成的訓練模型也是不一樣的。在鳥類分類方面,地球上鳥的種類繁多、分布廣泛,目前全世界已知鳥的種類將近1萬多種,分布在我國的已知鳥類也有1300多種。傳統(tǒng)的分類方法不但工作強度大、時間周期長,而且很難在各位鳥類研究者之間進行數據共享,極大地阻礙了鳥類分類學的發(fā)展。鳥類種類的分類是一個難題,使人類和計算機的視覺能力受到限制。鳥類分類和系統(tǒng)發(fā)育宏觀領域的研究 , 主要集中在鳥體外部及內部解剖形態(tài)特征上的
9、研究。隨著生物數學的發(fā)展及計算機的廣泛應用 , 傳統(tǒng)分類完成了向數值分類及支序分類的過渡。在分類細則方面,盡管不同的鳥類具有相同的基本組成部分,但不同的鳥類在形狀和外觀上可能會發(fā)生巨大變化(例如,考慮鵜鶘vs.麻雀)。同時,即使是專業(yè)的觀鳥者,其他鳥類對幾乎在視覺上也無法區(qū)分(例如許多麻雀在視覺上是相似的)。由于光照和背景的變化以及姿勢的極端變化(例如,被樹枝部分遮擋的飛鳥,游泳鳥和棲息的鳥),類內差異很大。2到目前為止,我希望培養(yǎng)一定水平的研究深度,以供行人和人臉等少數特定類別使用。從后勤和計算的角度來看,專注于鳥類將有助于使研究更易于處理。同時,我認為許多經驗教訓(就注釋程序,定位模型,特
10、征表示和學習算法而言)將推廣到其他領域,例如不同類型的動物,植物或物體。1.2選題意義當今世界,科技發(fā)展日新月異,科技和人們的生活緊密結合,人們也越來越依賴科技。圖像識別已日漸成為研究熱點,隨著科研人員的不斷努力,該技術已廣泛應用到我們生活中的各個方面。圖像識別這個概念簡而言之就是我們利用計算機中的相關技術提取圖像的某些特征,然后再進行數據的處理和分析,去識別用戶所提供的目標圖像的技術。近些年以來,圖像識別的技術走向成熟,關于它的相關技術也開始在很大的領域里面盛行。我們可以通過計算機高速的計算能力來解決這些領域中的技術難題。在鳥類研究方面,經常需要對一些鳥類的品種進行識別,分類,然后再進行相應
11、的處理。4其中單獨分類這一項工作就需要在專業(yè)技術人員的指導下才能夠完成,這種傳統(tǒng)的方式不僅浪費人力,財力,而且效率也十分不理想,因此開發(fā)出一套能夠自動識別出鳥類種類的系統(tǒng),就能解決上述問題,提高工作效率。系統(tǒng)整體結構設計本系統(tǒng)的主要目標為了讓系統(tǒng)的使用者能輕松地利用本系統(tǒng)對我國的鳥類進行分類顯示、分類檢索和分類鑒定,并能不斷地根據最新研究成果對系統(tǒng)中的我國鳥類數據進行及時更新和修定。用戶可直接訪問專家數據庫5以判定個體從屬的種類。此鑒別系統(tǒng)在為用戶提供方便準確的物種鑒別手段的同時,也為分類學家提供了一個獲取大量信息的平臺。本設計基于谷歌開發(fā)的inception v36模型,利用卷積深度學習7的
12、概念開發(fā)了一個關于特征檢測達到鳥類識別的系統(tǒng),是一個實用型的設計。學生通過本設計過程,可以對卷積神經網絡有更加全面的理解,對特征檢測與提取有了一定的掌握,所學的Python8、java、安卓等知識進行整理及實際運用;通過對設計文檔的撰寫,可提高文檔整理及編輯能力;在完成設計的過程中,可提高學生的信息檢索能力。1.3主要工作本系統(tǒng)是實現基于Inception v3的鳥類識別系統(tǒng)的設計與實現,主要工作內容如下:(1) 前期的相關的準備工作,根據這次我們要一步步探索的課題,制定了論文所需要的知識的結構。對于這個課題,我們要深入的探索目前機器學習的原理以及它發(fā)展的現狀等多個方面。研究機器學習在移動開發(fā)
13、中當中的應用。(2) 中期的設計工作,詳細的整理以及充分的閱讀與分析論文和技術資料,再加上自己的觀點,去設計系統(tǒng)所合適的方案,再去分析設計的方案是否是具有可行性的。依據我們設計的方法去制作系統(tǒng),系統(tǒng)中有PC端、移動端兩大部分。第一個部分是PC端,主要是通過Python語言借助Inception v3模型進行圖片訓練,獲得訓練結果文件,安裝小型網頁服務器將訓練文件封裝成鳥類分類器,同時城建mysql數據庫對用戶的行為進行記錄;第二個部分是移動端,安卓端調用網絡接口,使安卓端可直接調用結果文件進行鳥類的識別并返回行為記錄給mysql數據庫。(3) PC端工作:PC端包括訓練圖片的整理與標注、Pyt
14、hon和Keras的安裝和使用、編寫神經網絡、進行數據的訓練、tornado網站服務器的使用、編寫go.py文件進行測試、訓練結果文件的適配性修改、Mysql數據庫的創(chuàng)建與使用。(4) 移動端工作:APP的基本架構設計、對Mysql數據庫的整合等。PC端編寫model.py腳本文件,移動端用Java4語言編寫移動端APP。(5) 測試系統(tǒng)。相關功能實現之后,對整個系統(tǒng)進行測試,如果所有的功能都能夠正常的運行與使用,同時達到了用戶的要求,就算作成功的完成了;如果有問題出現或者相應的功能不滿足實際的話,就應該及時的修改并且改良系統(tǒng)。(6) 撰寫系統(tǒng)相關文檔。文檔應該包括這個系統(tǒng)的功能以及對應的技術
15、,必須做到最大程度的讓用戶了解整個系統(tǒng)。1.4 論文結構 該文檔一共有七個部分的內容。第一章是緒論,其中有選題的背景、選題的意義、主要的工作實施和論文的結構四個小部分;第二章是用到的技術的簡介,其中有Inception v3模型的介紹,Python、Java語言的介紹以及Tensorflow、Python 3.6、Mysql與Android studio四個軟件的相應介紹。第三章是系統(tǒng)的設計,其中有系統(tǒng)的訓練流程與系統(tǒng)的相關功能模塊。第四章是訓練模型的實現,包括環(huán)境搭建、訓練樣本準備、模型搭建、訓練模型、測試模型。第五章是移動端界面設計與功能實現。第六章是實現結果及測試,主要包括訓練模型的結果
16、、移動端的登陸與注冊功能的測試結果、識別功能的測試結果、查詢功能的測試結果、顯示功能的測試結果、設置功能的測試結果。第七章是總結與展望。2 相關技術介紹在本系統(tǒng)中,主要使用了Inception v3模型,Python3.6軟件、Mysql數據庫、Android studio軟件與Tensorflow軟件,Python、Java語言。其中,Inception v3模型主要是進行圖像的訓練,而相關控制代碼語言為Python,其編寫是由Python3.6軟件完成的。移動端主要由Java編寫。具體介紹如下所述。2.1 Inception v3模型Inception v3是由谷歌開發(fā)的一個相對比較深的卷
17、積網絡,卷積5的意思就是神經網絡要對圖片上的每一個小塊的像素區(qū)要進行加權,這樣我們就不用去處理每一個像素的輸入信息了。其中的小面積稱為局部的感受野,面積的權值稱為卷積核。對圖像進行卷積的運算之后,再在上面加上偏置值之后,再用相應的激勵函數處理就可以得出圖像的特征圖。這樣我們就可以輕易的提取出了圖像的特征值。卷積大大的加強了圖片所具有信息的連續(xù)性,進一步加深了神經網絡對于圖片的理解。在這種情況下,主要的一些網絡結構都是使網絡的層數更深從而達到突破的效果,但是這樣做的話勢必會出現參數太多的情況,計算的復雜度也進一步增大,導致其應用很困難。同時網絡越深的話,它會出現隨著梯度往后穿越也會越來越容易消失
18、,模型就會得不到更好的優(yōu)化。這個時候Inception v3就完成了在其有限的內存與計算能力的情況下用相對合理的成本來處理較大的數據的任務,它是基于大型的圖像數據庫imageNet中的數據訓練而成的結果,可代替人工確定卷積層中的過濾器類型或者確定是否需要創(chuàng)建卷積層和池化層。因此,我們可以直接利用Google的Inception模型來實現圖像分類。其網絡結構如表2-1所示。表2-1 Inception v3模型的網絡結構表Typepath size/stride or remarksinput sizeConvconvconv paddedpoolconvconvconv3Inception5I
19、nception2Inceptionpoollinearsoftmax33/233/1 33/133/233/133/233/1As in figure 5As in figure 6As in figure788Logitsclassifier29929931491493214717732147147647373647171803535192353528817177688812808820481120481110002.2 PyCharm軟件PyCharm是一款Python IDE,具有一般IDE具備的功能,包括語法的高亮、Project的管理、代碼的跳轉、提示功能、測試功能它還具有一部分的
20、功能用于Django的開發(fā),并且支持Google App Engine與IronPython。IDE主要作用在于對項目依賴的集成,程序編寫的良好體驗,更有優(yōu)勢的BUG調試,直觀的項目感受。2.3 Android studio軟件Android Studio是由谷歌開發(fā)的用于安卓開發(fā)的工具,它提供了所需要的開發(fā)與調試功能。其主要功能包括項目的運行調試、虛擬設備的管理;工程文件目錄的顯示;代碼的編寫以及系統(tǒng)的布局設計功能。其功能模塊如圖2-2所示。圖2-2 功能模塊圖2.4 Keras軟件Keras是用Python編寫的高級神經網絡API,能夠在TensorFlow,CNTK或Theano之上運行
21、。它的開發(fā)著眼于實現快速實驗。能夠以最小的延遲將想法付諸實踐是進行良好研究的關鍵。2.5 Mysql數據庫Mysql數據庫相較與Android自帶的Sqlite數據庫,它的優(yōu)勢在于獨立于程序存在,用戶通過數據庫的守護進程同數據庫進行交互,可以滿足我們需要的同時多用戶登陸設計,而只能存在于本地的Sqlite無法勝任這樣的職責。2.6 Python語言Python是屬于面向對象的編程語言。Python 的源代碼也在GNU通用公共許可證下獲得了認可。Python 的設計可讀性很強,而且它的句法結構比其他使用英文關鍵字更頻繁的語言和其他語言中的一些標點符號更為獨特。Python 是一個高級腳本語言,它
22、結合了可解釋性、交互性和面向對象性。Python的關鍵字是相對而言比較少的,簡單的結構和定義明確的語法,使學習更加的容易。Python代碼的定義更加清楚明白。Python豐富的庫是它最大的一個優(yōu)勢,具有很好的兼容性。我們可以通過從終端輸入執(zhí)行代碼然后并得到語言的結果?;幽J降闹С?,可以從終端輸入執(zhí)行代碼并獲得結果的語言。 Python可以被移植到不同的平臺在于它的代碼是開放的。2.7 Java語言Java是一個廣泛使用的網絡編程語言 ,它是一種新的計算概念。首先 ,作為一種程序設計語言 ,它簡單、面向對象、不依賴于機器的結構、具有可移植性、魯棒性、安全性、并且提供了并發(fā)的機制、具有很高的性能
23、。其次 ,它最大限度地利用了網絡 ,Java的小應用程序 (applet)可在網絡上傳輸而不受 CPU和環(huán)境的限制。另外 ,Java還提供了豐富的類庫 ,使程序設計者可以很方便地建立自己的系統(tǒng)。3系統(tǒng)設計系統(tǒng)設計分為兩部分,系統(tǒng)訓練流程和系統(tǒng)功能模塊,系統(tǒng)功能模塊主要介紹該系統(tǒng)所具有的功能,系統(tǒng)訓練流程主要介紹實現該系統(tǒng)識別功能所進行的操作。3.1系統(tǒng)功能模塊該安卓系統(tǒng)可以分為5個模塊,分別為主界面模塊,登錄、注冊模塊,拍照識別模塊,查詢記錄模塊,顯示數據模塊。主界面模塊主要是功能模塊劃分,包括鳥類的識別、當前用戶識別信息記錄的查詢、所有用戶識別記錄的顯示、密碼的設置、測試與查詢記錄和數據的清
24、空,主界面由5個Button與1個Text構成,5個Button分別對應著5個相應的功能模塊界面,即單擊識別按鈕即可跳轉到識別界面,單擊查詢按鈕即可跳轉到查詢界面。系統(tǒng)功能結構如下圖3-1所示。圖3-1系統(tǒng)功能模塊圖3.2 模型訓練流程系統(tǒng)訓練實現方法:編寫model.py腳本文件,對收集的圖集進行清洗,標記已整理好的圖片,放入模型神經網絡中進行訓練,可得到結果模型文件,評估模型文件的準確度,再將訓練精準后的結果文件分裝在在一個小型服務器,由安卓用戶端調用,再進行系統(tǒng)的界面設計與功能實現,即可完成系統(tǒng)的設計與開發(fā)。系統(tǒng)訓練流程圖如圖3-2所示。圖 3-2 系統(tǒng)的流程圖4 圖片分類器實現分類器的
25、實現一共分為五個部分,分別為環(huán)境搭建,訓練樣本的采集,訓練模型的搭建,訓練模型,評估模型五部分組成。我們在下載好相應軟件與配置好所需環(huán)境之后,就可以開始對Inception v3模型進行訓練,通過對模型的相應訓練,可以滿足我們所需的圖像識別功能。該過程我們需要準備我們所需要的訓練數據集,即為圖像庫,然后搭建我們所需要使用的Inception v3模型,編寫代碼調用InceptionV3模型,用此模型去訓練數據集,最后去評估該模型性能準確度。具體的實現過程如下所述。4.1環(huán)境搭建由于實現圖片分類器,我們開始開發(fā)和設計系統(tǒng)前,需安裝搭建好我們需要的開發(fā)環(huán)境。該部分內容包括Python、Tensor
26、flow的安裝以及Android studio、Pycharm軟件的安裝。下面主要介紹相應的環(huán)境搭建步驟。4.1.1 安裝Python環(huán)境從官網下載與系統(tǒng)位數相同的Python3.6版本并進行安裝圖4-1安裝python軟件圖4.1.2 Keras的安裝創(chuàng)建好Python3.6的環(huán)境,用來安裝Keras,在命令行啟動剛剛配置好的Keras環(huán)境:activate Keras接下來就在這個環(huán)境中安裝Keras,使用命令pip3 install -upgrade keras,如圖4-4所示。等安裝過程完成后測試一下:打開命令行編輯器,輸入import keras,沒有報錯信息,則安裝完成,安裝成功如
27、圖4-5所示。圖4-4安裝Keras圖圖4-5 安裝成功圖4.1.3 Model.py的編寫完成環(huán)境搭建后,對于Model.py 的編寫,首先是對訓練樣本進行訓練,我們需要創(chuàng)建鳥類品種標簽,編寫迭代器讀取圖片數據集,建立樣本模型,將數據集載入模型,對模型進行訓練,生成訓練后的模型,對模型進行評估,測出準確度。在編寫圖像分類方法接口,對載入到的圖片進行分類并返回測出相似度最高的前幾位結果供程序調用。核心代碼如下:# img.show()img = misc.imresize(np.array(cropImg), (target_size0, target_size1, 3)img = np.ar
28、ray(1 - img.astype(float) / 255)predict = self.model.predict(img)index = predict.argmax()print(CNN預測,index)target = target_nameindexindex2 = np.argsort(predict)0-2target2 = target_nameindex2 index3 = np.argsort(predict)0-3target3 = target_nameindex3index4 = np.argsort(predict)0-4target4 = target_nam
29、eindex4index5 = np.argsort(predict)0-5target5 = target_nameindex5return target: target, predict: %.2f % (float(list(predict)0index/sum(list(predict)0) * 100), target2: target2, predict2: %.2f % (float(list(predict)0index2/sum(list(predict)0) * 100), target3: target3, predict3: %.2f % (float(list(pre
30、dict)0index3/sum(list(predict)0) * 100), target4: target4, predict4: %.2f % (float(list(predict)0index4/sum(list(predict)0) * 100), target5: target5, predict5: %.2f % (float(list(predict)0index5/sum(list(predict)0) * 100), 4.2 訓練樣本準備本系統(tǒng)需要準備大量數據庫文件作為樣本進行訓練,由于鳥類種類眾多,我選用了有兩百種鳥類,每種鳥類有60張左右圖片的數據集進行訓練,包含共
31、計11788張鳥類圖片。將圖片分類標記好,同時包含來時世界各地的各種各樣,形態(tài)各異的鳥類。圖4-6樣例訓練樣本圖4.3 訓練模型搭建首先我們需要加載骨架模型,這里用的InceptionV3模型,其兩個參數比較重要,一個是weights,如果是imagenet,Keras就會自動下載已經在ImageNet上訓練好的參數,如果是None,系統(tǒng)會通過隨機的方式初始化參數,目前該參數只有這兩個選擇。另一個參數是include_top,如果是True,輸出是1000個節(jié)點的全連接層。如果是False,會去掉頂層,輸出一個8 * 8 * 2048的張量。一般我們做遷移訓練,都是要去掉頂層,后面接上各種自定
32、義的其它新層。這已經成為了訓練新任務慣用的套路。最后是一個200個節(jié)點的輸出層,用softmax激活函數。代碼如下:def build(self): 建立模型 模型樣式如下 img_size = (target_size0, target_size1,3) # 全體圖片都resize成這個尺寸 input_image = Input(shape=img_size) base_model = InceptionV3(input_tensor=input_image, weights=imagenet, include_top=False, pooling=avg ) outputs = Dens
33、e(200, activation=softmax)(base_model.output) self.model = Model(inputs=input_image, outputs=outputs) pile(optimizer=adam, loss=categorical_crossentropy, metrics=accuracy) return self.model4.4 訓練模型與測試模型定義完模型后,我們需要對模型進行訓練、評估及預測。對于模型訓練,我們每次訓練的批數為1,共迭代100次。當前迭代次數由初始化參數讀取到。核心代碼如下:def train(self): print(
34、開始訓練模型.) history = self.model.fit_generator(sequence_data, steps_per_epoch=steps, epochs=40, verbose=1, max_queue_size=45, workers=2, initial_epoch=31, callbacks=TensorBoard(log_dir=.logs),# 設置日志存放目錄 ) self.model.save_weights(InceptionV3.model) # 保存模型權重 self.model.save(InceptionV3.h5) with open(Ince
35、ptionV3.json, w) as f: f.write(self.model.to_json() # 保存模型網絡 return history我們將模型搭建與訓練完成后,需要對模型進行測試。為了對模型有個評估,感知模型的表現,需要輸出該DNN模型的損失函數的值以及在測試集上的準確率. 其Python代碼如下(接以上代碼):def evaluate(self): #測試計算準確率 score = self.model.evaluate(sequence_test_data, verbose=0) print(測試 正確率:, score) #正確率5 系統(tǒng)實現5.1 服務端服務端主要工作
36、安排在PC端對前端用戶界面提供數據支持或者程序控制。5.1.1創(chuàng)建Mysql數據庫我們進行系統(tǒng)設計時,需要建立屬于自己的數據庫,來存放相應的數據,由于需要滿足多用戶之間切換,且需要與web服務器交互的特點,介于Android自帶的Sqlite數據庫值可以在本地進行數據交互,無法滿足我們的需求,這里我們采用Mysql數據庫。新建數據庫,庫名bird_identification_app;創(chuàng)建表,我們需要存放賬戶信息、日期時間、用戶與密碼、識別結果與識別概率。所以我們創(chuàng)建了兩張表,一張user表和一張data表;user表包含字段id、account、password與isonline;data表
37、包含字段id、account、time、result_1_name、result_1_rate。5.1.2 創(chuàng)建web服務器我們將圖片分類器放置在web容器中,這樣便可以滿足多用戶同時對服務器進行訪問。在PC端編寫一個web容器,以post的方式將圖片上傳到web服務器進行加載,實現圖片分類。我們選用的是tornado輕便型的web服務器,足以滿足我們的需求。在開始使用系統(tǒng)程序前,需要在pc端開啟web服務器,手機連接至和pc同一局域網即可訪問web服務。核心代碼如下:class MainHandler(tornado.web.RequestHandler): def get(self): s
38、elf.render(index.html) def post(self): img = Image.open(BytesIO(self.request.filesimage0body) img = img b_img = Image.new(RGB, (500,500),(255,255,255) size = img.size if size0=size1: rate = 500/size0 new_size = (500,int(size1*rate) img = img.resize(new_size, Image.ANTIALIAS).convert(RGB) b_img.paste
39、(img, (0,random.randint(0,500-new_size1) else: rate = 500 /size1 new_size = (int(size0*rate),500) img = img.resize(new_size, Image.ANTIALIAS).convert(RGB) b_img.paste(img, (random.randint(0,500-new_size0),0) data = Model.orc_img(b_img) self.write(json.dumps( code: 200, data: data )def make_app(): te
40、mplate_path = templates/ static_path = ./static/ return tornado.web.Application( (r/, MainHandler), , template_path=template_path, static_path=static_path, debug=True)5.2 用戶端用戶端即用戶界面,需要制作的主要包含兩個重要組成部分:安卓軟件用戶界面和網頁前端的用戶界面 。5.2.1網頁前端界面的編寫前端主要作用是給用戶很好的使用體驗,我選用bootstrap樣式框架對界面進行編輯,包含使用ajax對圖片分類器進行控制。核心代碼
41、如下:$(button).click(function () $(.justify-content-center).addClass(d-flex).show();console.log($(#predict-bodydiv);$(#predict-body).html( );$.ajax(type: post,data: new FormData($(#predict)0),cache: false,dataType:json,processData: false,contentType: false,success: function (ret) $(.justify-content-ce
42、nter).removeClass(d-flex).hide();$(#predict-body).html($ret.data.predict的可能性是:$ret.data.target $ret.data.predict2的可能性是:$ret.data.target2 $ret.data.predict3的可能性是:$ret.data.target3 $ret.data.predict4的可能性是:$ret.data.target4 $ret.data.predict5的可能性是:$ret.data.target5 ) console.log(ret),error:function (re
43、l) alert(請先選擇圖片);圖5-1 前端頁面圖5.2.2 安卓客戶端主界面的編寫主用戶端界面:主用戶端界面為用戶主要功能界面,使用線性布局,包括1個TextView,5個Botton,主要功能是對每個模塊的跳轉。Botton包括開始識別、查詢個人歷史記錄、查詢所有人的歷史記錄、清除所有本人的查詢記錄與退出登錄功能。點擊按鈕實現功能跳轉,調用其他模塊的功能。效果圖如圖5-1所示,核心代碼:/* * 清除當前用戶所有記錄 */ findViewById(R.id.clear).setOnClickListener(new View.OnClickListener() Override pu
44、blic void onClick(View v) / 創(chuàng)建一個線程來連接數據庫并獲取數據庫中對應表的數據 new Thread(new Runnable() Override public void run() Boolean result = DBUtils.clean(account); if (!result) Looper.prepare(); Toast toast = Toast.makeText(context,清除數據成功!,Toast.LENGTH_SHORT); toast.show(); Looper.loop(); ).start(); ); /* * 退出當前用戶返
45、回登錄界面 */ findViewById(R.id.quit).setOnClickListener(new View.OnClickListener() Override public void onClick(View v) / 創(chuàng)建一個線程來連接數據庫并獲取數據庫中對應表的數據 new Thread(new Runnable() Override public void run() DBUtils.quit(account); Intent intent = new Intent(context, MainActivity.class); startActivity(intent);
46、Looper.prepare(); Toast.makeText(context, 退出登錄成功!, Toast.LENGTH_SHORT).show(); Looper.loop(); ).start(); );/* * 跳轉到識別網頁 */public void recognition(View view) Uri uri = Uri.parse(:8000); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);/* 跳轉到查詢界面 */public voi
47、d query(View view) Intent intent = new Intent(this, Main3Activity.class); intent.putExtra(account,account); startActivity(intent);/* 跳轉到分析界面 */public void analyze(View view) Intent intent = new Intent(this, Main4Activity.class); startActivity(intent);圖5-1主界面圖5.2.3登錄、注冊功能模塊系統(tǒng)包括用戶登錄注冊功能,整個界面含有2個TextVi
48、ew、2個Edittext和2個Botton。用戶在賬戶后面的Edittext中輸入想要進行登錄或者注冊的用戶名,同時在密碼后的Edittext中輸入想要輸入的密碼,接著點擊登錄或者注冊按鈕,從而實現登錄或者注冊功能。介于用戶比較小眾,沒有設置賬戶密碼的格式。如果登錄時,輸入的賬號密碼與數據庫中的比對不正確就會報出密碼錯誤提示。注冊、登錄界面如圖5-2所示,注冊成功如圖5-3所示。圖5-2 登錄注冊界面圖圖5-3 注冊成功圖5.2.4 查詢記錄功能為了用戶可以查詢到以前自己對鳥類圖片識別的記錄,該界面擁有一個TextView,主要是與數據庫建立JDBC連接,從數據庫中讀取到當前用戶查詢的記錄,
49、這個頁面主要顯示當前用戶查詢鳥類名稱,相似概率,和查詢操作的時間。效果圖如圖5-4,核心代碼如下public static String record(String account) String str = ; Connection conn = getConn(bird_identification_app); if (conn = null) Log.i(TAG, register:conn is null); return null; else /進行數據庫操作 String sql = select * from data where account = ?; try PreparedStatement pre = conn.prepareStatement(sql); pre.setString(1, account.trim(); ResultSet rs = pre.executeQuery(); while (rs.next() String name = rs.getString(2); String gender = rs.getString(3); String result_name = rs.getString(4); String result_rate = rs.getString(5);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農莊步道鋪設方案范本
- 焦作河涌清淤施工方案
- 淄博師范高等專科學?!痘A閱讀(一)》2023-2024學年第二學期期末試卷
- 昆明藝術職業(yè)學院《工程項目管理沙盤模擬實訓》2023-2024學年第一學期期末試卷
- 如何設計課件:《成功開展家庭聚會》
- 銀行點鈔手法培訓課件
- 煙臺南山學院《分子與細胞生物學檢測技術》2023-2024學年第二學期期末試卷
- 上海中醫(yī)藥大學《化學實驗室安全技術》2023-2024學年第二學期期末試卷
- 梧州學院《nux系統(tǒng)及其應用》2023-2024學年第二學期期末試卷
- 臨沂大學《科技應用與組合設計》2023-2024學年第二學期期末試卷
- Unit 3Keep Fit.教案2024-2025學年人教版(2024)七年級英語下冊
- 第16課《有為有不為》公開課一等獎創(chuàng)新教學設計
- 小米創(chuàng)業(yè)思考(商業(yè)思考)
- 保障公路、公路附屬設施質量和安全的技術評價報告
- 2022年10月自考06779應用寫作學試題及答案
- 竣工結算審計服務投標方案
- 工程控制網測量記錄
- VOC在線運維技術服務合同協(xié)議書
- 發(fā)電廠電氣一次部分設計—2×300+2×200MW
- 2009研究生數值分析試題和答案-石家莊鐵道大學(word文檔良心出品)
- 纖維支氣管鏡的清洗消毒與維護程序
評論
0/150
提交評論