Ứ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

133 46 0
Ứ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

Đ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

Đề tài “Ứ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” làmột mô hình dựa trên ứng dụng mạng nơron tích chập để phân loại 3 loại trái cây là táo,chuối và thanh long. Hệ thống hoạt động dựa trên quá trình trích xuất các đặc trưng cơbản từ màu sắc, hình dạng của từng loại trái cây thông qua mạng nơron tích chập vớitập dữ liệu huấn luyện tự tạo. Mô hình mạng nơron tích chập được triển khai trên kitRaspberry Pi 3 Model B với ngôn ngữ lập trình Python, thư viện hỗ trợ Tensorflow. Kếtquả thực hiện đề tài là một mô hình có khả năng phân loại được 3 loại trái cây là táo,chuối và thanh long đến các vị trí riêng biệt. Việc điều khiển và giám sát mô hình đượcthực hiện qua giao diện giao tiếp với người dùng. Dữ liệu phân loại được lưu trong cơsở dữ liệu và có thể truy cập qua web.

BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: Ứ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 GVHD: ThS Nguyễn Duy Thảo SVTH: Võ Thanh Duy Trần Quốc Dưỡng Tp Hồ Chí Minh - 7/2020 16141128 16141129 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀNTHÔNG ĐỀ TÀI: Ứ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 GVHD: ThS Nguyễn Duy Thảo SVTH: Võ Thanh Duy Trần Quốc Dưỡng Tp Hồ Chí Minh - 7/2020 16141128 16141129 TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o Tp HCM, ngày tháng năm 2020 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Võ Thanh Duy MSSV: 16141128 Trần Quốc Dưỡng MSSV: 16141129 Chuyên ngành: Điện tử công nghiệp Mã ngành: 41 Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2016 Lớp: 16141DT1B I TÊN ĐỀ TÀI: Ứ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 II NHIỆM VỤ Các số liệu ban đầu: Một kit Raspberry Pi model B, module Camera Pi, hệ thống băng tải, cảm biến hồng ngoại, động servo Sản phẩm gồm loại trái táo, chuối long Nội dung thực hiện: Tổng quan xử lý ảnh; Tìm hiểu phương pháp nhận dạng phân loại trái mạng nơ-ron tích chập; Tìm hiểu kit Raspberry Pi model B linh kiện liên quan; Cài đặt hệ điều hành thư viện cần thiết để viết chương trình; Thiết kế phần cứng cho hệ thống III NGÀY GIAO NHIỆM VỤ: 10/03/2020 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 14/07/2020 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Duy Thảo CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o Tp HCM, ngày tháng năm 2020 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Võ Thanh Duy Lớp: 16141DT1B MSSV: 16141128 Họ tên sinh viên 2: Trần Quốc Dưỡng Lớp: 16141DT1B MSSV: 16141129 Tên đề 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 Tuần/ngày Nội dung Xác nhận GVHD Tuần Chọn tìm hiểu đề tài Tuần Chọn hướng giải đề tài, chọn vi điều khiển, ngôn ngữ lập trình Tuần Tìm hiểu kit Raspberry Pi model B ngơn ngữ lập trình Python Tuần 4-5-6 Tiến hành lập trình phân loại trái sử dụng mạng nơ-ron tích chập Tuần Hồn chỉnh mơ hình mạng nơ-ron tích chập Tuần 8-9 Tiến hành viết chương trình điều khiển tồn hệ thống Tuần 10-11-12 Tiến hành thi công phần cứng hiệu chỉnh cho hệ thống hoạt động ổn định Tuần 13-14 Viết báo cáo hoàn chỉnh Tuần 15 Hoàn thành nhiệm vụ đồ án GV HƯỚNG DẪN (Ký ghi rõ họ tên) iii LỜI CAM ĐOAN Đề 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” nhóm đề tài tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Người thực đề tài Võ Thanh Duy Trần Quốc Dưỡng iv LỜI CẢM ƠN Lời đầu tiên, nhóm thực đề tài xin bày tỏ lịng biết ơn chân thành Thầy Nguyễn Duy Thảo – Giảng viên khoa Điện – Điện tử, Trường Đại học Sư phạm Kỹ thuật Tp.HCM cương vị người hướng dẫn đề tài Trong suốt thời gian thực đề tài thầy theo sát ân cần hướng dẫn chi tiết bước thực hiện, sai sót nhóm đưa hướng khắc phục cụ thể Nhờ bảo hỗ trợ từ Thầy nhóm hồn thiện chỉnh chu cho đề tài Nhóm xin cảm ơn sâu sắc thầy, cô khoa Điện – Điện tử truyền đạt kiến thức chuyên ngành quý báu, tạo điều kiện cho nhóm nghiên cứu thực cách tốt đề tài Quý thầy cô cung cấp vô vàng kiến thức từ sở, chuyên ngành đến ứng dụng thực tế cơng nghiệp Và cuối cùng, nhóm đề tài muốn bày tỏ lòng biết ơn Cha Mẹ, người ln động viên nhóm hồn cảnh, hướng chúng em tương lai nguồn hỗ trợ tài năm vừa qua Thành công đề tài ngày hôm phần từ đóng góp, hỗ trợ tất người Một lần nữa, nhóm xin gởi lời cảm ơn chân thành đến quý thầy cô, Cha Mẹ giúp đỡ suốt thời gian vừa qua Xin chân thành cảm ơn! Người thực đề tài Võ Thanh Duy Trần Quốc Dưỡng v 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 vi 2.2.3 Giới thiệu Google Colaboratory 14 2.2.4 Phân loại loại trái sử dụng mạng nơ-ron tích chập 14 2.3 GIỚI THIỆU PHẦN CỨNG 24 2.3.1 Raspberry Pi model B 24 2.3.2 Raspberry Camera Module 27 2.3.3 Cảm biến vật cản hồng ngoại E18-D80NK 28 2.3.4 Động servo MG946R 30 2.3.5 Hệ thống băng tải 31 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 55 4.1 GIỚI THIỆU 55 4.2 THI CÔNG HỆ THỐNG 55 4.2.1 Chuẩn bị phần cứng 55 4.2.2 Lắp ráp kiểm tra 56 4.3 ĐĨNG GĨI VÀ THI CƠNG MƠ HÌNH 60 4.3.1 Đóng gói điều khiển 60 4.3.2 Thi công mô hình 61 4.4 LẬP TRÌNH HỆ THỐNG 62 4.4.1 Lưu đồ giải thuật 62 vii 4.4.2 Giao diện điều khiển 69 4.4.3 Giao diện Web 69 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC 70 Chương 5: KẾT QUẢ-NHẬN XÉT-ĐÁNH GIÁ 83 5.1 KẾT QUẢ TỔNG QUAN 83 5.2 KẾT QUẢ ĐẠT ĐƯỢC 84 5.2.1 Giao diện hiển thị hình 84 5.5.2 Giao diện Web 85 5.2.3 Kết mơ hình thực tế 88 5.2.4 Kết thực nghiệm 91 5.3 NHẬN XÉT VÀ ĐÁNH GIÁ 100 5.3.1 Nhận xét kết đạt 100 5.3.2 Đánh giá kết 101 Chương 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 102 6.1 KẾT LUẬN 102 6.2 HƯỚNG PHÁT TRIỂN 102 TÀI LIỆU THAM KHẢO 104 PHỤ LỤC 105 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 14 Hình 2.6: Một số ảnh tập liệu 16 Hình 2.7: Mơ hình mạng nơ ron tích chập phân loại ảnh trái 17 Hình 2.8: Biểu diễn ma trận ảnh RGB 18 Hình 2.9: Ma trận ảnh đầu vào Filter/Kernel 19 Hình 2.10: Quá trình tạo phần tử feature map 20 Hình 2.11: Hoàn thành feature map 20 Hình 2.12: Quá trình tính tích chập cho ảnh RGB 21 Hình 2.13: Tạo phần tử feature map stride = 21 Hình 2.14: Tạo phần tử thứ hai feature map stride = 22 Hình 2.15: Tạo phần tử feature map stride = padding = 22 Hình 2.16: Ví dụ max pooling 2x2 kết hợp với stride = 23 Hình 2.17: Khái quát kết dự đoán ảnh 23 Hình 2.18: Raspberry Pi model B 24 Hình 2.19: Phần cứng Raspberry Pi 25 Hình 2.20: Raspberry Pi Camera Module 27 Hình 2.21: Sơ đồ khối Raspberry Pi Camera 28 Hình 2.22: Cảm biến hồng ngoại E18-D80NK 28 Hình 2.23: Động servo MG946R 30 Hình 2.24: Mơ hình băng tải 31 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 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-toan-phanloai-anh/ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 104 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 105 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 106 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 107 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 108 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 109 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 110 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 111 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 112 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 113 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 114 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 115 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 116 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 117 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ả 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 118

Ngày đăng: 07/06/2021, 08:28

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan