TRANG 2 PHẦN MỀM ỨNG DỤNG XỬ LÝ ẢNH VÀ QR CODE ĐIỂM DANH NHÂN VIÊN QUA NGÔN NGỮ PYTHON CODE CUỐI TRANG MỤC LỤC DANH MỤC HÌNH VẼ 0 CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI 1 1 1 Lý do chọn đề tài 1 1 2 Mục tiêu nghiên cứu 1 1 3 Đối tượng nghiên cứu 1 1 4 Phạm vi nghiên cứu 2 1 5 Dự kiến kết quả 2 CHƯƠNG 2 CỞ SỞ LÝ THUYẾT 3 2 1 Python và IDE Pycharm 3 2 2 Thư viện Open CV 3 2 3 Thư viện xử lý ảnh đa luồng Tkinter 4 CHƯƠNG 3 GIẢI THUẬT VÀ ĐIỀU KHIỂN 6 3 1 Flowchart 6 3 2 Hoạt động của chương trình 7 3 3 Code chươ.
PHẦN MỀM ỨNG DỤNG XỬ LÝ ẢNH VÀ QR CODE ĐIỂM DANH NHÂN VIÊN QUA NGÔN NGỮ PYTHON CODE CUỐI TRANG MỤC LỤC DANH MỤC HÌNH VẼ ……………………………………………………………….……………….0 CHƯƠNG : TỔNG QUAN ĐỀ TÀI 1.1 Lý chọn đề tài : .1 1.2 Mục tiêu nghiên cứu : 1.3 Đối tượng nghiên cứu : 1.4 Phạm vi nghiên cứu : 1.5 Dự kiến kết : CHƯƠNG : CỞ SỞ LÝ THUYẾT 2.1 Python IDE Pycharm : 2.2 Thư viện Open-CV : 2.3 Thư viện xử lý ảnh đa luồng Tkinter : .4 CHƯƠNG : GIẢI THUẬT VÀ ĐIỀU KHIỂN 3.1 Flowchart : 3.2 Hoạt động chương trình : 3.3 Code chương trình : 3.3.1 Code nhận diện QR code scan QR code : 3.3.2 Code tổng quan để phát xử lý ảnh : 3.3.4 Code để nhận diện nhân viên ( check-in ) 10 3.4 Giao diện APP : 12 3.4.1 Giao diện tổng quan : .12 3.4.2 Giao diện QR Tools : 13 CHƯƠNG : THỰC NGHIỆM 14 4.1 Tạo file QR Code QR Tools : 14 4.2 Train model check in : 15 CHƯƠNG : KẾT LUẬN 17 5.1 Ưu điểm : .17 5,2 Nhược điểm : 17 5.3 Hướng phát triển : 17 TÀI LIỆU THAM KHẢO .18 DANH MỤC CÁC HÌNH VẼ Hình : Khai báo tkinter , tạo cửa sổ đơn giản Hình : Kết thu Hình : Flowchart cho QR Tools Hình : Flowchart cho Check-in điểm danh Hình : Flowchart cho Exit Hình : Giao diện tổng quan Hình : Giao diện QR Tools Hình : Kết thu Hình : Nhập ID Name Hình 10 : Tệp ảnh samples thu Hình 11 : Kết nhận TRANG CHƯƠNG : TỔNG QUAN ĐỀ TÀI 1.1 Lý chọn đề tài : - Năm 2019 , giới xuất loại virus mang tên Virus Corona Virus mang đến dịch bệnh cướp hàng triệu sinh mạng khiến hàng triệu người thất nghiệp , ảnh hưởng nặng nề đến kinh tế giới nước ta Năm 2021 vừa qua ảnh hưởng nặng nề mà dịch bệnh mang đến nước ta với biến chủng Delta Cả nước bị khóa chặt kinh tế , nhà nhà có người thân , nặng nề đau thương ảnh hưởng đến giáo dục nước nhà , việc trường chậm tiến độ sinh viên , … Hầu ngành , nghề bị ảnh hương nghiêm trọng Cơ chế lây lan virus corona tiếp xúc gần người với , qua nước bọt , qua hành vi chào hỏi hay trò chuyện…Do , nhiều ứng dụng đời , mục đích để hạn chế tiếp xúc người với vật dụng xung quanh Chính , em chọn đề tài tạo app điểm danh ứng dụng xử lý ảnh Qr code qua ngôn ngữ python để phần tạo ứng dụng áp dụng giảm bớt tình trạng - Khơng , ứng dụng nhiều ngôn ngữ python giúp ta tiến gần với kiến thức đại giới phương diện AI Machine Learning Tạo tiền đề cho việc tạo ứng dụng hữu ích sau 1.2 Mục tiêu nghiên cứu : - Tạo ứng dụng với khả tạo đọc QR code - Mục tiêu thứ hai điểm danh nhân viên ứng dụng thư viện open-cv python Tạo chương trình gồm có : lấy mẫu ảnh ( samples ) , train ảnh ( cho máy tính học ) tiến hành check-in ( điểm danh nhân viên ) - Mục tiêu thứ ba tạo giao diện sử dụng thân thiện với người dùng 1.3 Đối tượng nghiên cứu : - Python code - Pycharm IDE dành cho python - Thư viện Qrcode python TRANG - Thư viện dùng để xử lý ảnh thao tác liên quan đến ảnh ( opencv , numpy) Cuối tạo giao diện đa luồng với thư viện tkinter cho giao diện thân thiện với người dùng 1.4 Phạm vi nghiên cứu : - Tạo app nhúng Do sử dụng tkinter nên app hồn thiện ta tìm cách áp dụng giao diện sản phẩm source code vào tảng nhúng : áp dụng vào loại robot thông minh , giao diện với HMI hay Raspberry Pi , … để khu vực công cộng mà người dùng không cần trực tiếp chạm 1.5 Dự kiến kết : - Một app ứng dụng với nút gồm : nút mở QR tools dành cho công ty muốn tạo QR code cho nhân viên quét Qr code ; nút tính dành cho xử lý ảnh ( lấy mẫu samples , train liệu check-in hoàn chỉnh ) ; nút chương trình CHƯƠNG : CỞ SỞ LÝ THUYẾT 2.1 Python IDE Pycharm : - Ngơn ngữ lập trình chọn để sử dụng đề tài Python Đây ngôn ngữ đời vào năm 1980 phát hành từ đầu năm 1991 , Guido Van Rossum tạo nên Python ngôn ngữ lập trình hướng đối tượng TRANG ( OOP ) sử dụng rộng rãi xử lý ảnh , AI machine learning ( máy học ) Ngôn ngữ thuộc ngôn ngữ cấp cao , dễ ứng dụng với người dùng Hơn , ngơn ngữ có mã nguồn mở Điều điểm mạnh lớn cho python , có nhiều cộng đồng ( community ) hỗ trợ giúp đỡ lẫn Điển hình Stackoverflow cộng đồng mạnh mẽ chuyên giải giúp đỡ lẫn cho vướng mắc mà người - gặp phải Do tính chất dễ sử dụng đơn giản , dễ mở rộng mà xem ngôn ngữ mạnh thời điểm giải hầu hết vấn đề website , AI , - Machine learning , xử lý ảnh , … Pycharm IDE mạnh , hỗ trợ tốt cho ngôn ngữ Python Do tính chun nghiệp , có vens ( mơi trường ảo ) , có miễn phí dành cho cộng đồng nên pycharm hầu hết công ty lớn trường học ứng dụng cho sinh viên nhân viên sử dụng 2.2 Thư viện Open-CV : - Tương tự python , thư viện open-cv có mã nguồn mở Đây thư viện tạo nên cho việc xử lý ảnh Thư viện hỗ trợ tốt cho vấn đề liên quan đến computer vision ( thị giác máy tính ) sử dụng GPU tăng tốc cho thời gian thực Real-time khiến việc xử lý ảnh qua camera nhanh - tốt nhiều Thư viện hỗ trợ cho nhiều ngôn ngữ : C++ , C# , Python , java , lập - trình android , C++ , ….tùy theo nhu cầu loại code mà người dùng sử dụng Ngồi ta sử dụng ngơn ngữ áp dụng vào lập trình nhúng cho robot phát vật cản xử lý hình ảnh theo vấn đề liên quan : qr code , nhận diện người đeo trang nơi công cộng , nhận diện điểm danh nhân viên , học sinh … TRANG - Một số ứng dụng open-cv : kiểm tra giảm sát xe tự động ( chụp lại bảng số xe ) ; vấn đề liên quan đến xử lý phim ảnh , video ; robot giám sát xe tự lái ; ứng dụng điểm danh qua khuôn mặt , … 2.3 Thư viện xử lý ảnh đa luồng Tkinter : - Đây thư viện dùng để tạo giao diện cho source code mà ta viết Từ , người dùng có giao diện thân thiện dễ sử dụng , dễ dàng tiếp cận - với tính mà lập trình viên viết Hơn , người dùng cịn áp dụng giao diện lên robot hình HMI để tiện sử dụng nơi cơng cộng Hình : Khai báo tkinter , tạo cửa sổ đơn giản Hình : Kết thu TRANG CHƯƠNG : GIẢI THUẬT VÀ ĐIỀU KHIỂN 3.1 Flowchart : - Chia làm lưu đồ flowchart cho nút chức : Lưu đồ cho nút QR tools : TRANG Hình : Flowchart cho QR Tools - Lưu đồ cho xử lý ảnh : TRANG Hình : Flowchart cho Check-in điểm danh - Lưu đồ cho nút Exit ( khỏi chương trình ) Hình : Flowchart cho Exit 3.2 Hoạt động chương trình : - Khi người dùng nhấn nút QR Tools , di chuyển đến cửa sổ tạo qr code có chức tạo quét ( scan ) qr code Khi người dùng muốn xử lý ảnh theo ba bước : + Bước : Nhấm samples để lấy mẫu nhân viên train cho máy tính + Bước : Nhấn nút Train để máy tính train liệu nhân viên + Bước : Mở check-in để nhận diện nhân viên TRANG 3.3 Code chương trình : 3.3.1 Code nhận diện QR code scan QR code : def open_QR_Tool() : # define for open_path with variable to link direct = "" def open_path(): global direct files = [('PNG', '*.png')] direct = filedialog.asksaveasfilename(filetypes=files) entry_path.set(direct) if len(direct) == 0: msb_path = messagebox.showwarning("WARNING", "PLEASE SAVE YOUR FILE") else: pass # define for create QR def get_QR(): data = input_data.get() # user info if len(data) == 0: msb_data = messagebox.showwarning("WARNING", "PLEASE INPUT YOUR DATA") else: qr = pyqrcode.create(data) # Create QR Code qr.png(direct, scale=10) msb_result = messagebox.showinfo("ALREADY", "YOUR QR CODE IS CREATE SUCCESSFULLY") def scanner_QR(): cap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480) while True: ret, img = cap.read() for barcode in decode(img): myData = barcode.data.decode('utf-8') print(myData) pts = np.array([barcode.polygon], np.int32) pts = pts.reshape((-1, 1, 2)) cv2.polylines(img, [pts], True, (255, 0, 255), 5) cv2.imshow('QRCode', img) if (cv2.waitKey(1) & 0xff == ord('q')): break cap.release() cv2.destroyAllWindows() # create window app window = Toplevel(check_app) window.geometry('520x150') window.title("QR CODE Generator") window.iconbitmap('logoNTP.ico') window.resizable(False, False) TRANG link = Label(window, text="Enter Your Data", fg='black', font='arial 10') link.place(x=20, y=20) # input box input = StringVar() input_data = Entry(window, width=55, textvariable=input) input_data.place(x=135, y=20) # path box link = Label(window, text="Save File As ", fg='black', font='arial 10') link.place(x=20, y=40) entry_path = StringVar() link_path = Entry(window, width=55, textvariable=entry_path) link_path.place(x=135, y=40) # create button save & create QR code btn_save = Button(window, width=10, text="Browse", command=open_path) btn_save.place(x=300, y=70) btn_create_QR = Button(window, width=10, text="Create", command=get_QR) btn_create_QR.place(x=390, y=70) btn_scan_QR = Button(window, width=10, text="Scanner", command=scanner_QR) btn_scan_QR.place(x=300, y=100) # btn_ad_f = Button(window, width=10, text="Advance", command=advance_f) # btn_ad_f.place(x=390, y=100) window.mainloop() 3.3.2 Code tổng quan để phát xử lý ảnh : def ch_in () : pass def train_s () : pass def Quit_app () : check_app.quit() check_app = Tk() check_app.geometry('480x600') check_app.title("CHECK-IN APP") check_app.iconbitmap('logoNTP.ico') load=Image.open('sky.jpg') render=ImageTk.PhotoImage(load) img=Label(check_app,image=render) img.place(x=0,y=0) check_app.resizable(False, False) TRANG 10 name = Label(check_app, text="CHECK-IN APP", fg="#0000FF", bd=0 , bg='#D8E7EE') name.config(font=("Transformers Movie",30)) name.pack(pady=20) #cachtructhangdung 10 donvi name_1 = Label(check_app,text="NGUYEN TAN PHAT",fg="#0000FF",bd=0,bg='#D8E7EE') name_1.config(font=("Transformers Movie",28)) name_1.pack(pady=10) # function of app btn_QR = Button(check_app, width=10, text="QR Tools", command=open_QR_Tool) btn_QR.place(x=120, y=310) btn_cam = Button(check_app, width=10, text="Sample Tool", command=cam_det) btn_cam.place(x=280, y=310) btn_Train = Button(check_app, width=10, text="Train Tool", command=train_s) btn_Train.place(x=120, y=350) btn_ch_in = Button(check_app, width=10, text="Check-in", command=ch_in) btn_ch_in.place(x=280, y=350) btn_Quit = Button(check_app, width=10, text="Quit", command=Quit_app) btn_Quit.place(x=120, y=390) check_app.mainloop( 3.3.4 Code để nhận diện nhân viên ( check-in ) import cv2 import numpy as np import os import sqlite3 from PIL import Image face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_frontalface_default xml") recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.read('Recognizer/traindata.yml') def getProfile (id) : conn = sqlite3.connect('/Users/iamnt/Desktop/QR_Pro/Data/data.db') query = "SELECT * FROM people WHERE ID=" + str(id) cusror = conn.execute(query) profile = None TRANG 11 for row in cusror : profile = row conn.close() return profile cap = cv2.VideoCapture(0) fontface = cv2.FONT_HERSHEY_SIMPLEX while (True) : ret , frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray) for (x,y,h,w) in faces : cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2) cut_gray = gray [y:y+h,x:x+w] id, confidence = recognizer.predict(cut_gray) if confidence < 40 : profile = getProfile(id) if (profile != None ) : cv2.putText(frame,""+str(profile[1]), (x+10,y+h+30),fontface,1,(0,255,0),2) else : cv2.putText(frame,"Unknown",(x+10,y+h+30),fontface,1, (0,0,255),2) cv2.imshow('cam',frame) if (cv2.waitKey(1) == ord ('q')) : break ; cap.release() cv2.destroyAllWindows() - Ta sử dụng thư viện numpy để xử lý ảnh dạng ma trận Sqlite3 để kết nối với database mà ta tạo từ trước từ lấy ID hình từ - tệp file train Biến confidence độ xác giống với tệp train Nếu vịng lặp While ln camera mở tiến hành xử lý ảnh nhận - so sánh với tệp train ( file csv) Nếu confidence < 40% tiến hành lấy ID lấy profile từ tệp data Còn lại khơng nhận diện Nhận diện vẽ khung chữ nhật màu xanh bao quanh mặt , ngược lại - không nhận diện ta vẽ khung màu đỏ bao quanh Nếu nhận diện thành công trả ID nhân viên tên nhân viên TRANG 12 3.4 Giao diện APP : 3.4.1 Giao diện tổng quan : Hình : Giao diện tổng quan TRANG 13 3.4.2 Giao diện QR Tools : Hình : Giao diện QR Tools TRANG 14 CHƯƠNG : THỰC NGHIỆM 4.1 Tạo file QR Code QR Tools : Hình : Tạo QR Code với QR Tools Hình : Kết thu TRANG 15 4.2 Train model check in : Hình : Nhập ID Name Hình 10 : Tệp ảnh samples thu TRANG 16 CHƯƠNG : KẾT LUẬN 5.1 Ưu điểm : - Phát lấy mẫu nhạy , độ xác tốt điều kiện đủ sáng Có QR tools tích hợp app để tiến hành tạo đọc qr code Ứng dụng vào thời kì dịch bệnh 5,2 Nhược điểm : - Phụ thuộc vào chất lượng camera điều kiện sáng nên điều kiện thiếu - sáng gặp hạn chế độ đo đạc Việc linh hoạt cửa sổ hạn chế Còn phát sinh nhiều lỗi xung đột chương trình tràn nhớ lúc chuyển giao trạng thái 5.3 Hướng phát triển : - Tích hợp phát người có đeo trang hay không nơi công cộng Phát cảnh báo người hút thuốc bệnh viện Tích hợp với robot ( ví dụ ohmni ) để phát triển tính mở rộng : hỗ trợ bác sĩ , y tá chăm sóc bệnh nhân , đo đạc nhiệt độ , sp02 cho bệnh nhân , hướng dẫn khách tham quan … TÀI LIỆU THAM KHẢO [1] Code để train nhận diện khuôn mặt nhân viên : TRANG 17 https://www.youtube.com/channel/UCtD7PVV6oW6xFNE8j0gsxtA [2] Tkinter đa luồng để tạo giao diện app : https://www.youtube.com/c/M%C3%ACAIblog ... người với vật dụng xung quanh Chính , em chọn đề tài tạo app điểm danh ứng dụng xử lý ảnh Qr code qua ngôn ngữ python để phần tạo ứng dụng áp dụng giảm bớt tình trạng - Khơng , ứng dụng nhiều... sử dụng ngơn ngữ áp dụng vào lập trình nhúng cho robot phát vật cản xử lý hình ảnh theo vấn đề liên quan : qr code , nhận diện người đeo trang nơi công cộng , nhận diện điểm danh nhân viên , học... tạo ứng dụng hữu ích sau 1.2 Mục tiêu nghiên cứu : - Tạo ứng dụng với khả tạo đọc QR code - Mục tiêu thứ hai điểm danh nhân viên ứng dụng thư viện open-cv python Tạo chương trình gồm có :