Thanh toán bán lẻ thông minh với ứng dụng Android


Ngô Mạnh Dũng
1 năm trước
Hữu ích 2 Chia sẻ Viết bình luận 0
Đã xem 8650

Trong nhiều thị trường bán lẻ và siêu thị, người ta thường thấy các hệ thống tự kiểm tra khác nhau để đăng ký mua hàng hoặc tham khảo giá cho người tiêu dùng cuối cùng. Nhiều trong số các hệ thống này dựa trên mã vạch, thẻ RFID hoặc mã QR. Bài viết này đề xuất Hệ thống tự thanh toán thông minh được nhúng trong ứng dụng di động không chỉ để phát hiện nhiều sản phẩm mà không có bất kỳ nhãn nào mà còn hiển thị danh sách bao gồm mỗi giá và tổng chi phí mua hàng.

Mô tả kiến ​​trúc

Trong hình tiếp theo, chúng tôi cung cấp một tổng quan mô tả chức năng cấp cao.

Quy trình công việc là:

  1. Người dùng chụp ảnh giỏ hàng của mình.
  2. Phát hiện đối tượng với mạng lưới thần kinh (YOLO V.3) để phát hiện chai, hộp, v.v.
  3. Hình ảnh của từng đối tượng được trích xuất từ ​​bức ảnh.
  4. Học chuyển được sử dụng từ SqueezeNet sang ConvNet để phân loại sản phẩm trong mỗi hình ảnh phụ và để xây dựng danh sách sản phẩm ID.
  5. Cuối cùng, chi phí mua hàng được lấy thông qua bảng giá sản phẩm và tất cả thông tin trong ứng dụng di động Android đề cập đến các sản phẩm được phát hiện được triển khai.

Một phiên bản Google Cloud được sử dụng làm máy chủ để tải lên hình ảnh, để chạy tất cả các mô hình Mạng thần kinh nhân tạo và gửi danh sách giá sản phẩm tới APP di động Android.

Phát hiện hình ảnh qua YOLO V3

Bạn chỉ nhìn một lần (YOLO) là một mạng thần kinh nhân tạo được sử dụng để phát hiện đối tượng. Nó được đào tạo với bộ dữ liệu phân loại lớp ImageNet 1000 trong 160 epoch.

Trong phần đào tạo, YOLO được sử dụng để phát hiện các đối tượng trong hình ảnh của tập dữ liệu của chúng tôi và để tạo một tập dữ liệu mới, chỉ với hình ảnh của các đối tượng. Kết quả dữ liệu được sử dụng để đào tạo hệ thống phân loại. Quá trình này được hiển thị trong đoạn mã tiếp theo.

from darkflow.net.build import TFNet
from time import time as t
options = {"model": "cfg/yolo.cfg", "load": "bin/yolo.weights", "threshold": 0.3}
tfnet = TFNet(options)

def get_objet(imgcv):
    t_init = t()
    JsonRespond = {"deteccionImg": []}
    result = tfnet.return_predict(imgcv)
    for i in result:
        if  i["label"] == "bottle":
            deteccionImg = {}
            classId = i["label"]
            score = i["confidence"]

            xmin = int(i["topleft"]["x"])
            ymin = int(i["topleft"]["y"])
            xmax = int(i["bottomright"]["x"])
            ymax = int(i["bottomright"]["y"])

            deteccionImg["img"] = imgcv[ymin:ymax, xmin:xmax, :]
            #save image detect
            cv2.imwrite(classId+str(score)+"_.png", deteccionImg["img"])

import os 
for k in os.listdir("./Dataset"):
    if k.split(".")[1] == "png" or k.split(".")[1] == "jpg":
        img = cv.imread("./Dataset/"+k)
        get_objet(img)

Học chuyển để phân loại đối tượng

Chuyển giao học tập là một kỹ thuật học sâu, cho phép bạn sử dụng các mô hình ConvNet được đào tạo trước hoặc là một khởi tạo hoặc như một trình trích xuất tính năng cố định cho nhiệm vụ quan tâm. Những mô hình này được đào tạo với bộ dữ liệu rất lớn (ví dụ ImageNet, chứa 1,2 triệu hình ảnh với 1000 danh mục).

