1. Trang chủ
  2. » Tất cả

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

118 5 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

Thông tin cơ bản

Định dạng
Số trang 118
Dung lượng 7,13 MB

Nội dung

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 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 GVHD: NGUYỄN ĐÌNH PHÚ SVTH1: PHẠM THỊ THANH THẢO MSSV: 15141284 SVTH2: PHAN TRẦN HOÀI VŨ MSSV:15141333 SKL 0 1 Tp Hồ Chí Minh, tháng 6/2019 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: 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 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 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 KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: 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 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 an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC 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: Phạm Thị Thanh Thảo MSSV: 15141284 Phan Trần Hoài Vũ MSSV: 15141333 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: 2015 Lớp: 15141DT2A I TÊN ĐỀ TÀI: 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 II NHIỆM VỤ Các số liệu ban đầu: (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 an 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 ii an 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 Tên đề tài: 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 Tuần/ngày Tuần Nội dung Xác nhận GVHD Nhận đồ án, tìm hiểu đề tài (18-24/02/2019) Tuần 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 (11-17/03/2019) Tuần Hồ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 an 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) 03/06/2019 Hoàn thành nhiệm vụ đồ án GV HƯỚNG DẪN (Ký ghi rõ họ tên) iv an 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ũ v an 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 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 q thầy(cơ) khoa Điện-Điện tử tận tình giải đáp thắc mắc, nguyện vọng 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ử nhiệt tình giúp đỡ, hỗ trợ nhóm, đặc biệt tập thể lớp 15141DT2A Những đóng góp 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 bên cạnh hỗ trợ tài tinh thần suốt năm tháng qua Thành công đề tài ngày hơm phần đóng góp to lớn 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ô, bạn bè quý phụ huynh hỗ trợ nhóm thực đề tài hoàn chỉnh 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 an 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 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] .7 2.1.3 Ngôn ngữ Python thư viện OpenCV 11 2.2 PHƯƠNG PHÁP PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC, CÂN NẶNG 12 2.2.1 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 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 an 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 tồn, thân thiện với hộ gia đình thương lái nhỏ Ưu điểm sản phẩm: - Xác suất cập nhật xác liệu thực 100% - Hoạt động ổn định thời gian dài - Kích thước nhỏ gọn, dễ lắp đặt; giao diện tùy chỉnh đơn giản, dễ sử dụng - Giao diện hiển thị đẹp, rõ ràng có tính thẩm mỹ cao, cập nhật số lượng cà chua sau phân loại xác 100% - Tính an tồn cao, thân thiện với người dùng - 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ả, cịn tồn sai số BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 87 an 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 để hệ thống hồn chỉnh hoạt động hiệu hơn: - Xử lý đa luồng, tức nhận biết phân loại lúc nhiều cà chua - Điều khiển tồn hệ thống thơng qua webserver qua ứng dụng điện thoại thông minh - Mở rộng phạm vi đối tượng phân loại (có thể nhận biết cà chua bị sâu đục, thối, dập; mở rộng nông sản khác dưa chuột, hồng, chanh…) - Thay dùng loadcell sử dụng thuật tốn phân loại theo kích thước cà chua - 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 an 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 [9] Hà Duy Khánh, Đồ án tốt nghiệp “Phân loại sản phẩm dùng kit Raspberry Pi”, TP HCM, tháng năm 2018 Trang web: [3] Nguyễn Nghĩa, “Tổng quan thư viện OpenCV, đăng ngày 10 tháng 11 năm 2016 https://www.tutorialspoint.com/python/ [5] Raspberry Pi Việt Nam, sản phẩm Raspberry Pi B Model https://raspberrypi.vn/shop/mach-raspberry-pi/raspberry-pi-4-model-b-2019 [7] Ngun Minh, viết “Xi-lanh khí nén gì? Cấu tạo xi-lanh khí nén”, đă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 an 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 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) #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 an 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']) #xxxxxxxxxxxxxxxxxxxxx_thiet ke giao dien_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root = tk.Tk() root.geometry("1000x600") root.resizable(0, 0) #Don't allow resizing in the x or y direction lblz1 = tk.Label(master = root, text = "Running ",fg = "Green",font = "Times 25") lblz1.place(x = 0, y = 500) def close_window(): root.destroy() button = tk.Button (master = root,fg = "red", font = "Times 20", text = "EXIT", command = close_window) button.place(x = 900, y = 500) 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) 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 an 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 = 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 = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "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 an 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) 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) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = flag=0 flag1=0 flag2=0 flag3=0 flag4=0 count_1 count_2 count_3 count_4 = = = = 0 #xxxxxxxxxxxxxxxxxxxxx_thiet_lap_gia_tri_ban_dau_xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx level = '' find_result = False green_standard = False red_standard = False ogrange_standard = False GPIO.output(21, GPIO.output(20, GPIO.output(16, GPIO.output(12, False) False) False) 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 an 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) green = cv2.dilate(green, kernal) res1 = cv2.bitwise_and(image , image , mask=green) ogrange = cv2.dilate(ogrange, kernal) res2 = cv2.bitwise_and(image , image , mask=ogrange) #xxxxxxxxxxxxxxxxxxxxx_tim duong bao cua vat co mau tuong ung_tinh dien tich duong bao_set co tuowng ung_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx numPixel_red = cv2.countNonZero(red) numPixel_green = cv2.countNonZero(green) numPixel_ogrange = cv2.countNonZero(ogrange) ## ## ## 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) 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 an 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 = "red", font = "Times = "red", font = "Times 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 an 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 #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) 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') 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 an 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) 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; }

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

PRODUCT CLASSIFICATION: COLOR, WEIGHT; REMOTE CONTROL

// 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 an 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();

COLOR

Red : Orange: Green:

WEIGHT

TYPE

Category_1 Category_2 Category_3 Category_4 Submit

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 100 an S an K L 0 ... tài ? ?Nghiên cứu, thi? ??t kế thi công hệ thống phân loại sản phẩm theo cân nặng, màu sắc; Quản lý điều khiển điện thoại” mơ hình phân loại sản phẩm, cụ thể nông sản cà chua theo cân nặng màu sắc. .. MSSV: 15141333 Tên đề tài: 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 Tuần/ngày Tuần Nội dung Xác nhận GVHD Nhận đồ án, tìm hiểu đề tài (18-24/02/2019)... loại 1.2 MỤC TIÊU Mục tiêu nghiên cứu đề 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? ?? nắm rõ nguyên lí hoạt động cảm biến cân nặng, camera, làm quen với

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

w