人工智能綜合項目開發- 課件 項目三 智慧零售自助結算系統模擬實驗_第1頁
人工智能綜合項目開發- 課件 項目三 智慧零售自助結算系統模擬實驗_第2頁
人工智能綜合項目開發- 課件 項目三 智慧零售自助結算系統模擬實驗_第3頁
人工智能綜合項目開發- 課件 項目三 智慧零售自助結算系統模擬實驗_第4頁
人工智能綜合項目開發- 課件 項目三 智慧零售自助結算系統模擬實驗_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

人工智能綜合項目開發項目三智慧零售自助結算系統模擬實驗成都職業技術學院項目分析01任務一果蔬分類模型部署02任務二智能電子秤系統構建03任務三:超市智慧零售系統開發04項目三

智慧零售自助結算系統模擬實驗項目分析介紹圖像分類算法基本原理及果蔬圖像識別模型部署,然后構建嵌入式智慧稱重系

統,實現對果蔬稱重功能,然后構建

web

顯示界面對果蔬識別及稱重系統結果進行可視化分析。

1.學習神經網絡數學模型基本概念。2.了解圖像分類算法基本實現原理。

3.了解果蔬圖像識別模型部署及應用過程。4.掌握利用果蔬識別算法及嵌入式智能電子秤系統構建實現超市智慧零售

系統開發。項目背景及功能分析智慧零售系統就是運用人工智能、互聯網、物聯網技術,為消費者提供智能化、多

樣化、個性化的產品和服務。智慧零售發展在于三大方面,一是要擁抱時代技術,創新

零售業態,變革流通渠道;二是要從直接面向消費者銷售產品和服務商業零售模式

(Business-to-Consumer,B2C)轉向消費者到企業模式(Customer

to

Business,C2B),

實現人工智能牽引零售;三是要運用社交化客服,實現個性服務和精準營銷。當前,零售業經歷了三次大的變革,前兩次分別是實體零售和虛擬零售,而第三次

零售變革是中國在主入,即虛實融合的智慧零售。之所以說智慧零售是引領世界零售業

的第三次變革,一是智慧零售打破了線上線下單邊發展的局面;二是智慧零售實現了新

技術和實體產業的完美融合;三是智慧零售是全球企業都可以共同探索和發展的必然趨

勢;四是智慧零售是開放共享的生態模式。圍繞品牌商、零售商、消費者等參與主體和零售產業鏈條,AI

技術在零售領域的應

用場景包括精準營銷、商品識別分析、自助消費、智能倉儲、智能客服及無人零售等。

零售業基于計算機視覺、語音語義以及機器學習等技術,可提高企業的運營能力、促進

銷售額增長、降低人工成本等等。企業也可通過改善顧客消費體驗,促進消費者轉化率

提升,為業務發展增添動能。智慧零售的核心思路就是運用互聯網、大數據等先進技術手段,對商品的生產、流

通與銷售過程進行升級改造,進而重塑業態結構與生態圈,并對線上服務、線下體驗以及現代物流進行深度融合的零售新模式。以強調線下體驗部分的智慧零售系統為例,應用框圖如下圖所示:圖

3.0-1

智慧零售應用框圖本次智慧零售系統使用深度學習圖像分類算法實現果蔬分類識別,結合智能電子秤

及可視化大數據分析交互界面構建出超市智慧零售系統。實現整個系統分為三個任務,

如圖

3.2

所示。任務一,果蔬分類模型部署,包括果蔬分類概述,果蔬分類實現原理,

模型部署流程;任務二,智能電子秤系統構建,包括電子秤實現原理及功能拆分,上位

機解析電子秤傳感器數據;任務三,超市智慧零售系統開發,包括整個項目功能模塊劃

分,果蔬分類功能插件構建,智能電子秤數據采集與應用,項目案例功能演示等內容。圖

3.0-2

智慧零售任務拆解任務一

果蔬分類模型部署若想實現果蔬種類識別,無論是訓練還是識別階段都需要提取圖片中果蔬的特征值,果蔬包含了周長、面積、顏色、長度、寬度

5

個特征值,遇到特征較多的情況,使用深

度學習的效果明顯優于普通機器學習??梢允褂?/p>

TensorFlow

框架搭建卷積神經網絡模型,

加載包含多種水果和蔬菜圖片的數據集,使用遷移學習的方式訓練圖像分類模型,完成

果蔬分類任務。(1)果蔬分類任務實現TensorFlow

,

tf.keras

(keras.applications)提供了帶有預訓練權值的深度學習模型,如圖,這些模型可以

用來進行預測、特征提取和微調。圖

3.3

TensorFlow

中的遷移學習實現果蔬識別使用

keras.applications.MobileNetV2

調用

MobileNetV2

模型實現果

蔬識別。圖

3.4

TensorFlow

keras.applications