Chúng tôi sử dụng SqueezeNet như một trình trích xuất tính năng cố định. SqueezeNet là một mô hình ConvNet được đào tạo trước được sử dụng để phát hiện đối tượng chiếm ưu thế trong một hình ảnh. Trong hình ảnh tiếp theo, kiến ​​trúc mạng thần kinh được hiển thị.

Các lớp "conv1" đến "fire9" đã được lấy. Các mã sau đây cho thấy quá trình này.

import numpy as np
from keras_squeezenet import SqueezeNet
from keras.applications.imagenet_utils import preprocess_input, decode_predictions
from keras.preprocessing import image
from keras.models import Model
from keras.layers import MaxPooling2D
from keras.layers import AveragePooling2D

model = SqueezeNet()
outputs = model.get_layer("drop9").output
outputs = MaxPooling2D()(outputs)
intermediate_layer_model = Model( inputs=model.input, outputs=outputs)

Mạng thần kinh chuyển đổi (ConvNet) được thêm vào để thực hiện phân loại. Kiến trúc ConvNet được hiển thị trong mã tiếp theo.

from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
from keras.optimizers import Adam
from keras.optimizers import Adadelta

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers import Conv2D

from keras.models import Sequential
from keras.layers import Dense, Activation

Opti = Adam(lr=0.00001, beta_1=0.9, beta_2=0.999)

model2 = Sequential([
    Conv2D(200,3 , strides=(1, 1),padding = 'same',input_shape=(6, 6, 512,)),
    Activation('relu'),
    Flatten(),
    Dropout(0.2),
    Dense(500),
    Activation('tanh'),
    Dropout(0.2),
    Dense(50),
    Activation('tanh'),
    Dropout(0.2),
    Dense(5),
    Activation('tanh'),
])

model2.compile(loss='mean_squared_error', optimizer=Adadelta(), metrics=['accuracy'])

Trong phần đào tạo, tập dữ liệu được tạo bằng YOLO được tải và mô hình SqueezeNet được ước tính để thu được đầu ra tương ứng cho mỗi hình ảnh.

import time 
import os
import cv2
from keras.utils import to_categorical
from sklearn.cross_validation import train_test_split
from sklearn.utils import shuffle
from scipy.sparse import coo_matrix

ficture = []
XD = []
YD = []
cta = 0
for k in os.listdir(PathClass):
    for i in os.listdir(PathClass"/"+k):
        img = image.load_img(PathClass+"/"+k+"/"+i, target_size=(227, 227))
        x = image.img_to_array(img)
        x = np.expand_dims(x, axis=0)
        x = preprocess_input(x)
        time_ini = time.time()
        preds = intermediate_layer_model.predict(x)
        time_fin = time.time()
        XD.append(preds)
        YD.append(cta)
    cta+=1    
    print(k)
XD = [i[0] for i in XD]
YD = to_categorical(YD)
YD = [ ((i+1)*2)-3 for i in YD ]

Sau đó, đầu ra SqueezeNet được sử dụng cùng với các nhãn (Mayonesa (Mayonnaise), Coca-Cola, Catsup, Activia, Không có) để huấn luyện ConvNet và để điền XD và YD tương ứng. Các hình ảnh sau đây cho thấy ma trận nhầm lẫn.

Phần cuối trên Python

Mã phụ trợ được phân tách thành hai tập lệnh Python (Phát hiện và SmartRetail.py). Phát hiện có tất cả các dự đoán từ mỗi mô hình (YOLO, SqueezeNet và ConvNet) và SmartRetail.py là dịch vụ để tạo vé mua hàng.

Ứng dụng di động

Ứng dụng di động được phát triển tại Cordova. Plugin camera Cordova được sử dụng để chụp ảnh từ điện thoại thông minh và plugin chuyển tập tin Cordova để gửi hình ảnh đến máy chủ. Để triển khai bảng giá được gửi bởi máy chủ, JQuery Mobile được sử dụng. Hình ảnh tiếp theo cho thấy các lượt xem APP trên thiết bị di động.

Hữu ích 2 Chia sẻ Viết bình luận 0
Đã xem 8650