Thư viện và ngôn ngữ lập trình

Một phần của tài liệu HỆ THỐNG KIỂM TRA LỖI TRÊN BOARD MẠCH ĐIỆN TỬ (Trang 28)

2.3.1 Giới thiệu về thư viện OpenCV

OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh và máy học (Machine Learning), và các tính năng tăng tốc GPU trong thời gian hoạt động thực.

OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại. Nó có các interface C++, C, Python, Java và hỗ trợ trên các hệ điều hành như Windows, Linux, Mac OS, IOS và Android. OpenCv được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực. Được viết tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế xử lý đa lõi. Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng tải vượt quá 6 triệu lần. Phạm vi sử dụng từ nghệ thuật tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot.

Hình 2. 20 Thư viện Open CV  Các ứng dụng của OpenCV

OpenCV được ứng dụng rộng rãi trong các ứng dụng bao gồm:

 Hình ảnh street view

 Kiểm tra và giám sát tự động

 Robot và xe hơi tự lái

 Phân tích hình ảnh y tế

 Tìm kiếm và phục hồi hình ảnh, video

 Phim - cấu trúc 3D chuyển động

 Chức năng của OpenCV

 Image/video I/O, xử lý, hiển thị (core, imgproc, highgui)

 Phát hiện vật thể (objdetect, features 2d, nonfree)

 Geometry-based monocular or stereo computer vision (calib3d, stitching, videostab)

 Machine learning & clustering (ml, flann)

 CUDA acceleration (GPU)

2.3.2 Ngôn ngữ lập trình

Hình 2. 21 Ngôn ngữ lập trình C#

Để xử lý bài toán nhận dạng biển số xe sử dụng thư viện OpenCV, chúng ta có thể sử dụng các ngôn ngữ lập trình như: .NET C#, VB, IronPython, Java, C++…

Trong đồ án này ngôn ngữ lập trình được sử dụng là .NET C#, viết trên phần mềm Visual Studio.

2.3.3 Thu nhận ảnh

Trong kiểm tra bảng mạch, việc thu nhận ảnh là một bước rất quan trọng. Tùy theo môi trường và hoàn cảnh tại thời điểm thu nhận mà ảnh ta có được là ảnh mờ hay tỏ, chất lượng ảnh có tốt hay không ảnh hưởng lớn đến các quá trình xử lý và nhận dạng sau này. Đề tài sử dụng Webcam Logitech 270 kết hợp với cảm biến phát linh kiện để tiến hành chụp chính xác vị trí của các vùng. Quá trình thu nhận ảnh là bước đầu và tưởng chừng như là bước đơn giản nhất nhưng nó lại là bước rất quan trọng và có ảnh hưởng rất lớn đến kết quả nhận diện linh kiện, một số yếu tố được thể hiện như:

 Độ nét của các linh kiện

 Ánh sáng thu được trên bức ảnh quá sáng hoặc quá tối

 Ảnh chụp biển số bị thiếu, khuyết kí tự

CHƯƠNG 3: CƠ SỞ THỰC HIỆN

Tiền xử lý là quá trình chuẩn hóa dữ liệu vào, gồm các công việc như xử lý nhiễu, chuẩn hóa kích thước dữ liệu… Các bước mà đề tài thực hiện:

3.1. Sơ đồ nguyên lý và lưu đồ thuật toán của hệ thống

Mô hình hệ thống kiểm tra mạch bao gồm ba phần chính:

 Khối cảm biến: Phát hiện đối tượng khi tới vùng kiểm tra

 Khối Relay và động cơ

 Khối điều khiển

Hình 3. 1 Sơ đồ nguyên lý của hệ thống

Phía trên là sơ đồ nguyên lý mô tả cấu trúc của hệ thống, còn dưới đây là lưu đồ thuật toán thể hiện nguyên lý hoạt động của hệ thống:

Ban đầu, cho băng tải chạy, khi cảm biến phát hiện có mạch đi qua thì băng tải dừng, cảm biến gửi tín hiệu báo có mạch tại vị trí camera, máy tính thực hiện phân tích mạch và gửi tín hiệu về mạch điều khiển.

 Nếu kết quả kiểm tra mạch lỗi thì băng tải chạy và dừng ở vùng chờ sau đó lấy mạch ra khỏi vị trí chờ.

3.2. Chuyển đổi sang ảnh xám

Để tăng tính hiệu quả của hệ thống, ảnh màu RGB ban đầu được chuyển về ảnh 256 mức xám. Việc sử dụng ảnh 256 mức xám không làm giảm đi tính đa năng của ứng dụng. Trên thực tế, ảnh 256 mức xám vẫn được sử dụng nhiều, và nhiều thiết bị ghi hình cũng có khả năng tự chuyển ảnh màu thành ảnh 256 mức xám. Về lý thuyết, để chuyển ảnh màu về mức xám ta chỉ cần nhân các giá trị màu của mỗi điểm ảnh với một hệ số cho trước. Ta có công thức:

