Các công cụ nhập liệu như bàn phím haymáy scan dần bị thay thế bằng các thiết bị tiện lợi hơn như màn hình cảm ứng, camera… Hơn thế nữa, các máy tính để bàn không còn là công cụ duy nhất
Mục đích
Nghiên cứu và tìm hiểu các phương pháp nhận diện, áp dụng vào quét mã vạch, xây dựng chương trình.
Chương trình xây dựng giúp cho việc tổ chức quản lý 1 cách tiện lợi đem lại năng suất cao cho chuỗi cung ứng Logistics nói riêng và các lĩnh vực quản lý tự động hóa nói chung.
Tìm hiểu lập trình Python và cơ sở lý thuyết về thuật toán CNN
Tìm hiểu các phương pháp nhận dạng biển báo giao thông
Tìm hiểu và lựa chọn công cụ hỗ trợ
Xây dựng chương trình thực nghiệm
Dữ liệu xử lý là thu thập các mã Barcode, QRcode bằng cách tạo ra từ Python
Tìm hiểu các kĩ thuật xử lý ảnh trong nhận diện hình học
Xây dựng hệ thống nhận diện các biển báo khác nhau
Công cụ thực hiện: Pycharm
Báo cáo “ Phân loại hàng hóa bằng quét mã vạch ” bao gồm tất cả 3 phần.
Chương I – Tổng quan : Giới thiệu về các kiến thức nền tảng cũng như công nghệ và phần mềm được sử dụng trong đề tài bao gồm kiến thức về xử lý ảnh, thư viện xử lý ảnh OpenCV
Chương II – Triển khai thuật toán và tạo giao diện Tkinter : Trình bày tổng quan về mã vạch , phương pháp đề xuất và từ đó triển khai thuật toán xây dựng để giải quyết bài toán nhận diện mã vạch.
Chương III – Chạy chương trình : Từ phương pháp và thuật toán đã tìm hiểu, xây dựng một chương trình để nhận dạng đưa ra đầu ra cho bài toán cần giải quyết.
Phần Kết luận – Đánh giá kết quả và kết luận : Tổng kết quá trình thực hiện và rút ra hướng phát triển sau này.
TỔNG QUAN
Một số khái niệm cơ bản
Trí tuệ nhân tạo AI là trí thông minh của máy do con người tạo ra Ngay từ khi chiếc máy tính điện tử đầu tiên ra đời, các nhà khoa học máy tính đã hướng đến phát hiển hệ thống máy tính (gồm cả phần cứng và phần mềm) sao cho nó có khả năng thông minh như loài người.
Mặc dù cho đến nay, theo quan niệm của người viết, ước mơ này vẫn còn xa mới thành hiện thực, tuy vậy những thành tựu đạt được cũng không hề nhỏ: chúng ta đã làm được các hệ thống (phần mềm chơi cờ vua chạy trên siêu máy tinh GeneBlue) có thể thắng được vua cờ thế giới; chúng ta đã làm được các phần mềm có thể chứng minh được các bài toán hình học; v.v Hay nói cách khác, trong một số lĩnh vực, máy tính có thể thực hiện tốt hơn hoặc tương đương con người (tất nhiên không phải tất cả các lĩnh vực).
Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho các quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển.
Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý Người lập trình sẽ tác động các thuật toán tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hơp với các ứng dụng khác nhau.
Quá trình xử lý nhận dạng ảnh được xem như là quá trình thao tác ảnh đầu vào nhằm cho ra kết quả mong muốn Kết quả đầu ra của một quá trình xử lý ảnh có thể là một ảnh “đã được xử lý” hoặc một kết luận. Ảnh có thể xem là tập hợp các điểm ảnh và mỗi điểm ảnh được xem như là đặc trưng cường độ sáng hay một dấu hiệu nào đó tại một vị trí nào đó của đối tượng trong không gian và nó có thể xem như một hàm n biến P(c,c1,c2,…).Do đó,ảnh trong xử lý ảnh có thể xem như ảnh n chiều.
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết bằng C/C++, vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến thời gian thực Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần
Chức năng có trong thư viện OpenCV:
Thư viện OpenCV bao gồm một số tính năng nổi bật như:
Bộ công cụ hỗ trợ 2D và 3D
Nhận dạng chuyển động, đối tượng, hành vi,
Tương tác giữa con người và máy tính
Hỗ trợ thực tế tăng cường
Là một gói trong Python có chứa module hỗ trợ cho việc lập trình giao diện Tk
(GUI) ban đầu được viết bằng ngôn ngữ Tk Tcl Sau đó Tkinter được viết ra để sử dụng
Tk bằng trình thông dịch Tcl trên nền Python Ngoài Tkinter ra còn có một số công cụ khác giúp tạo một ứng dụng GUI viết bằng Python như wxPython, PyQt, và PyGTk.
1.1.5 Zbar Để giải mã Barcode và QR code ta sử dụng thư viện Zbar là 1 thư viện đa nền tảng, gọn nhẹ và cho kết quả nhận dạng tốt Thư viện được xây dựng trên mã nguồn C/C+ + nên dễ dàng chạy trên nền tảng IOS, Android và Linux Zbar có thể nhận dữ liệu trực tiếp từ Camera hoặc file ảnh, video sau đấy đưa vào bộ giải mã decoder để xử lý và nhận dạng
Cách cài thư viện Zbar trong python: pip install pyzbar
Nguồn: https://sites.google.com/site/embedded247/npcourse/impcourse/barcode_qrcode
Hình 1.1 Mô hình hệ thống của Zbar
Numpy là một thư viện lõi phục vụ cho khoa học máy tính của Python, hỗ trợ cho việc tính toán các mảng nhiều chiều, có kích thước lớn với các hàm đã được tối ưu áp dụng lên các mảng nhiều chiều đó Numpy đặc biệt hữu ích khi thực hiện các hàm liên quan tới Đại Số Tuyến Tính.
1.1.7 pyttsx3 là thư viện chuyển đổi văn bản thành giọng nói
Thư viện datetime trong python được chia làm 4 lớp chính:
- Date – Chỉ ngày, tháng, năm
- Time – Chỉ thời gian trong ngày (Giờ, phút, giây, micro giây)
- Datetime – Kết hợp thời gian và ngày (Ngày, tháng, năm, giờ, phút, giây, micro giây)
- Timedelta – Dùng để tính toán thời gian trong quá khứ và tương lai
Là thư viện chạy chương trình đa luồng dùng để chạy song song các chương trình trong cùng 1 thời điểm
1.1.10webbrowser là thư viện mở đường link trang web trong python
Là một thư viện Python cung cấp các dữ liệu nhanh, mạnh mẽ, linh hoạt Pandas được thiết kế để làm việc dễ dàng và trực quan với dữ liệu có cấu trúc (dạng bảng, đa chiều, không đồng nhất) và dữ liệu chuỗi thời gian, dùng hiển thị cấu trúc dữ liệu trong file excel dưới dạng cột và dòng
1.1.12speech_recognition là thư viện nhận dạng giọng nói trong Python 1.1.13pathlib là thư viện đường dẫn liên kết đến thư mục mà ta khai báo trong chương trình
1.1.14Workbook là thư viện đọc toàn bộ file Excel
Tổng quan về Barcode và QR code
Barcode (hay còn được gọi là mã vạch) là phương pháp lưu trữ và truyền tải thông tin bằng một lọai ký hiệu gọi là ký mã vạch (Barcode symbology) Ký mã vạch hay gọi tắt cũng là mã vạch, là 1 ký hiệu tổ hợp các khoảng trắng và vạch thẳng để biểu diễn các mẫu tự, ký hiệu và các con số Sự thay đổi trong độ rộng của vạch và khoảng trắng biểu diễn thông tin số hay chữ số dưới dạng mà máy có thể đọc được.
Là một công nghệ nhận dạng tự động, cho phép thu thập dữ liệu một cách nhanh chóng và chính xác Một số loại phổ biến: UPC, Code 39, Code 128, EAN-8, EAN-13
1.2.2 Giới thiệu về QR code
QR code (Quick Respond Code) là một dạng mã hai chiều, có thể lưu trữ nhiều loại kí tự khác nhau (số, ký tự, đường dẫn liên kết, ), phổ biến nhất của mã QR code là chuẩn ISO18004 QR code có nhiều ưu điểm vượt trội hơn so với Barcode có khả năng lưu trữ được lượn dữ liệu lớn, khả năng tự sửa lỗi Được sử dụng trong nhiều lĩnh vực:
- Nhận dạng và xác thực người dùng thẻ ID
- Theo dõi các mặt hàng (Quản lý hàng hóa)
- Chia sẻ thông tin thanh toán (Gpay, Paytm)
- Chia sẻ liên kết, hình ảnh, phương tiện.
Hình 1.2.1 Hình ảnh mã QR code
TRIỂN KHAI THUẬT TOÁN VÀ TẠO GIAO DIỆN TKINTER
Thuật toán chương trình
2.1.1 Sơ đồ hoạt động chương trình
Hình 2.1 Lưu đồ thuật toán hệ thống
Tạo giao diện Tkinter
N1 = Label(Nam, text="",bg="white",padx!0,pady=5,relief='solid') #khung chữ thứ nhất
N1.place(x75,y0) # vị trí của khung chữ thứ nhất
N2 = Label(Nam, text="",bg="white",padx!0,pady=8,relief='solid') #khung chữ thứ hai
N2.place(x75,y30) # vị trí của khung chữ thứ hai
N3 = Label(Nam, text="",bg="white",padx!0,padyE,relief='solid')#khung chữ thứ Ba
N3.place(x75,y!5) # vị trí của khung chữ thứ Ba
N4 = Label(Nam, text="",bg="white",padx@0,pady6,relief='solid') #khung chữ thứ hai
N4.place(x=6,y70) # vị trí của khung chữ thứ hai
NTT = ImageTk.PhotoImage(Image.open("D: GiaoDien LG80.jpg"\\ \\ )) #khung ảnh Nguyễn Tất Thành
TNTT.place( =x 50,y=0) # vị trí của khung ảnh
TieuDe = Label(Nam, text="Phân Loại Hàng Hóa Tự Động Bằng Quét
Mã",font=("bold",20),fg='red') #khung chữ tiêu đề
TieuDe.place(x0, y) #vị trí khung chữ tiêu đề
TVN=Label(Nam, text="Thành Viên Nhóm:",font=("Arial",12),fg='red')
TV1=Label(Nam, text="1 Huỳnh Hoài Nam 1900005832",font=("Arial",10)) TV1.place(x90, y= )90
TV2=Label(Nam, text="2 Nguyễn Văn Đồng 1900006916",font=("Arial",10)) TV2.place(x90, y0)
TV3=Label(Nam, text="3 Trần Quốc Bảo 1900006121",font=("Arial",10)) TV3.place(x90, y0)
GVHD=Label(Nam, text="Giáo Viên Hướng Dẫn:",font=("Arial",12),fg='red') GVHD.place( =x 380, y5)
GVHD1=Label(Nam, text="T.s Trần Quang Huy",font=("Arial",12))
MaVach = Label(Nam, text="Mã Vạch:",font=("Arial",12),bg="white") #khung chữ mã vạch
MaVach.place(x80, y2)#vị trí của khung mã vạch
HienMV = Label(Nam, text="",fg= "red",font=("Arial",12),bg="white") #Khung hiện mã vạch
HienMV.place(xP0, y2)#vị trí của khung hiện mã vạch
HNT = Label(Nam, text="",font=("Arial",12),bg="white")
TG = Label(Nam, text="",font=("Arial",12),bg="white")
STT = Label(Nam,text="STT",font=("Arial",10),bg="white")
SoMV = Label(Nam,text="Mã Vạch",font=("Arial",10),bg="white")
TenSP = Label(Nam,text="Tên Sản Phẩm",font=("Arial",10),bg="white")
KhuVuc = Label(Nam,text="Khu Vực",font=("Arial",10),bg="white")
KhungSTT = Entry(Nam, width=5,relief='solid')
KhungSoMV = Entry(Nam, width ,relief='solid')
KhungTenSP = Entry(Nam, width ,relief='solid')
KhungKhuVuc = Entry(Nam, width,relief='solid')
MXN = Label(Nam, text=" ", bg="white", padx=1, pady=1, relief='solid') MXN.place( =x 775, y4)
Them=Button(Nam,text="Thêm Sản
Phẩm",command=submit,font=("Arial",10),relief='solid',fg='green',bg="white")
TenXoa = Label(Nam,text="Số Dòng:",font=("Arial",10),bg="white")
KhungXoa = Entry(Nam, width=5,relief='solid',)
Xoa=Button(Nam,text="Xóa",command=XoaDL,font=("Arial",10),relief='solid',fg='gre en',bg="white")
Upload=Button(Nam,text="Cập
Nhật",command=file_open,font=("Arial",10),relief='solid',fg='green',bg="white") Upload.place( =x 730,y)0)
CHẠY CHƯƠNG TRÌNH
Mô tả bài toán
Đọc mã vạch từng thông tin sản phẩm :
- Nếu thông tin mã vạch được lưu thì đèn led màu xanh và máy tính xuất giọng “Xác nhận”
- Nếu chưa có thông tin thì đèn led màu đỏ và máy tính xuất giọng “Chưa xác nhận”
Yêu cầu
- Thông tin sản phẩm mã vạch phải được lưu trong file excel
- Nếu thêm hay xóa mã vạch trên giao diện Tkinter thì dữ liệu trong excel phải đồng bộ với thông tin trên giao diện
Chạy chương trình
3.3.1 Code nhận diện mã Barcode và QR code while True:
NTN = date.today() #ngày tháng
HTNTN = NTN.strftime("%d %B %Y") t = time.localtime() #phút giây t = time.strftime("%H:%M:%S", t) img = Hinh.read()[ ]1 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) for barcode decode(img): in #nhận diện mã vạch print(barcode.data)
MV = barcode.data.decode('utf-8') print(MV)
MXN = Label(Nam, text=" ", bg="green", padx=1, pady=1,relief='solid') MXN.place(xw5, y4) else:
MXN = Label(Nam, text=" ", bg="red", padx=1, pady=1,relief='solid') MXN.place(xw5, y4) pts = np.array([barcode.polygon], np.int32) pts = pts.reshape((-1, , 1 2)) cv2.polylines(img, [pts], True, (255 0 255), , , 5) pts2 = barcode.rect cv2.putText(img, XN (pts2[ ] pts2[ ]) cv2.FONT_HERSHEY_SIMPLEX, 0, 1 , ,0.9,(255 0 255 2, , ), )
HienMV.configure(text=MV) def XNC(): time.sleep(0.5)
GN.say("Mã Sản Phẩm Là:" + MV) else:
GN.say("Sản Phẩm Chưa Được Thêm")
Hình 3.1 Hình đọc mã vạch đã lưu
3.3.2 Code Trợ lý ảo def TL(): #khởi chạy trợ lý ảo robot = "" while True:
Noi = speech_recognition.Recognizer() with speech_recognition.Microphone() as mic: print(" ")
Tieng = Noi.listen(mic)#thu giọng nói try:
Ban = Noi.recognize_google(Tieng, language="vi") #lăng nghe bằng tiếng việt except:
Ban = "" if Ban == "": robot = "" elif "Xin chào" in Ban: robot = "Xin Chào Bạn" elif "hôm nay" in Ban: homnay = date.today() robot = homnay.strftime("%d %B %Y") elif "gian" in Ban:
ThoiGian = datetime.now() robot = ThoiGian.strftime("%H : %M : %S") elif "Google" in Ban: wb.open("https://www.google.com.vn/?hl=vi") robot = ("đang mở Google") elif "đóng" in Ban: robot = ("đang đóng lại") print("Trợ Lý: " + robot)
GN.say("Đã đóng") break elif "YouTube" in Ban: robot="Đang mở" wb.open("https://www.youtube.com/") elif "bạn là ai" in Ban: robot ="Tôi tên là kim giang là trợ lý ảo của bạn" elif "xoá dữ liệu" in Ban: robot ="Bạn muốn xóa dòng nào" print("Bạn: " + Ban) print("Trợ Lý: " + robot)
TroLy=Button(Nam,text="Trợ
Lý",command=TL,font=("Arial",10),relief='solid',fg='red',bg="white")
Hình 3.2 Hình ảnh trợ lý giọng nói
3.3.3 File Excel lưu trữ thông tin code
Hình 3.3 Hình ảnh file Excel
3.3.4 Kết quả tổng quan chương trình
- Đầu tiên ta đưa mã QR hoặc Barcode lên cho camera quét:
+ Nếu chưa có mã vạch được lưu thì sẽ hiện “Chưa xác nhận” và laptop xuất giọng nói “Chưa thêm sản phẩm”
Hình 3.4 Hình ảnh đọc mã QR code mới
- Sau đó ta nhập thông tin mã CODE hiển thị trên label:
Hình 3.5 Hình ảnh nhập thông tin mã vạch
- Sau khi nhấn “Thêm sản phẩm” thông tin được lưu vào File Excel: Nếu đã lưu mã vạch thì khi đưa qua camera để quét thì hiện”Đã xác nhận” và laptop xuất giọng nói “Mã sản phẩm là + Thông tin mã”
Hình 3.6 Hình ảnh đọc lại mã vạch đã lưu
- Nếu chưa có nhập thông tin sản phẩm mà bấm nút thêm sản phẩm thì sẽ hiện lên cảnh báo MessengerBox “Bạn chưa nhập đủ dữ liệu”
Hình 3.7 Hình ảnh cảnh báo chưa nhập
- Nếu ta nhấn nút xóa dòng 1 thì sẽ hiện lên Box cảnh báo, bởi vì đây là dòng hiển thị ID, mã vạch, tên sản phẩm và khu vực
- Để xóa được ta phải nhập số dòng tương ứng nếu không nhập thì sẽ không có gì xảy ra
Hình 3.8 Hình ảnh cảnh báo xóa dòng thông tin sản phẩm
Kết quả tổng quan chương trình
Trong quá trình tim hiểu nhóm đã gặp phải một số khó khăn nhất định Nhưng với sự đam mê và sự hướng dẫn nhiệt tình của thầy giáo cộng thêm nỗ lực tìm tòi, đam mê khám phá cái mới đã giúp nhóm đạt được một số kết quả sau:
- Tổng quan về thư viện cần thiết cho đề tài
- Đã tạo được giao diện Tkinter
- Tiến hành chạy thực tế và đạt được kết quả
- Chưa truy xuất được dữ liệu từ mã vạch 1 cách trực tiếp
- Trợ lý giọng nói chưa truy cập vào trong file excel và còn bị hạn chế chưa can thiệp vào hệ thống
- Phát triển phần mềm đọc mã vạch mà bất cứ ai cũng có thể sử dụng được, chỉ cần tải về và đăng nhập.
- Quét mã vạch hiển thị đầy đủ các thông tin sản phẩm lên phần mềm, sau đó tự động lưu vào thư mục do chính phần mềm đó tạo ra không bị phụ thuộc vào Excel, người dùng có thể chỉnh sửa trực tiếp trong file đó.
- Sử dụng trợ lý giọng nói có thể điểu khiển thêm hoặc xóa các mã vạch sản phẩm và đồng bộ với thư mục để lưu thông tin