Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 89 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
89
Dung lượng
5,96 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 CNKT CƠ ĐIỆN TỬ THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ROBOT DELTA PHÂN LOẠI SẢN PHẨM ỨNG DỤNG THUẬT TOÁN DEEP LEARNING GVHD: TS VŨ QUANG HUY SVTH: NGUYỄN TRUNG HIẾU PHẠM HƯNG LONG ĐINH QUÝ NHÂN SKL010317 Tp.Hồ Chí Minh,Tháng 2/2023 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ROBOT DELTA PHÂN LOẠI SẢN PHẨM ỨNG DỤNG THUẬT TOÁN DEEP LEARNING SVTH: NGUYỄN TRUNG HIẾU MSSV: 18146114 PHẠM HƯNG LONG 18146165 ĐINH QUÝ NHÂN 18146181 GVHD: TS VŨ QUANG HUY NGÀNH: CÔNG NGHỆ KỸ THUẬT CƠ ĐIỆN TỬ KHĨA: 2018 TP.Hồ Chí Minh, tháng 02 năm 2023 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ VÀ THI CÔNG MƠ HÌNH ROBOT DELTA PHÂN LOẠI SẢN PHẨM ỨNG DỤNG THUẬT TOÁN DEEP LEARNING SVTH: NGUYỄN TRUNG HIẾU MSSV: 18146114 PHẠM HƯNG LONG 18146165 ĐINH QUÝ NHÂN 18146181 GVHD: TS VŨ QUANG HUY NGÀNH: CÔNG NGHỆ KỸ THUẬT CƠ ĐIỆN TỬ KHĨA: 2018 TP.Hồ Chí Minh, tháng 02 năm 2023 CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Giảng viên hướng dẫn: TS Vũ Quang Huy Sinh viên thực hiện: Nguyễn Trung Hiếu MSSV: 18146114 Phạm Hưng Long MSSV: 18146165 Đinh Quý Nhân MSSV: 18146181 Tên đề tài: “THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ROBOT DELTA PHÂN LOẠI SẢN PHẨM ỨNG DỤNG THUẬT TOÁN DEEP LEARNING” Các số liệu, tài liệu ban đầu: - Kích thước, kết cấu, số bậc tự robot - Các phương trình động học - Sử dụng servo motor Nội dung thực đề tài: - Tính tốn phương trình động học thuận, động học nghịch - Tính tốn, lựa chọn động phù hợp - Thiết kế phần mềm điều khiển - Thi công, vận hành kiểm nghiệm kết robot delta Sản phẩm dự kiến: - Mơ hình robot delta phân loại sản phẩm - Phần mềm giao diện điều khiển robot Ngày giao đồ án: 9/2022 Ngày nộp đồ án: 1/2023 Ngôn ngữ trình bày: Bản báo cáo: Tiếng Anh Tiếng Việt ✓ - Trình bày bảo vệ: Tiếng Anh Tiếng Việt ✓ - TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Họ tên sinh viên: Nguyễn Trung Hiếu MSSV: 18146114 Phạm Hưng Long MSSV: 18146165 Đinh Quý Nhân MSSV: 18146181 Ngành: Công nghệ kỹ thuật Cơ điện tử Lớp: 18146CL1 Tên đề tài: “Thiết kế thi cơng mơ hình robot delta phân loại sản phẩm ứng dụng thuật toán deep learning” Giảng viên hướng dẫn: TS Vũ Quang Huy ĐT: 0918748924 NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm: (Bằng chữ: ) TP Hồ Chí Minh, ngày tháng 01 năm 2023 Giảng viên hướng dẫn CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN Họ tên sinh viên: Nguyễn Trung Hiếu MSSV: 18146114 Phạm Hưng Long MSSV: 18146165 Đinh Quý Nhân MSSV: 18146181 Ngành: Công nghệ kỹ thuật Cơ điện tử Lớp: 18146CL1 Tên đề tài: “Thiết kế thi cơng mơ hình robot delta phân loại sản phẩm ứng dụng thuật toán deep learning” Giảng viên phản biện: NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm: (Bằng chữ: ) TP Hồ Chí Minh, ngày tháng 01 năm 2023 Giảng viên phản biện LỜI CẢM ƠN Đầu tiên, chúng em xin trân trọng gửi lời cảm ơn đến ba mẹ - người có cơng sinh thành ln động viên, ủng hộ chúng em suốt trình học tập, tạo điều kiện, quan tâm, giúp đỡ động viên trình học tập nghiên cứu đề tài Để đồ án tốt nghiệp đạt kết tốt nhất, nhóm chúng em nhận nhiều quan tâm, dạy tận tình nhận truyền đạt kiến thức vô bổ ích quý thầy cô trường Đại học sư phạm kỹ thuật thành phố Hồ Chí Minh để chúng em có vốn kiến thức quan trọng để chuẩn bị hành trang cho tương lai sau Cùng với dạy tận tình thầy chúng em xin cảm ơn đồng hành, hỗ trợ giúp đỡ bạn học Bên cạnh đó, để bày tỏ kính trọng lịng biết ơn sâu sắc nhất, chúng em xin gửi lời cảm ơn chân thành đến thầy Vũ Quang Huy trực tiếp hướng dẫn, hỗ trợ giúp đỡ chúng em để đạt kết mong đợi Chúng em xin gửi lời cảm ơn đến quý thầy cô khoa Đào tạo chất lượng cao, khoa Cơ khí - chế tạo máy cán Nhà trường tạo môi trường học tập làm việc hiệu với trang thiết bị phù hợp với nhu cầu nguyện vọng đề tài Trong trình học tập nghiên cứu với nỗ lực thành viên nhóm, nhiên khơng tránh khỏi sai sót Chúng em mong nhận góp ý nhiệt tình từ q thầy để hồn thiện đạt kết tốt Chúng em xin chân thành cảm ơn! i TĨM TẮT Với phát triển cơng nghệ ngày nhanh, đặc biệt thời đại cơng nghệ 4.0 nay, máy móc loại thay người công việc lặp lặp lại nhiều lần với suất cơng việc lớn, độ xác cao độ ổn định lớn Và nhà máy dần sử dụng robot để làm việc nặng đòi hỏi tính xác cao, mà số loại Robot sử dụng loại Robot có nhiều bậc tự do, kể đến cánh tay Robot bậc tự do, Robot song song, Robot Delta,… Mà cơng việc phân loại cấu trúc Robot delta lại sử dụng nhiều tốc độ độ xác cao phù hợp với cơng việc phân loại Chính vậy, nhóm lựa chọn mơ hình Robot Delta để thực mục tiêu phân loại đóng gói sản phẩm gói thuốc Hapacol, ống hút… Robot Delta kế thừa hình dạng thiết kế từ loại robot trước đó, có thiết kế riêng để phù hợp với mục tiêu đề Robot có khung dạng hình hộp chữ nhật nhằm tạo không gian để làm việc, cánh tay nối với khớp quay bệ cố định chúng lắp cố định khung giúp Robot gắp thả vật nhanh chóng xác, bên cạnh chương trình xử lý ảnh đảm nhiệm vai trò nhận diện sản phẩm để Robot hoạt động cách tự động Đồ án thể cố gắng việc thực thiết kế, chế tạo, nghiên cứu đánh giá nhằm đưa giải pháp cho vấn đề nhóm đặt từ đầu Nội dung báo cáo bao gồm chương: • Chương 1: Tổng quan • Chương 2: Cơ sở lý thuyết • Chương 3: Thiết kế tính tốn • Chương 4: Chương trình điều khiển xử lý ảnh • Chương 5: Thi cơng mơ hình thực nghiệm • Chương 6: Kết luận hướng phát triển ii ABSTRACT With the rapid development of technology, specially in 4.0 technology, machines and types have been able to replace humans in repetitive tasks with high productivity Large jobs, high accuracy and great stability help save companies today's personnel and other resources, etc And now, in factories, robots have gradually been used to heavy work requiring high accuracy, but the number of types of robots used are Robots with many degrees of freedom, such as Robot arm degrees of freedom, Parallel Robot, Delta Robot, etc But in classification jobs, the structure of Delta Robot is used more because of its high speed and accuracy suitable for classification work Therefore, the team selected the Delta Robot model to achieve the goal of classifying and packaging products such as medicine packs, straws, chewing gum, etc The Delta Robot inherits the design shape from previous robots, but it has own designs to suit the goals Robot has a rectangular box-shaped frame to create working space (products are small in size and weight), arms are connected to rotary joints at a fixed base and they are fixed on the frame to quickly and accurately pick up and drop objects, computer vision takes on the role of product identification so that the robot can operate automatically This project represents the efforts in carrying out design, manufacturing, research and evaluation to provide a solution to the problem the group posed from the beginning The content of the report includes the following chapters: • Chapter 1: Overview • Chapter 2: Theoretical Basis • Chapter 3: Design and Calculation • Chapter 4: Computer vision and processing program • Chapter 5: Construction of experimental models • Chapter 6: Conclusion and development direction iii 120 97% 100 96% 96% 80 95% 60 95% 40 94% 20 94% 93% Hồng Xanh Số lượng Tổng Gắp xác Tỉ lệ xác Hình 5.9 Biểu đồ đánh giá kết phân loại sản phẩm 5.1.3.2 Thực nghiệm độ xác theo quãng đường thời gian Mục đích: kiểm tra độ xác đầu gắp thời điểm lúc đầu sau khoảng thời gian hoạt động Phương pháp thực hiện: thực đo đạc trước di chuyển, sau di chuyển 10 lần sau di chuyển 2000 lần quãng đường theo trục x, y, z; thực đo đạc cho quãng đường khác theo trục x, y, z Kết quả: Bảng 5-2 Kết thực nghiệm độ xác Quãng đường (mm) Lần thực Thực nghiệm (mm) 50 100 200 10 2000 10 2000 10 2000 Trục x 49.6 47.3 98.5 95.1 196.3 186 Trục y 50.5 51.8 102 105.7 210 223.6 Trục z 49.8 49.5 99.6 98 * * *: thực 57 Từ bảng kết nhận thấy: độ xác đầu gắp tương đối, nhiên di chuyển quãng đường dài, sai số tăng lên theo tỉ lệ dẫn tới quãng đường di chuyển thực tế không xác với yêu cầu đặt Trong trường hợp di chuyển nhiều lần (2000 lần liên tục), sai số tích luỹ dẫn đến trường hợp khơng xác yêu cầu Sai số sai sót q trình đo đạc khí thực tế để khai báo thông số robot, sai số làm trịn chương trình điều khiển tích luỹ dẫn đến sai số lớn Cần cải thiện độ xác đưa vào hoạt động cơng nghiệp 5.2 Phân tích đánh giá Qua nhiều lần chạy thử nghiệm nhóm em nhận thấy robot giải mục tiêu ban đầu đề như: nhận diện phân loại sản phẩm, gắp sản phẩm từ băng chuyền thả sản phẩm vào vị trí định Mặc dù vậy, mức độ xác nhận diện khoảng 95% cịn sai số q trình di chuyển nhận dạng robot, sai số hoạt động xuất Nguyên nhân xác định khí chưa xác phần lập trình điều khiển chưa tối ưu Khi chạy nhiều sản phẩm lúc sản phẩm bị xót tốc độ gắp vật xử lí cịn chậm Sản phẩm gắp đôi lúc bị rơi khí cấp khơng ổn định Ngồi cịn nguyên nhân khách quan từ môi trường độ sáng không ổn định dẫn tới nhận diện phân loại sai 58 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Chương trình bày kết luận kết quả, ưu điểm nhược điểm đề tài; đưa giải pháp khắc phục hướng phát triển cho đề tài 6.1 Kết luận Đề tài “Thiết kế chế tạo Robot Delta phân loại sản phẩm sử dụng Deep Learning” tạo Robot thực nhiệm vụ phân loại sản phẩm xác, ổn định tốc độ cao, bị lỗi yêu cầu kỹ thuật thực nhiệm vụ cách tự động Robot Delta hoạt động chế độ: tay (Manual) tự động (Auto) Chế độ Manual, việc điều khiển vị trí cánh tay Robot cách thay đổi vị trí tiến tới, lùi sau, di chuyển qua phải, di chuyển qua trái, di chuyển lên – xuống hay thay đổi góc quay động servo nhằm để hệ thống hoạt động cách mượt mà, ổn định mà khơng có lỗi Chế độ Auto, hệ thống hoạt động hoàn toàn tự động, gắp sản phẩm chuyền thả vào vị trí xác định từ trước xác Tuy nhiên, có số khó khăn điều kiện mơi trường tác động lên q trình xử lý hình ảnh ánh sáng xung quanh làm sai sót nhận diện hình ảnh hệ thống Nhưng khó khăn ảnh hưởng khơng đáng kể 6.2 Hướng phát triển Từ hạn chế đề tài, nhóm chúng em rút hướng phát triển nhằm tối ưu hóa nâng cấp đề tài sau: - Nâng cấp camera với độ phân giải cao hơn, có độ sắc nét rõ nhằm giúp Robot nhận diện nhanh xác sản phẩm; - Chế tạo thêm cover che chắn nhằm ổn định nguồn sáng giúp cho việc xử lý ảnh ổn định hơn; - Tối ưu hóa mặt thuật tốn để robot di chuyển mượt mà xác nhất; - Ứng dụng IoT giám sát điều khiển hệ thống từ xa thơng qua điện thoại máy tính có kết nối Internet; 59 - Thiết kế thêm cấu bậc tự vị trí cuối nhằm ứng dụng vào việc xếp vật vào hướng, vị trí 60 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Nguyễn Thanh Hải, Giáo trình xử lý ảnh, Đại học sư phạm kỹ thuật TP.HCM Tiếng Anh [2] L.M Zhang, Integrated optimal design of delta robot using dynamic performance indices, Tianjin, Tianjin University [3] I.A Bonev, Deltas parallel robot – The story of success, http://www Parallelmic.org/Reviews/ Reviews002.html [4] Mzavatsky, Delta robot kinematics [5] Bradski, Gary, and Adrian Kaehler, Learning EmguCV: Computer vision with the EmguCV library, O’Reilly Media, Inc [6] Thomas B Moeslund, Introduction to Video and Image Processing, Undergraduate Topics in Computer Science, Springer-Verlag London [7] Ayan Bag, Ramer–Douglas–Peucker Algorithm, https://ayanbag.com/ramerdouglas-peucker-algorithm [8] Các tác giả, Image moment, https://en.wikipedia.org/wiki/Image_moment [9] Kang & Atul, Image moments EnguCV https://theailearner.com/tag/image-moments-opencv-python/ 61 python, Phụ lục: CODE CHƯƠNG TRÌNH Code điều khiển trục chạy chế độ manual #region DONG HOC THUAN (TOA DO > GOC XOAY) public void XYZtoTheta(double _X0, double _Y0, double _Z0, out double _T1, out double _T2, out double _T3, out double _YJ1, out double _ZJ1, out double _YJ2, out double _ZJ2, out double _YJ3, out double _ZJ3) { double T1 = 0; double T2 = 0; double T3 = 0; double YJ1 = 0, ZJ1 = 0, YJ2 = 0, ZJ2 = 0, YJ3 = 0, ZJ3 = 0; int Status = delta_calcInverse(_X0, _Y0, _Z0, ref T1, ref T2, ref T3, ref YJ1, ref ZJ1, ref YJ2, ref ZJ2, ref YJ3, ref ZJ3); if (Status == 0) { _T1 = -T1; _T2 = -T2; _T3 = -T3; _YJ1 = YJ1; _ZJ1 = ZJ1; _YJ2 = YJ2; _ZJ2 = ZJ2; _YJ3 = YJ3; _ZJ3 = ZJ3; } else { _T1 = 0; _T2 = 0; _T3 = 0; 62 _YJ1 = 0; _ZJ1 = 0; _YJ2 = 0; _ZJ2 = 0; _YJ3 = 0; _ZJ3 = 0; } } public int delta_calcInverse(double x0, double y0, double z0, ref double theta1, ref double theta2, ref double theta3, ref double YJ1, ref double ZJ1, ref double YJ2, ref double ZJ2, ref double YJ3, ref double ZJ3) { theta1 = theta2 = theta3 = 0; int status = delta_calcAngleYZ(x0, y0, z0, ref theta1, ref YJ1, ref ZJ1); if (status == 0) status = delta_calcAngleYZ(x0 * cos120 + y0 * sin120, y0 * cos120 - x0 * sin120, z0, ref theta2, ref YJ2, ref ZJ2); // xoay goc toa +120 deg if (status == 0) status = delta_calcAngleYZ(x0 * cos120 - y0 * sin120, y0 * cos120 + x0 * sin120, z0, ref theta3, ref YJ3, ref ZJ3); // xoay goc toa -120 deg return status; } private int delta_calcAngleYZ(double x0, double y0, double z0, ref double theta, ref double YJ, ref double ZJ) { double y1 = -0.5 * 0.57735 * ff; // f/2 * tg 30 double y3 = y0 - 0.5 * 0.57735 * ee; // e/2 * tg30 double a = (x0 * x0 + y3 * y3 + z0 * z0 + rf * rf - re * re - y1 * y1) / (2 * z0); double b = (y1 - y3) / z0; // discriminant 63 double d = -(a + b * y1) * (a + b * y1) + rf * (b * b * rf + rf); //delta if (d < 0) return -1; // non-existing point // suy tọa độ J(0,ỵ,zj) double yj = (y1 - a * b - Math.Sqrt(d)) / (b * b + 1); // choosing outer point double zj = a + b * yj; theta = Math.Round((180.0 * Math.Atan(-zj / (y1 - yj)) / pi + ((yj > y1) ? 180.0 : 0.0)), 5); YJ = Math.Round(yj, 5); ZJ = Math.Round(zj, 5); return 0; } #endregion } Code xử lý ảnh, vẽ đường bao xác định tâm sản phẩm Image imgInput; int shottedpulse, pulsetopick; //cam = Convert.ToInt16(comboBox1.Text); //capture = new VideoCapture(cam); //capture.SetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameWidth, 640); //capture.SetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameHeight, 480); //Mat m = new Mat(); //capture.Read(m); //if (capture == null) //{ // return; //} OneShot(); Thread.Sleep(10); plc.GetDevice("d0", out shottedpulse); txt_shottedspulse.Text = shottedpulse.ToString(); contourss(Image img) { 64 //img.Bitmap = img.Bitmap.Clone(new System.Drawing.Rectangle(270, 0, 640, 600), img.Bitmap.PixelFormat); y2[0] = y4[0] = y6[0] = 0; //chuyen sang HSV Image HSV = new Image(img.Width, img.Height); CvInvoke.CvtColor(img, HSV, Emgu.CV.CvEnum.ColorConversion.Bgr2Hsv); //RED Hsv Limitduoi = new Hsv(0, 56, 76); // (0,178,143) Hsv Limittren = new Hsv(115, 214, 255); //(255,239,255) //Hsv Limitduoii = new Hsv(0, 171, 88); //Hsv Limittrenn = new Hsv(30, 255, 255); //BLUE Hsv Limitduoi1 = new Hsv(40, 68, 104); Hsv Limittren1 = new Hsv(136, 255, 222); //PINK Hsv Limitduoi2 = new Hsv(120, 0, 0); Hsv Limittren2 = new Hsv(255, 255, 255); Image temp = HSV.InRange(Limitduoi, Limittren); // + HSV.InRange(Limitduoii, Limittrenn); Image temp1 = HSV.InRange(Limitduoi1, Limittren1); Image temp2 = HSV.InRange(Limitduoi2, Limittren2); //co dan var element CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, Size(8, 8), new Point(-1, -1)); = new temp = temp.Erode(2); temp1 = temp1.Erode(2); temp2 = temp2.Erode(2); CvInvoke.Dilate(temp, temp, element, new Point(-1, Emgu.CV.CvEnum.BorderType.Constant, new MCvScalar(0, 0, 0)); CvInvoke.Dilate(temp1, temp1, element, new Point(-1, Emgu.CV.CvEnum.BorderType.Constant, new MCvScalar(0, 0, 0)); CvInvoke.Dilate(temp2, temp2, element, new Point(-1, Emgu.CV.CvEnum.BorderType.Constant, new MCvScalar(0, 0, 0)); VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint(); Mat n = new Mat(); 65 -1), 2, -1), 2, -1), 2, CvInvoke.FindContours(temp, contours, Emgu.CV.CvEnum.RetrType.Ccomp, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); n, for (int i = 0; i < contours.Size; i++) { double pemir = CvInvoke.ArcLength(contours[i], true); VectorOfPoint approx = new VectorOfPoint(); CvInvoke.ApproxPolyDP(contours[i], approx, 0.03 * pemir, true); //lay tam var moments = CvInvoke.Moments(contours[i]); double area = moments.M00; if (area > MIN && area < MAX) { int x = (int)(moments.M10 / moments.M00); int y = (int)(moments.M01 / moments.M00); if (x != 0) { y2[i] = y; x2[i] = x; x1 = x.ToString("D2"); y1 = y.ToString("D2"); td = x1 + "," + y1; } CvInvoke.Circle(img, new Point(x, y), 2, new MCvScalar(0, 0, 0), 2); CvInvoke.PutText(img, td, new Point(x, y), Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, new MCvScalar(0, 255, 255), 2); CvInvoke.PutText(img, "HAPACOL 250", new Point(x + 15, y - 15), Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, new MCvScalar(0, 255, 255), 2); } } //sap xep lai theo chieu den noi truoc for (int l = 0; l < 10; l++) { for (int k = l + 1; k < 10; k++) { if (y2[l] > y2[k]) { int tam; tam = x2[l]; x2[l] = x2[k]; x2[k] = tam; 66 int tam2; tam2 = y2[l]; y2[l] = y2[k]; y2[k] = tam2; } } } VectorOfVectorOfPoint contours3 = new VectorOfVectorOfPoint(); Mat n3 = new Mat(); CvInvoke.FindContours(temp1, contours3, Emgu.CV.CvEnum.RetrType.Ccomp, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); n3, for (int i = 0; i < contours3.Size; i++) { double pemir = CvInvoke.ArcLength(contours3[i], true); VectorOfPoint approx = new VectorOfPoint(); CvInvoke.ApproxPolyDP(contours3[i], approx, 0.03 * pemir, true); //lay tam var moments3 = CvInvoke.Moments(contours3[i]); double area = moments3.M00; if (area > MIN && area < MAX && ((approx.Size == hinh) | (approx.Size >= && hinh == 20))) { int x = (int)(moments3.M10 / moments3.M00); int y = (int)(moments3.M01 / moments3.M00); if (x != && x > 200) { y4[i] = y; x4[i] = x; x1 = x.ToString("D2"); y1 = y.ToString("D2"); td = x1 + "," + y1; } CvInvoke.Circle(img, new Point(x, y), 2, new MCvScalar(0, 0, 0), 2); CvInvoke.PutText(img, td, new Point(x, y), Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, new MCvScalar(255, 0, 0), 2); CvInvoke.PutText(img, "HAPACOL 150", new Point(x + 15, y - 15), Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, new MCvScalar(255, 0, 0), 2); } } //sap xep lai theo chieu den noi truoc 67 for (int l = 0; l < 10; l++) { for (int k = l + 1; k < 10; k++) { if (y4[l] > y4[k]) { int tam; tam = x4[l]; x4[l] = x4[k]; x4[k] = tam; int tam2; tam2 = y4[l]; y4[l] = y4[k]; y4[k] = tam2; } } } VectorOfVectorOfPoint contours2 = new VectorOfVectorOfPoint(); Mat n2 = new Mat(); CvInvoke.FindContours(temp2, contours2, Emgu.CV.CvEnum.RetrType.Ccomp, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); for (int i = 0; i < contours2.Size; i++) { double pemir = CvInvoke.ArcLength(contours2[i], true); VectorOfPoint approx = new VectorOfPoint(); CvInvoke.ApproxPolyDP(contours2[i], approx, 0.03 * pemir, true); //lay tam var moments2 = CvInvoke.Moments(contours2[i]); double area = moments2.M00; if (area > MIN && area < MAX) { int x = (int)(moments2.M10 / moments2.M00); int y = (int)(moments2.M01 / moments2.M00); if (x != 0) { y6[i] = y; x6[i] = x; x1 = x.ToString("D2"); y1 = y.ToString("D2"); td = x1 + "," + y1; } 68 n2, CvInvoke.Circle(img, new Point(x, y), 2, new MCvScalar(0, 0, 255), 2); CvInvoke.PutText(img, td, new Point(x, y), Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, new MCvScalar(0, 0, 255), 2); CvInvoke.PutText(img, "HAPACOL 80", new Point(x + 15, y - 15), Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, new MCvScalar(0, 0, 255), 2); } } //sap xep lai theo chieu den noi truoc for (int l = 0; l < 10; l++) { for (int k = l + 1; k < 10; k++) { if (y6[l] > y6[k]) { int tam; tam = x6[l]; x6[l] = x6[k]; x6[k] = tam; int tam2; tam2 = y6[l]; y6[l] = y6[k]; y6[k] = tam2; } } } //hien thi pictureBox1.Image = img.Bitmap; if (y2[0] == && y4[0] == && y6[0] == 0) { textBox14.Text = "Colour of The Nearest Object: "; textBox15.Text = "MODE COLOUR: "; } else { textBox14.Text = "Colour of The Nearest Object: " + Colour1; textBox15.Text = "Mode Colour: " + Colour.ToString(); } } private void SAPXEP() { if (y2[0] < y4[0]) 69 { X = x2[0]; Y = y2[0]; Colour = 1; Colour1 = "RED"; } else { X = x4[0]; Y = y4[0]; Colour = 2; Colour1 = "BLUE"; } if (y6[0] < Y) { X = x6[0]; Y = y6[0]; Colour = 3; Colour1 = "GREEN"; } 70 S K L 0