O(x,y)= IR(x,y) * 0.287 + IG(x,y) * 0.599 + IB(x,y) * 0.114 (0.1)

Với:

 x,y : tọa độ của điểm ảnh

 IR : thành phần màu đỏ tại màu I(x,y)

 IG : thành phần màu xanh lá tại màu I(x,y)

 IB : thành phần màu xanh dương tại màu I(x,y)

 O (x,y): màu đầu ra

 I (x,y): màu đầu vào

Hình 3. 4 Ảnh chuyển về mức xám

3.3. Xử lý nhiễu

Đề tài dùng bộ lọc trung vị để tiến hành xử lý nhiễu ở những bước đầu tiên. Trước khi tiến hành ta phải lọc nhiễu xuất hiện trong vùng biển số để nâng cao độ chính xác của các quá trình xử lý tiếp theo. Phần lớn ảnh giảm chất lượng là do bị tác động bởi nhiễu. Nhiễu trong ảnh phát sinh do quá trình thu nhập ảnh, số hóa ảnh, hoặc trong quá trình truyền ảnh. Ảnh nhiễu được mô hình bởi:

Với f(x,y) là điểm ảnh gốc, n(x,y) là thành phần nhiễu và g(x,y) là pixel bị nhiễu. Xác định được mô hình nhiễu thì có thể khôi phục được ảnh gốc.

Lọc trung vị là một kĩ thuật lọc phi tuyến (non-linear) khá hiệu quả đối với hai loại nhiễu: nhiễu đốm (speckle noise) và nhiễu muối tiêu (salt-pepper noise). Kĩ thuật này là một bước rất phổ biến trong xử lý ảnh. Bộ lọc trung vị có hiệu quả hơn nhân chập khi mục đích là loại bỏ nhiễu và giữ nguyên đường biên bao quanh đối tượng.

Ý tưởng chính của thuật toán lọc trung vị như sau: sử dụng một cửa sổ lọc (ma trận 3x3) quét qua lần lượt từng điểm ảnh của ảnh đầu vào. Tại vị trí mỗi điểm ảnh lấy giá trị của các điểm ảnh tương ứng trong vùng 3x3 của ảnh gốc "lấp" vào ma trận

lọc.Sau đó sắp xếp các điểm ảnh trong cửa sổ này theo thứ tự (tăng dần hoặc giảm dần tùy ý). Cuối cùng, gán điểm ảnh nằm chính giữa (trung vị) của dãy giá trị điểm ảnh đã được sắp xếp ở trên cho giá trị điểm ảnh đang xét của ảnh đầu ra.

Hình 3. 5 Lọc trung vị

Sơ lược một cách ngắn gọn các bước của giải thuật:

 Quét cửa sổ lọc lên các thành phần của ảnh gốc; điền các giá trị được quét vào cửa sổ lọc.

 Lấy các thành phần trong của sổ lọc để xử lý.

 Sắp xếp theo thứ tự các thành phần trong cửa sổ lọc.

 Lưu lại thành phần trung vị, gán cho ảnh ra.

3.3 Chuyển ảnh xám về dạng nhị phân

Để chuyển hình ảnh mức xám về ảnh nhị phân ta đặt một ngưỡng (threshold) thích hợp, điểm ảnh xám nào có giá trị bằng hoặc dưới ngưỡng thì đặt lại giá trị bằng 0 và ngược lại, ta đặt lại giá trị bằng 225. Ở đây, ngưỡng được tính tự động từ ảnh xám ở trên theo phương pháp của Otsu.

O(x,y) = 0 nếu I(x,y) < T và 1 nếu I(x,y) ≥ T Với T là ngưỡng.

Nếu sử dụng một giá trị T duy nhất cho toàn bộ bức ảnh, có nghĩa là công thức trên áp dụng cho toàn ảnh trong quá trình phân hoạch thì ta gọi đó là cách dùng ngưỡng toàn cục (Global Thresholding), ngược lại sử dụng ngưỡng khác nhau tùy theo từng vùng

(Region) trong ảnh, T biến thiên theo từng vị trí khác nhau và được tính toán lại tại từng vùng ảnh, có nghĩa là công thức trên áp dụng cho từng vùng cục bộ của ảnh với T thay đổi thì đó gọi là phương pháp dùng ngưỡng cục bộ (Local Thresholding).

Như vậy với giải pháp phân hoạch ngưỡng trên ảnh, T là một nhân tố vô cùng quan trọng mang tính quyết định sự thành bại của thuật toán. Otsu một thuật toán đơn giản để tính T phục vụ cho phân hoạch ảnh toàn cục.