應用TensorFlow

另外一種實現遷移學習的方法是調用

TensorFlow

Hub

模塊,TensorFlow

Hub

目的是更好地復用已訓練好且經過充分驗證的模型,可節省訓練時間和計算資源。且

已訓練好的模型,可以進行直接部署,也可以進行遷移學習。樣例代碼如下圖所示:圖

3.5

TensorFlow

Hub

模塊應用訓練好模型后,對模型進行部署和應用,流程如圖所示,首先采集模型訓練的果蔬數

據集,生成

TFRecord

文件,然后搭建神經網絡模型去讀取生成的

TFRecord

文件進行模型

訓練,最終將訓練好的模型轉換成

tflite

模型文件,使用該.tflite

模型文件就可以直

接進行果蔬分類實驗。圖

3.6

模型部署流程首先定義加載

tflite

模型類,功能包括讀取模型,獲取輸入數據,模型推理,返回

輸出層數據。示例代碼如下:

#

加載

tflite

模型

,model_name:

模型名稱,model_path:

模型路徑class

TfliteRun:def

init

(self,

model_name="fruit_detection",

model_path=POSENET_MODEL):erpreter

=

tflite.Interpreter(model_path=model_path)

#

讀取模型self.interpreter.allocate_tensors()

self.model_name

=

model_name#

獲取輸入層和輸出層維度#

分配張量self.input_details

=

erpreter.get_input_details()self.output_details

=

erpreter.get_output_details()#

獲取輸入數據的形狀print(self.model_name

+

"_input_shape",

self.input_details[0]['shape'])#

模型推理def

inference(self,

img):erpreter.set_tensor(self.input_details[0]['index'],

img)

#

獲取輸入數據erpreter.invoke()

#

模型推理output_data1

=

erpreter.get_tensor(self.output_details[0]['index'])

#

獲取輸出層數據return

output_data1然后使用該模型實現果蔬識別并返回模型推理結果#

調用模型實現果蔬識別def

inference(self,

img):input_data

=

self.imgPreprocessing(img)

#

獲取測試圖像predictions

=

self.tflite_run.inference(input_data)

#

模型推理return

predictions模型推理結果為每個果蔬類別的概率。圖

3.0-1

果蔬識別模型推理結果示例根據模型推理結果,將結果進行繪制,并返回繪制結果。

利用該模型能實現菜花,葡萄,芒果,菠蘿,大白菜,橙子,茄子,香蕉,檸檬,

胡蘿卜,梨,玉米,番茄,黃瓜等果蔬分類,部分果蔬識別結果如圖

3.0-2

所示:def

recImgDis(img,

predictions):dat

=

""if

not

predictions

is

None:img

=

putText(img,

cfg["labels_list"][np.argmax(predictions)],

org=(0,

0))

#

結果繪制dat

=

cfg["labels_list"][np.argmax(predictions)]return

img,

dat圖

3.0-2

果蔬識別結果任務二

智能電子秤系統構建(1)智能電子秤系統概述實現超市智慧零售系統的第二個任務是構建智能電子秤,以實現果蔬稱重。在智能

電子秤系統中,采用了智能節點核心控制板,搭載的是

STM32F407ZET6

芯片;使用壓力

傳感器來進行果蔬識別稱重功能。(2)系統硬件模塊1)智能節點核心控制板智能節點核心控制板使用

STM32F407ZET6

作為主控制器??刂破鞑捎?/p>

32

位高性能

ARM

Cortex-M4

處理器,支持

FPU(浮點運算)和

DSP

指令,支持

SWD

JTAG

調試。核心控制板主要實現獲取壓力傳感器數據,并上傳至項目軟件部分。通過串口發送

果蔬重量數據至

LCD

觸摸顯示屏。圖

3.0-1

SMT32F407

核心板2)壓力傳感器該系統采用的壓力傳感器為平行梁傳感器,平行梁傳感器是稱重傳感器中最常用的

傳感器之一,廣泛運用于電子秤,廚房秤,珠寶秤等行業領域,是工業和農業自動化系統中不可缺少的核心部件,外形如四方體形狀,行業內統稱為平行梁稱重傳感器。

壓力傳感器主要實現對果蔬進行稱重的功能。圖

3.0-2

壓力傳感器3)LCD

顯示屏TFT-LCD

即薄膜晶體管液晶顯示器。其英文全稱為:Thin

Film

Transistor-Liquid

Crystal

Display。TFT-LCD

與無源

TN-LCD、STN-LCD

的簡單矩陣不同,它在液晶顯示屏

的每一個像素上都設置有一個薄膜晶體管(TFT),可有效地克服非選通時的串擾,使顯

示液晶屏的靜態特性與掃描線數無關,因此大大提高了圖像質量。TFT-LCD

也被叫做真彩

液晶顯示器。圖

