「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

現實生活中除了單純以「物品數量」結帳外,還有其他情況是以「秤重」來計算價格的,也就是「重量乘上單位價格」,這類的場景比如水果攤、糖果鋪、自助餐、中藥行、菜市場等。

如果有一臺 POS 機,能夠識別物品並自動切換以重量或數量的方式來結帳,該有多方便啊!下面我們就來實際操作一臺自動 POS 機,能夠識別商品並依據商品種類來決定所採用的計價方式,比如西瓜用斤,雞蛋用顆數來計算等。

所需材料只要一塊普通的樹莓派,不需要任何硬件加速器,大約 1000 元就能搞定,對於不需要打印發票或鏈接後臺 POS 系統的小商家可說是相當方便!

功能需求

  1. 自動識別商品
  2. 秤重功能

各個商品可設定自己的秤重單位和單位價格(如公斤、斤、克)

  1. 連續物品的結帳功能(一位顧客會購買多樣商品,因此需一樣樣依次識別秤重後再一起結帳)
  2. 不同類商品但單位重量價格相同,可放在一起同時結帳

使用零件

  • 樹莓派板子 x1 (約 350~500 元)
「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

其實使用樹莓派 3B+ 即可,識別秤重約 3 秒可完成,但當然如果能使用 4 版當然會更好,使用者體驗會更佳!

  • 樹莓派 7” 官方屏幕(含觸控) x1 (約 450~600元)
「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

您也可以使用其它種類的屏幕(只是後面我所附的 3D 打印外殼可能就不適用了),另外程序中的互動方式是以觸控方式來設計,因此有觸控功能會比較方便。

  • HX711 模組+5 kg 壓力感測器 x1 (約 35~70元)
「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

這類的壓力感測器是將應變片貼附在鋼或鋁的柱狀體上,主要是通過感應這個柱狀體上微小的變化來探知物體的重量:另外,HX711 為 24 位元的 A/D 轉換器,由於其感應的數值很小,需通過 HX711 模組來放大。

  • Web Camera x1 (約 60~200 元)
「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

攝像頭使用的是 C310(只要是標準的 USB WebCam 都可以使用),而由於 YOLO V3-Tiny 模型的圖片尺寸需求為 416×416,因此使用一般最便宜的 VGA 即可。

3D 打印外殼

外殼設計如下,分別為主體和秤重盤,可一體化樹莓派和秤重模組等零件;我是以白色來打印,不過由於屏幕為黑色,因此模型顏色使用黑色其實會更適合。

「人工智能」自制以「秤重」來計算價格的 AI POS 收款機


「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

組裝和接線

由於零件不多,因此組裝相當容易,基本上就是把秤重模組放入圓形凹槽、樹莓派含屏幕倒扣在方形凹槽即可。

「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

HX711 模組與樹莓派的接法如下:

  • VCC 5V
  • GND 接地
  • DT Pin 29(GPIO 5)
  • SCK Pin 31(GPIO 6)
「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

組裝後的樣子:

「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

程序設計

  • 使用者動作流程:同一位顧客的多個商品,可使用結帳按鈕來累積其金額:清空按鈕則可清除目前的購物車,開始下一位客人的結帳。
「人工智能」自制以「秤重」來計算價格的 AI POS 收款機

  • 秤重模組程序 :HX711 在網絡上有現成的 python module 可直接使用,我參考的是這個,有稍加修改後再整合到程序中;這個程序每次執行時,會先偵測目前的重量,以其作為基準(代表重量為零),所以一開始執行程序時記得不要放任何東西在秤盤上。

程序和參數說明

如果您使用的零件都相同,基本上只要修改設定 pos.ini 的內容,並改成您自己訓練好的模型即可。

各項參數說明如下:

<code>[products]
#格式為 Label ID: [品名, 單價(每重量單位或每個), 計價單位]
#計價單位 --> g:斤, kg:公斤, gram:克, one:一個
labels_tw = {"v1":["橘子", 42, "g"], "v2":["雞蛋", 10, "one"], "v3":["綠辣椒", 18, "g"], "v4":["玉米荀", 0.25, "gram"],\\
"v5":["小蕃茄", 12, "g"], "v6":["棗子", 30, "one"], "v7":["哈密瓜", 65, "kg"], "v8":["蘋果", 25, "one"], \\
"v20": ["紅蘿蔔", 8, "g"], "v22":["牛奶芭樂", 20, "one"], "v23":["帶殼玉米荀", 0.15, "gram"] }

[camera]
cam_id = 0
#(H, V) 是否水平或垂直翻轉畫面
flipFrame = (False,False)
#是否將過程錄製成影片
record_video = True
#影片名稱
video_out = output.avi
#每秒幀數
frame_rate = 2
[desktop]
#背景圖片的路徑名稱
bg = images/bg.jpg
#(y,x) 購物車的顯示尺寸
cart_list_size = (350,250)
#僅僅顯示用, 偵測種類
detection_txt = 蔬菜

[operation]
#CN, EN
lang = cn
#seconds 商品結帳的結果, 要顯示幾秒
wait_for_next = 3

[yoloModel]
# yolov3-tiny, yolov3 可選擇YOLO-Tiny或YOLOV3版本
modeltype = yolov3-tiny
objnames = model/obj.names
weights = model/yolov3-tiny_81000.weights
cfg = model/yolov3-tiny.cfg

[system]
#是否切換到全屏幕來執行
full_screen = True
name_win = AI_POS/<code>

小結

不同種類的物品可設定專屬的秤重單位(公斤、克、斤),或換成以數量計價;商品的識別時間約為 4 秒,如果想要更快的速度,可將樹莓派 3 替換成第四代,或者加上 NCS 加速棒甚至改用 Jetson Nano,相信能得到更好的識別效率。


分享到:


相關文章: