(Đồ án hcmute) ứ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

138 3 0
(Đồ án hcmute) ứ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Ứ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: NGUYỄN DUY THẢO SVTT: VÕ THANH DUY MSSV: 16141128 SVTH: TRẦN QUỐC DƯỠNG MSSV: 16141129 SKL 0 6 Tp Hồ Chí Minh, tháng 08/2020 an 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 - 8/2020 an 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 - 8/2020 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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 an 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ả 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 an 121 an ... 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:... nghiệp 1.4 GIỚI HẠ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 cây? ?? có giới hạn là: • Phân loại cho loại trái cây: táo, chuối, long • Sử dụng động DC để hoạt động băng

Ngày đăng: 02/02/2023, 09:36

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

Tài liệu liên quan