Đề 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” là phân loại sản phẩm theo hình dạng (hình tròn, hình vuông, hình chữ nhật, hình tam giác) và kích thước dựa trên ngôn ngữ Python với thư viện chính là OpenCV. Ở đây sử dụng các đặc điểm riêng biệt của từng hình dạng để đi nhận dạng và sau đó phân loại từng sản phẩm. Kết quả thực hiện của đề tài đã nhận dạng đƣợc những sản phẩm có hình dạng (hình tròn, hình vuông, hình chữ nhật, hình tam giác) cùng với việc biết được kích thước của từng sản phẩm.
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 CAMERA 3D TRONG VIỆC PHÂN LOẠI SẢN PHẨM THEO HÌNH DẠNG VÀ KÍCH THƢỚC GVHD: ThS Ngô Bá Việt SVTH: Lê Văn Thái MSSV: 14141289 Tp Hồ Chí Minh - 07/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 CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ 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 GVHD: ThS Ngơ Bá Việt SVTH: Lê Văn Thái MSSV: 14141289 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 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 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ử Xác nhận GVHD 13-20/5 Hoà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à 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 ĐẶ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 1.5 BỐ CỤC CHƢƠNG 2: CƠ SỞ LÝ THUYẾT .4 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 .4 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 11 2.2.3 Các bƣớc thực phân loại sản phẩm theo hình dạng 14 2.3 ÁP DỤNG KỸ THUẬT HIỆU CHỈNH STEREO CAMERA ĐỂ TÍNH KÍCH THƢỚC SẢN PHẨM 18 2.3.1 GIỚI THIỆU KỸ THUẬT HIỆU CHỈNH STEREO CAMERA 18 2.3.2 STEREO CAMERA 19 2.3.3 PHƢƠNG PHÁP HIỆU CHỈNH CHUẨN 23 2.4 NGÔN NGỮ PYTHON 25 2.5 GIỚI THIỆU PHẦN CỨNG 28 CHƢƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ 29 3.1 GIỚI THIỆU 29 3.2 THIẾT KẾ HỆ THỐNG PHẦN CỨNG 29 3.2.1 Khối xử lý 30 3.2.2 Khối thu tín hiệu 30 3.2.3 Khối hiển thị 32 3.2.4 Khối giao tiếp điều khiển 32 3.2.5 Khối nguồn 32 3.3 CÁC TÍNH TỐN TRONG NHẬN DẠNG 33 3.3.1 Giới thiệu đặc điểm hình dạng 33 3.3.2 Phƣơng pháp tính tốn đặc điểm 33 CHƢƠNG 4: THI CÔNG HỆ THỐNG 36 4.1 GIỚI THIỆU 36 4.2 THI CÔNG HỆ THỐNG 36 4.2.1 Các linh kiện model cần thiết cho mơ hình 36 4.2.2 Kết nối, lắp ráp kiểm tra mơ hình 36 4.3 THI CƠNG MƠ HÌNH 37 4.4 LẬP TRÌNH HỆ THỐNG 38 4.4.1 Lƣu đồ giải thuật 38 4.4.2 Lập trình với ngơn ngữ Python thƣ viện OpenCV 44 4.5 MÔ PHỎNG 45 4.5.1 Lƣu đồ 45 4.5.2 Xử lý tín hiệu hay hình ảnh 46 4.6 VIẾT TÀI LIỆU HƢỚNG DẪN SỬ DỤNG, THAO TÁC 48 4.6.1 Viết tài liệu hƣớng dẫn sử dụng 48 4.6.2 Quy trình thao tác 50 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 52 5.1 CAMERA 3D 52 5.2 XÁC ĐỊNH MÀU SẮC CỦA SẢN PHẨM 52 5.3 NHẬN DẠNG VÀ TÍNH KÍCH THƢỚC SẢN PHẨM 54 5.4 PHÂN LOẠI SẢN PHẨM 58 CHƢƠNG 6: 6.1 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 60 KẾT LUẬN 60 6.1.1 Kết đạt đƣợc 60 6.1.2 Những mặt hạn chế 60 6.2 HƢỚNG PHÁT TRIỂN 60 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Thời gian đáp ứng nhanh điều kiện lý tƣởng làm khảo sát Khi hoạt động môi trƣờng ánh sáng, việc nhận đáp ứng chậm hơn, việc nhận dạng chập chờn không ổn định Thiết bị nhận diện đƣợc gần nhƣ 100% sản phẩm màu đỏ hồn tồn khơng nhận diện sản phẩm có màu sắc khác 5.3 NHẬN DẠNG VÀ TÍNH KÍCH THƢỚC SẢN PHẨM Kết thu đƣợc sản phẩm đƣợc nhận dạng hình chữ nhật với chu vi thực tế 23cm, chiều dài 6,5cm, chiều rộng 5cm: Hình 5.3: Nhận dạng tính kích thƣớc sản phẩm hình chữ nhật Kết thu đƣợc sản phẩm đƣợc nhận dạng hình vng với chu vi thực tế 24cm, chiều dài cạnh 6cm: Hình 5.4: Nhận dạng tính kích thƣớc sản phẩm hình vng Kết thu đƣợc sản phẩm đƣợc nhận dạng hình tam giác với chu vi thực tế 13cm, độ dài cạnh 4cm, 4cm, 5cm: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.5: Nhận dạng tính kích thƣớc sản phẩm hình tam giác Bảng 5.2: Kết khảo sát nhận dạng tính kích thƣớc hình vuông Lần Khoảng Độ dài Độ dài Chu vi Chu vi Sai số thực cách cạnh cạnh thu thực tế thu tƣơng camera thực tế đƣợc (cm) đƣợc đối (%) thứ - vật (cm) (cm) (cm) (cm) 19 6,1 5,8 24,4 23,2 4,9 14 6,1 5,6 24,4 22,4 8,1 29 6,1 5,4 24,4 21,6 11,5 16 6,1 6,1 24,4 24,4 17 6,1 6,1 24,4 22,4 22 6,1 5.7 24,4 22,8 8,1 29 6,1 6,3 24,4 25,2 4,5 15 6,1 5,8 24,4 23,2 4,9 18 6,1 24,4 24 1,6 10 20 6,1 6,1 24,4 24,4 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Ba hình dạng (vng, chữ nhật, tam giác) đƣợc nhận dạng với độ xác 95% tính đƣợc chu vi, độ dài cạnh sản phẩm nhiều vị trí khác so với camera Tuy nhiên để sản phẩm gần q xa tầm mắt camera sản phẩm khơng nhận dạng tính kích thƣớc đƣợc kết chênh lệch với thực tế Bảng 5.2, bảng 5.3, bảng 5.4 thống kê thực tế kết nhận dạng tính kích thƣớc sản phẩm: hình vng, hình chũ nhật, hình tam giác điều kiện mơi trƣờng ánh sáng đầy đủ, ổn định khoảng cách từ camera tới vật thay đổi Bảng 5.3: Kết khảo sát nhận dạng tính kích thƣớc hình chữ nhật Lần Khoảng Chiều dài; Chiều dài, Chu vi Chu vi Sai số thực cách Chiều rộng Chiều rộng thực tế thu tƣơng camera - thực tế (cm) thu đƣợc (cm) đƣợc đối (%) thứ vật (cm) 13 6- 4,5 - 5,4 21 24,8 18 15 - 4,5 6,7 - 5,1 21 23,6 12,4 19 - 4,5 6,2 - 4,6 21 21,6 2,9 17 - 4,5 6,1 - 4,7 21 21,6 2,9 27 - 4,5 6,6 - 4,8 21 22,8 8,6 20 - 4,5 6,1 - 4,4 21 21 16 - 4,5 - 4,6 21 21,2 0.9 18 - 4,5 6,6 - 4,5 21 22,2 5,7 21 - 4,5 5,9 - 4,3 21 20,4 2,8 10 15 - 4,5 5,8 - 4,6 21 20,8 0,9 (cm) (cm) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Bảng 5.4: Kết khảo sát nhận dạng tính kích thƣớc hình tam giác Lần Khoảng Độ dài Độ dài Chu vi Chu vi Sai số thực cách cạnh thực tế cạnh thu thực tế thu tuyệt camera - (cm) đƣợc (cm) (cm) đƣợc(c đối (%) thứ vật (cm) 21 - 4,7 - 4,9 - 4,2 - 5,5 15,7 14,6 20 - 4,7 - 5,1 - 4,4 - 5,7 15,7 15,2 3,2 17 - 4,7 - - 4,6 - 5,4 15,7 15 4,5 28 - 4,7 - 4,7 - 4,3 -5,3 15,7 14,3 8,9 26 - 4,7 - 4,6 - 4,3 - 5,5 15,7 14,4 8,3 30 - 4,7 - 5,5 - 4,9 - 5,9 15,7 16,3 16 - 4,7 - 5,1 - 4,7 - 5,9 15,7 16,1 2,5 25 - 4,7 - 5,7 - 4,7 - 6,1 15,7 16,5 18 - 4,7 - 5,1 - 5,2 - 5,6 15,7 15,9 1,3 10 21 - 4-7 - 4,1 - 4,9 - 5,9 15,7 15,9 1,3 m) Vẫn cịn số lỗi xảy mà nhóm chƣa khắc phục đƣợc, nhƣ sản phẩm bị dính vào chồng lên khơng phát đƣợc Để ba sản phẩm vào lúc nhận dạng tính kích thƣớc sản phẩm không nhận dạng sản phẩm nhƣ hình dƣới: Hình 5.6: Camera chƣa thể nhận dạng lúc nhiều sản phẩm BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Nhóm chƣa nhận diện đƣợc hình trịn nhƣ tính kích thƣớc sản phẩm hình trịn Thuật tốn nhóm tìm hiểu đƣa phƣơng pháp phải nhiều thời gian hồn thành Thuật tốn áp dụng vào việc phân loại, nhận diện tìm kích thƣớc sản phẩm có hình dạng mà nhóm tìm hiểu 5.4 PHÂN LOẠI SẢN PHẨM Kết thu đƣợc sản phẩm hình chữ nhật đạt kích thƣớc u cầu sản phẩm hình chữ nhật khơng đạt kích thƣớc u cầu: Hình 5.7: Phân loại theo kích sản phẩm hình chữ nhật Kết thu đƣợc sản phẩm hình tam giác đạt kích thƣớc u cầu sản phẩm hình tam giác khơng đạt kích thƣớc u cầu: Hình 5.8: Phân loại theo kích thƣớc sản phẩm hình tam giác Kết thu đƣợc sản phẩm hình vng đạt kích thƣớc u cầu sản phẩm hình vng khơng đạt kích thƣớc u cầu: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 CHƢƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Hình 5.9: Phân loại theo kích thƣớc sản phẩm hình tam giác Chƣơng trình phân loại đƣợc hầu hết tất sản phẩm theo kích thƣớc chúng với thời gian đáp ứng nhanh điều kiện lý tƣởng làm khảo sát Tuy nhiên vấn cịn số trƣờng hợp phân loại chƣa xác nhiễu BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 CHƢƠNG 6: KẾ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ế Ngoài kết đạt đƣợc hệ thống cịn 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: 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 BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH 60 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/tin- tuc/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 61 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 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 62 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 63 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 64 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 65 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 68 ... 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ữ... theo hình dạng kích thƣớc” Đề 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 trịn, hình vng, hình chữ nhật, hình tam giác) kích. .. dụng camera 3D việc phân loại sản phẩm theo hình dạng kích thƣớc” đƣơc lựa chọn thực để phân loại theo hình dạng sản phẩm phân loại theo kích thƣớc sản phẩm dựa thông tin từ camera 3D MỤC TIÊU