Otsu là tên một nhà nghiên cứu người Nhật đã nghĩ ra ý tưởng cho việc tính ngưỡng T một cách tự động (adaptive) dựa vào giá trị điểm ảnh của ảnh đầu vào nhằm thay thế cho việc sử dụng ngưỡng cố định (fixed hay const). Phương pháp này cho kết quả là mỗi ảnh khác nhau có một ngưỡng tương ứng khác nhau bằng các bước xử lý như sau:

- Chọn một giá trị khởi tạo cho T. Nên chọn giá trị mang tính công thức, ví dụ T = (min + max) / 2, T = giá trị trung bình của toàn bộ ảnh, tránh dùng các giá trị mang tính định lượng thiết lập cứng.

- Phân hoạch ảnh sử dụng T. kết quả của bước này sẽ tạo ra 2 nhóm điểm ảnh: G1 chứa tất cả các điểm ảnh với giá trị (intensity) > T và G2 chứa các điểm ảnh với giá trị (intensity) ≤ T.

- Tính trung bình (Average hay Mean) m1 và m2 của các điểm ảnh thuộc G1 và G2. - Tính lại T dựa vào m1 và m2: T = (m1 + m2) / 2.

- Lặp lại bước 2 đến 4 cho tới khi nào giá trị chênh lệch giữa T cũ và T mới là không đáng kể (nhỏ hơn một giá trị cho trước ΔT). ΔT thường được sử dụng là sai số từ các phép tính toán trong quá trình xử lý. Trong trường hợp này T được tính ở 4 sẽ có phép sai số là 1 / 2 * (giá trị đơn vị của điểm ảnh)

3.4. Chương trình cắt vùng ROI

Trong thực tế, để có thể đạt được kết quả xử lý ảnh tốt nhất, chúng ta cần thực hiện loại bỏ một số nhiễu và vùng ko quan tâm ra khỏi ảnh. Loại bỏ càng nhiều vùng không quan tâm, kết quả xử lý ảnh càng tốt. Ở đây ta dùng thuật toán SUFT để tìm kiếm vùng quan tâm(ROI) sau đó cắt vùng ROI ra để xử lý.

3.4.1 Thuật toán SUFT

SURF descriptors, được giới thiệu bởi Bay et al. trong bài báo ECCV năm 2006, SURF: Speeded Up Robust Feature, thuật toán này rất giống với SIFT descriptor - nhưng mang hai ưu điểm chính.

- Ưu điểm đầu tiên là SURF tính toán nhanh hơn SIFT, khiến nó phù hợp hơn cho các ứng dụng real-time.

- Ưu điểm thứ hai của SURF là nó chỉ bằng một nửa kích thước của SIFT. Hãy nhớ lại bài viết trước rằng SIFT trả về một feature vector là 128-dim - trong khi đó SURF trả về một feature vector là 64-dim.

3.4.3 FLANN(Fast Library for Approximate Nearest Neighbors)

FLANN là một thư viện chứa một bộ sưu tập các thuật toán được tối ưu hóa để tìm kiếm láng giềng gần nhất nhanh chóng trong bộ dữ liệu lớn và cho các các đặc trưng có chiều sâu. Trong bài này chúng ta sẽ sử dụng FLANN của opencv để tìm kiếm vùng ROI dựa vào các đặc trưng SUFT.

3.4.4 Giải thuật tìm kiếm vùng ROI dùng Feature Matching

Xác định vùng ROI trước xử lý ảnh là một khâu vô cùng quan trọng nhằm tối ưu hóa quá trình xử lý. Việc này giúp hệ thống chỉ tập trung vào những khu vực cần thiết, giảm dung lượng và tăng tốc độ xử lý.

Bước 1: Cài đặt ảnh đầu vào là ảnh mẫu của vùng quan tâm Bước 2: Tính toán suft keypoint của vùng quan tâm

Bước 3: Thu ảnh đầu vào từ camera

Bước 4: Tìm suft keypoint của ảnh đầu vào

Bước 5: Tìm kiếm SUFT keypoint của ảnh mẫu trên ảnh đầu vào

Hình 3. 6 Lưu đồ giải thuật tìm kiếm vùng ROI

3.5 Xử các vùng cần phân tích trên ảnh

Sau khi tìm được ảnh vùng quan tâm (ROI) thì em thực hiện cắt 5 vùng quan tâm ra để xử lý riêng biệt. Vì ảnh này là cố định nên các vùng ROI cũng cố định.

Trong đề tài này, em dùng một thuật toán chung cho ba vùng 1-2-3 là phân ngưỡng vì các linh kiện cần kiểm tra của 3 vùng này đều chứa màu trắng nên việc phân ngưỡng tách nền khá là dễ dàng, từ đó thực hiện tìm kiếm các vùng linh kiện bằng

cách tìm kiếm các đường contour và sau đó loại bỏ các linh kiện không quan tâm bằng cách kiểm tra chiều dài và chiều rộng của vùng linh kiện.