3.0-3

3.5

LCD

顯示屏(3)智慧稱重系統實現原理在智能節點核心控制板上搭載壓力傳感器,將果蔬放在壓力傳感器上就能獲取到果

蔬的重量,并在

LCD

顯示屏上顯示果蔬重量。智能電子秤系統開發流程如圖3.0-4

所示,將果蔬放在智能電子秤上,壓力傳感器會獲取果蔬的重量,將獲取結果通過串口發送給智能節點核心控制板;智能節點核心控制板

接收到信息后,會通過串口向語音識別模塊和

LCD

顯示屏發送指令信息,語音識別模塊

將自動播報果蔬的重量和名稱等信息,LCD

顯示屏顯示果蔬重量及名稱等信息。智能節點

核心控制板通過

WiFi

協議將底層獲取的信息都上行發送給軟件部分。圖

3.0-4

智能電子秤系統開發流程利用

STM32F407ZET6

主控核心板、壓力傳感器、LCD

顯示屏搭建智能電子秤硬件系統。任務三:超市智慧零售系統開發(1)超市智慧零售系統概述超市智慧零售系統使用深度學習圖像分類算法實現果蔬分類識別,并利用智能電子

秤系統實現果蔬稱重功能,最后結合可視化數據分析交互界面構建出超市智慧零售系統,

實現果蔬自動識別,稱重結算以及數據可視化分析功能。圖

3.0-1

智慧零售系統開發流程如圖

3.0-2

所示,實現智慧零售系統開發分別實現果蔬圖像獲取插件、果蔬識別模型推

理插件、可視化交互界面插件、電子秤系統控制功能插件。其中圖像獲取插件主要實現

圖像獲取,圖像消息隊列傳遞以及圖像識別結果可視化等功能;模型推理插件主要實現

圖像數據預處理,模型推理,識別結果傳遞以及執行智能電子秤線程;可視化交互界面

插件主要實現智能電子秤稱重及結果顯示,超市零售數據分析等功能;電子秤系統控制

插件主要實現啟動智能電子秤執行線程,獲取果蔬重量。

3.0-2

超市智慧零售系統開發任務拆解(2)果蔬分類功能插件構建1)插件構建。本次智慧零售系統開發采用

python

多進程實現圖像獲取,圖像識別,嵌入式系統數據交互,結果可視化等任務。首先構建果蔬圖像獲取、果蔬圖像識別、網頁端圖像傳遞、智能電子秤系統數據接收與發送共四個功能插件。#

新建消息隊列q_flask

=

mp.Manager().Queue(2)

#

傳遞識別結果到網頁q_img

=

mp.Manager().Queue(1)

#

獲取攝像頭圖像q_rec

=

mp.Manager().Queue(1)

#

識別結果full_dict

=

mp.Manager().dict({"TASK":

True})

#

全局數據共享stopFlag

=

mp.Manager().Value('i',

0)

#

嵌入式設備狀態q_send

=

mp.Manager().Queue(2)#

發送控制指令消息隊列full_dict[cfg.FRUIT_LIAB]

=

"蘋果"

full_dict[cfg.PRESSURE_SENSOR_DATA]

=

10mapOpenPlugin

=

dict()

#

插件mapClosePlugin

=

dict()mapOpenPlugin[TaskType.IMAGE_GET_TASK]

=

(imgGetPluginRegist,

(q_flask,

q_img,

q_rec,

full_dict))

#

果蔬圖像獲取mapOpenPlugin[TaskType.IMAGE_REC_TASK]

=

(imgRecPluginRegist,(q_img,

q_rec))

#

果蔬圖像識別mapOpenPlugin[TaskType.FLASK_TASK]

=

(flaskPluginRegist,(htop,

port,

q_flask,

full_dict))

#

網頁端傳遞圖像mapOpenPlugin[TaskType.DATA_READ_SEND]

=

(dataPluginRegist,(stopFlag,

q_send,

full_dict))

#

嵌入式設備數據接收與發送for

plugin

in

mapOpenPlugin:(str(plugin)

+

"啟動成功~")taskFunc,

taskArgs

=

mapOpenPlugin[plugin]taskFunc(*taskArgs)

workFlow.busStart()#

提交任務

#

啟動插件線程2)果蔬圖像獲取功能插件實現實現第一個功能插件,果蔬圖像獲取功能插件。調用攝像頭獲取果蔬圖像,獲取果蔬分類結果消息隊列,并調用函數實現識別結果繪制,以及將結果傳遞到

web

網頁端。class

VideoThread(threading.Thread):def

init

(self,

camera=0,

q_flask:Queue=None,q_img:Queue=None,

q_rec:Queue=None,

full_dict=None):threading.Thread.

init

(self)self.cap

=

setCamera(camera)

#

調用攝像頭self.q_flask

=

q_flask

