紀錄一下我小學期2天花了20小時寫的菜品識別java程序。html
百度圖像識別服務,基於深度學習及大規模圖像訓練,準確識別圖片中的物體類別、位置、置信度等綜合信息。java
支持識別5萬種菜品,適用於識別只含有單個菜品的圖片,接口返回菜品的名稱、置信度、卡路里、百科信息等綜合信息。支持自建菜品圖庫,適用於識別含有多個菜品的圖片,接口返回菜品的名稱、位置、相關性等綜合信息。數據庫
根據拍攝照片,識別圖片中菜品名稱,獲取菜品參考卡路里含量和百科信息,可結合識別結果進一步提供飲食推薦、健康管理方案等相關功能,加強用戶體驗,普遍應用於餐飲娛樂類和健康管理類APP中。根據拍攝照片,識別圖片中菜品名稱和位置,提升結算效率,減小人工錄入成本,普遍應用於餐飲行業的智能結算中。json
接口能力:該請求用於菜品識別。即對於輸入的一張圖片(可正常解碼,且長寬比適宜),輸出圖片的菜品名稱、卡路里信息、置信度。數組
請求格式:POST方式調用(Content-Type爲application/x-www-form-urlencoded,而後經過urlencode格式化請求體)app
返回格式:JSON格式佈局
請求限制: 請求圖片需通過base64編碼:圖片的base64編碼指將一副圖片數據編碼成一串字符串,使用該字符串代替圖像地址。您能夠首先獲得圖片的二進制,而後用Base64格式編碼便可。(圖片的base64編碼是不包含圖片頭的,如(data:image/jpg;base64), 請求格式支持:PNG、JPG、JPEG、BMP、GIF**,base64編碼後大小不超過4M,最短邊至少15px,最長邊最大4096px,長寬比3:1之內)學習
參數測試 |
是否必選ui |
類型 |
可選值範圍 |
說明 |
image |
是 |
string |
- |
Base64編碼字符串,以圖片文件形式請求時必填。(支持圖片格式:jpg,bmp,png,jpeg),圖片大小不超過4M。最短邊至少15px,最長邊最大4096px。注意:圖片須要base64編碼、去掉編碼頭後再進行urlencode。 |
top_num |
否 |
unit32 |
- |
返回結果top n,默認5. |
filter_threshold |
是 |
float |
- |
默認0.95,能夠經過該參數調節識別效果,下降非菜識別率. |
baike_num |
否 |
integer |
0 |
返回百科信息的結果數,默認不返回 |
字段 |
是否必選 |
類型 |
說明 |
log_id |
是 |
uint64 |
惟一的log id,用於問題定位 |
result_num |
否 |
unit32 |
返回結果數目,及result數組中的元素個數 |
result |
否 |
array() |
菜品識別結果數組 |
+name |
否 |
string |
菜名,示例:魚香肉絲 |
+calorie |
否 |
float |
卡路里,每100g的卡路里含量 |
+probability |
否 |
float |
識別結果中每一行的置信度值,0-1 |
+baike_info |
object |
否 |
對應識別結果的百科詞條名稱 |
++baike_url |
string |
否 |
對應識別結果百度百科頁面連接 |
++image_url |
string |
否 |
對應識別結果百科圖片連接 |
++description |
string |
否 |
對應識別結果百科內容描述 |
本程序是用java編寫的調用百度智能雲平臺圖像識別接口的菜品識別軟件。
1.運行程序進入主頁面,點擊菜單欄的圖像識別
圖1-1 程序主界面
2.菜單欄展開
圖1-2 主界面菜單欄
3.菜品圖片識別
4.點擊菜單欄的識別歷史紀錄,查看數據庫中數據
圖1-7 歷史紀錄顯示
(1)圖像識別功能實現數據流圖2-1。
圖2-1 圖像識別功能實現數據流圖
(2)程序操做流程圖2-2。
圖2-2 程序操做流程圖據流圖
(1)圖像識別
識別出用戶提供的圖片的菜名、卡路里、置信度、百科信息描述。
(2)歷史紀錄查詢
顯示識別過圖像相關信息的歷史紀錄。
(3)數據庫菜品信息檢索
輸入菜名查詢出所查菜的相關信息。
程序分爲3個大模塊,分別是圖像識別模塊,歷史紀錄查詢模塊,數據庫菜品信息檢索,下圖3-1是菜品識別程序的程序與模塊的關係:
圖3-1 菜品識別程序結構圖
設定返回菜品數據爲兩條,選擇第一條的菜名、卡路里、置信度、百科信息和第二條的菜名。
左邊4行2列的網格佈局用來顯示四條文本信息,右邊的畫布用來顯示加載後的圖像和百科信息。最底下爲1行4列的網格佈局,顯示、退出按鈕和拖拽提示標籤和實現接受拖拽圖片後顯示圖片路徑的文本框。
點擊顯示會調用文件選擇器。經過點擊顯示或者直接拖拽圖片到文本框均可以經過得到圖片的路徑來得到圖片的信息。
將圖片信息經過圖像識別接口用POST方式上傳到百度智能雲平臺的圖像識別服務獲得JSON格式的字符串。將JSON格式的字符串利用阿里的fastjson庫轉換字符串,得到想要格式的信息存到控件中。
歷史紀錄模塊界面的主容器採用3行1列的網格佈局,第一行顯示歷史紀錄標籤,第二行用JtextArea控件來存放從數據庫獲取的指定列的信息,第三行添加顯示和退出按鈕。
經過輸入菜品名稱對指定列在數據庫中查詢符和的行,並用JtextArea存放菜品的百科信息。
本程序使用的是Eclipse201906版本開發,語言使用的是Java,JDK版本爲11。在Windows10平臺上完成開發與測試。
點擊圖像識別頁面的顯示調用文件選擇器:
圖5-1 文件選擇測試
拖拽圖像進文本框加載圖像,並在文本框顯示圖像路徑信息:
圖5-2 拖拽加載圖片測試
拖拽圖片至文本框或者點擊顯示調用文件選擇器加載圖片,上傳圖片信息,將返回結果顯示在空間中
圖5-3 圖像識別結果測試
點擊顯示從數據中獲取菜品識別的歷史紀錄
圖5-4 歷史紀錄顯示測試
輸入菜品名稱,點擊查詢,返回菜品相關信息。
圖5-5 數據庫菜品信息查詢測試
[1] 慕課教育研發中心.Java從入門到項目實踐[M].北京:清華大學出版社,2018.
[2] 百度工程師.百度智能雲文檔-菜品識別[EB/OL]
.https://cloud.baidu.com/doc/IMAGERECOGNITION/s/Ajwvy2g51/,2019-06-28.
[3]liuyz60.JAVA圖形界面,怎麼讓背景圖片正好充滿JFrame?[EB/OL]
. https://zhidao.baidu.com/question/1925865716690279987.html,2017-11-27.
[4]蔣固金.JAVA拖拽選擇文件[EB/OL]
. https://blog.csdn.net/jianggujin/article/details/50569827,2016-01-23.
[5]阿朱__.從本地讀取json文件 用alibaba--fastjson解析 jar包[EB/OL]
. https://blog.csdn.net/qq_41371858/article/details/84940854,2018-12-10.
[6]紫霜落楓.Java如何作出好看的本地文件選擇器[EB/OL]
. https://zhidao.baidu.com/question/425294497293157012.html,2017-12-16.
[7]披Zhe羊皮De狼.Java中改變應用程序界面外觀[EB/OL]. http://www.javashuo.com/article/p-ufanvwbh-kc.html,2015-11-15.
資源連接:https://download.csdn.net/my/uploads/1/1(待審覈後更新)