Đồ án tốt nghiệp nghiên cứu, thiết kế và thi công mô hình đếm và phân loại sản phẩm theo cân nặng, màu sắc

116 1 0
Đồ án tốt nghiệp  nghiên cứu, thiết kế và thi công mô hình đếm và phân loại sản phẩm theo cân nặng, màu sắc

Đ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 & ĐÀ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 án tố iệ gh ĐỀ TÀI: tn NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG p NGHIÊN CỨU, THIẾT KẾ VÀ THI CÔNG Q n uả MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM tr ị THEO CÂN NẶNG, MÀU SẮC GVHD: Th.S NGUYỄN ĐÌNH PHÚ SVTH: PHẠM THỊ THANH THẢO 15141284 PHAN TRẦN HỒI VŨ 15141333 Tp Hồ Chí Minh – 06/2019 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 KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG án ĐỀ TÀI: tố gh tn NGHIÊN CỨU, THIẾT KẾ VÀ THI p iệ CƠNG MƠ HÌNH ĐẾM VÀ PHÂN Q n uả LOẠI SẢN PHẨM THEO CÂN NẶNG, ị tr MÀU SẮC GVHD: ThS NGUYỄN ĐÌNH PHÚ SVTH: PHẠM THỊ THANH THẢO 15141284 PHAN TRẦN HOÀI VŨ 15141333 Tp Hồ Chí Minh – 07/2019 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 o0o SINH Tp HCM, ngày tháng năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Đ Chuyên ngành: MSSV: 15141284 Phan Trần Hồi Vũ MSSV: 15141333 Điện tử cơng nghiệp Mã ngành: 41 Đại học quy Mã hệ: 2015 Lớp: 15141DT2A Khóa: án Hệ đào tạo: Phạm Thị Thanh Thảo tn tố I TÊN ĐỀ TÀI: NGHIÊN CỨU, THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM gh VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC n uả Q Các số liệu ban đầu: p iệ II NHIỆM VỤ tr ị (ghi thông số, tập tài liệu tín hiệu, hình ảnh, …) Nội dung thực hiện: (ghi nội dung cần thực phần tổng quan) i III NGÀY GIAO NHIỆM VỤ: 18/02/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 10/06/2019 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Đình Phú CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH Đ án p iệ gh tn tố n uả Q ị tr ii TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT KHOA ĐIỆN-ĐIỆN TỬ NAM BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y ĐỘC LẬP - TỰ DO - HẠNH PHÚC SINH o0o Tp HCM, ngày tháng năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Phạm Thị Thanh Thảo Lớp: 1514DT2A MSSV: 15141284 Họ tên sinh viên 2: Phan Trần Hoài Vũ Đ Lớp: 1514DT2A MSSV: 15141333 án Tên đề tài: tố NGHIÊN CỨU, THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI gh tn SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC Xác nhận GVHD p Tuần Nội dung iệ Tuần/ngày Nhận đồ án, tìm hiểu đề tài Q uả (18-24/02/2019) Tìm hiểu hướng làm đề tài, chọn vi xử lý điều (25-03/03/2019) khiển, ngơn ngữ lập trình Tuần Tìm hiểu Raspberry Pi mode B ngơn ngữ lập (04-10/03/2019) trình Python Tuần Tiến hành lập trình nhận diện phân loại màu sắc n Tuần ị tr (11-17/03/2019) Tuần Hoàn chỉnh phân loại màu sắc, lập trình phân loại (18-24/03/2019) cân nặng Tuần 6, 7, Tiến hành thiết kế phần cứng cho toàn hệ (25-14/04/2019) thống iii Tuần 9, 10, 11, Chạy thử nghiệm hệ thống hiệu chỉnh cho 12 hệ thống hoạt động ổn định (15-12/05/2019) Tuần 13, 14, 15 Hoàn chỉnh báo cáo (13-02/06/2019) Hoàn thành nhiệm vụ đồ án 03/06/2019 GV HƯỚNG DẪN (Ký ghi rõ họ tên) Đ án p iệ gh tn tố n uả Q ị tr iv LỜI CAM ĐOAN Đề tài “Nghiên cứu, thiết kế thi công mô hình đếm phân loại sản phẩm theo cân nặng màu sắc” nhóm đề tài tự thực dựa vào tham khảo số tài liệu trước khơng chép từ tài liệu hay cơng trình khác Người thực đề tài Phạm Thị Thanh Thảo Phan Trần Hoài Vũ Đ án p iệ gh tn tố n uả Q ị tr v LỜI CẢM ƠN Lời đầu tiên, nhóm đề tài xin gởi lời cảm ơn chân thành đến Thầy Nguyễn Đình Phú - giảng viên khoa Điện-Điện tử, Trường ĐH Sư phạm Kỹ thuật Tp HCM theo sát hỗ trợ hướng dẫn nhóm cách chi tiết q trình thực đề tài Thầy ln hỗ trợ hết mình, giải đáp thắc mắc, sai sót gợi ý phương án thực cho khả thi dễ tiếp cận Nhóm xin gửi lời cảm ơn đến quý thầy(cô) khoa Điện-Điện tử tận tình giải đáp thắc mắc, nguyện vọng q trình thực đề tài nhóm Sự hỗ trợ q thầy(cơ) đóng góp phần khơng nhỏ vào thành cơng ngày hơm Đ Nhóm đề tài xin cảm ơn bạn sinh viên khoa Điện-Điện tử án nhiệt tình giúp đỡ, hỗ trợ nhóm, đặc biệt tập thể lớp 15141DT2A Những đóng góp tn tố bạn ln nhóm tiếp nhận đánh giá cao Cuối cùng, nhóm xin cảm ơn chân thành sâu sắc đến Cha, Mẹ - người gh bên cạnh hỗ trợ tài tinh thần suốt năm p iệ tháng qua Q Thành công đề tài ngày hơm phần đóng góp to lớn uả 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ô, n bạn bè quý phụ huynh hỗ trợ nhóm thực đề tài hồn chỉnh tr ị Xin chân thành cảm ơn! Người thực đề tài Phạm Thị Thanh Thảo Phan Trần Hoài Vũ vi MỤC LỤC LỜI CẢM ƠN vi MỤC LỤC vii LIỆT KÊ HÌNH VẼ x LIỆT KÊ BẢNG BIỂU xiii Chương 1: TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN Đ 1.5 BỐ CỤC án Chương 2: CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH tố Giới thiệu xử lý ảnh 2.1.2 Những vấn đề xử lý ảnh[2] .7 2.1.3 Ngôn ngữ Python thư viện OpenCV 11 iệ gh tn 2.1.1 2.2 PHƯƠNG PHÁP PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC, CÂN p Q NẶNG 12 Các màu sắc sản phẩm 13 2.2.2 Phương pháp phân loại theo màu sắc 18 2.2.3 Phương pháp phân loại theo cân nặng 18 n uả 2.2.1 ị tr 2.3 GIỚI THIỆU PHẦN CỨNG 19 2.3.1 Raspberry Pi model B [5] 19 2.3.2 USB Camera 22 2.3.3 Cảm biến cân nặng 23 2.3.4 Xi-lanh khí nén (air cylinder)[7] 26 2.3.5 Van điện từ (solenoid) 28 Chương 3: TÍNH TỐN VÀ THIẾT KẾ 30 3.1 TỔ CHỨC CÁC KHỐI TRONG HỆ THỐNG 30 3.2 THIẾT KẾ CÁC KHỐI TRONG HỆ THỐNG 31 vii 3.2.1 Khối thu tín hiệu hình ảnh (camera) .31 3.2.2 Khối thu tín hiệu cân nặng (loadcell) khối ADC (module HX711).34 3.2.3 Khối xử lý trung tâm (Raspberry Pi 3) 36 3.1.1 Động DC; Xi-lanh Van điện từ 37 3.1.2 Khối hiển thị 45 3.1.3 Khối nguồn 45 3.1.4 Sơ nguyên lý toàn mạch 49 Chương 4: THI CÔNG HỆ THỐNG 50 4.1 GIỚI THIỆU 50 4.2 THI CÔNG HỆ THỐNG 50 Lắp ráp kiểm tra .51 4.4.2 Thi công board mạch 50 Đ 4.2.1 ĐĨNG GĨI VÀ THI CƠNG MƠ HÌNH 54 4.4 LẬP TRÌNH HỆ THỐNG 56 án 4.3 tn tố Lưu đồ giải thuật 56 4.4.2 Giao diện hệ thống 63 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC 64 p KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ 76 Q Chương iệ 4.5 gh 4.4.1 uả 5.1 KẾT QUẢ TỔNG QUAN 76 n 5.2 KẾT QUẢ ĐẠT ĐƯỢC 77 tr Giao diện hiển thị Tkinter 77 5.2.2 Giao diện Web Cơ sở lưu trữ liệu Realtime Database 78 5.2.3 Kết mơ hình thực tế 79 5.2.4 Kết thực nghiệm .83 ị 5.2.1 5.3 NHẬN XÉT – ĐÁNH GIÁ 84 5.3.1 Nhận xét kết đạt 84 5.3.2 Đánh giá kết 86 Chương 6: KẾT LUẬN – HƯỚNG PHÁT TRIỂN 87 6.1 KẾT LUẬN 87 6.2 HƯỚNG PHÁT TRIỂN 88 viii CHƯƠNG KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ 5.3.2 Đánh giá kết Sau thời gian tìm hiểu nghiên cứu đề tài, nhóm đưa đánh sau: - Đề tài sau hồn thành có tính ứng dụng cao vào thực tế, có điểm độ ổn định cao - Phạm vi sử dụng hộ gia đình thương lái nhỏ (thị trường tiêu thụ lớn) nên đề tài cải tiến, phát triển thêm nhiều tính để đưa vào thương mại hóa sản phẩm, tạo nguồn lợi kinh tế Qua số nhận xét đánh giá đề tài, nhóm nhận thấy đề tài Đ nghiên cứu hay, hữu ích, có tính ứng dụng cao vào thực tế án p iệ gh tn tố n uả Q ị tr BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 86 CHƯƠNG KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ Chương 6: KẾT LUẬN – HƯỚNG PHÁT TRIỂN 6.1 KẾT LUẬN Sau thời gian nghiên cứu, tìm hiểu với giúp đỡ thầy Nguyễn Đình Phú bạn bè, hệ thống mà nhóm hồn thành đáp ứng tốt yêu cầu đề Các khối chức hoạt động đúng, đảm bảo cập nhật liệu xác, hệ thống chạy ổn định thời gian dài không phát sinh lỗi, có giao diện đẹp mắt đáp ứng tính thẩm mỹ, cịn riêng vấn đề sử dụng dễ dàng, an toàn, thân thiện với hộ gia đình Đ thương lái nhỏ án Ưu điểm sản phẩm: tố tn - Xác suất cập nhật xác liệu thực 100% gh - Hoạt động ổn định thời gian dài p dụng iệ - Kích thước nhỏ gọn, dễ lắp đặt; giao diện tùy chỉnh đơn giản, dễ sử cà chua sau phân loại xác 100% uả Q - Giao diện hiển thị đẹp, rõ ràng có tính thẩm mỹ cao, cập nhật số lượng n - Tính an tồn cao, thân thiện với người dùng tr ị - Kinh phí mức phù hợp thương mại hóa sản phẩm - Dễ dàng nghiên cứu mở rộng thêm Khuyết điểm sản phẩm: - Khơng có nguồn độc lập nên hoạt động điện - Giao diện tùy chỉnh thông số loại sản phẩm giới hạn qua máy chủ cố định - Chỉ hoạt động có internet - Chưa có tính bảo mật cao - Tốc độ xử lý chậm, xử lý quả, tồn sai số BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 87 CHƯƠNG KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ Sau hoàn thiện đề tài, sản phẩm đạt mục tiêu đặt đề trước So với hệ thống phân loại có sẵn thị trường, ví dụ Hệ thống máy phân loại cà chua đất canh tác(có diện tích lớn), Hệ thống máy phân loại cà chua công nghiệp(đắt tiền) Sản phẩm nhóm ưu việt chỗ: có độ xác, độ tin cậy cao, mơ hình phù hợp với phạm vi hộ gia đình, thương lái nhỏ, dễ dàng vận hành tùy chỉnh mà không cần phiền đến kỹ thuật viên Vì thế, nhóm đánh giá việc áp dụng sản phẩm để thương mại hóa điều hồn tồn khả thi 6.2 HƯỚNG PHÁT TRIỂN Đ Từ mặt hạn chế đề tài, nhóm đưa số hướng phát triển án để hệ thống hồn chỉnh hoạt động hiệu hơn: tố - Xử lý đa luồng, tức nhận biết phân loại lúc nhiều tn cà chua gh - Điều khiển toàn hệ thống thông qua webserver qua ứng iệ dụng điện thoại thông minh p - Mở rộng phạm vi đối tượng phân loại (có thể nhận biết Q uả cà chua bị sâu đục, thối, dập; mở rộng nông sản n khác dưa chuột, hồng, chanh…) loại theo kích thước cà chua ị tr - Thay dùng loadcell sử dụng thuật toán phân - Thiết kế phận khí trước đầu băng chuyền để thuận tiện việc di chuyển cà chua vào buồng chụp - Thay dùng xi-lanh khí nén thay xi-lanh điện để hệ thống gọn gàng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 88 TÀI LIỆU THAM KHẢO Sách tham khảo: [1] Nguyễn Quang Hoan, “Xử lý ảnh”, Học Viện Bưu Chính Viên Thơng, 2006 [2] Nguyễn Thanh Hải, “Giáo Trình Xử lý ảnh”, Nhà xuất Đại Học Quốc Gia, Thành phố Hồ Chí Minh, 2014 [4] Theo SYGENTA, tài liệu “Kỹ thuật canh tác cà chua” [8] Alexander Mordvintsev & Abid K, tài liệu “OpenCV-Python Tutorials Đ Documentation Release 1”, ngày tháng 11 năm 2017 Hà Duy Khánh, Đồ án tốt nghiệp “Phân loại sản phẩm dùng kit Raspberry án [9] Pi”, TP HCM, tháng năm 2018 tn Nguyễn Nghĩa, “Tổng quan thư viện OpenCV, đăng ngày 10 tháng 11 gh [3] tố Trang web: Raspberry Pi Việt Nam, sản phẩm Raspberry Pi B Model Q [5] p iệ năm 2016 https://www.tutorialspoint.com/python/ [7] n uả https://raspberrypi.vn/shop/mach-raspberry-pi/raspberry-pi-4-model-b-2019 Ngun Minh, viết “Xi-lanh khí nén gì? Cấu tạo xi-lanh khí nén”, tr ị đăng ngày 30 tháng năm 2018 tạihttps://medium.com/@minh.nhatnguyen0820/xilanh-kh%C3%AD-n%C3%A9n-l%C3%A0-g%C3%AC-c%E1%BA%A5ut%E1%BA%A1o-ch%E1%BB%A9c-n%C4%83ng-c%E1%BB%A7a-xi-lanh45e8518087a4 [10] Quynh Ty, viết “Cách tạo điều khiển tốc độ động PWM DC IC 555”, đăng 12 tháng 01 năm 2019 https://vietmachine.com.vn/cach-taobo-dieu-khien-toc-do-dong-co-pwm-dc-bang-ic555.html?fbclid=IwAR2EkFQPCI7b3sXWFqqzQnPKrKz_gwDuEV56twXaGeI3K79eFUp-GfLyVY BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 89 PHỤ LỤC Code chương trình điều khiển: from firebase import firebase import json import import import import import cv2 time numpy as np sys RPi.GPIO as GPIO import weight as wei import tkinter as tk GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) Đ cap = cv2.VideoCapture(0) start_time = time.time() PIN_INPUT_SENSOR_1 = 26 PIN_INPUT_SENSOR_2 = 19 PIN_INPUT_SENSOR_3 = 13 PIN_INPUT_SENSOR_4 = 27 án tố p iệ gh tn PIN_OUTPUT_XILANH_1 = 21 PIN_OUTPUT_XILANH_2 = 20 PIN_OUTPUT_XILANH_3 = 16 PIN_OUTPUT_XILANH_4 = 12 #xxxxxxxxxxxxxxxxxxxxx_out_put_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx GPIO.setup(PIN_OUTPUT_XILANH_1, GPIO.OUT) GPIO.setup(PIN_OUTPUT_XILANH_2, GPIO.OUT) GPIO.setup(PIN_OUTPUT_XILANH_3, GPIO.OUT) GPIO.setup(PIN_OUTPUT_XILANH_4, GPIO.OUT) #xxxxxxxxxxxxxxxxxxxxx_in_put_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_1, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_2, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_3, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_4, GPIO.IN, pull_up_down=GPIO.PUD_UP) n uả Q ị tr #xxxxxxxxxxxxxxxxxxxxx_nhan_du_lieu_tu_fire_basexxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx firebase = firebase.FirebaseApplication('https://datnc53f0.firebaseio.com/') result1 = {} result1= firebase.get('/',None) struct_data_wed = [] #xxxxxxxxxxxxxxxxxxxxx_lưu nội dung fire base đọc zô file txt_xxxxxxxxxxxxxxxx with open('result_firebase.txt', 'w') as outfile: json.dump(result1, outfile) print("save result_firebase.txt ======================== > ok") #xxxxxxxxxxxxxxxxxxxxx_thiet lap gia tri gan cho giao dien_xxxxxxxxxxxxxxxxxxxxxx wei1_min_tk = int(result1['level_1']['min']) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 90 wei1_max_tk = int(result1['level_1']['max']) red1_tk = bool(result1['level_1']['RED']) ogrange1_tk = bool(result1['level_1']['ORANGE']) green1_tk = bool(result1['level_1']['GREEN']) wei2_min_tk = int(result1['level_2']['min']) wei2_max_tk = int(result1['level_2']['max']) red2_tk = bool(result1['level_2']['RED']) ogrange2_tk = bool(result1['level_2']['ORANGE']) green2_tk = bool(result1['level_2']['GREEN']) wei3_min_tk = int(result1['level_3']['min']) wei3_max_tk = int(result1['level_3']['max']) red3_tk = bool(result1['level_3']['RED']) ogrange3_tk = bool(result1['level_3']['ORANGE']) green3_tk = bool(result1['level_3']['GREEN']) Đ wei4_min_tk = int(result1['level_4']['min']) wei4_max_tk = int(result1['level_4']['max']) red4_tk = bool(result1['level_4']['RED']) ogrange4_tk = bool(result1['level_4']['ORANGE']) green4_tk = bool(result1['level_4']['GREEN']) án #xxxxxxxxxxxxxxxxxxxxx_thiet ke giao dien_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root = tk.Tk() tn tố root.geometry("1000x600") root.resizable(0, 0) #Don't allow resizing in the x or y direction p iệ gh lblz1 = tk.Label(master = root, text = "Running ",fg = "Green",font = "Times 25") lblz1.place(x = 0, y = 500) def close_window(): root.destroy() uả Q button = tk.Button (master = root,fg = "red", font = "Times 20", text = "EXIT", command = close_window) button.place(x = 900, y = 500) n Content = "Graduate Project Thanh Thao - Hoai Vu" lbl0 = tk.Label(master = root, text = Content,fg = "black",font = "Times 30") lbl0.place(x = 200, y = 0) Content_2 = "Product Classification: Weight, Color - Remote Control Via Web" lbl001 = tk.Label(master = root, text = Content_2,fg = "red",font = "Times 17") lbl001.place(x = 210, y = 50) ị tr lbl = tk.Label(master = root, fg = "black",font "Level_1:") lbl.place(x = 200, y = 100) lb2 = tk.Label(master = root,fg = "black", font "Level_2:") lb2.place(x = 400, y = 100) lb3 = tk.Label(master = root,fg = "black", font "Level_3:") lb3.place(x = 600, y = 100) lb4 = tk.Label(master = root,fg = "black", font "Level_4:") lb4.place(x = 800, y = 100) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 91 lb0l = tk.Label(master = root, fg = "black",font "Green:") lb0l.place(x = 0, y = 150) lb02 = tk.Label(master = root,fg = "black", font "Orange:") lb02.place(x = 0, y = 200) lb03 = tk.Label(master = root,fg = "black", font "Red:") lb03.place(x = 0, y = 250) lb04 = tk.Label(master = root,fg = "black", font "Min:") lb04.place(x = 0, y = 300) lb05 = tk.Label(master = root,fg = "black", font "Max:") lb05.place(x = 0, y = 350) lb06 = tk.Label(master = root,fg = "black", font "Amount:") lb06.place(x = 0, y = 400) = "Times 20", text = lbxl = tk.Label(master = root, fg = "black",font green1_tk) lbxl.place(x = 230, y = 150) lbx2 = tk.Label(master = root,fg = "black", font ogrange1_tk) lbx2.place(x = 230, y = 200) lbx3 = tk.Label(master = root,fg = "black", font red1_tk) lbx3.place(x = 230, y = 250) lbx4 = tk.Label(master = root,fg = "black", font wei1_min_tk) lbx4.place(x = 230, y = 300) lbx5 = tk.Label(master = root,fg = "black", font wei1_max_tk) lbx5.place(x = 230, y = 350) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = Đ = "Times 20", text = án = "Times 20", text = = "Times 20", text = p iệ gh tn tố = "Times 20", text = = "Times 20", text = uả Q lbal = tk.Label(master = root, fg = "black",font green2_tk) lbal.place(x = 430, y = 150) lba2 = tk.Label(master = root,fg = "black", font ogrange2_tk) lba2.place(x = 430, y = 200) lba3 = tk.Label(master = root,fg = "black", font red2_tk) lba3.place(x = 430, y = 250) lba4 = tk.Label(master = root,fg = "black", font wei2_min_tk) lba4.place(x = 430, y = 300) lba5 = tk.Label(master = root,fg = "black", font wei2_max_tk) lba5.place(x = 430, y = 350) = "Times 20", text = n ị tr = "Times 20", text = = "Times 20", text = = "Times 20", text = lbbl = tk.Label(master = root, fg = "black",font = "Times 20", text = green3_tk) lbbl.place(x = 630, y = 150) lbb2 = tk.Label(master = root,fg = "black", font = "Times 20", text = ogrange3_tk) lbb2.place(x = 630, y = 200) lbb3 = tk.Label(master = root,fg = "black", font = "Times 20", text = red3_tk) lbb3.place(x = 630, y = 250) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 92 lbb4 = tk.Label(master = root,fg = "black", font = "Times 20", text = wei3_min_tk) lbb4.place(x = 630, y = 300) lbb5 = tk.Label(master = root,fg = "black", font = "Times 20", text = wei3_max_tk) lbb5.place(x = 630, y = 350) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = Đ lbcl = tk.Label(master = root, fg = "black",font green4_tk) lbcl.place(x = 830, y = 150) lbc2 = tk.Label(master = root,fg = "black", font ogrange4_tk) lbc2.place(x = 830, y = 200) lbc3 = tk.Label(master = root,fg = "black", font red4_tk) lbc3.place(x = 830, y = 250) lbc4 = tk.Label(master = root,fg = "black", font wei4_min_tk) lbc4.place(x = 830, y = 300) lbc5 = tk.Label(master = root,fg = "black", font wei4_max_tk) lbc5.place(x = 830, y = 350) 0 iệ gh = = = = tn tố count_1 count_2 count_3 count_4 án flag=0 flag1=0 flag2=0 flag3=0 flag4=0 p #xxxxxxxxxxxxxxxxxxxxx_thiet_lap_gia_tri_ban_dau_xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx n uả ị False) False) False) False) tr GPIO.output(21, GPIO.output(20, GPIO.output(16, GPIO.output(12, Q level = '' find_result = False green_standard = False red_standard = False ogrange_standard = False red_color = False green_color = False ogrange_color = False flag_main = False def process_analyze_image(image, debug_mode): red_color = False green_color = False ogrange_color = False result = False flag_main = False try: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 93 hsv = cv2.cvtColor(image , cv2.COLOR_BGR2HSV) red_lower = np.array([0, 150, 0], np.uint8) red_upper = np.array([7, 255, 255], np.uint8) green_lower = np.array([32, 76, 0], np.uint8) green_upper = np.array([48, 255, 255], np.uint8) ogrange_lower = np.array([9, 76, 0], np.uint8) ogrange_upper = np.array([31, 255, 255], np.uint8) # finding the range of red,blue and yellow color in the image red = cv2.inRange(hsv, red_lower, red_upper) green = cv2.inRange(hsv, green_lower, green_upper) ogrange = cv2.inRange(hsv, ogrange_lower, ogrange_upper) # Morphological transformation, Dilation kernal = np.ones((5, 5), "uint8") Đ red = cv2.dilate(red, kernal) res = cv2.bitwise_and(image , image , mask=red) án green = cv2.dilate(green, kernal) res1 = cv2.bitwise_and(image , image , mask=green) tố tn ogrange = cv2.dilate(ogrange, kernal) res2 = cv2.bitwise_and(image , image , mask=ogrange) iệ gh #xxxxxxxxxxxxxxxxxxxxx_tim duong bao cua vat co mau tuong ung_tinh dien tich duong bao_set co tuowng ung_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx p numPixel_red = cv2.countNonZero(red) numPixel_green = cv2.countNonZero(green) numPixel_ogrange = cv2.countNonZero(ogrange) Q ị tr ## n ## numPixel_red = cv2.countNonZero(red) print("so pixel do",numPixel_red) numPixel_green = cv2.countNonZero(green) print("so pixel xanh",numPixel_green) numPixel_ogrange = cv2.countNonZero(ogrange) print("so pixel cam",numPixel_ogrange) uả ## R = (numPixel_red/(1+numPixel_red + numPixel_green + numPixel_ogrange))*100 G = (numPixel_green/(1+numPixel_red + numPixel_green + numPixel_ogrange))*100 O = (numPixel_ogrange/(1+numPixel_red + numPixel_green + numPixel_ogrange))*100 if (R>50): red_color =True if (G>50): green_color =True if (O>50): ogrange_color =True if (red_color == True) or (green_color == True )or (ogrange_color == True): BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 94 flag_main = True return image, red_color, green_color, ogrange_color, True, flag_main except cv2.error as e: print("error process analyzing image") return image, red_color, green_color, ogrange_color, result Đ def setting_contrain(setting_data, wei, red, green, orange): find_result = False level = 'unknow' for key, value in result1.items(): if (key != 'Result'): wei_min_wed = int(result1[key]['min']) wei_max_wed = int(result1[key]['max']) red_wed = bool(result1[key]['RED']) ogrange_wed = bool(result1[key]['ORANGE']) green_wed = bool(result1[key]['GREEN']) if( wei_standard >= wei_min_wed and wei_standard 10): if state == True: if (state == True) and (lag == 0): res, img = cap.read() wei_standard = wei.weight() print(wei_standard) time.sleep(0.3) = "red", font = "Times = "red", font = "Times án = "red", font = "Times p iệ gh tn tố = "red", font = "Times n uả Q ị tr cv2.imwrite('/home/pi/Desktop/THAO/TEST/test_camera_cam/test_new.jpg',img ) time.sleep(0.3) result_analyzing_image = False #print('step result_analyzing_image') #xxxxxxxxxxxxxxxxxxxxx_end_snapshot_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxx image, red_standard, green_standard, ogrange_standard, result_analyzing_image,flag_main = process_analyze_image(img, False) if(result_analyzing_image == False): print("process error ===================== :(") continue #xxxxxxxxxxxxxxxxxxxxx_check loai cua ca chua_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 96 if (flag_main == True): cv2.imwrite('/home/pi/Desktop/THAO/TEST/test_camera_cam/test.jpg',img) level = setting_contrain(result1, wei_standard, red_standard, green_standard, ogrange_standard) # setting gate num gate_num = -1 if('unknow' in level): gate_num = count_char = else: count_char = len(level.split('_')) if(count_char == 2): if('unknow' in level): gate_num = else: gate_num = int(level.split('_')[1]) print('gate: {}'.format(gate_num)) # end setting gate num Đ án #control xilanh time_sleep = 0.5 if(gate_num == 1): flag1 = control_gate(1, flag1, time_sleep) count_1 = count_1 + lb8 = tk.Label(master = root, text = count_1,fg = "red", font = "Times 25") lb8.place(x = 230, y = 400) gh tn tố p iệ elif(gate_num == 2): flag2 = control_gate(2, flag2, time_sleep) count_2 = count_2 + lb5 = tk.Label(master = root, text = count_2,fg = "red", font = "Times 25") lb5.place(x = 430, y = 400) elif(gate_num == 3): flag3 = control_gate(3, flag3, time_sleep) count_3 = count_3 + lb6 = tk.Label(master = root, text = count_3,fg = "red", font = "Times 25") lb6.place(x = 630, y = 400) elif(gate_num == 4): flag4 = control_gate(4, flag4, time_sleep) count_4 = count_4 + lb7 = tk.Label(master = root, text = count_4,fg = "red", font = "Times 25") lb7.place(x = 830, y = 400) else: print('dont care') n uả Q ị tr find_result = True lag=1 state= not GPIO.input(17) if state == False and (lag == 1): lag = else: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 97 print('No tomato') ## start_time_wei = time.time() resultPut = firebase.put('/', 'Result',{'count_1':count_1,'count_2':count_2,'count_3':count_3,'count_4' :count_4}) Chương trình thư viện Weight #!/usr/bin/python2 import RPi.GPIO as gpio #import threading import time DAT = CLK=6 num=0 Đ #def weight(DAT = 5, CLK =6, num = 0): def weight(): start_time = time.time() gpio.setup(CLK, gpio.OUT) i=0 num=0 gpio.setup(DAT, gpio.OUT) gpio.output(DAT,1) gpio.output(CLK,0) gpio.setup(DAT, gpio.IN) án n uả Q ị if gpio.input(DAT) == 0: num=num+1 tr gpio.output(CLK,0) gpio.output(CLK,0) gpio.output(CLK,0) p iệ gh tn tố while gpio.input(DAT) == 1: i=0 for i in range(24): gpio.output(CLK,1) gpio.output(CLK,1) gpio.output(CLK,1) num=num Đ footer{ background-color:#ccc; font-family: Arial; text-align:center; padding:12px; font-size:19px; } án tố p iệ gh tn

