phân loại sản phẩm theo hình dạng và kích thước bằng xử lí ảnh với python phân loại sản phẩm theo hình dạng và kích thước bằng xử lí ảnh với python phân loại sản phẩm theo hình dạng và kích thước bằng xử lí ảnh với python phân loại sản phẩm theo hình dạng và kích thước bằng xử lí ảnh với python
Đ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 05 tháng 06 năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Lê Văn Thái MSSV: 14141289 Chuyên ngành: Kỹ thuật Điện - Điện tử Mã ngành: 01 Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2014 Lớp: 14141DT1A I TÊN ĐỀ TÀI: ỨNG DỤNG CAMERA 3D TRONG VIỆC PHÂN LOẠI SẢN PHẨM THEO HÌNH DẠNG VÀ KÍCH THƢỚC II NHIỆM VỤ Các số liệu ban đầu: Các tài liệu Python thƣ viện OpenCV, Giáo trình Xử lý ảnh Các ví dụ nhận dạng hình học Nội dung thực hiện: Tìm hiểu phƣơng pháp nhận dạng phân loại sản phẩm Tổng quan xử lý ảnh Tìm hiểu Camera 3D Module liên quan Viết chƣơng trình Python Hồn thành mơ hình Đánh giá kết thực III NGÀY GIAO NHIỆM VỤ: 26/03/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 05/06/2019 V HỌ VÀ TÊN CÁN BỘ HƢỚNG DẪN: ThS Ngô Bá Việt CÁN BỘ HƢỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 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 05 tháng 06 năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Lê Văn Thái Lớp: 14141DT1A - MSSV: 14141289 Tên đề tài: Ứng dụng camera 3D việc phân loại sản phẩm theo hình dạng kích thƣớc Tuần/ngày Nội dung Xác nhận GVHD 16-20/3 Chọn đề tài 21-25/3 Viết đề cƣơng chi tiết 26/3-05/4 Tìm hiểu phƣơng pháp nhận dạng hình 06/-09/4 Tìm hiểu thuật tốn dán nhãn 10-17/4 Tìm hiểu camera 3D 18-21/4 Tìm hiểu thuật tốn tính khoảng cách 22-28/4 Tìm hiểu thuật tốn tính kích thƣớc 29/5-04/5 Tìm hiểu python 05-06/5 Thực viết code python window 07-08/5 Làm hình khối (sản phẩm) chạy thử 13-20/5 Hồn thành mơ hình 21-29/5 Viết báo cáo GV HƢỚNG DẪN ThS Ngơ Bá Việt LỜI CAM ĐOAN Đề 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 Lê Văn Thái LỜI CẢM ƠN Đầu tiên xin đƣợc cám ơn chân thành tới Thầy Ngô Bá Việt, Thầy tận tình hƣớng dẫn tơi để hồn thành tốt đề tài Tơi xin gửi lời chân thành cảm ơn thầy cô Khoa Điện-Điện Tử tạo điều kiện tốt cho tơi hồn thành đề tài Những kiến thức bổ ích mà Thầy Cơ dạy, đƣợc áp dụng vào đề tài Đồ Án Tốt Nghiệp nhiều, từ kiến thức nhỏ nhặt học lớn Một lần xin đƣợc gửi lời cám ơn đến tất Thầy Cơ, khơng có Thầy Cơ tơi khó hồn thành đề tài Tiếp theo xin cảm ơn tới Anh, Chị khóa bạn sinh viên tạo điều kiện giúp đỡ, từ tài liệu liên quan tới đề tài kinh nghiệm sống thực tế Nhờ họ mà tơi phát triển đƣợc Tôi gửi lời đồng cảm ơn đến bạn lớp 14141DT1A chia sẻ trao đổi kiến thức nhƣ kinh nghiệm quý báu thời gian thực đề tài, lớp học có nhiều kí ức thời sinh viên Cuối gửi lời cảm ơn đến Cha, Mẹ khơng có hai đấng sinh thành ngày hơm khơng có diện để thực việc muốn, họ tạo điều kiện để giúp hƣớng tới tƣơng lai tốt đẹp Một lần cuối xin chân thành cảm ơn! Ngƣời thực đề tài Lê Văn Thái MỤC LỤC Trang bìa i Nhiệm vụ đồ án ii Lịch trình iii Cam đoan iv Lời cảm ơn v Mục lục vi Liệt kê hình vẽ ix Liệt kê bảng vẽ xi Tóm tắt xii CHƢƠNG 1: TỔNG QUAN .1 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU .1 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN .2 1.5 BỐ CỤC CHƢƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH VÀ CÁC THƢ VIỆN LIÊN QUAN 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ẢN PHẨM THEO HÌNH DẠNG 11 2.2.1 Các hình dạng sản phẩm 11 2.2.2 Phƣơng pháp nhận dạng sản phẩm theo hình dạng .12 2.2.3 Các bƣớc thực phân loại sản phẩm theo hình dạng 15 2.3 ÁP DỤNG KỸ THUẬT HIỆU CHỈNH STEREO CAMERA ĐỂ TÍNH KÍCH 19 THƢỚC SẢN PHẨM 19 2.3.1 GIỚI THIỆU KỸ THUẬT HIỆU CHỈNH STEREO CAMERA 20 2.3.2 STEREO CAMERA .20 2.3.3 PHƢƠNG PHÁP HIỆU CHỈNH CHUẨN 25 2.4 NGÔN NGỮ PYTHON 27 2.5 GIỚI THIỆU PHẦN CỨNG 30 CHƢƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ 31 3.1 GIỚI THIỆU 31 3.2 THIẾT KẾ HỆ THỐNG PHẦN CỨNG 31 3.2.1 Khối xử lý .33 3.2.2 Khối thu tín hiệu .33 3.2.3 Khối hiển thị 34 3.2.4 Khối giao tiếp điều khiển 35 3.2.5 Khối nguồn .35 3.3 CÁC TÍNH TỐN TRONG NHẬN DẠNG 35 3.3.1 Giới thiệu đặc điểm hình dạng 35 3.3.2 Phƣơng pháp tính tốn đặc điểm .36 CHƢƠNG 4: THI CÔNG HỆ THỐNG 40 4.1 GIỚI THIỆU 40 4.2 THI CÔNG HỆ THỐNG .40 4.2.1 Các linh kiện model cần thiết cho mơ hình .40 4.2.2 Kết nối, lắp ráp kiểm tra mơ hình 41 4.3 THI CƠNG MƠ HÌNH 41 4.4 LẬP TRÌNH HỆ THỐNG .42 4.4.1 Lƣu đồ giải thuật 42 4.4.2 Lập trình với ngơn ngữ Python thƣ viện OpenCV 49 4.5 MÔ PHỎNG 50 4.5.1 Lƣu đồ 51 4.5.2 Xử lý tín hiệu hay hình ảnh 52 4.6 VIẾT TÀI LIỆU HƢỚNG DẪN SỬ DỤNG, THAO TÁC 54 4.6.1 Viết tài liệu hƣớng dẫn sử dụng 54 4.6.2 Quy trình thao tác 57 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ .59 5.1 CAMERA 3D 59 5.2 XÁC ĐỊNH MÀU SẮC CỦA SẢN PHẨM 59 5.3 NHẬN DẠNG VÀ TÍNH KÍCH THƢỚC SẢN PHẨM .61 5.4 PHÂN LOẠI SẢN PHẨM 66 CHƢƠNG 6: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN .68 6.1 KẾT LUẬN 68 6.1.1 Kết đạt đƣợc 68 6.1.2 Những mặt hạn chế .68 6.2 HƢỚNG PHÁT TRIỂN .68 LIỆT KÊ HÌNH VẼ Hình Trang Hình 2.1: Lân cận lân cận Hình 2.2: Hình tách biên .8 Hình 2.3: Bộ lọc Gaussian Hình 2.4: Đặc điểm hình chữ nhật 12 Hình 2.5: Đặc điểm hình vng 13 Hình 2.6: Đặc điểm hình tam giác 13 Hình 2.7: Sơ đồ bƣớc thực phân loại sản phẩm 14 Hình 2.8: Xác định biên 16 Hình 2.9: Nhận dạng đƣờng biên 17 Hình 2.10: Cấu hình chuẩn hệ thống camera 19 Hình 2.11: Hệ thống tọa độ stereo camera 19 Hình 2.12: Thuật toán SAD phân vùng 22 Hình 2.13: Qui tắc tam giác đồng dạng 23 Hình 2.14: Mơ hình thơng số camera 24 Hình 2.15: Sơ đồ khối camera 28 Hình 3.1: Sơ đồ khối 30 Hình 3.2: Khối thu tín hiệu 31 Hình 3.3: Synchronization USB Stereo Webcam Dual lens camera OV9750 960P MJPEG 2560x960 with No distortion lens 3D usb camera module 31 Hình 3.4: Laptop 32 Hình 3.5: Đỉnh hình 33 Hình 3.6: Đoạn Ramer-Douglas-Peucker 34 Hình 3.7: Đƣờng xấp xỉ 34 Hình 3.8: Độ dài cạnh 34 Hình 4.1: Kết nối Camera 37 Hình 4.2: Các khối hộp (Hình dạng sản phẩm) 38 Hình 4.3: Lƣu đồ giải thuật 39 Hình 4.4: Ma trận khơng gian màu BGR 40 KẾ CHƢƠNG 6: T LUẬN VÀ HƢỚNG PHÁT TRIỂN CHƢƠNG 6: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 6.1 KẾT LUẬN 6.1.1 Kết đạt đƣợc Hệ thống đáp ứng tƣơng đối đầy đủ mục tiêu đề tài đặt với độ xác phân loại tính tốn cao, tốc độ xử lý nhanh Mơ hình phần cứng hoạt động tốt, thiết bị nhỏ gọn, lắp đặt dễ dàng, có tính kinh tế, thuận tiện cho việc học tập nhƣng phát triển thành dây chuyền sản xuất Chƣơng trình xử lý ảnh hoạt động ổn định, nhận dạng đƣợc màu sắc, hình dạng hầu hết sản phẩm Đo đƣợc xác khoảng cách thực tế nhƣ chu vi, độ dài cạnh phân loại đƣợc hầu hết sản phẩm 6.1.2 Những mặt hạn chế Ngồi kết đạt đƣợc hệ thống hạn chế nhƣ khả nhận dạng bị ảnh hƣởng bới yếu tố môi trƣờng nhƣ ánh sáng, nhiễu; nhận dạng biết đƣợc sản phẩm hình vng, chữ nhật, tam giác, kích thƣớc sản phẩm nhƣ khoảng cách sản phẩm tới camera mà chƣa nhận dạng đƣợc sản phẩm hình trịn, sản phẩm bị lỗi nhƣ móp, méo; chƣa nhận dạng tất sản phẩm có lúc khung hình Chƣa xây dựng đƣợc mơ hình phân loại hồn chỉnh, mang tính nghiên cứu phân loại máy tính 6.2 HƢỚNG PHÁT TRIỂN Từ mặt hạn chế đề tài, để đề tài hoạt động tốt áp dụng vào thực tế sau nhóm đề hƣớng phát triển nhƣ sau: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68 • Thiết kế thêm băng tải cho mơ hình thêm đẹp thuận tiện • Làm thành dây truyền sản xuất với cấu hình hệ thống mạnh • Tìm hiểu thuật toán phát tất sản phẩm đƣa vào khung hình • Tìm hiểu phát triển thêm chức đếm tất sản phẩm đƣợc đƣa vơ khung hình TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO Sách tham khảo [1] Nguyễn Tiến San, Nguyễn Thái Bảo Hùng, Báo cáo tìm hiểu cảm biến Kinect (RGB –D), Đồ án môn học, trƣờng Đại học công nghệ, Tp.HCM, 2016 [2] Trí thức trẻ, Camera 3D hoạt động thê nào, https://fptshop.com.vn/tintuc/danh-gia/camera-intel-realsense-3d-hoat-dong-nhu-the-nao-35667, 05/01/2016 [3] Nguyễn Văn Sơn, Hà Duy Khánh, Phân loại sản phẩm dùng Kit Raspberry, Đồ án tốt nghiệp, trƣờng ĐHSPKT, Tp.HCM, 2018 [4] Nguyễn Thanh Hải, Giáo Trình Xử lý ảnh, Xuất ĐH Quốc Gia, Tp.HCM, 2014 [5] Richard Blum, Christine Bresnahan, Sams teach yourself python in 24 Hours, Sams, 2014 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69 PHỤ LỤC PHỤ LỤC Thƣ viện chƣơng trình #!/usr/bin/env python2 import cv2 import numpy as np from scipy.spatial import distance as dist import math Chƣơng trình BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH 70 count_tmp = center_l = None center_r = None r = None base = ar = None f = 174.618040#219.337321 var_tmp_l = var_tmp_r = img_counter = img_width = 640 img_height = 720 rect = np.zeros((4, 2), dtype = "float32") maxW = img_width/2 maxH = img_height/2 dst = np.array([ [0, 0], [maxW - 1, 0], [maxW - 1, maxH - 1], [0, maxH - 1]], dtype = "float32") counter_rec = counter_tri = cvi_rec = cvi_tri = cvi_cir = lowerBound = np.array([169, 100, 100], dtype=np.uint8) upperBound = np.array([189, 255, 255], dtype=np.uint8) #lowerBound=np.array([33,80,40]) #upperBound=np.array([102,255,255]) def color_pre_process(frame): blurred = cv2.GaussianBlur(frame, (11, 11), 0) hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV) return hsv BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ def correct_perspective(frame, pts): # Sort the contour points in Top Left, Top Right, Bottom Left & Bottom Right Manner s = pts.sum(axis = 1) rect[0] = pts[np.argmin(s)] rect[2] = pts[np.argmax(s)] diff = np.diff(pts, axis = 1) rect[1] = pts[np.argmin(diff)] rect[3] = pts[np.argmax(diff)] # Compute the perspective transform matrix and then apply it M = cv2.getPerspectiveTransform(rect, dst) warped = cv2.warpPerspective(frame, M, (img_width/2,img_height/2)) warped = cv2.cvtColor(warped, cv2.COLOR_BGR2GRAY) # Calculate the maximum pixel and minimum pixel value & compute threshold min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(warped) threshold = (min_val + max_val)/2 # Threshold the image ret, warped = cv2.threshold(warped, threshold, 255,cv2.THRESH_BINARY) # Return the warped image return warped cam= cv2.VideoCapture(2) def draw_tri(img,pt1,pt2,pt3): # Three vertices(tuples) of the triangle p1 = tuple(pt1.reshape(1, -1)[0])#tuple(pt1) # print(type(p1)) p2 = tuple(pt2.reshape(1, -1)[0])#tuple(pt2) # print(type(p2)) p3 = tuple(pt3.reshape(1, -1)[0])#tuple(pt3) # print(type(p3)) # p1 = (100, 200) # print(type(p1)) # p2 = (50, 50) # p3 = (300, 100) # Drawing the triangle with the help of lines # on the black window With given points # cv2.line is the inbuilt function in opencv library #print(p1,p2,p3) cv2.line(img, p1, p2, (255, 0, 0), 3) cv2.line(img, p2, p3, (255, 0, 0), 3) cv2.line(img, p1, p3, (255, 0, 0), 3) #cv2.imshow("image_triangle", img) def centroid(pt1,pt2,pt3): p1 = tuple(pt1.reshape(1, -1)[0])#tuple(pt1) # print(type(p1)) p2 = tuple(pt2.reshape(1, -1)[0])#tuple(pt2) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ # print(type(p2)) p3 = tuple(pt3.reshape(1, -1)[0])#tuple(pt3) return ((p1[0]+p2[0]+p3[0])//3, (p1[1]+p2[1]+p3[1])//3) while True: ret, frame = cam.read() frame = cv2.flip(frame,0) left_img = frame[0:int(img_height/2),0:int(img_width/2)] left_img = np.asarray(left_img) left_hsv = color_pre_process(left_img) left_gray = cv2.cvtColor(left_img, cv2.COLOR_BGR2GRAY) right_gray = cv2.cvtColor(left_img, cv2.COLOR_BGR2GRAY) right_img = frame[0:int(img_height/2),int(img_width/2):img_width] right_img = np.asarray(right_img) right_hsv = color_pre_process(right_img) # left_blurred = cv2.GaussianBlur(left_hsv, (5, 5), 0) # right_blurred = cv2.GaussianBlur(right_hsv, (5, 5), 0) red_l = cv2.inRange(left_hsv, lowerBound, upperBound) red_r = cv2.inRange(right_hsv, lowerBound, upperBound) # h,s,gray_r = cv2.split(red_r) # # #Morphological transformation, Dilation kernal = np.ones((5 ,5), "uint8") # blue_l=cv2.dilate(red_l, kernal) blue_r=cv2.dilate(red_r, kernal) # res_l=cv2.bitwise_and(left_img, left_img, mask = red_l) res_r=cv2.bitwise_and(right_img, right_img, mask = red_l) #if red_r is not None: #cv2.imshow("gray_r",red_r ) #Tracking Colour (Yellow) (_,contours_l,hierarchy_l)=cv2.findContours(red_l,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) for cnt_l in (contours_l): approx_l = cv2.approxPolyDP(cnt_l,0.04*cv2.arcLength(cnt_l,True),True) if len(approx_l) == 4: var_tmp_l = area_l = cv2.contourArea(approx_l) if(area_l>300): x_l,y_l,w_l,h_l = cv2.boundingRect(approx_l) left_img = cv2.rectangle(left_img,(x_l,y_l),(x_l+w_l,y_l+h_l),(255,0,0),3) center_l = int(x_l + 0.5 * (w_l - 1)) elif len(approx_l) == 3: var_tmp_l = #print(type(approx_l)) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 75 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 76 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ # draw_tri(left_img,approx_l[0],approx_l[1],approx_l[2]) # dist_1 = dist.euclidean(tuple(approx_l[0].reshape(1, -1)[0]), tuple(approx_l[1].reshape(1, -1)[0])) # dist_2 = dist.euclidean(tuple(approx_l[1].reshape(1, -1)[0]), tuple(approx_l[2].reshape(1, -1)[0])) # dist_3 = dist.euclidean(tuple(approx_l[0].reshape(1, -1)[0]), tuple(approx_l[2].reshape(1, -1)[0])) center_l_3 = centroid(approx_l[0],approx_l[1],approx_l[2]) else: # area_l = cv2.contourArea(approx_l) # if(area_l>300): # circles_l = cv2.HoughCircles(res_l, cv2.HOUGH_GRADIENT, 1.2, 100) pass (_,contours_r,hierarchy_r)=cv2.findContours(red_r,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) for cnt_r in (contours_r): approx_r = cv2.approxPolyDP(cnt_r,0.04*cv2.arcLength(cnt_r,True),True) print("len(approx_r)",len(approx_r)) if len(approx_r) == 4: var_tmp_r = area_r = cv2.contourArea(approx_r) if(area_r>300): x_r,y_r,w_r,h_r = cv2.boundingRect(approx_r) right_img = cv2.rectangle(right_img,(x_r,y_r),(x_r+w_r,y_r+h_r),(255,0,0),3) center_r = int(x_r + 0.5 * (w_r - 1)) elif len(approx_r) == 3: var_tmp_r = draw_tri(right_img,approx_r[0],approx_r[1],approx_r[2]) dist_1 = dist.euclidean(tuple(approx_r[0].reshape(1, -1)[0]), tuple(approx_r[1].reshape(1, -1)[0])) dist_2 = dist.euclidean(tuple(approx_r[1].reshape(1, -1)[0]), tuple(approx_r[2].reshape(1, -1)[0])) dist_3 = dist.euclidean(tuple(approx_r[0].reshape(1, -1)[0]), tuple(approx_r[2].reshape(1, -1)[0])) center_r_3 = centroid(approx_r[0],approx_r[1],approx_r[2]) else: area_r = cv2.contourArea(approx_r) if(area_r>300): # circles_r = cv2.HoughCircles(right_gray, cv2.HOUGH_GRADIENT, 1.2, 100) circles_r = cv2.HoughCircles(right_gray, cv2.HOUGH_GRADIENT, 1, 200, param1=30, param2=45, minRadius=0, maxRadius=0) if circles_r is not None: circles_r = np.round(circles_r[0, :]).astype("int") for (x_r, y_r, r_r) in circles_r: r = r_r # print("r_r",r_r) # cv2.circle(right_img, (x_r, y_r), r_r, (255, 0, 0), 3) if var_tmp_l == and var_tmp_r == and area_l>300 : counter_rec += # count_tmp += # if count_tmp >= 3: if center_l == None or center_r == None: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 77 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 78 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ pass else: # print("center_r",center_r,"center_l",center_l) disparity = center_l - center_r if disparity == 0: pass else: Dis = int((base * f)/disparity) # print("distance = ",Dis)#,"disparity = ",disparity) width_ = int((Dis*w_l)/f) height = int((Dis*h_l)/f) ar = w_l / float(h_l) print(ar) if ar >= 0.85 and ar = 22 and cvi_rec = 20 and cvi_rec = 3: if center_l == None or center_r == None: pass else: # print("center_r_3",center_r,"center_l_3",center_l) disparity = center_l_3[0] - center_r_3[0] if disparity == 0: pass else: Dis = int((base * f)/disparity) tmp_1 = [] tmp_2 = [] tmp_3 = [] line_1 = int((Dis*dist_1)/f) line_2 = int((Dis*dist_2)/f) line_3 = int((Dis*dist_3)/f) for i in range(5): tmp_1.append(line_1) for i in range(5): tmp_2.append(line_2) for i in range(5): tmp_3.append(line_3) cvi_tri = np.mean(tmp_1) + np.mean(tmp_2) +np.mean(tmp_3) cv2.putText(right_img, "chu vi hinh tam giac: %d" % cvi_tri, (x_l - (int(w_l)), y_l - int(h_l / 2)), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.5, 255) cv2.putText(right_img, "Khoang cach den vat: %d" % Dis, (x_l - (int(w_l)), y_l - int(h_l / 15)), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.5, 255) cv2.putText(right_img, "chieu dai ba canh: %d , %d ,%d" %(line_1, line_2, line_3),(x_l (int(w_l)), y_l - int(h_l / - 25)), cv2.FONT_HERSHEY_COMPLEX_SMALL,0.5,255) if cvi_tri >= 13 and cvi_tri 10: # cvi_cir = 2*math.pi*r # cv2.putText(right_img, "chu vi hinh tron: %d" % cvi_cir, ( r,r), # cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.5, 255) # else: # r=0 ## count_tmp = #cv2.imshow("frame",frame) #cv2.imshow("left_img",left_img) # print("counter_rec",counter_rec,"counter_tri",counter_tri) cv2.imshow("right_img",right_img) counter_rec = counter_tri = cvi_rec = cvi_tri = if cv2.waitKey(10) & 0xFF == 27: cv2.destroyAllWindows() break BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 82 ... PHƢƠNG PHÁP PHÂN LOẠI SẢN PHẨM THEO HÌNH DẠNG Với để tài “Ứng dụng camera 3D việc phân loại sản phẩm theo hình dạng kích thƣớc.” Thiết kế mơ hình phân loại sản phẩm theo hình dạng (hình vng, hình chữ... ? ?phân loại sản phẩm theo hình dạng kích thƣớc” đề tài đáng ta tìm hiểu Để tài “Ứng dụng camera 3D việc phân loại sản phẩm theo hình dạng kích thƣớc” Phân loại sản phẩm theo hình dạng (hình vng, hình. .. camera 3D việc phân loại sản phẩm theo hình dạng kích thước? ?? phân loại sản phẩm theo hình dạng (hình trịn, hình vng, hình chữ nhật, hình tam giác) kích thƣớc dựa ngơn ngữ Python với thƣ viện OpenCV