1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng xử lý ảnh vào thiết kế và thi công mô hình phân loại trái cây

130 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP .ii LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP iii LỜI CAM ĐOAN iv LỜI CẢM ƠN v MỤC LỤC vi LIỆT KÊ HÌNH .ix LIỆT KÊ BẢNG xiii TÓM TẮT xiv Chương 1: TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DỤNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC Chương 2: CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH 2.1.1 Giới thiệu xử lý ảnh 2.1.2 Những vấn đề xử lý ảnh 2.2 PHƯƠNG PHÁP PHÂN LOẠI SỬ DỤNG MẠNG NƠ-RON TÍCH CHẬP 10 2.2.1 Giới thiệu Trí tuệ nhân tạo 10 2.2.2 Ngơn ngữ lập trình Python thư viện Tensorflow 12 2.2.3 Giới thiệu Google Colaboratory 14 vi 2.2.4 Phân loại loại trái sử dụng mạng nơ-ron tích chập 15 2.3 GIỚI THIỆU PHẦN CỨNG 25 2.3.1 Raspberry Pi model B 25 2.3.2 Raspberry Camera Module 28 2.3.3 Cảm biến vật cản hồng ngoại E18-D80NK 29 2.3.4 Động servo MG946R 31 2.3.5 Hệ thống băng tải 32 Chương 3: TÍNH TỐN VÀ THIẾT KẾ 34 3.1 GIỚI THIỆU 34 3.2 TÍNH TỐN VÀ THIẾT KẾ HỆ THỐNG 34 3.2.1 Thiết kế sơ đồ khối hệ thống 34 3.2.2 Sơ đồ kết nối hệ thống 36 3.2.3 Sơ đồ kết nối toàn mạch 54 Chương 4: THI CÔNG HỆ THỐNG 56 4.1 GIỚI THIỆU 56 4.2 THI CÔNG HỆ THỐNG 56 4.2.1 Chuẩn bị phần cứng 56 4.2.2 Lắp ráp kiểm tra 57 4.3 ĐĨNG GĨI VÀ THI CƠNG MƠ HÌNH 61 4.3.1 Đóng gói điều khiển 61 4.3.2 Thi cơng mơ hình 62 4.4 LẬP TRÌNH HỆ THỐNG 63 4.4.1 Lưu đồ giải thuật 63 4.4.2 Giao diện điều khiển 71 vii 4.4.3 Giao diện Web 71 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC 72 Chương 5: KẾT QUẢ-NHẬN XÉT-ĐÁNH GIÁ 85 5.1 KẾT QUẢ TỔNG QUAN 85 5.2 KẾT QUẢ ĐẠT ĐƯỢC 86 5.2.1 Giao diện hiển thị hình 86 5.5.2 Giao diện Web 87 5.2.3 Kết mơ hình thực tế 90 5.2.4 Kết thực nghiệm 93 5.3 NHẬN XÉT VÀ ĐÁNH GIÁ 103 5.3.1 Nhận xét kết đạt 103 5.3.2 Đánh giá kết 104 Chương 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 105 6.1 KẾT LUẬN 105 6.2 HƯỚNG PHÁT TRIỂN 105 TÀI LIỆU THAM KHẢO 107 PHỤ LỤC 108 viii LIỆT KÊ HÌNH Hình Trang Hình 2.1: Giới thiệu xử lý ảnh Hình 2.2: Các bước xử lý ảnh Hình 2.3: Các dạng lân cận 10 Hình 2.4: Tổng quan trí tuệ nhân tạo 11 Hình 2.5: Mạng nơ ron tổng quát 15 Hình 2.6: Một số ảnh tập liệu 17 Hình 2.7: Mơ hình mạng nơ ron tích chập phân loại ảnh trái 18 Hình 2.8: Biểu diễn ma trận ảnh RGB 19 Hình 2.9: Ma trận ảnh đầu vào Filter/Kernel 20 Hình 2.10: Quá trình tạo phần tử feature map 21 Hình 2.11: Hồn thành feature map 21 Hình 2.12: Q trình tính tích chập cho ảnh RGB 22 Hình 2.13: Tạo phần tử feature map stride = 22 Hình 2.14: Tạo phần tử thứ hai feature map stride = 23 Hình 2.15: Tạo phần tử feature map stride = padding = 23 Hình 2.16: Ví dụ max pooling 2x2 kết hợp với stride = 24 Hình 2.17: Khái quát kết dự đoán ảnh 24 Hình 2.18: Raspberry Pi model B 25 Hình 2.19: Phần cứng Raspberry Pi 26 Hình 2.20: Raspberry Pi Camera Module 28 Hình 2.21: Sơ đồ khối Raspberry Pi Camera 29 Hình 2.22: Cảm biến hồng ngoại E18-D80NK 29 Hình 2.23: Động servo MG946R 31 Hình 2.24: Mơ hình băng tải 32 Hình 3.1: Sơ đồ khối hệ thống 34 Hình 3.2: Mơ hình kit Raspberry Pi Model B 36 Hình 3.3: Sơ đồ cổng ngoại vi sử dụng 37 ix Hình 3.4: Sơ đồ bố trí cảm biến mơ hình 38 Hình 3.5: Động DC 39 Hình 3.6: Băng tải mini 40 Hình 3.7: Module relay 5V 40 Hình 3.8: Sơ đồ nguyên lý module relay 5V 41 Hình 3.9: Sơ đồ kết nối module relay điều khiển động 42 Hình 3.10: Nguyên lý điều chế độ rộng xung PWM 43 Hình 3.11: Module PWM 43 Hình 3.12: Sơ đồ nguyên lý mạch điều khiển tốc độ dùng ic555 44 Hình 3.13: Kết nối module điều khiển động băng tải 45 Hình 3.14: Servo MG946R 46 Hình 3.15: Sơ đồ bố trí servo với cảm biến băng tải 47 Hình 3.16: Kết nối Camera Raspberry 48 Hình 3.17: Bóng đèn led 3W 48 Hình 3.18: Bố trí thiết bị cho khối chụp ảnh (hướng nhìn từ xuống) 50 Hình 3.19: Bố trí thiết bị cho khối chụp ảnh (hướng nhìn từ cạnh bên) 51 Hình 3.20: Nguồn Adapter 5V 2.5A cấp cho Raspberry 53 Hình 3.21: Nguồn Tổ ong 24V 5A cấp cho băng tải 53 Hình 3.22: Nguồn Adapter 5V 3A cấp cho servo 54 Hình 3.23: Sơ đồ kết nối toàn mạch 54 Hình 4.1: Bố trí cảm biến, servo, luồng phân loại băng tải 58 Hình 4.2: Mặt cạnh buồng ảnh 59 Hình 4.3: Module PWM gắn buồng ảnh 59 Hình 4.4: Bố trí linh kiện trần buồng ảnh 60 Hình 4.5: Cảm biến hồng ngoại buồng ảnh 60 Hình 4.6: Đóng gói điều khiển buồng ảnh 61 Hình 4.7: Mơ hình hệ thống 62 Hình 4.8: Lưu đồ chương trình mơ hình 64 Hình 4.9: Lưu đồ chương trình Chụp lưu ảnh 67 Hình 4.10: Lưu đồ chương trình Xử lý dự đoán 68 x Hình 4.11: Lưu đồ chương trình So sánh dán nhãn trái 70 Hình 4.12: Giao diện ban đầu 71 Hình 4.13: Giao diện web 72 Hình 4.14: Cửa sổ Remote Desktop Connection 73 Hình 4.15: Cửa sổ hiển thị nhập địa IP 73 Hình 4.16: Vị trí file chương trình Desktop 74 Hình 4.17: Giao diện trình biên dịch 75 Hình 4.18: Giao diện điều khiển ban đầu 76 Hình 4.19: Giao diện hiển thị có trái đưa vào 77 Hình 4.20: Giao diện hiển thị có loại trái khác vào 78 Hình 4.21: Cần gạt servo1 mở nhận dạng táo 79 Hình 4.22: Cần gạt servo2 mở nhận dạng chuối 79 Hình 4.23: Cần gạt servo3 mở nhận dạng long 80 Hình 4.24: Sản phẩm khác loại chuyển đến cuối băng tải 80 Hình 4.25: Kết sau phân loại 81 Hình 4.26: Dữ liệu lưu trữ Firebase 82 Hình 4.27: Cửa sổ đăng nhập vào web 82 Hình 4.28: Giao diện web hiển thị 83 Hình 4.29: Trạng thái Stop giao diện 83 Hình 4.30: Cảnh báo thoát giao diện 84 Hình 5.1: Giao diện điều khiển ban đầu 86 Hình 5.2: Cảnh báo giao diện 87 Hình 5.3: Dữ liệu lưu trữ Firebase 87 Hình 5.4: Cửa sổ đăng nhập vào web 88 Hình 5.5: Giao diện web hiển thị 89 Hình 5.6: Mơ hình hệ thống hoàn chỉnh 90 Hình 5.7: Ngõ vào trái 91 Hình 5.8: Bộ điều khiển buồng ảnh 92 Hình 5.9: Module PWM gắn bên cạnh buồng ảnh 93 Hình 5.10: Bố trí đèn buồng ảnh 93 xi Hình 5.11: Táo băng tải chuyển vào buồng ảnh 94 Hình 5.12: Kết hiển thị giao diện táo vào 95 Hình 5.13: Táo chuẩn bị gạt vào luồng 96 Hình 5.14: Chuối băng tải chuyển vào buồng ảnh 96 Hình 5.15: Kết hiển thị giao diện chuối vào 97 Hình 5.16: Chuối chuẩn bị gạt vào luồng 98 Hình 5.17: Thanh long băng tải chuyển vào buồng ảnh 98 Hình 5.18: Kết hiển thị giao diện long vào 99 Hình 5.19: Thanh long chuẩn bị gạt vào luồng 100 Hình 5.20: Giao diện hiển thị có loại khác vào 101 Hình 5.21: Trái thứ (măng cụt) chuyển đến cuối băng tải 101 Hình 5.22: Kết phân loại 102 xii LIỆT KÊ BẢNG Bảng Trang Bảng 2.1: Sơ đồ chân cảm biến hồng ngoại 30 Bảng 2.2: Sơ đồ chân servo 32 Bảng 2.3: Thông số kỹ thuật động giảm tốc 33 Bảng 3.1: Thông số kỹ thuật E18-D80NK 38 Bảng 3.2: Thông số kỹ thuật động DC 39 Bảng 3.3: Thông số kỹ thuật module relay 5V 41 Bảng 3.4: Chức chân module relay 5V 41 Bảng 3.5: Thông số kỹ thuật module PWM 45 Bảng 3.6: Thông số kỹ thuật Servo 46 Bảng 3.7: Thông số kỹ thuật đèn led 3W 49 Bảng 4.1: Thông số linh kiện sử dụng mơ hình 56 Bảng 5.1: Kết chạy thực nghiệm 102 xiii TÓM TẮT Đề tài “Ứng dụng xử lý ảnh vào thiết kế thi cơng mơ hình phân loại trái cây” mơ hình dựa ứng dụng mạng nơ-ron tích chập để phân loại loại trái táo, chuối long Hệ thống hoạt động dựa q trình trích xuất đặc trưng từ màu sắc, hình dạng loại trái thơng qua mạng nơ-ron tích chập với tập liệu huấn luyện tự tạo Mơ hình mạng nơ-ron tích chập triển khai kit Raspberry Pi Model B với ngơn ngữ lập trình Python, thư viện hỗ trợ Tensorflow Kết thực đề tài mơ hình có khả phân loại loại trái táo, chuối long đến vị trí riêng biệt Việc điều khiển giám sát mơ hình thực qua giao diện giao tiếp với người dùng Dữ liệu phân loại lưu sở liệu truy cập qua web xiv CHƯƠNG TỔNG QUAN Chương 1: TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ Việt Nam quốc gia có nơng nghiệp chiếm tỉ trọng lớn cấu kinh tế, ngồi lúa gạo trái Việt Nam ưa chuộng giới Trái Việt Nam có mặt 170 quốc gia giới vùng lãnh thổ Năm 2018, kim ngạch xuất nhập ngành rau đạt 3,8 tỷ USD, kim ngạch xuất trái đạt 3,13 tỷ USD, chiếm 82,05% tổng kim ngạch xuất rau Theo tổ chức Lương thực Nông nghiệp Liên Hiệp Quốc (FAO), nước ta quốc gia có diện tích sản lượng trồng ăn nhiệt đới dẫn đầu châu Á Theo thống kê, diện tích trồng ăn triệu hecta, với tổng sản lượng gần triệu năm 2018 Với sản lượng trái lớn trên, nhà máy chế biến đóng gói trái hoạt động với nhiều dây chuyền khác nhau, việc xác định loại trái với dây chuyền chúng cách sử dụng người tồn nhiều nhược điểm Sai sót người chi phí nhân cơng cao làm ảnh hưởng đến suất doanh thu doanh nghiệp Nhu cầu ứng dụng công nghệ vào khâu phân loại dây chuyền sản xuất cao cần thiết, hai công nghệ phát triển hồn tồn phù hợp cho lĩnh vực xử lý ảnh máy học Xử lý ảnh có từ lâu vận dụng lĩnh vực dân sự, quân sự, y tế nhiều lĩnh vực khác [1], lĩnh vực mang tính khoa học cơng nghệ có tốc độ phát triển nhanh năm gần mảng quan trọng bậc thị giác máy tính (Computer Vision) Máy học (Machine Learning) hướng nghiên cứu lĩnh vực trí tuệ nhân tạo (Artificial Intelligence) với mục đích tạo hệ thống có khả “học” mà khơng cần phải lập trình cụ thể Trong máy học có cơng cụ quan trọng mạng nơ-ron (neural network), có cấu trúc dựa ý tưởng mạng nơ-ron hệ thần kinh người trở thành cơng cụ mạnh mẽ nhiều tốn nhận dạng ảnh, giọng nói… BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO [1] Nguyễn Thanh Hải, “Giáo trình Xử lý ảnh”, NXB Trường Đại Quốc Gia TP.HCM, 2014 [2] Nguyễn Quang Hoan, “Xử lý ảnh”, Học viện Bưu Viễn thơng, Thủ Hà Nội, 2006 [3] Nguyễn Thanh Tuấn, “Deep Learning Cơ Bản” Ebook [4] Nguyễn Hiền Minh - Phan Thanh Phong, “Ứng dụng xử lý ảnh hệ thống phân loại sản phẩm”, Đồ án tốt nghiệp, trường ĐHSPKT, Tp.HCM, 2019 [5] Trương Quốc Bảo -Võ Thành Lâm - Võ Văn Phúc - Trương Quốc Định, “Phát triển thuật toán xử lý ảnh máy học để nhận dạng khiếm khuyết bề mặt gạch men”, Kỷ yếu Hội nghị Khoa học Quốc gia lần thứ IX “Nghiên cứu ứng dụng Công nghệ thông tin”, Cần Thơ, 2016 [6] Python (programming language), https://en.wikipedia.org/wiki/Python_(programming_language) [7] Raspberry Pi gì? Giới thiệu Raspberry Pi, https://raspberrypi.vn/tin-tuc/raspberry-pi-la-gi-gioi-thieu-ve-raspberry-pi-261.pi [8] Pulse-width modulation, https://en.wikipedia.org/wiki/Pulse-width_modulation [9] Understanding CNN, https://www.kaggle.com/sathvisiva/understanding- cnn?fbclid=IwAR1SIBZO8lZfwe1FEmmfuWLOjhfJG3LNSB_H6kD1pGEESfXUSVi 3-QukaZ8 [10] Ứng dụng Convolutional Neural Network toán phân loại ảnh, https://topdev.vn/blog/ung-dung-convolutional-neural-network-trong-bai-toanphan-loai-anh/ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 107 PHỤ LỤC PHỤ LỤC • CHƯƠNG TRÌNH ĐIỀU KHIỂN HỆ THỐNG TRÊN RASPBERRY ######KHAI BAO CAC THU VIEN CAN THIET###### from picamera import PiCamera import pigpio import RPi.GPIO as GPIO from appJar import gui from time import sleep from PIL import Image, ImageTk import tensorflow as tf from tensorflow import keras import cv2 import numpy as np import firebase_admin from firebase_admin import credentials from firebase_admin import db ######KHOI TAO GIA TRI BAN DAU CUA CAC BIEN###### GPIO.setwarnings(False) camera = PiCamera() pi = pigpio.pi() BUZZER = 32 MOTOR = 12 CB1 = 16 CB2 = 19 CB3 = 21 CB4 = 23 servo1 = 24 servo2 = 17 servo3 = 22 init_angle = 500 angle_servo_1 = 1400 angle_servo_2_3 = 1200 TT = s = label = i = count_apple = count_banana = count_df = count_other = GPIO.setmode(GPIO.BOARD) GPIO.setup(MOTOR, GPIO.OUT) GPIO.setup(BUZZER, GPIO.OUT) GPIO.setup(CB1, GPIO.IN) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 108 PHỤ LỤC GPIO.setup(CB2, GPIO.IN) GPIO.setup(CB3, GPIO.IN) GPIO.setup(CB4, GPIO.IN) GPIO.output(BUZZER, GPIO.LOW) GPIO.output(MOTOR, GPIO.LOW) ######CAP NHAT DU LIEU LEN FIREBASE###### cred = credentials.Certificate('/home/pi/DATN/Source_code/Key.json') firebase_admin.initialize_app(cred, { 'databaseURL': 'https://graduation-project-1bce1.firebaseio.com/' }) ref = db.reference('The number of products') def update_apple(): global count_apple count_apple+=1 ref.update({'Apple': count_aplle}) def update_banana(): global count_apple count_banana+=1 ref.update({'Banana': count_banana}) def update_dragonfruit(): global count_df count_df+=1 ref.update({'DragonFruit': count_df}) def update_other(): global count_other count_other+=1 ref.update({'Other': count_other}) ######CAC CHUONG TRINH DIEU KHIEN SERVO###### def StartServo1(): pi.set_servo_pulsewidth(servo1, angle_servo_1) sleep(2) pi.set_servo_pulsewidth(servo1, init_angle) sleep(1) def StartServo2(): pi.set_servo_pulsewidth(servo2, angle_servo_2_3) sleep(3.5) pi.set_servo_pulsewidth(servo2, init_angle) sleep(1) def StartServo3(): pi.set_servo_pulsewidth(servo3, angle_servo_2_3) sleep(4) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 109 PHỤ LỤC pi.set_servo_pulsewidth(servo3, init_angle) sleep(1) ######THIET KE GIAO DIEN DIEU KHIEN###### app = gui("Manager") app.setSize("fullscreen") app.setBg("white") app.setFont(size=18, underline=False, weight = "bold", slant="roman") logo = Image.open("/home/pi/Data/logo.png") logo = logo.resize((80, 100), Image.ANTIALIAS) logo = ImageTk.PhotoImage(logo) app.addImageData("logo", logo, fmt="PhotoImage", column=0, row=0) app.startLabelFrame("Status") app.setSticky("ew") app.addLabel("l1", "Stop",2,0) app.setLabelFg("l1", "red") app.stopLabelFrame() app.startLabelFrame("Image") app.setSticky("ew") app.addImage("image", "/home/pi/Data/noimage.gif") app.stopLabelFrame() app.startLabelFrame("Class") app.setSticky("ew") app.addLabel("c","Unknow",5,1) app.setLabelFg("c", "purple") app.stopLabelFrame() def press(button): global TT, label if button == "RUN": TT = app.setLabel("l1", "Ready") app.setLabelFg("l1", "green") elif button == "STOP": TT = label = app.setLabel("l1", "Stop") app.setLabelFg("l1", "red") GPIO.output(MOTOR, GPIO.LOW) app.addButtons(["RUN","STOP"], press,6,0) ######LOAD DU LIEU TU MODEL VA CAC CHUONG TRINH DIEU KHIEN###### model = tf.keras.models.load_model('/home/pi/DATN/Model/model_ok.hdf5') BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 110 PHỤ LỤC fruit_class = ["Apple", "Banana", "Dragon Fruit"] #CT GAN NHAN SAN PHAM def check_class(): global label if proba[pred_index] > 0.95: if(fruit_class[pred_index]) == "Apple": label = app.setLabel("c",str(fruit_class[pred_index])) app.setLabelFg("c", "green") elif(fruit_class[pred_index]) == "Banana": label = app.setLabel("c",str(fruit_class[pred_index])) app.setLabelFg("c", "green") elif(fruit_class[pred_index]) == "Dragon Fruit": label = app.setLabel("c",str(fruit_class[pred_index])) app.setLabelFg("c", "green") else: label = app.setLabel("c","Other") app.setLabelFg("c", "red") return label #CT DU DOAN ANH def predict(): global proba, pred_index pred_img = cv2.imread('/home/pi/Data/image.jpg') pred_img = cv2.cvtColor(pred_img, cv2.COLOR_BGR2RGB) pred_img = cv2.resize(pred_img, (100, 100)) pred_img = np.array(pred_img) pred_img = np.reshape(pred_img, [1, 100, 100, 3]) pred_img = pred_img/255 proba = model.predict(pred_img)[0] pred_index = np.argmax(proba) check_class() #CT DIEU KHIEN BUZZER def buzzer(): GPIO.output(BUZZER, GPIO.HIGH) sleep(0.1) GPIO.output(BUZZER, GPIO.LOW) #CT THAY DOI HINH ANH def change_pic(): photo = Image.open("/home/pi/Data/image.jpg") photo = photo.resize((470, 350), Image.ANTIALIAS) photo = ImageTk.PhotoImage(photo) app.setImageData("image", photo, fmt="PhotoImage") #CT CHUP ANH BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 111 PHỤ LỤC def capture(): camera.start_preview() sleep(2) camera.capture('/home/pi/Data/image.jpg') buzzer() camera.stop_preview() change_pic() #CT KHI NHAN PHIM RUN def run(): global s, label GPIO.output(MOTOR, GPIO.HIGH) if GPIO.input(CB1) == False and s == 0: app.setLabel("l1", "Processing ") app.setLabelFg("l1", "yellow") s = sleep(0.5) GPIO.output(MOTOR, GPIO.LOW) capture() predict() check_class() elif GPIO.input(CB1) == True and s == 1: s = GPIO.output(MOTOR, GPIO.HIGH) elif label == 1: if GPIO.input(CB2) == False: StartServo1() update_apple() app.setLabel("l1", "Ready") app.setLabelFg("l1", "green") label = elif label == 2: if GPIO.input(CB3) == False: StartServo2() update_banana() app.setLabel("l1", "Ready") app.setLabelFg("l1", "green") label = elif label == 3: if GPIO.input(CB4) == False: StartServo3() update_dragonfruit() app.setLabel("l1", "Ready") app.setLabelFg("l1", "green") label = elif label == 4: sleep(13) update_other() app.setLabel("l1", "Ready") app.setLabelFg("l1", "green") label = BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 112 PHỤ LỤC #CT KHI NHAN PHIM STOP def stop(): global label label = app.setLabel("l1", "Stop") app.setLabelFg("l1", "red") GPIO.output(MOTOR, GPIO.LOW) #CT THOAT GIAO DIEN def checkStop(): return app.yesNoBox("Confirm Exit", "Are you sure you want to exit the application?") app.setStopFunction(checkStop) #CT CHE DO HOAT DONG def thucthi(): global TT if TT == 1: run() app.registerEvent(thucthi) app.setPollTime(1) app.go() • CHƯƠNG TRÌNH HTML THIẾT KẾ WEB  Chương trình đăng nhập vào web Login wrapper{ width: 100%; height: auto; margin: 0; top: 0; left: 0; padding: 0; position: absolute; font-family: Arial, Helvetica, sans-serif; } login-box{ position: relative; margin: 50px auto; width: 300px; height: 300px; background-color: #2c3e50; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 113 PHỤ LỤC h2{ padding-top: 30px; text-align: center; color: #ffffff; } inputt{ display: flex; justify-content: center; align-items: center; flex-direction: column; } input[type="text"]{ margin: 10px; position: relative; width: 200px; height: 30px; border-radius: 30px; border: none; padding-left: 10px; } input[type="text"]:focus{ outline: none; } input[type="password"]{ margin: 10px; position: relative; width: 200px; height: 30px; border-radius: 30px; border: none; padding-left: 10px; } input[type="password"]:focus{ outline: none; } button{ margin-top: 20px; width: 100px; border-radius: 30px; height: 30px; border: none; background-color: #ffffff; cursor: pointer; } button:focus{ outline: none; } button:hover{ background-color: tomato; color: #ffffff; } Login BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 114 PHỤ LỤC Login function login(){ var name=document.getElementById('name'); var pass=document.getElementById('pass'); console.log(name); if(name.value =="admin"){ if(pass.value =="admin"){ window.location.href="./admin.html"; } else{ alert("Sai tài khoản mật khẩu"); } } else{ alert("Sai tài khoản mật khẩu"); } }  Chương trình web Admin > body::after { content: ""; background-image: url("https://pic3.zhimg.com/v21c95a31cce2da7fb92f5f1249add4ad9_r.jpg?source=172ae18b"); opacity: 0.6; top: 0; left: 0; bottom: 0; right: 0; position: absolute; z-index: -1; margin: 0; padding: 0; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 115 PHỤ LỤC font-family: Arial, Helvetica, sans-serif; background-size: cover; width: 100%; height: 100%; } wrapper { width: auto; display: flex; justify-content: center; align-items: center; flex-direction: column; position: relative; margin: auto; } schoolImg { margin-top: 30px; } table { width: 500px; height: 300px; } table tr { text-align: center; } table thead tr { background-color: #4a4e4d !important; } table thead tr th { padding: 10px; color: #ffffff; } table tr:nth-child(even) { background-color: #dddddd; } table tr:nth-child(odd) { background-color: #cccccc; } h1 { margin-bottom: 10px !important; color: #ffffff; } h4 { margin: 5px !important; color: #ffffff; } h3 { color: #ffffff; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 116 PHỤ LỤC } Graduation Project Vo Thanh Duy - Tran Quoc Duong The quantity of products Fruit's Name Quantity Apple Banana Dragon Fruit Other BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 117 PHỤ LỤC // Your web app's Firebase configuration var firebaseConfig = { apiKey: "AIzaSyAI1mf7FjkOhYmhFW-h-Rk1j6fxuaVKnU8", authDomain: "graduation-project-1bce1.firebaseapp.com", databaseURL: "https://graduation-project-1bce1.firebaseio.com", projectId: "graduation-project-1bce1", storageBucket: "graduation-project-1bce1.appspot.com", messagingSenderId: "963034804250", appId: "1:963034804250:web:59913a9faba02b70fda1a3", measurementId: "G-H6QRKR5M2G" }; // Initialize Firebase firebase.initializeApp(firebaseConfig); // -code var db = firebase.database(); // khai báo biến //gán với thành phần html thông qua id thẻ html var apple = document.getElementById('apple'); var banana = document.getElementById('banana'); var dragonfruit = document.getElementById('dragonfruit'); var other = document.getElementById('other'); // đọc liệu var dbRef = db.ref('The number of products'); var dbRef1 = dbRef.child('Apple'); var dbRef2 = dbRef.child('Banana'); var dbRef3 = dbRef.child('DragonFruit'); var dbRef4 = dbRef.child('Other'); dbRef1.on('value', snap => apple.innerText = snap.val()); // innertext để in lên html dbRef2.on('value', snap => banana.innerText = snap.val()); dbRef3.on('value', snap => dragonfruit.innerText = snap.val()); dbRef4.on('value', snap => other.innerText = snap.val()); BỘ MÔN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH 118 PHỤ LỤC • CHƯƠNG TRÌNH HUẤN LUYỆN MẠNG NƠ-RON TÍCH CHẬP TRÊN GOOGLE COLAB !unzip /content/drive/My\ Drive/AI_COLAB/DATA_ML_1/DATA/best_data_fruit.zip # Khai báo thư viện cần thiết import matplotlib.pyplot as plt import numpy as np import os from sklearn.utils import shuffle from keras.models import Sequential from keras import optimizers from keras import layers from keras.layers import Input, Dense, Activation, ZeroPadding2D, Flatten, Conv2D from keras.layers import MaxPooling2D, Dropout from keras.models import Model from PIL import Image import cv2 import IPython from keras.layers.normalization import BatchNormalization from sklearn.preprocessing import StandardScaler from keras.callbacks import ModelCheckpoint from keras.preprocessing.image import ImageDataGenerator from keras import backend as K from sklearn.model_selection import train_test_split from sklearn.preprocessing import OneHotEncoder # Load resize ảnh dataset sau chuyển thành liệu mảng x_train=[] train=[] size=100 for root, dirs, files in os.walk("/content/data_fruit"): for name in dirs: for filename in os.listdir(os.path.join(root, name)): image=Image.open( os.path.join(root, name) + "/"+filename) img_resized = np.array(image.resize((size,size))) x_train.append(img_resized) train.append(name) x_train=np.array(x_train) print('Training set size : ' , x_train.shape[0]) no_of_classes = len(np.unique(train)) no_of_classes # Chia liệu thành tập train valid x_train,x_valid,train,valid=train_test_split(x_train,train,test_size=0.2, random_state=44) print('Training set size : ' , x_train.shape[0]) print('Valid set size : ' , x_valid.shape[0]) # Mã hóa label train=np.array(train) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 119 PHỤ LỤC valid= np.array(valid) hot = OneHotEncoder() y_train=train.reshape(len(train), 1) y_train = hot.fit_transform(y_train).toarray() y_valid=valid.reshape(len(valid), 1) y_valid = hot.fit_transform(y_valid).toarray() # Hiển thị shape x_train x_valid print("shape of X_train= ",x_train.shape) print("shape of X_valid= ",x_valid.shape) # Nomalize liệu x_train=x_train/255 x_valid=x_valid/255 # Tạo model size=x_train.shape[1] model = Sequential() model.add(Conv2D(16, (5, 5),strides=(1, 1),input_shape=(size, size, 3),padding="same", activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.3)) model.add(Conv2D(32, (3, 3),strides=(1, 1),padding="same", activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.3)) model.add(Conv2D(64, (3, 3),strides=(1, 1),padding="same", activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.3)) model.add(Conv2D(128, (3,3),strides=(1, 1),padding="same", activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.3)) model.add(Conv2D(256, (1,1),strides=(1, 1),padding="same", activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.3)) model.add(Flatten()) model.add(Dense(3, activation="softmax")) model.summary() # Dùng hàm tối ưu RMSprop rmsprop = optimizers.RMSprop(lr=0.0001, decay=1e-6) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) print('Compiled!') # Dùng ImageDataGenerator để làm tăng liệu ảnh giúp giảm overfitting datagen=ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 120 PHỤ LỤC rotation_range=0.5, zoom_range=0.5, width_shift_range=0.5, height_shift_range=0.5, horizontal_flip=False, vertical_flip=False, ) datagen.fit(x_train) checkpointer = ModelCheckpoint(filepath = 'model_ok.hdf5', verbose = 1, save_best_only = True) # Fit liệu – Bắt dầu trình training history=model.fit_generator(datagen.flow(x_train,y_train,batch_size=32), epochs=50, validation_data=(x_valid,y_valid), steps_per_epoch=x_train.shape[0]//32, callbacks = [checkpointer], shuffle=True ) # Đồ thị mơ tả q trình train model plt.plot(history.history['accuracy']) plt.plot(history.history['val_accuracy']) plt.title('Model accuracy') plt.ylabel('Accuracy') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper left') plt.show() plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper left') plt.show() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 121 ... Chương 3: TÍNH TỐN VÀ THI? ??T KẾ 3.1 GIỚI THI? ??U Đề tài ? ?Ứng dụng xử lý ảnh vào thi? ??t kế thi cơng mơ hình phân loại trái cây? ?? với mục tiêu phân loại loại trái táo, chuối long Sử dụng mạng nơ-ron tích... nhận dạng ảnh ẢNH TỐT HƠN ẢNH ĐẦU VÀO XỬ LÝ ẢNH KẾT LUẬN Hình 2.1: Giới thi? ??u xử lý ảnh THU NHẬN ẢNH TIỀN XỬ LÝ ẢNH PHÂN ĐOẠN ẢNH BIỂU DIỄN VÀ MÔ TẢ NHẬN DẠNG VÀ NỘI SUY CƠ SỞ TRI THỨC Hình 2.2:... nhóm thực đề tài kiến nghị thi? ??t kế hệ thống có tên ? ?Ứng dụng xử lý ảnh vào thi? ??t kế thi công mơ hình phân loại trái cây? ?? mơ hình có chức nhận dạng phân loại loại trái táo, chuối long, đồng thời

Ngày đăng: 01/11/2022, 12:15

Xem thêm:

w