GRADUATION PROJECT_PHAM THI THANH THAO-15141284-PHAN TRAN HOAI VU-15141333

PRODUCT CLASSIFICATION: COLOR, WEIGHT; REMOTE CONTROL

n uả Q ị tr // Initialize Firebase var config = { apiKey: "AIzaSyBBshWk7M2RkV-XAWr-vTATWcSewDVFbOk", authDomain: "datn-c53f0.firebaseapp.com", databaseURL: "https://datn-c53f0.firebaseio.com", projectId: "datn-c53f0", storageBucket: "datn-c53f0.appspot.com", messagingSenderId: "472165330944" }; firebase.initializeApp(config); function writeData(){ var x = document.getElementById("Category").value; firebase.database().ref(x).set({ min:document.getElementById("minField").value, max:document.getElementById("maxField").value, GREEN:document.getElementById("chkgreen").checked, BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 99 ORANGE:document.getElementById("chkorange").checked, RED:document.getElementById("chkred").checked, }); getData(); } function getData(){ Đ firebase.database().ref('/').once('value', function(snapshot){ snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); document.getElementById("data").innerHTML = childData['min'] +", "+ childData['max'] ; }) }) } getData(); án tn tố

COLOR

iệ gh Red : Orange: Green: p

WEIGHT uả Q n tr ị

TYPE

Category_1 Category_2 Category_3 Category_4 Submit

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 100

Ngày đăng: 15/11/2023, 16:02

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

Tài liệu liên quan