3.5.1 Contour

Contour đơn giản chỉ là đường cong khép kín và được biểu diễn bằng danh sách các điểm. Tập hợp các điểm này có màu sắc hay cường độ sáng như nhau. Contours có khá nhiều ứng dụng thực tế trong xử lý ảnh, đặc biệt là khoanh vùng và nhận diện vật thể.

Để tìm được các contour trong ảnh thì chúng ta có thể dùng hàm findcontour của thư viện opencv. Tuy nhiên, để có thể sử dụng hàm này thì chúng ta cần thực hiện 1 loạt tiền xử lý ảnh trước khi dùng lệnh tìm contour này. Các tiền xử lý đó là xám hóa ảnh, nhị phân ảnh, tìm biên, đóng ảnh….

3.5.2 Phân đoạn ảnh dùng HSV

Hình ảnh có màu có thể được biểu diễn bằng các kênh màu RGB. Và vì ảnh đang sử dụng ba kênh màu riêng biệt, chúng ta có thể trích xuất và biểu diễn hình ảnh trên mỗi kênh. Biểu diễn hình ảnh bằng các kênh màu khác nhau rất hữu ích, đặc biệt là trong các tác vụ phân đoạn.

Không gian màu HSV rất hữu ích khi sử dụng phân biệt các màu tương tự nhau. HSV là viết tắt của Hue, Saturation và Value, trong đó :

 Hue: bước sóng ưu thế hoặc màu của chính nó (ví dụ: đỏ)

 Độ bão hòa: độ sáng và cường độ của màu

 Giá trị: độ đậm nhạt của một màu

Hình dưới cho thấy hình ảnh của bảng mạch trong không gian HSV:

Vì vậy, ngay cả khi các linh kiện đều có bản chất là màu xám, chúng có thể có các mức độ bão hòa và giá trị khác nhau, chúng ta có thể sử dụng để tách chúng ra khỏi nhau.

Hình 3. 13 Bảng mạch phân ngưỡng

3.5.3 Vùng số 1,2,3- Kiểm tra tụ điện, nút nhấn

Nhiệm vụ của các vùng này là:

 Vùng 1: Kiểm tra có đủ hai tụ điện không

 Vùng 2: Kiểm tra có đủ 5 tụ điện không

 Vùng 3: Kiểm tra có đủ 6 nút nhấn không Bước 1: Lấy ảnh đầu vào

Bước 2: Ảnh đầu vào sẽ được chuyển sang ảnh xám định dạng gray 8 bit Bước 3: Ảnh xám lúc này được áp dụng bộ lọc blur làm mờ ảnh

Bước 4: Sau đó ảnh được phân ngưỡng dưới dạng nhị phân Bước 5: Tìm các contour trong ảnh

Bước 6: Vẽ hình chữ nhật quanh các contour

Bước 7: Loại bỏ các đường contour có hình chữ nhật bao quanh mà chiều dài và chiều rộng lớn hơn và nhỏ hơn 20 pixel (dựa trên kích thước thực tế xác định được các tụ điện và nút nhấn)

Bước 8: Từ đây xác định được các contour còn lại là các linh kiện quan tâm Bước 9: Thực hiện đếm các linh kiện

Hình 3. 7 Lưu đồ thuật toán kiểm tra vùng 1,2,3

3.5.4 Vùng 4,5 Kiểm tra led và điện trở

Nhiệm vụ của các vùng này là:

 Vùng 4: Kiểm tra có thiếu điện trở không, các điện trở có lắp đặt ngay ngắn hay không

 Vùng 5: Kiểm tra có đủ số led không Bước 1: Lấy ảnh đầu vào

Bước 2: Chuyển ảnh đầu vào sang ảnh HSV

Bước 4: Tìm các contour có trong ảnh

Bước 5: Vẽ các hình chữ nhật bao quanh các contour

Bước 6: Loại bỏ các đường contour có hình chữ nhật bao quanh mà chiều dài và chiều rộng lớn hơn 40 pixel và nhỏ hơn 15 pixel (dựa trên kích thước thực tế xác định được của led và điện trở)

Bước 7: Từ đây xác định được các contour còn lại là các linh kiện quan tâm Bước 8: Thực hiện đếm linh kiện

CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM

4.1 Kết quả phần cứng của hệ thống

Sau khi tính toán, lựa chọn và dựa trên tình hình kinh tế của mình, em đã xây dựng được mô hình kiểm tra bảng mạch như hình dưới đây.

Hình 4. 1 Mô hình phần cứng của hệ thống

Cấu tạo phần cứng của hệ thống gồm các thành phần sau đây:

Một phần của tài liệu HỆ THỐNG KIỂM TRA LỖI TRÊN BOARD MẠCH ĐIỆN TỬ (Trang 28)