Nghiên cứu phương pháp đọc và hiệu chuẩn thước vạch mia

78 1 0
Nghiên cứu phương pháp đọc và hiệu chuẩn thước vạch mia

Đ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 VÀ ĐÀO TẠO TRƯƠỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VŨ KHÁNH PHAN Nghiên cứu phươơng pháp đọc hiệu chuẩn thươớc vạch MIA Chuyên ngành : KỸ THUẬT CƠ KHÍ LUẬN VĂN THẠC SĨ KHOA HỌC KỸ THUẬT CƠ KHÍ NGƯƠỜI HƯƠỚNG DẪN KHOA HỌC: TS NGUYỄN THỊ KIM CÚC Hà Nội – 2022 TRƯƠỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Nghiên cứu phươơng pháp đọc hiệu chuẩn thươớc vạch MIA Vũ Khánh Phan Phan.VK202163M@sis.hust.edu.vn Ngành Kỹ thuật Cơ khí Giảng viên hươớng dẫn: TS Nguyễn Thị Kim Cúc Viện: Cơ khí HÀ NỘI, 09/2022 CỘNG HÒA Xà HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ Họ tên tác giả luận văn: Vũ Khánh Phan Đề tài luận văn: Nghiên cứu phươơng pháp đọc hiệu chuẩn thươớc vạch MIA Chuyên ngành: Kỹ thuật khí Mã số SV: 20202163M Tác giả, Ngươời hươớng dẫn khoa học Hội đồng chấm luận văn xác nhận tác giả sửa chữa, bổ sung luận văn theo biên họp Hội đồng ngày 29/10/2022 với nội dung sau: Việt hóa hình ảnh bảng biểu luận văn Chỉnh sửa lại công thức 4.6, 4.7, 4.12, 4.15 Bổ sung trích dẫn hình ảnh bảng biểu Ngày 28 tháng 11 năm 2022 Giáo viên hươớng dẫn Tác giả luận văn CHỦ TỊCH HỘI ĐỒNG Mẫu 1c ĐỀ TÀI LUẬN VĂN “Nghiên cứu phươơng pháp đọc hiệu chuẩn thươớc vạch MIA” Giáo viên hươớng dẫn Lời cảm ơn Để hoàn thành đươợc đồ án này, em xin bày tỏ lòng biết ơn sâu sắc đến thầy cô trươờng Đại học Bách Khoa Hà Nội nói chung, viện Cơ khí, mơn Cơ khí xác Quang học nói riêng Các thầy nhiệt tình dạy, hỗ trợ cung cấp cho em nhiều kiến thức tài liệu quý giá suốt trình học tập vừa qua Em xin chân thành cảm ơn giảng viên hươớng dẫn TS Nguyễn Thị Kim Cúc thuộcbộ mơn Cơ khí xác Quang học tậntìnhhươớng dẫn giúp em vươợt qua khó khăn q trình làm luận văn Bên cạnh em chân thành cảm ơn anh chị phòng Đo lươờng Độ dài – Viện Đo lươờng Việt Nam tạo điều kiện giúp đỡ, hỗ trợ q trình làm việc Ngồi suốt trình nghiên cứu, em nhận đươợc giúp đỡ, hỗ trợ bạn sinh viên phịng thí nghiệm C4,5-307 Em xin đươợc gửi lời cảm ơn bạn ban chủ nhiệm môn Cuối em xin gửi lời cảm ơn đến gia đình bạn bè giúp đỡ,chiasẻ em q trình học tập hồn thành luận văn Em xin chân thành cảm ơn Tóm tắt nội dung luận văn Luận văn gồm 66 trang đươợc trình bày chươơng bao gồm: 1) Tổng quan phươơng pháp hiệu chuẩn thươớc vạch MIA; 2) Cơ sở lý thuyết xây dựng hệ thống hiệu chuẩn thươớc vạch MIA; 3) Sử dụng camera thiết kế phần mềm đọc vạch; 4) Hiệu chuẩn thươớc vạch MIA sử dụng hệ thống chế tạo Kết luận Luận văn nghiên cứu dựa nguyên lý hoạt động giao thoa kế laser để hiệu chuẩn thươớc vạch MIA Luận văn nghiên cứu chế tạo cụm đồ gá camera, phát triển phần mềm xử lý ảnh để kết hợp với hệ thống sẵn có Phịng Đo lươờng Độ dài – Viện Đo lươờng Việt Nam Kết luận văn có ý nghĩa khoa học quan trọng giúp nâng cao tính xác phép hiệu chuẩn thươớc vạch MIA, bên cạnh cải tiến thao tác đo, giúp giảm bớt thời gian công sức q trình đo Sự thành cơng đề tài tiền đề vững để xây dựng hệ thống đo/hiệu chuẩn loại thươớc vạch khác HỌC VIÊN 7ʺ,IÈOI1IBO MỤC LỤC CHƯƠƠNG TỔNG QUAN VỀ PHƯƠƠNG PHÁP HIỆU CHUẨN THƯƠỚC VẠCH MIA 1.1 1.2 Khái quát thươớc vạch MIA 1.1.1 Thươớc vạch MIA 1.1.2 Các loại thươớc vạch MIA thông dụng cách sử dụng Hiệu chuẩn thươớc vạch MIA 1.2.1 Khái niệm hiệu chuẩn phươơng tiện đo 1.2.2 Mục đích nghiên cứu hiệu chuẩn thươớc vạch MIA 1.2.3 Phươơng pháp đo/hiệu chuẩn thươớc vạch MIA giao thoa kế laser 1.3 Tổng quan số phươơng pháp đo, hệ thống hiệu chuẩn thươớc vạch MIA đươợc nghiên cứu ứng dụng ởnươớc 1.3.1 Viện Đo lươờng Quốc gia Trung Quốc (NIM) 1.3.2 Phịng thí nghiệm Đo lươờng Quốc gia Đài Loan (NML) 1.3.3 Đại học Công nghệ Graz, Áo 11 1.3.4 Viện Trắc địa Địa tin học, trươờng Đại học Môi trươờng Khoa học Đời sống Wroclaw, Ba Lan 11 1.4 Hệ thống hiệu chuẩn thươớc vạch MIA băng máy đo chiều dài vạn Viện Đo lươờng Việt Nam 16 CHƯƠƠNG CƠ SỞ LÝ THUYẾT XÂY DỰNG HỆ THỐNG HIỆU CHUẨN THƯƠỚC VẠCH MIA 18 2.1 2.2 Giao thoa kế laser 18 2.1.1 Giao thoa kế laser hai tần số 18 2.1.2 Hệ thống giao thoa kế laser Viện Đo lươờng Việt Nam 19 Nguyên lý hệ thống 20 2.2.1 Hệ thống hiệu chuẩn cũ 20 2.2.2 Hệ thống hiệu chuẩn đươợc nghiên cứu xây dựng (mới) 21 2.3 Những yếu tố ảnh hươởng tới độ xác hệ thống hiệu chuẩn thươớc vạch MIA: 22 2.3.1 Bươớc sóng laser 22 2.3.2 Sai số điện tử 23 2.3.3 Sai số phi tuyến tính quang học 23 2.3.4 Sai số giãn nở nhiệt 24 2.3.5 Sai số chênh lệch thông số môi trươờng 24 2.3.6 Sai số Deadpath 25 2.3.7 Sai số Abbé 26 2.3.8 Sai số Cosin 27 2.3.9 Sai số xác định vị trí vạch 27 CHƯƠƠNG THIẾT KẾ, XÂY DỰNG HỆ THỐNG HIỆU CHUẨN THƯƠỚC VẠCH MIA SỬ DỤNG CAMERA 28 3.1 3.2 3.3 Thiết kế, xây dựng hệ thống 28 3.1.1 Giao thoa kế laser 29 3.1.2 Cụm đồ gá camera 31 Tính tốn lựa chọn camera 36 3.2.1 Tính tốn vùng đo camera 36 3.2.2 Lựa chọn camera 40 Phần mềm đọc vạch xử lý ảnh 41 CHƯƠƠNG THỰC NGHIỆM HIỆU CHUẨN THƯƠỚC VẠCH MIA 45 4.1 4.2 Phươơng pháp hiệu chuẩn thươớc vạch MIA 45 4.1.1 Điều kiện phươơng tiện hiệu chuẩn thươớc vạch MIA 45 4.1.2 Các bươớc hiệu chuẩn thươớc vạch MIA 46 4.1.3 Mơ hình tốn học 46 4.1.4 ƯƠớc lươợng ĐKĐBĐ thành phần 47 Kết thực nghiệm so sánh 48 4.2.1 Hệ thống hiệu chuẩn cũ 48 4.2.1 Hệ thống hiệu chuẩn 51 KẾT LUẬN 55 TÀI LIỆU THAM KHẢO 56 PHỤ LỤC 58 DANH MỤC HÌNH VẼ Hình 1.1 Thươớc vạch MIA dạng vạch thươờng Hình 1.2 Thươớc vạch MIA dạng vạch chữ E Hình 1.3 Ví dụ đo khoảng cách máy thủy bình thươớc vạch MIA Hình 1.4 Thươớc vạch MIA dạng mã vạch Hình 1.5 Sơ đồ hoạt động phươơng pháp đo giao thoa laser Hình 1.6 Hệ thống hiệu chuẩn thươớc vạch MIA NIM Hình 1.7 Sơ đồ dẫn xuất chuẩn hệ thống hiệu chuẩn thươớc vạch MIA NIM Hình 1.8 Sơ đồ hệ thống hiệu chuẩn thươớc vạch MIA NML Hình 1.9 Hình ảnh thực tế phận đọc vạch thươớc vạch MIA NML Hình 1.10 Sơ đồ dẫn xuất chuẩn hệ thống hiệu chuẩn thươớc vạch MIA NML 10 Hình 1.11 Hệ thống hiệu chuẩn trươờng Đại học Công nghệ Graz, Áo 11 Hình 1.12 Sơ đồ hệ thống hiệu chuẩn trươờng Wroclaw, Ba Lan 12 Hình 1.13 Cấu tạo hệ thống hiệu chuẩn trươờng Đại học Wroclaw, Balan 12 Hình 1.14 Nguyên lý vận hành hệ thống trươờng Đại học Wroclaw, Balan 13 Hình 1.15 Hệ thống hiệu chuẩn có Viện Đo lươờng Việt Nam 16 Hình 2.1 Sơ đồ nguyên lý hệ giao thoa laser 18 Hình 2.2 Nguyên lý hoạt động hệ thống giao thoa kế laser VMI 19 Hình 2.3 Sơ đồ nguyên lý hệ thống hiệu chuẩn cũ 20 Hình 2.4 Hình ảnh tổng quan hệ thống hiệu chuẩn cũ VMI 21 Hình 2.5 Sơ đồ nguyên lý hệ thống hiệu chuẩn 22 Hình 2.6 Biểu đồ sai số phi tuyến tính quang học 24 Hình 2.7 Sai số Deadpath di chuyển gươơng phản xạ 25 Hình 2.8 Phươơng pháp giảm thiểu sai số Deadpath 26 Hình 2.9 Sai số Abbé 26 Hình 2.10 Sai số Cosin 27 Hình 3.1 Hình ảnh tổng quan hệ thống phần mềm thiết kế 28 Hình 3.2 Hình ảnh thực tế hệ thống VMI 28 Hình 3.3 Kích thươớc nguồn laser HP 5519A 29 Hình 3.4 Hình ảnh thực tế nguồn laser 5519A 30 Hình 3.5 Kích thươớc gươơng phản xạ 10767A 30 Hình 3.6 Gươơng phản xạ 10767A 30 Hình 3.7 Kích thươớc gươơng giao thoa 10766A 31 Hình 3.8 Gươơng giao thoa 10766A 31 Hình 3.9 Kích thươớc trục kim loại băng trươợt hệ thống 32 Hình 3.10 Cụm đồ gá camera phần mềm thiết kế 32 Hình 3.11 Cụm vi chỉnh trục X, Y, Z phần mềm thiết kế 33 Hình 3.12 Cụm vi chỉnh trục X, Y 33 Hình 3.13 Cụm vi chỉnh trục Z 34 Hình 3.14 Hình ảnh thực tế cụm vi chỉnh trục X, Y, Z 35 Hình 3.15 Hình ảnh cụm gá lắp camera phần mềm thiết kế 35 Hình 3.16 Hình ảnh thực tế cụm đồ gá camera 36 Hình 3.17 Sơ đồ xác định giới hạn vùng đo hệ thống 36 Hình 3.18 Sơ đồ tạo ảnh qua thấu kính 37 Hình 3.19 Camera CS165CU1/M Thorlab 40 Hình 3.20 Sơ đồ khối q trình phần mềm xử lý thơng tin từ camera 42 Hình 3.21 Hình ảnh vạch thươớc thu đươợc camera 43 Hình 3.22 Phần mềm đo giao thoa kế laser (trái) phần mềm xử lý ảnh (phải) 44 Hình 4.1 Độ lệch trung bình thươớc theo phươơng pháp cũ 49 Hình 4.2 Giao diện phần mềm vị trí thươớc 51 Hình 4.3 Độ lệch trung bình thươớc theo phươơng pháp 53 DANH MỤC BẢNG BIỂU Bảng 1.1 ĐKĐBĐ phép hiệu chuẩn thươớc vạch MIA NIM Bảng 1.2 ĐKĐBĐ phép hiệu chuẩn thươớc vạch MIA NML 10 Bảng 1.3 Thông số kỹ thuật hệ thống hiệu chuẩn trươờng Đại học Wroclaw 14 Bảng 3.1 Thông số kỹ thuật nguồn laser 5519A hãng Agilent HP 29 Bảng 3.2 Thông số kỹ thuật cụm vi chỉnh trục X, Y 34 Bảng 3.3 Thông số kỹ thuật cụm vi chỉnh trục Z 34 Bảng 3.4 Bảng thông số kỹ thuật camera CS165CU1/M 40 Bảng 4.1 Hệ thống hiệu chuẩn thươớc vạch MIA 45 Bảng 4.2 Kết hiệu chuẩn phươơng pháp cũ 48 Bảng 4.3 Tính tốn độ khơng đảm bảo đo theo phươơng pháp cũ 49 Bảng 4.4 Bảng tổng hợp độ không đảm bảo đo theo phươơng pháp cũ 50 Bảng 4.5 Giá trị đo laser phần mềm 51 Bảng 4.6 Giá trị đo camera phần mềm 52 Bảng 4.7 Kết hiệu chuẩn phươơng pháp 52 Bảng 4.8 Tính tốn độ khơng đảm bảo đo theo phươơng pháp 53 Bảng 4.9 Bảng tổng hợp độ không đảm bảo đo theo phươơng pháp 53 0.060 Độ lệch trung bình (mm) 0.050 0.040 0.030 0.020 0.010 0.000 200 400 600 800 1000 1200 1400 1600 1800 Vị trí kiểm (mm) Hình 4.3 Độ lệch trung bình thươớc theo phươơng pháp Từ Hình 4.1 Độ lệch trung bình thươớc theo phươơng pháp cũ Hình 4.3 Độ lệch trung bình thươớc theo phươơng pháp thể thấy xu hươớng độ lệch trung bình thươớc theo hai phươơng pháp có tươơng đồng vị trí kiểm Tuy độ lệch trung bình theo phươơng pháp có giá trị nhỏ phươơng pháp cũ Bảng 4.8 Tính tốn độ không đảm bảo đo theo phươơng pháp Với phươơng pháp ươớc lươợng ĐKĐBĐ trình bày mục 4.1.4, ta ươớc lươợng đươợc giá trị ĐKĐBĐ theo phươơng pháp vị trí kiểm phạm vi hiệu chuẩn (0 – 1800) mm Tại vị trí 1800 mm, ĐKĐBĐ đạt giá trị lớn 5,9 μm = 0,0059 mm 53 Bảng 4.9 Bảng tổng hợp độ không đảm bảo đo theo phươơng pháp TT Nguồn ĐKĐBĐ Ký hiệu ĐKĐBĐ tiêu chuẩn |ci| ĐKĐBĐ thành phần ‫ݑ‬௦ 1,0×10-8 L 1,0×10-8 L Nguồn laser Độ lặp lại phép đo ‫ݑ‬௥௘௣ lặp 1,0 μm 1,0 μm Độ phân giải ‫ݑ‬௥௘௦ chuẩn 0,003 μm 0,003 μm Độ không ổn định nhiệt độ thươớc vạch MIA với nhiệt độ tiêu chuẩn ‫ݑ‬ο் 0,058 ºC 23×10-6 ℃-1 1,3×10-6 L ‫ݑ‬οఈ 0,87×10-6 ℃-1 0,1 ℃ 0,087×10-6 L ‫ݑ‬௩ 0,9 μm ͳ 0,9 μm Hệ số giãn nở nhiệt thươớc vạch MIA Xác định vị trí vạch Với phươơng pháp mới, ta có ĐKĐBĐ tổng hợp: ‫ݑ‬௖ଶ ൌ ට‫ ݏݑ‬ଶ ൅ ‫ ݌݁ݎݑ‬ଶ ൅ ‫ ݏ݁ݎݑ‬ଶ ൅ ‫ݑ‬οܶ ଶ ൅ ‫ݑ‬οߙ ଶ ൅ ‫ ݒݑ‬ଶ (4.13) Và ĐKĐBĐ mở rộng: (4.14) ܷଶ ൌ ݇ ൈ ‫ݑ‬௖ଶ với k = 2; P | 95 % [16] Vậy: ܷଶ ൎ ሺʹǡ͹ ൅ ʹǡ͸ ൈ ͳͲି଺ ‫ܮ‬ሻɊ với ሾ‫ܮ‬ሿǣ ݉ (݇ ൌ ʹሻ (4.15) Kết hiệu chuẩn lần tiến hành đo theo phươơng pháp cũ lần tiến hành đo theo phươơng pháp cho thấy ổn định hệ thống sử dụng camera phần mềm xử lý ảnh Đối với phươơng pháp cũ, ĐKĐBĐ độ lặp lại phép đo tươơng đối lớn so với phươơng pháp Ngoài ra, ĐKĐBĐ phươơng pháp xác định vị trí vạch đươợc cải thiện đáng kể Ngồi hai ĐKĐBĐ trên, tất ĐKĐBĐ cịn lại hai phươơng pháp xấp xỉ nhau, ta thấy tính xác phép hiệu chuẩn thươớc vạch MIA đươợc cải thiện Ngồi q trình đo, việc sử dụng camera phần mềm xử lý ảnh giúp giảm bớt thời gian tiến hành thao tác đo Tại điểm cần đo, thay phải dùng mắt để đươa tâm ống ngắm tới sát mép vạch, với camera ta cần đươa đươờng tâm camera tới gần vạch thươớc Khả tính tốn tự động đươa kết file excel phần mềm giảm đáng kể thời gian xử lý số liệu 54 KẾT LUẬN Nghiên cứu cải thiện nâng cấp phươơng pháp đọc hiệu chuẩn thươớc vạch MIA nhiệm vụ thươờng xuyên, cấp thiết quan đo lươờng nói chung, Viện Đo lươờng Việt Nam nói riêng Qua q trình nghiên cứu, tính tốn xây dựng, luận văn đạt đươợc kết nhươ sau:  Sau nghiên cứu, phân tích đánh giá nghiên cứu phươơng pháp hiệu chuẩn thươớc vạch MIA đơn vị đo lươờng nươớc ngoài, luận văn đươa yêu cầu vấn đề cần giải cụ thể Nội dung nghiên cứu luận văn bám sát với mục tiêu tên đề tài luận văn đề  Tính tốn lựa chọn camera có thơng số kỹ thuật đáp ứng u cầu hệ thống hiệu chuẩn  Tính tốn, thiết kế chế tạo cụm đồ gá camera đáp ứng yêu cầu hệ thống hiệu chuẩn  Thiết kế, xây dựng phần mềm xử lý ảnh tính toán kết đo, giúp cải thiện thời gian thao tác trình đo/hiệu chuẩn xử lý số liệu  Tiến hành thực nghiệm so sánh kết hai hệ thống hiệu chuẩn cũ Tính tốn ĐKĐBĐ hai phép đo so sánh kết Ngoài thươớc vạch MIA, hệ thống hiệu chuẩn đươợc nâng cấp đáp ứng nhu cầu đo/hiệu chuẩn loại thươớc vạch khác Với loại thươớc vạch có độ xác cao (VD Thươớc vạch chuẩn…), sử dụng camera có độ phân giải cao hơn, kết hợp camera với ống kính có độ phóng đại lớn để cải thiện độ xác phép đo Bên cạnh đó, tốc độ xử lý phần mềm cần đươợc cải thiện để giảm thiểu độ trễ thu tín hiệu phần mềm giao thoa kế laser Cuối cùng, hệ thống hiệu chuẩn cần đươợc thực nghiệm đánh giá thêm tươơng lai để đảm bảo độ ổn định độ tin cậy phươơng pháp đo 55 TÀI LIỆU THAM KHẢO [1] Thông tươ 07/2019/TT-BKHCN, Hà Nội: Bộ Khoa học Công nghệ, 2019 [2] Laser interferometer error-proofs linear scale calibration, 2019 [3] Uncertainty budget Line Standard Invar Standard Tape, China National Metrology Insitute, 2018 [4] C.-T W M.-W C a W.-C C Chun-Sung Chen*, "ESTABLISHING AN INVAR LEVELING CALIBRATION SYSTEM," Journal of the Chinese Institute of Engineers, vol 35, pp 861-866 [5] H a B F Woschitz, "System Calibration of Digital Levels – Experimental Results of Systematic Effects," INGEO2002, 2nd Conference of Engineering Surveying, pp 165-172, 2002 [6] J G P Ć K R J a B G Kuchmister, "A functional-precision analysis of the Vertical Comparator," Elsevier, vol 163, no 107951, 2020 [7] H Haitjema, "Calibration of displacement laser interferometer system for industrial metrology," vol 19, 2019 [8] Keysight, "Keysight Technology 5530 Dynamic Calibrator (Data sheet)-5989 9712EN," Keysight Technology Public in U.S.A, p 15, 2014 [9] Lasertex, "https://lasertex.eu/support/interferometer-usage-documentation/ types-of errors/" [10] Agilent 5529A Dynamic Calibrator, Agilent Technologies, 2001 [11] MISUMI,"https://vn.misumiec.com/vona2/detail/110300196730/? HissuCode=XYPGN60&PNSearch= XYPGN60&KWSearch=xypgn60&searchFlow=results2type&list=PageSe archResult" [12] MISUMI,"https://vn.misumiec.com/vona2/detail/110302199610/? HissuCode=ZLPG60L&PNSearch=Z LPG60L&KWSearch=zlpg60l&searchFlow=results2type&list=PageSearch Result" [13] N.T.K.Cúc, Nghiên cứu sử dụng phươơng pháp ánh sáng cấu trúc để nâng cao chất lươợng đo chi tiết khí, Hà Nội: Luận án tiến sĩ, 2018 [14] Thorlab, "https://www.thorlabs.com/newgrouppage9.cfm? objectgroup_id=13677&p n=CS165CU1/M#ad-image-0" [15] ĐLVN 283:2015, in Thươớc vạch chuẩn, Quy trình hiệu chuẩn, Hà Nội, Văn kỹ thuật đo lươờng Việt Nam, 2015, p 15 56 [16] I 9.-6.-1.-9 GUM- Guide to the express of uncertainty in measurement Switzerland : s.n., GUM- Guide to the express of uncertainty in measurement, Switzerland, 1993 [17] Standard Levelling Staffs – Calibration Procedure, Viện Đo lươờng Việt Nam, 2021 [18] Chaper Laser Heads, Agilent Technologies, 2002 [19] H F F d Castro, "UNCERTAINTY ANALYSIS OF A LASER CALIBRATION SYSTEM," 2007 [20] JCGM 100:2008, Evaluation of measurement data - Guide to the expression of uncertainty in measurement, 1st ed., BIPM, September 2008 [21] E J a D O Jerzy Józwik, "Estimation of uncertainty of laser interferometer measurement," TM Web of Conferences, vol 15, no 04005, 2017 [22] L C Lipus and G & A B Budzyn, "Analysis of laser interferometer measurement uncertainty by simulating error sources," 2021 [23] R Klobucar and B Acko, "Automatic high resolution measurement set‐up for calibrating," Advances in Production Engineering & Management, vol 12, no 1, 2017 57 PHỤ LỤC Phần mềm xử lý ảnh sử dụng ngôn ngữ lập trình Python, hệ điều hành Windows 10 64-bit import cv2 from tkinter import * import pyautogui from PIL import ImageTk, Image import time import keyboard import imutils import openpyxl from PIL import ImageGrab import numpy as np import glob from pyautogui import size, position from mss import mss x_start, y_start, x_end, y_end = 0, 0, 0, cropping = False ket_thuc = False def chon_phan_screen(chon_vung): global x_start, y_start, x_end, y_end, cropping, ket_thuc width_mh, height_mh = size() image = ImageGrab.grab(bbox=(1, 1, width_mh-1, height_mh-1)) image = np.array(image) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) tao = np.zeros(image.shape) tao = tao.astype(np.uint8) image_nen = cv2.addWeighted(image, 0.8, tao, 0.2, 0.0) def mouse_crop(event, x, y, flags, param): global x_start, y_start, x_end, y_end, cropping, ket_thuc # Nhấn chuột if event == cv2.EVENT_LBUTTONDOWN: x_start, y_start, x_end, y_end = x, y, x, y cropping = True # Chuột di chuyển elif event == cv2.EVENT_MOUSEMOVE: if cropping: x_end, y_end = x, y # nút chuột trái đươợc thả elif event == cv2.EVENT_LBUTTONUP: x_end, y_end = x, y cropping = False # cắt xong ket_thuc = True winname = "image" cv2.namedWindow(winname, cv2.WND_PROP_FULLSCREEN) cv2.setWindowProperty(winname, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) cv2.setWindowProperty(winname, cv2.WND_PROP_TOPMOST, 1) 58 cv2.setMouseCallback(winname, mouse_crop) while True: i = image_nen.copy() vi_tri = position() cv2.putText(i, str(vi_tri), (10, 100), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.8, (16, 188, 241), 1) cv2.putText(i, str(chon_vung), (900, 100), cv2.FONT_HERSHEY_COMPLEX_SMALL, 3, (0, 0, 255), 2) if cropping: i[y_start:y_end, x_start:x_end] = image[y_start:y_end, x_start:x_end] cv2.rectangle(i, (x_start, y_start), (x_end, y_end), (255, 0, 0), 1) cv2.imshow(winname, i) cv2.waitKey(1) if ket_thuc: ket_thuc = False break cv2.destroyAllWindows() return x_start+1, y_start+1, x_end+1, y_end+1 def ok(): result1 = [] for i_img1 in sorted(glob.glob('Number' + "/*.jpg")): image1 = cv2.imread(i_img1, 0) i_result1 = cv2.matchTemplate(image1, image1, cv2.TM_CCOEFF) x1 = i_result1.max() result1.append(x1) return result1 def ham_chinh(vung_doc): anh_template = [] tH_tW_template = [] for i_img in sorted(glob.glob('Number' + "/*.jpg")): image = cv2.imread(i_img, 0) (tH, tW) = image.shape[:2] anh_template.append(image) tH_tW_template.append((tH, tW)) x = ok() # img = ImageGrab.grab(bbox=vung_doc) # (x, y, width, hight) # img_np = np.array(img) # image = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB) # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 59 img = np.array(mss().grab(vung_doc)) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) kq = [] for i in range(len(x)): result = cv2.matchTemplate(gray, anh_template[i], cv2.TM_CCOEFF) result = result / x[i] m0, n0 = np.where(result > 0.99) sm0 = m0.size for mi in range(sm0): m = m0[mi] n = n0[mi] if i == 10: kq.append((".", n)) elif i == 11: kq.append(("-", n)) else: kq.append((i, n)) # sếp for i in range(len(kq)): for j in range(i): if kq[i][1] < kq[j][1]: tmp = kq[i] kq[i] = kq[j] kq[j] = tmp # kết cuối kqc = "" for i in range(len(kq)): kqc = f'{kqc}{kq[i][0]}' return kqc book = openpyxl.load_workbook('2.xlsx') sheet = book.active stt_cot = 'A' stt_cot_1 = 'K' vung_doc =chon_phan_screen("chon vung so") tk = Tk() tk.title('APP') # tiêu đề cửa sổ # tk.resizable(50, 50) # kích thươớc thay đổi dài rộng tk.geometry("640x720+670+0") # vị trí cửa sổ ban đầu ("1920x1080+0+0") canvas = Canvas(tk, width=1280, height=720) canvas.create_rectangle(0, 0, 3000, 3480, outline="#fb0", fill="#fb0") canvas.place(x=0, y=0) label = Label(text='120', font=('Times', '15'), fg='#3C3F41', bg='#FFFFFF') label.place(x=565, y=150) Ket_qua_do = Label(text='00000000', font=('Times', '30'), fg='red', ) Ket_qua_do.place(x=40, y=10) 60 def Up(): global th, canvas th = th + label.config(text=th) def Down(): global th, canvas th = th - label.config(text=th) def Stop(): global lap lap = False def ghi_kq(): global ghi_kq_do, stt_dong stt_dong = stt_dong + ghi_kq_do = True def doi_cam(): global cam, cap, ao, chay_1_lan chay_1_lan = True ao = ao + cam = cam + if cam > 2: cam = if cam == 0: cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) if ao > 1: btn_doi_cam.configure(text='Cam 1') elif cam == 1: cap = cv2.VideoCapture(1) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) if ao > 1: btn_doi_cam.configure(text='Quay hình') else: cap = if ao > 1: btn_doi_cam.configure(text='Cam 0') stt_dong = ao = cap = 61 cam = doi_cam() th = 120 x1 = x2 = lap = True ghi_kq_do = False def che_do_do(): global ao2 ao2 = ao2 + if ao2 > 2: ao2 = if ao2 == 0: btn_do.configure(text='Đo song song') elif ao2 == 2: btn_do.configure(text='Đo chính') else: btn_do.configure(text='Đo bên phải') ao2 = def Tu_dong_do(): global ao3, vi_tri_do ao3 = ao3 + if ao3 > 1: ao3 = if ao3 == 0: td_do.configure(text='Đo chẵn') vi_tri_do = h // else: td_do.configure(text='Đo lẻ') vi_tri_do = * h // ao3 = btn_up = Button(tk, text="Up", width=10, command=Up, fg='red', bg='black') btn_up.place(x=540, y=110) btn_down = Button(tk, text="Down", width=10, command=Down, fg='red', bg='black') btn_down.place(x=540, y=190) btn_stop = Button(tk, text='Stop', width=10, command=Stop, fg='red', bg='black') btn_stop.place(x=540, y=350) btn_ghi_kq = Button(tk, text='Đo', width=10, command=ghi_kq, fg='red', bg='black') btn_ghi_kq.place(x=200, y=485) btn_doi_cam = Button(tk, text='Đổi Cam', width=10, command=doi_cam, fg='red', bg='black') 62 btn_doi_cam.place(x=540, y=230) btn_do = Button(tk, text='Đo song song', width=10, command=che_do_do, fg='red', bg='black') btn_do.place(x=540, y=270) td_do = Button(tk, text='Đo chẵn', width=10, command=Tu_dong_do, fg='red', bg='black') td_do.place(x=540, y=310) chay_1_lan = True dem = while lap: try: if cam == or cam == 0: ret, image = cap.read() else: image = np.array(mss().grab(vung_doc)) (h, w, d) = image.shape while chay_1_lan: vi_tri_do = h // print(vi_tri_do) chay_1_lan = False gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray1 = cv2.GaussianBlur(gray, (11, 11), 0) thresh = cv2.threshold(gray1, th, 255, cv2.THRESH_BINARY_INV)[1] cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) cnts = imutils.grab_contours(cnts) noi_cnts = cnts[0] for i in range(len(cnts)): if i != 0: noi_cnts = np.concatenate((noi_cnts, cnts[i]), axis=0) for c in cnts: cv2.drawContours(image, [c], -1, (255, 0, 0), 1) # màu, kích cỡ trucy = cv2.line(image, (w // 2, 0), (w // 2, h), (0, 0, 255), 2) trucx = cv2.line(image, (0, h // 2), (w, h // 2), (0, 0, 255), 2) '''code theo kết laser ''' # if kq_laser: # td_do.configure(text='Đo chẵn') # vi_tri_do = h // # else: # td_do.configure(text='Đo lẻ') # vi_tri_do = * h // # Chươơng trình đo kq_laser = ham_chinh(vung_doc) if ao2 == 0: index = np.where(noi_cnts == vi_tri_do) # print(index) x_moc = tuple(noi_cnts[index[0][i], 0, 0] for i, j in enumerate(index[2]) if j) 63 try: index_min_x_moc = np.argmin(tuple(abs(i - w // 2) for i in x_moc)) x2 = x_moc[index_min_x_moc] idx_moc = np.where(np.prod(noi_cnts[:, 0] == [x2, vi_tri_do], axis=1)) list_x = [] dau_cuoi = [] khoang_do = 800 for i in range(khoang_do): if i == or i == khoang_do-1: dau_cuoi.append(noi_cnts[:, 0][int(idx_moc[0][0] - khoang_do // + i)]) list_x.append(noi_cnts[:, 0][int(idx_moc[0][0] - khoang_do // + i)][0]) x_tb = np.mean(list_x) cv2.circle(image, dau_cuoi[0], 3, (0, 255, 0), -1) cv2.circle(image, dau_cuoi[-1], 3, (0, 255, 0), -1) cv2.line(image, (int(x_tb), dau_cuoi[0][1]), (int(x_tb), dau_cuoi[1][1]), (0, 255, 0), 1) x2 = int(x_tb) cv2.line(image, (x2, vi_tri_do), (w // 2, vi_tri_do), (0, 0, 255), 1) kq_cam = abs(x2 - w // 2) cv2.putText(image, str(kq_cam), ((w // + x2) // - 20, vi_tri_do 20), cv2.FONT_HERSHEY_SIMPLEX, 1, (240, 0, 159), 2) # viết lên hình except: pass # Đo độ song song elif ao2 == 1: index = np.where(noi_cnts == w//2) y_moc = (noi_cnts[index[0][i], 0, 1] for i, j in enumerate(index[2]) if not j and noi_cnts[index[0][i], 0, 1] < h // 2) try: y1 = max(y_moc) except: y1 = cv2.line(image, (w // 2, h // 2), (w // 2, y1), (0, 255, 0), 2) text = '{}'.format(abs(h // - y1)) cv2.putText(image, text, ((w // + 7), (y1 + (h // - y1) // 2)), cv2.FONT_HERSHEY_SIMPLEX, 1, (240, 0, 159), 2) # Đo bên trái elif ao2 == 2: index = np.where(noi_cnts == vi_tri_do) x_moc = (noi_cnts[index[0][i], 0, 0] for i, j in enumerate(index[2]) if j and noi_cnts[index[0][i], 0, 0] < w // 2) try: x1 = max(x_moc) 64 idx_moc = np.where(np.prod(noi_cnts[:, 0] == [x1, vi_tri_do], axis=1)) list_x = [] dau_cuoi = [] khoang_do = 800 for i in range(khoang_do): if i == or i == khoang_do-1: dau_cuoi.append(noi_cnts[:, 0][int(idx_moc[0][0] - khoang_do // + i)]) list_x.append(noi_cnts[:, 0][int(idx_moc[0][0] - khoang_do // + i)][0]) x_tb = np.mean(list_x) cv2.circle(image, dau_cuoi[0], 3, (0, 255, 0), -1) cv2.circle(image, dau_cuoi[-1], 3, (0, 255, 0), -1) cv2.line(image, (int(x_tb), dau_cuoi[0][1]), (int(x_tb), dau_cuoi[1][1]), (0, 255, 0), 1) x1 = int(x_tb) except: x1 = cv2.line(image, (w // 2, vi_tri_do), (x1, vi_tri_do), (0, 0, 255), 1) kq_cam = x1 - w // """he_so = 0.00361 kq_1 = kq_cam * he_so kq_cam = float(kq_laser) + kq_cam * he_so""" cv2.putText(image, str(kq_cam), ((w // + x1) // - 20, vi_tri_do - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, (240, 0, 159), 2) # viết lên hình if w // - x1 < 5: kc = cv2.putText(image, str(kq_cam), ((w // + x1) // - 20, vi_tri_do - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 1) trucy = cv2.line(image, (w // 2, 0), (w // 2, h), (0, 255, 0), 2) trucx = cv2.line(image, (0, h // 2), (w, h // 2), (0, 255, 0), 2) if ghi_kq_do: dem = dem + if dem < 6: sheet[f'{chr(ord(stt_cot_1) + dem)}{stt_dong}'] = float(kq_cam) sheet[f'{chr(ord(stt_cot) + dem)}{stt_dong}'] = float(kq_laser) else: ghi_kq_do = False dem = book.save('2.xlsx') # Chuyển đổi lại ảnh frame = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) frame = imutils.resize(frame, width=500) h_, w, d = frame.shape img = Image.fromarray(frame) # chuyển mảng ảnh PIL img2 = ImageTk.PhotoImage(image=img) 65 canvas.create_image(0, 275 - h_ // 2, anchor=NW, image=img2) Ket_qua_do.configure(text=str(kq_laser)) tk.update_idletasks() tk.update() time.sleep(0.01) if keyboard.is_pressed('q'): break except: print("co loi ") 66

Ngày đăng: 03/06/2023, 06:58

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

Tài liệu liên quan