self.q_img

=

q_img#

消息隊列傳遞

繪制識別結果后的圖像到

web

顯示插件

#

消息隊列傳遞

原始圖像到識別插件self.q_rec

=

q_recself.full_dict

=

full_dict

def

run(self):#

消息隊列傳遞

AI

模型的推理結果fruits_detecte_pricet

=

Nonewhile

True:if

self.cap

!=

"":ret,

frame

=

self.cap.read()

#

獲取攝像頭圖像數據frame

=

cv2.resize(frame,

(ai_cfg["cam_width"],

ai_cfg["cam_height"]))#

原始圖像傳遞if

not

self.q_img.full()

and

not

frame

is

None:self.q_img.put(bytearray(frame))#

識別結果繪制if

not

self.q_rec.empty():fruits_detecte_pricet

=

self.q_rec.get()

#

獲取識別結果frame,

det

=

recImgDis(frame,

fruits_detecte_pricet)

#

識別結果繪制self.full_dict[config.FRUIT_LIAB]

=

det#

傳遞識別圖像到

web

顯示界面中if

not

self.q_flask.full()

and

not

frame

is

None:self.q_flask.put(bytearray(frame))3)果蔬分類功能插件實現然后實現第二個功能插件,果蔬識別模型推理插件。在任務一中實現了果蔬分類模型部署,利用深度學習神經網絡算法實現了果蔬分類任務,現將調用函數實現模型推理,并將模型推理結果進行傳遞。class

FruitDectectRecThread(threading.Thread):def

init

(self,

q_img:Queue=None,

q_rec:Queue=None,

model_path=cfg["model_path"]):threading.Thread.

init

(self)self.q_img

=

q_img

self.q_rec

=

q_rec#

消息隊列傳遞

原始圖像到識別插件

#

消息隊列傳遞

AI

模型的推理結果self.fruit_detecte_rec

=

FruitDetect(model_path=model_path)

#

圖像處理

def

run(self):while

True:

if

self.q_img.empty():continue

else:image

=

self.q_img.get()

#

獲取原圖像

if

image

!=

False:image

=

np.array(image).reshape(cfg["cam_height"],

cfg["cam_width"],

3)else:

breakfruit_detecte_pricet

=

self.fruit_detecte_rec.inference(image)

#

果實識別模型推理

if

self.q_rec.full():continue

4)可視化交互界面插件實現然后實現第三個功能插件,可視化交互界面插件。將識別結果包括果蔬類別、單價

及重量傳遞到

web

端。web

端獲取識別結果進行計算和展示,并結合超市銷售情況進行數

據分析及顯示。傳遞果蔬分類結果,包括果蔬類別、果蔬單價、果蔬重量到

web

端。

else:self.q_rec.put(fruit_detecte_pricet)

#

識別結果傳遞class

FlaskTask():def

init

(self):global

appdef

onExit(self):pass#

可視化交互界面啟動插件,host:

本機的

IP

地址;port:

端口號;q_flask:

攝像頭圖像幀;full_dict:

網頁端傳遞數據def

worker(self,

host="",

port=8082,

q_flask=None,

full_dict=None):setStatus(full_dict)

#

傳遞果蔬類別,重量,單價@app.route('/',

methods=['GET',

'POST'])def

base_layout():return

render_template('bigdata.html')def

camera():

GUI

界面通信協議如下:

while

True:if

q_flask.empty():continueelse:img

=

q_flask.get()

#

獲取果蔬識別結果圖片if

img

!=

False:img

=

np.array(img).reshape(cfg["cam_height"],

cfg["cam_width"],

3)#

將圖片格式轉換(編碼)成流數據,賦值到內存緩存中;#

主要用于圖像數據格式的壓縮,方便網絡傳輸。ret,

buf

=

cv2.imencode(".jpeg",

img)yield

(b"--frame\r\nContent-Type:

image/jpeg\r\n\r\n"

+

buf.tobytes()

+

b"\r\n\r\n")@app.route("/videostreamIpc/",

methods=["GET"])def

videostreamIpc():return

Response(camera(),

mimetype="multipart/x-mixed-replace;

boundary=frame")#

啟動線程app.run(host=host,

port=port,

threaded=True)log.info("flask

已成功啟動!!")return_msg

=

{"fruit_class":

果蔬類別(字符串),"fruit_m":

果蔬單價(float),

(3)智能電子秤數據采集與應用要實現超市智慧零售系統構建,需利用智能電子秤對果蔬進行稱重并將結果發送到

web

端,再結合識別結果及果蔬單價進行結算。果蔬稱重示例如圖

3.0-3

所示:圖

3.0-3

果蔬稱重示例圖實現第四個功能插件,智能電子秤系統數據傳遞。智能電子秤采用壓力傳感器獲取

溫馨提示

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

評論

0/150

提交評論