BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ KHOA CƠ HỌC KỸ THUẬT TỰ ĐỘNG HÓA BÁO CÁO BÀI TẬP LỚN Chuyên ngành Công nghệ kỹ thuật Cơ điện tử ỨNG DỤNG XỬ LÝ ẢNH VÀO HỆ THỐNG KIỂM TRA LỖI SẢN PHẨM T.BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ KHOA CƠ HỌC KỸ THUẬT TỰ ĐỘNG HÓA BÁO CÁO BÀI TẬP LỚN Chuyên ngành Công nghệ kỹ thuật Cơ điện tử ỨNG DỤNG XỬ LÝ ẢNH VÀO HỆ THỐNG KIỂM TRA LỖI SẢN PHẨM T.BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ KHOA CƠ HỌC KỸ THUẬT TỰ ĐỘNG HÓA BÁO CÁO BÀI TẬP LỚN Chuyên ngành Công nghệ kỹ thuật Cơ điện tử ỨNG DỤNG XỬ LÝ ẢNH VÀO HỆ THỐNG KIỂM TRA LỖI SẢN PHẨM T.v
Thiết kế chương trình
Xây dựng phần cứng
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0,F1,F2,F3,F4… Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3
STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự Mạch nạp cũng như công cụ lập trình khá đa dạng và dễ sử dụng
Sơ lược về Board trên:
• 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug
• 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình
• Có chân Output riêng cho các chân mạch nạp trên MCU1
• Có chân Output đầy đủ cho các chân MCU2
• Chân cấp nguồn ngoài riêng cho MCU2 nếu không sử dụng nguồn từ USB
• Thạch anh 32,768khz dùng cho RTC và Backup
• Chân nạp dùng cho chế độ nạp boot loader
• Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2
Cấu hình chi tiết của STM32:
• ARM 32-bit Cortex M3 với clock max là 72Mhz
• Bộ nhớ: o 64 kbytes bộ nhớ Flash(bộ nhớ lập trình) o 20kbytes SRAM
• Clock, reset và quản lý nguồn o Điện áp hoạt động 2.0V -> 3.6V o Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD) o Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz o Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz o Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC
• Trong trường hợp điện áp thấp: o Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ o Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data khi mất nguồn cấp chính
• 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ o Khoảng giá trị chuyển đổi từ 0 – 3.6V o Lấy mẫu nhiều kênh hoặc 1 kênh o Có cảm biến nhiệt độ nội
• DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của CPU o 7 kênh DMA o Hỗ trợ DMA cho ADC, I2C, SPI, UART
• 7 timer o 3 timer 16 bit hỗ trợ các mode IC/OC/PWM o 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time o 2 watdog timer dùng để bảo vệ và kiểm tra lỗi o 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay…
• Hỗ trợ 9 kênh giao tiếp bao gồm: o 2 bộ I2C(SMBus/PMBus)
7 o 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem control) o 2 SPIs (18 Mbit/s) o 1 bộ CAN interface (2.0B Active) o USB 2.0 full-speed interface
• Kiểm tra lỗi CRC và 96-bit ID
• Tỷ lệ khung hình: 20 FPS
• Tích hợp mic sẳn trong Webcam
1.3 Động cơ servo SG90 làm cần gạt
- Động cơ servo SG90 có thể xoay 180o
- Chủng loại : Động cơ servo SG90
- Điện áp hoạt động : 5V ỨNG DỤNG
- Công dụng chính của động cơ servo là đạt được góc quay chính xác trong khoảng từ 90o – 180o Việc điều khiển này có thể ứng dụng để lái robot, di chuyển các tay máy lên xuống, quay một cảm biến để quét khắp phòng…
1.5 Bộ xử lý trung tâm (máy tính cá nhân)
Xây dựng phần mềm
Đầu tiên ta phải Import các thư viện cần thiết:
Thư viện cv2 là Open CV dùng để xử lý ảnh
Thư viện numpy rất hữu ích để làm việc với ma trận
Utlis1 bao gồm các hàm con cần thiết để áp dụng vào hàm chính
Và một số thư viện khác…
2.1 Xử lý hình ảnh với Open Cv
Hình 2 Ảnh đầu vào ban đầu Đưa ảnh về dạng dễ xử lý
Bước đầu tiên trước khi thực hiện bất kì một bài Xử lý ảnh nào chúng ta cũng cần phải có một bước gọi là Tiền xử lý dữ liệu và trong trường hợp này cũng không ngoại lệ Chúng ta cần phải Tiền xử lý ảnh đầu vào giúp chuyển chúng về những định dạng mà dễ dàng xử lý hơn cho máy tính Bước đầu tiên trong xử lý ảnh này đó chính là chuyển về Grayscale (ảnh xám) bởi vì ảnh xám là định dạng thích hợp để xử lý ảnh Ngay cả trong trường hợp yêu cầu nhiều màu sắc, một hình ảnh màu RGB có thể bị phân tách và xử lý thành ba hình ảnh grayscale riêng biệt Hình ảnh Indexed cũng được chuyển đổi sang màu xám hoặc RGB cho hầu hết các thao tác Ở đây đầu tiên mình sẽ resize ảnh về kích cỡ 700x700 trước
Bước tiếp theo đó là giảm độ nhiễu của ảnh với Gaussian blur để đơn giản chúng ta có thể hiểu đây chính là bước khiến cho ảnh dễ dàng xử lý hơn với máy tính khi loại bỏ đi những góc cạnh và những vùng ảnh ít có ý nghĩa đối với việc xử lý từ đó khiến cho những vùng chính được nổi bật hơn
Phân tách khung bài kiểm tra với cv2.Canny
Kết quả sau khi áp dụng:
2.2 Tìm các hình chữ nhật chứa đáp án, mã đề và số báo danh
Do các chứa bánh quy có các viền ngoài hình chữ nhật bao quanh nên ta có thể dùng hàm cv2.findContour() của Open CV, nhắc lại một chút về khái niệm
, Contour chính là những nét liền nhau bao quanh những khối, hình và hàm cv2.findContour sẽ tìm và trả về cho ta những nét như thế Sau đó tiến hành vẽ các đường bao xung quanh chiếc bánh quy
Tiếp đến ta tìm các Contours có dạng hình chữ nhật và có diện tích lớn nhất:
Tiếp đến ta sẽ vẽ ra 4 góc của các hình chữ nhật trên và sắp xếp tọa độ 4 góc theo một trình tự cố định để áp dụng Bird eyes view
Ta tiến hành lấy Bird eyes view của chiếc bánh để dễ dàng tiến hành xử lý chúng Bird eyes view là hình chiếu bối cảnh trên cao, ở đây cho ta 1 góc nhìn thẳng đứng so với mặt phẳng chứa bánh quy
Hình 3 ảnh Bird eyes của chiếc bánh
Ta cần phải lấy ngưỡng bằng cách sử dụng threshold đưa ảnh về dạng đen trắng để chỉ tập trung vào những đặc trưng cần thiết, ta chuyển các ảnh Bird eyes view ở trên về ảnh xám và tiến hành phân ngưỡng sử dụng cv2.threshold Nếu pixel có giá trị lớn hơn giá trị ngưỡng thì nó được gán 1 giá trị (thường là 1), ngược lại nhỏ hơn giá trị ngưỡng thì nó được gán 1 giá trị khác (thường là 0) Ở đây giá trị 255 là max, lớn hơn giá trị 170 thì phân ngưỡng được gán là 1 nhỏ hơn gán là 0 Giá trị pixel nằm ở
2.3 Tiến hành kiểm tra màu
Ta sẽ đưa ảnh Bird Eyes views về thang màu HSV, sau đó ta tiến hành phân ngưỡng ảnh mà các phần tử chỉ chứa màu vàng Ở thang màu HSV màu vàng sẽ đi trong khoảng [10,10,10] đến [60,255,255]
Hình 4 Hàm đếm số Pixel ảnh vàng
Những Pixel mà có màu vàng sẽ được gán giá trị phân ngưỡng là 1, những pixel không có màu vàng sẽ được gán giá trị phân ngưỡng là 0 Ta tiến hành đếm số pixel có giá trị phân ngưỡng là 1 bằng hàm cv2.countNonZero()
Hình 5 Ảnh chiếc bánh quy màu vàng khi được phân ngưỡng
Hình 6 Ảnh bánh quy màu xanh Đối với chiếc bánh quy màu xanh ta có ảnh phân ngưỡng:
19 Ảnh bánh quy màu đen:
20 Đối với ảnh bánh quy màu đen ta có phân ngưỡng
Ta nhận xét đối với những chiếc bánh quy đạt chuẩn thì có giá trị Pixel điểm màu vàng khi phân ngưỡng lớn hơn 122000 điểm, còn ảnh màu đen khi phân ngưỡng chỉ có 40000 điểm, ảnh màu xanh chỉ có 60000 điểm, vậy cứ ảnh nào có số Pixel khác
0 khi ta áp mặt nạ màu vàng lên lớn hơn 122000 điểm là đạt chuẩn về màu sắc
2.4 Kiểm tra về vết nứt
Hàm kiểm tra vết nứt
Ta sẽ tiến hành đưa ảnh về dạng Canny, tức là ảnh nhị phân mà ở đó các đường viền ngoài được nổi bật và tô trắng, ta thấy rõ được các vết nứt trên bánh
Hình 8 Bánh quy đạt chất lượng
Ta thấy rằng chiếc bánh quy vỡ có số pixel trắng lớn hơn 2000 cụ thể ở đây là 2400 còn chiếc bánh quy đạt chất lượng có số bánh quy trắng chỉ 1600 ta sẽ cho rằng những chiếc bánh quy có ảnh pixel trắng lớn hơn 2200 là bị vỡ
2.5 Hàm kiểm tra bánh đạt chuẩn hay chưa
Khi không có bánh quy
Khi bánh quy bị sai màu
Khi bánh quy bị mốc
Khi bánh quy bị vỡ
Bánh quy đạt chất lượng
Kết quả đạt được
Bọn em đã tiến hành kiểm tra được các loại bánh lỗi không đạt chất lượng (bị vỡ, nứt, bị mốc và sai màu) thuật toán có độ chính xác khoảng 95%, sau đó đưa tín hiệu cho tay động cơ gạt đi những chiếc bánh bị hỏng, những chiếc bánh đạt chuẩn sẽ được đưa về thùng để đóng gói Biết cách gửi phát tín hiệu giữa máy tính và STm32 cũng như stm32 và tay gạt Tính toán thời gian để phân biệt được bánh quy.
Một số vấn đề khó khăn gặp phải
Bọn em còn hạn chế trong việc chỉ kiểm tra được chiếc bánh hình tròn và không có họa tiết trên bánh, để nâng cấp phần báo cáo tương lai thì chúng em mong muốn có thể kiểm tra được những chiếc bánh nhiều chủng loại và nhiều màu khác nhau
Tốc độ phân biệt sản phẩm rồi xử lý còn chậm trung bình phải từ 5-10 giây cho cả 1 quá trình nhận biết bánh có bị lỗi không, bọn em mong muốn tương lai có thể cải thiện được thời gian
Thời gian môn học có hạn, chúng em cố gắng hết sức để làm phần báo cáo tốt nhất trong khả năng, còn nhiều hạn chế và sai sót rất mong thầy có thể góp ý cho chúng em, chúng em xin chân thành cảm ơn
Phát triển ý tưởng với bài toán
Làm việc vơi file Excel
Ta lưu trữ kết quả tại một cơ sở dữ liệu, ở đây là file Excel
Gửi mail thông báo cho sinh viên kết quả
Ta lấy dữ liệu từ file Excel ở trên, tiến hành gửi cho nguời quản lý báo cáo
Xây dựng giao diện bằng python
Chúng em đã xây dựng một cửa sổ giao diện để tương tác bằng thư viện tkinter.