⭐ Vision Engineer · Chặng 4Bài 1/4Bài học~45 phút

Hệ thống Machine Vision gồm những gì: camera, quang học, chiếu sáng, I/O

Sơ đồ khối một trạm Machine Vision, đi dọc trạm kiểm tra nắp chai từ cảm biến tới van loại, và mô phỏng vì sao chiếu sáng quyết định thành công.

Hệ thống Machine Vision gồm những gì: camera, quang học, chiếu sáng, I/O

Học xong bài này, bạn sẽ

  • Kể tên và vai trò từng khối: camera, quang học, chiếu sáng, xử lý, I/O
  • Phân biệt Computer Vision và Machine Vision
  • Hiểu vì sao chiếu sáng quyết định 80% thành công

Nên học trước: Dự án chặng 3: đếm sản phẩm trên băng tải

Nội dung bài viết
  1. 1. Machine Vision và Computer Vision khác nhau thế nào?
  2. 2. Sơ đồ khối của một trạm Machine Vision
  3. 3. Đi dọc một trạm thật: kiểm tra có nắp chai
  4. 4. Vì sao chiếu sáng quyết định "80% thành công"?
  5. 5. Khối xử lý và khối I/O: những gì cần biết ngay bây giờ
  6. 6. Sai lầm thường gặp của người mới
  7. 7. Bài tập
  8. Tóm tắt

Ở Giai đoạn 1 bạn đã viết được chương trình OpenCV đọc ảnh, phân ngưỡng, tìm contour và trả về OK/NG. Nhưng một chương trình xử lý ảnh mới chỉ là một khối trong trạm kiểm tra thật. Trước nó là đèn, ống kính, camera và tín hiệu kích hoạt; sau nó là PLC, van thổi loại hàng và cơ sở dữ liệu. Phần lớn dự án Machine Vision thất bại không phải vì thuật toán kém, mà vì một khối khác bị chọn sai, thường là chiếu sáng. Bài này mở đầu chặng 4 "Machine Vision": bạn sẽ nhìn toàn bộ hệ thống, đi dọc một trạm kiểm tra nắp chai từ cảm biến đến lúc loại hàng, và tự chứng minh bằng code vì sao người trong nghề hay nói "chiếu sáng quyết định 80% thành công".

Mục tiêu cuối bàiVẽ được sơ đồ khối của một trạm Machine Vision, nói được vai trò và thông số chính của từng khối, phân biệt Computer Vision với Machine Vision, và giải thích bằng con số vì sao chiếu sáng tốt làm thuật toán đơn giản chạy ổn định.

1. Machine Vision và Computer Vision khác nhau thế nào?

Computer Vision (thị giác máy tính) là lĩnh vực khoa học nghiên cứu cách máy tính hiểu ảnh: nhận dạng khuôn mặt, xe tự lái, phân đoạn ảnh y tế, tìm kiếm ảnh. Machine Vision (thị giác máy) là ngành kỹ thuật ứng dụng: dùng camera, chiếu sáng và xử lý ảnh để tự động kiểm tra, đo, nhận dạng và dẫn hướng trong sản xuất. Machine Vision dùng thuật toán của Computer Vision, nhưng sản phẩm cuối cùng là một trạm máy chạy 24/7 nối với dây chuyền, không phải một mô hình hay một bài báo.

Tiêu chíComputer Vision (điển hình)Machine Vision (điển hình)
Môi trường ảnhKhông kiểm soát: trời nắng, mưa, góc chụp bất kỳKiểm soát được: đèn riêng, vị trí vật cố định, khoảng cách cố định
Đầu raNhãn, khung, mô tả ảnhTín hiệu OK/NG, số đo (mm), tọa độ gửi cho PLC/robot
Yêu cầu thời gianThường "càng nhanh càng tốt"Cứng: phải xong trước khi sản phẩm tới van loại, ví dụ dưới 80 ms
Yêu cầu độ tin cậyĐộ chính xác 90–95% đã là tốtLọt lỗi tính bằng ppm (phần triệu); loại nhầm vài phần nghìn đã bị phàn nàn
Phần cứngWebcam, điện thoại, GPU máy chủCamera công nghiệp, ống kính, đèn chuyên dụng, I/O 24 V, PC công nghiệp
Người dùngNgười dùng cuối, nhà nghiên cứuCông nhân vận hành, kỹ sư bảo trì, phòng chất lượng (QA)

Ranh giới không tuyệt đối: deep learning ngày nay xuất hiện ở cả hai bên, và một trạm Machine Vision có thể dùng mạng nơ-ron để phân loại lỗi bề mặt. Điểm khác cốt lõi là tư duy hệ thống: kỹ sư Machine Vision được phép (và phải) thay đổi điều kiện chụp để bài toán dễ đi, thay vì cố viết thuật toán chịu được mọi điều kiện xấu.

2. Sơ đồ khối của một trạm Machine Vision

          ┌──────────────┐
 Sản phẩm │  Chiếu sáng  │  tạo tương phản giữa đặc điểm cần xem và nền
 trên  ──▶│  Quang học   │  ống kính + filter: tạo ảnh sắc nét đúng FOV
 băng tải │  Camera      │  cảm biến biến ánh sáng thành ảnh số
          └──────┬───────┘
   Cảm biến /    │ ảnh (GigE Vision, USB3 Vision, CoaXPress…)
   encoder ──trigger──┐
                 ▼    │
          ┌──────────────┐
          │   Xử lý      │  PC công nghiệp / smart camera / máy nhúng
          │ (phần mềm)   │  thuật toán → OK/NG, số đo, tọa độ
          └──────┬───────┘
                 │ I/O số 24 V, PROFINET, EtherNet/IP, Modbus TCP…
                 ▼
          ┌──────────────┐        ┌───────────────────┐
          │ PLC / Robot  │──────▶ │ Van thổi, cần gạt │  loại sản phẩm NG
          └──────┬───────┘        └───────────────────┘
                 ▼
          HMI, lưu ảnh NG, MES (thống kê, truy xuất)
KhốiVai tròThông số phải chọnHậu quả nếu chọn sai
Kích hoạt (cảm biến quang, encoder, PLC)Báo "sản phẩm đã tới đúng chỗ, chụp ngay"Vị trí lắp, độ trễ, độ lặp lại thời điểmẢnh chụp lúc vật lệch khỏi khung, chụp hụt, chụp 2 lần
Chiếu sángLàm đặc điểm cần kiểm tra nổi bật, triệt tiêu thứ không cầnKiểu đèn (backlight, ring, coaxial, dome, góc thấp), màu, chế độ liên tục hay strobeTương phản thấp, chói, ảnh thay đổi theo giờ trong ngày
Quang học (ống kính, filter)Chiếu vùng cần nhìn (FOV, field of view, trường nhìn) lên cảm biến, rõ nétTiêu cự, khoảng làm việc, độ sâu trường ảnh, méo, telecentric hay khôngẢnh mờ, vật ra ngoài FOV, kích thước đổi khi vật cao thấp khác nhau
CameraBiến ảnh quang học thành dữ liệu sốĐộ phân giải, kích thước pixel, màn trập global/rolling, tốc độ khung, giao tiếp, đơn sắc hay màuKhông đủ pixel để thấy lỗi nhỏ, ảnh méo khi vật chạy nhanh
Xử lý (phần cứng + phần mềm)Chạy thuật toán, ra quyết địnhCPU/GPU, hệ điều hành, thư viện (OpenCV, Halcon…), thời gian xử lý tối đaKhông kịp cycle time, treo máy giữa ca
I/O và truyền thôngNhận trigger, gửi kết quả cho PLC/robot, báo lỗiMức tín hiệu (24 V PNP/NPN), giao thức công nghiệp, cơ chế handshakeKết quả tới trễ hoặc gán nhầm cho sản phẩm khác
Cơ cấu chấp hànhLoại sản phẩm NG khỏi dây chuyềnKhoảng cách tới camera, thời gian đáp ứng van, cách theo dõi sản phẩmThổi nhầm chai OK bên cạnh, chai NG lọt qua
HMI, lưu trữ, MESCho người vận hành xem, chỉnh, truy xuấtQuyền truy cập, lưu ảnh NG bao lâu, dữ liệu gửi lên MESKhông giải thích được vì sao trạm loại hàng, không truy được lô lỗi

Khối "kích hoạt" và chuỗi thời gian sẽ học kỹ ở chặng 5 "Industrial Vision". Camera, ống kính và đèn có cả chặng 6 "Camera / Lens / Lighting". Giao tiếp PLC, robot, MES nằm ở chặng 9. Bài này chỉ cần bạn nắm vai trò và mối liên hệ giữa các khối.

3. Đi dọc một trạm thật: kiểm tra có nắp chai

Bài toán: dây chuyền nước giải khát chạy 300 chai/phút, khoảng cách tâm hai chai liên tiếp (pitch) 100 mm. Trạm phải phát hiện chai thiếu nắp và thổi chai đó ra khỏi băng tải. Đây là bài toán "có/không" kinh điển, đủ đơn giản để thấy rõ mọi khối.

Bố trí

  • Chiếu sáng: đèn nền (backlight) đặt sau băng tải, camera đặt phía trước, cùng độ cao với cổ chai. Chai che đèn nên hiện thành bóng đen trên nền trắng. Có nắp hay không chỉ là câu hỏi "vùng phía trên cổ chai có tối không".
  • Camera: đơn sắc, màn trập global (chụp cả khung cùng lúc, không méo khi vật chạy), độ phân giải vừa phải (khoảng 0,3–1,3 MP là thừa đủ cho bài có/không).
  • Kích hoạt: cảm biến quang (photoelectric sensor) dạng thu phát, chùm tia ngang cổ chai, đặt sao cho khi tia bị cắt thì chai nằm giữa khung hình.
  • Loại hàng: van khí nén thổi ngang, đặt cách camera 600 mm về phía hạ nguồn.

Chuỗi sự kiện cho một chai

BướcViệc xảy raThời gian (ví dụ)
1Cổ chai cắt tia cảm biến, cảm biến xuất xung 24 V0 ms (mốc)
2Camera nhận trigger phần cứng, phơi sáng (đèn nền chớp đồng bộ)~0,1 ms
3Đọc cảm biến ảnh và truyền ảnh qua GigE về PC~10 ms
4Phần mềm: lấy ROI vùng nắp, tính độ tối, so ngưỡng~3 ms
5PC gửi kết quả OK/NG cho PLC (I/O số hoặc mạng công nghiệp)~2–10 ms
6PLC ghi kết quả vào hàng đợi theo dõi chai; khi chai NG tới van, PLC mở vansau ~1,2 s
7PC lưu ảnh NG kèm thời gian, đếm thống kê, hiển thị lên HMIchạy nền, không chặn

Hai con số chi phối thiết kế: chu kỳ (một chai mới tới mỗi bao lâu) và số chai nằm giữa camera và van. Tính nhanh:

chai_phut = 300          # năng suất dây chuyền
pitch_mm = 100           # khoảng cách tâm hai chai
khoang_cach_van_mm = 600 # camera → van thổi

chu_ky_ms = 60_000 / chai_phut
toc_do_mm_s = chai_phut / 60 * pitch_mm
thoi_gian_toi_van_s = khoang_cach_van_mm / toc_do_mm_s
so_chai_giua = khoang_cach_van_mm / pitch_mm

print(f"Chu kỳ mỗi chai     : {chu_ky_ms:.0f} ms")
print(f"Tốc độ băng tải     : {toc_do_mm_s:.0f} mm/s = {toc_do_mm_s * 60 / 1000:.0f} m/phút")
print(f"Thời gian tới van   : {thoi_gian_toi_van_s:.2f} s")
print(f"Số chai nằm giữa camera và van: {so_chai_giua:.0f}")
Chu kỳ mỗi chai     : 200 ms
Tốc độ băng tải     : 500 mm/s = 30 m/phút
Thời gian tới van   : 1.20 s
Số chai nằm giữa camera và van: 6

Hệ quả thực tế:

  • Ảnh, xử lý và gửi kết quả cộng lại khoảng 15–25 ms, còn rất xa chu kỳ 200 ms. Bài này không bị giới hạn bởi tốc độ xử lý.
  • Khi chai NG tới van thì camera đã chụp thêm khoảng 6 chai khác. PC không thể tự bật van "ngay khi thấy lỗi"; PLC phải lưu kết quả vào một hàng đợi (FIFO, hay thanh ghi dịch) và mở van đúng chai. Nếu băng tải đổi tốc độ, cần encoder để theo dõi theo quãng đường thay vì theo thời gian (chặng 5).
  • Mọi chai phải có đúng một kết quả. Nếu trigger bị dội (một chai gây hai xung) hoặc PC treo một nhịp, hàng đợi lệch và trạm bắt đầu thổi nhầm chai. Vì vậy trạm thật luôn có giám sát: đếm số trigger so với số kết quả, và báo lỗi khi PC không trả lời đúng hạn.

4. Vì sao chiếu sáng quyết định "80% thành công"?

"80%" là cách nói kinh nghiệm của ngành, không phải con số đo được. Ý nghĩa của nó: phần mềm không tạo ra thông tin không có trong ảnh. Nếu nắp đỏ và nền xám có cùng độ sáng trên ảnh đơn sắc, không ngưỡng nào tách được chúng. Ngược lại, khi chiếu sáng làm đặc điểm cần xem nổi hẳn lên, thuật toán đơn giản nhất cũng chạy ổn định nhiều tháng.

Ta thử bằng code. Cùng một thuật toán ("độ chênh xám giữa vùng nắp và vùng nền bên cạnh, so với ngưỡng"), chạy trên hai kiểu chiếu sáng:

  • Đèn phía trước: nắp có ba màu (trắng, đỏ, xanh), ánh sáng xưởng thay đổi theo giờ, thỉnh thoảng có vệt chói trên cổ chai.
  • Đèn nền: chai che đèn nên nắp màu gì cũng thành bóng đen.

Kỹ sư cài ngưỡng bằng một chai nắp trắng và một chai không nắp (điều rất hay gặp khi chạy thử), rồi thử trên 1000 chai mỗi loại:

import cv2
import numpy as np

H, W = 160, 160
ROI_NAP = (slice(28, 48), slice(62, 98))      # vùng nắp: (hàng, cột)
ROI_NEN = (slice(28, 48), slice(8, 40))       # vùng nền tham chiếu cùng độ cao


def tao_anh(co_nap, kieu_den, rng, mau_nap=None):
    """Ảnh cổ chai nhìn ngang. kieu_den: 'truoc' (đèn phía trước) hoặc 'nen' (backlight)."""
    dy = int(rng.integers(-3, 4))                         # chai lệch vị trí ±3 px
    if kieu_den == "nen":
        nen, co_chai, nap, nhieu = 225 + rng.normal(0, 3), 25, 25, 4
    else:
        moi_truong = rng.uniform(-35, 35)                 # ánh sáng xưởng thay đổi
        nen = 120 + moi_truong
        co_chai = nen + 12                                # cổ chai: tương phản thấp với nền
        mau = rng.choice([205, 140, 100]) if mau_nap is None else mau_nap  # trắng / đỏ / xanh
        nap = mau + 0.5 * moi_truong
        nhieu = 10
    anh = np.full((H, W), nen, np.float32)
    cv2.rectangle(anh, (66, 50 + dy), (94, H), float(co_chai), -1)            # cổ chai
    if co_nap:
        cv2.rectangle(anh, (60, 26 + dy), (100, 52 + dy), float(nap), -1)     # nắp
    if kieu_den == "truoc" and rng.random() < 0.5:                            # vệt chói
        cv2.ellipse(anh, (80, 70 + dy), (6, 18), 0, 0, 360, 250.0, -1)
    anh += rng.normal(0, nhieu, anh.shape)
    return np.clip(anh, 0, 255).astype(np.uint8)


def diem(anh):
    """Cùng một thuật toán cho mọi kiểu đèn: độ chênh xám giữa vùng nắp và vùng nền."""
    return abs(float(anh[ROI_NAP].mean()) - float(anh[ROI_NEN].mean()))


rng = np.random.default_rng(1)
for kieu in ("truoc", "nen"):
    # Kỹ sư cài ngưỡng từ 1 chai có nắp TRẮNG và 1 chai không nắp
    anh_ok = tao_anh(True, kieu, np.random.default_rng(100), mau_nap=205)
    anh_ng = tao_anh(False, kieu, np.random.default_rng(101))
    nguong = (diem(anh_ok) + diem(anh_ng)) / 2
    s_ok = np.array([diem(tao_anh(True, kieu, rng)) for _ in range(1000)])
    s_ng = np.array([diem(tao_anh(False, kieu, rng)) for _ in range(1000)])
    sai_ok = int((s_ok <= nguong).sum())      # có nắp nhưng báo thiếu → loại nhầm
    sai_ng = int((s_ng > nguong).sum())       # thiếu nắp nhưng báo có → lọt lỗi
    print(f"Đèn {kieu}: ngưỡng {nguong:.1f}")
    print(f"  điểm chai có nắp  : {s_ok.min():6.1f} .. {s_ok.max():6.1f}")
    print(f"  điểm chai thiếu nắp: {s_ng.min():6.1f} .. {s_ng.max():6.1f}")
    print(f"  khoảng hở (min có nắp - max thiếu nắp): {s_ok.min() - s_ng.max():.1f}")
    print(f"  báo thiếu nắp nhầm: {sai_ok}/1000 | thiếu nắp bị cho qua: {sai_ng}/1000")
    cv2.imwrite(f"nap_{kieu}.png", np.hstack([anh_ok, anh_ng]))
Đèn truoc: ngưỡng 41.5
  điểm chai có nắp  :    2.0 ..  103.3
  điểm chai thiếu nắp:    0.0 ..    1.6
  khoảng hở (min có nắp - max thiếu nắp): 0.3
  báo thiếu nắp nhầm: 656/1000 | thiếu nắp bị cho qua: 0/1000
Đèn nen: ngưỡng 100.4
  điểm chai có nắp  :  183.5 ..  209.9
  điểm chai thiếu nắp:    0.0 ..    8.7
  khoảng hở (min có nắp - max thiếu nắp): 174.8
  báo thiếu nắp nhầm: 0/1000 | thiếu nắp bị cho qua: 0/1000

Đọc kết quả như một kỹ sư:

  • Đèn phía trước: điểm của chai có nắp trải từ 2 đến 103. Nắp trắng cho điểm cao, nhưng nắp đỏ và xanh có độ xám gần nền, và khi ánh sáng xưởng thay đổi thì có lúc gần như trùng nền. Khoảng hở giữa hai nhóm chỉ còn 0,3 mức xám: không tồn tại ngưỡng an toàn. Ngưỡng cài bằng nắp trắng làm 656/1000 chai tốt bị báo thiếu nắp. Hạ ngưỡng xuống thì một chút nhiễu hay vệt chói sẽ làm chai thiếu nắp lọt qua.
  • Đèn nền: mọi nắp đều thành bóng đen, điểm từ 183 đến 210; chai thiếu nắp dưới 9. Khoảng hở gần 175 mức xám, ngưỡng đặt ở đâu trong khoảng đó cũng đúng. Màu nắp, ánh sáng xưởng, vệt chói đều không còn ảnh hưởng.

Mở hai ảnh nap_truoc.png và nap_nen.png để nhìn tận mắt. Bài học quan trọng nhất: đừng sửa bằng phần mềm thứ mà chiếu sáng sửa được. Thay vì thêm tiền xử lý, cân bằng sáng, học máy cho trường hợp đèn phía trước, đổi sang đèn nền là xong. Thước đo bạn vừa dùng, khoảng hở giữa hai nhóm điểm, là cách định lượng "ảnh tốt" mà bạn sẽ dùng lại khi chọn đèn ở chặng 6 và khi đặt ngưỡng OK/NG ở chặng 5.

Chiếu sáng tốt làm ba việc(1) Tối đa hóa tương phản của đặc điểm cần xem: mép, lỗ, vết xước, ký tự. (2) Tối thiểu hóa thứ không cần xem: hoa văn nền, màu sắc, phản xạ. (3) Lấn át ánh sáng môi trường: đèn đủ mạnh, che chắn trạm, dùng đèn chớp hoặc filter cùng màu đèn để ánh sáng xưởng gần như không còn ảnh hưởng. Đèn chớp được giải thích trong bài "Đèn strobe và đồng bộ trigger" ở chặng 5.

Vài cặp "bài toán → kiểu đèn" bạn sẽ gặp lại liên tục:

Cần thấyKiểu đèn thường dùngVì sao
Biên dạng, có/không, đo kích thước ngoàiĐèn nền (backlight)Bóng đen sắc nét, không phụ thuộc màu và bề mặt vật
Vết xước, chữ dập nổi trên mặt phẳngĐèn góc thấp (low-angle, dark field)Mặt phẳng tối, mép xước và chữ nổi bắt sáng
Mặt phẳng bóng (kim loại, wafer, nhãn bóng)Đèn đồng trục (coaxial)Ánh sáng chiếu thẳng góc, mặt phẳng phản xạ đều
Bề mặt cong, bóng (lon, vỉ thuốc)Đèn vòm (dome)Ánh sáng khuếch tán từ mọi phía, triệt chói
Phân biệt màu trên ảnh đơn sắcĐèn màu + filterĐèn cùng màu vật làm vật sáng, màu bù làm vật tối

5. Khối xử lý và khối I/O: những gì cần biết ngay bây giờ

Phần cứng xử lý có ba dạng chính:

  • PC công nghiệp + camera rời: linh hoạt nhất, chạy được OpenCV, Halcon, deep learning, nhiều camera. Cần tủ điện, quạt, phần mềm tự viết hoặc mua.
  • Smart camera: camera có bộ xử lý và phần mềm cấu hình bên trong, nối thẳng I/O với PLC. Gọn, nhanh triển khai cho bài toán đơn giản.
  • Máy nhúng (ARM, máy có GPU nhúng): rẻ, nhỏ, hợp sản phẩm số lượng lớn hoặc cần AI tại chỗ; đòi hỏi kỹ năng phần mềm cao hơn.

Cách chọn giữa chúng là nội dung bài 3 của chặng này.

I/O và truyền thông với PLC thường gồm hai lớp:

  • I/O số 24 V: dây tín hiệu riêng cho những thứ cần nhanh và chắc chắn: Trigger vào, Ready/Busy ra, OK/NG ra. Phải khớp kiểu PNP/NPN giữa hai bên.
  • Mạng công nghiệp: PROFINET, EtherNet/IP, Modbus TCP, CC-Link IE, hoặc TCP socket thuần, dùng để gửi dữ liệu nhiều hơn: số đo, mã đọc được, tọa độ, mã lỗi, tên công thức sản phẩm.

Hai bên trao đổi theo cơ chế bắt tay (handshake): PLC chỉ gửi trigger khi camera báo Ready, camera chỉ đặt kết quả khi đã xử lý xong và báo bằng một tín hiệu "dữ liệu hợp lệ". Chi tiết ở chặng 9.

6. Sai lầm thường gặp của người mới

  • Chọn camera trước, nghĩ tới đèn sau. Thứ tự đúng: xác định đặc điểm cần thấy → thử chiếu sáng trên mẫu thật → tính độ phân giải và FOV → chọn camera, ống kính.
  • Thử trên vài mẫu đẹp ở văn phòng. Mẫu thật trên dây chuyền có bụi, giọt nước, lệch vị trí, nhiều màu nắp, nhiều lô vật liệu. Hãy xin ít nhất vài chục mẫu OK và mọi loại mẫu lỗi có thể.
  • Quên ánh sáng môi trường. Trạm chạy đúng ca sáng, sai ca chiều vì nắng chiếu qua cửa sổ. Che chắn và đèn đủ mạnh là bắt buộc.
  • Quên khối loại hàng. Phát hiện đúng mà thổi nhầm chai thì vẫn là trạm hỏng. Khoảng cách tới van, theo dõi sản phẩm, xác nhận đã loại phải được thiết kế ngay từ đầu.
  • Không lưu ảnh. Khi khách hàng báo "hôm qua lọt chai thiếu nắp", không có ảnh thì không thể chứng minh hay sửa.

7. Bài tập

Bài 1. Một nhà máy muốn kiểm tra hạn sử dụng (date code) in phun trên đáy lon nhôm, 1200 lon/phút. Hãy kể tên các khối của trạm và với mỗi khối nêu một câu hỏi bạn cần hỏi khách hàng.

Xem đáp án
  • Kích hoạt: lon chạy liên tục hay theo nhịp? Có encoder trên băng tải không? Lon cách đều không?
  • Chiếu sáng: đáy lon là nhôm cong và bóng, mực in màu gì? Thường phải thử đèn vòm hoặc đèn góc thấp để triệt chói.
  • Quang học: lon có rung lên xuống không (ảnh hưởng độ sâu trường ảnh)? Vùng in rộng bao nhiêu mm, ký tự cao bao nhiêu mm?
  • Camera: 1200 lon/phút là 20 lon/giây, chu kỳ 50 ms, cần camera đủ nhanh và màn trập global; thời gian phơi sáng đủ ngắn để không nhòe.
  • Xử lý: chỉ cần "có in" hay phải đọc đúng từng ký tự (OCR) và so với ngày của lô? Ngày đúng lấy từ đâu?
  • I/O: PLC hãng nào, giao thức gì? Có cần gửi chuỗi đọc được lên MES không?
  • Loại hàng: loại bằng gì, đặt cách bao xa, có xác nhận lon đã bị loại không?

Bài 2. Dây chuyền chạy 600 chai/phút, pitch 80 mm, van thổi đặt cách camera 900 mm. Tính chu kỳ mỗi chai, tốc độ băng tải và số chai nằm giữa camera và van. Nếu PC xử lý mất 30 ms mỗi ảnh, trạm có kịp không?

Xem đáp án
chai_phut, pitch_mm, van_mm, xu_ly_ms = 600, 80, 900, 30
chu_ky_ms = 60_000 / chai_phut
toc_do = chai_phut / 60 * pitch_mm               # mm/s
print(f"chu kỳ {chu_ky_ms:.0f} ms, băng tải {toc_do:.0f} mm/s, "
      f"{van_mm / pitch_mm:.2f} chai giữa camera và van, tới van sau {van_mm / toc_do * 1000:.0f} ms")
print("kịp" if xu_ly_ms < chu_ky_ms else "không kịp", "| còn dư", chu_ky_ms - xu_ly_ms, "ms")
chu kỳ 100 ms, băng tải 800 mm/s, 11.25 chai giữa camera và van, tới van sau 1125 ms
kịp | còn dư 70.0 ms

Kịp về chu kỳ (30 ms < 100 ms), nhưng nhớ rằng thời gian xử lý còn phải cộng thời gian truyền ảnh và gửi kết quả, và lấy theo trường hợp chậm nhất chứ không phải trung bình. Số chai giữa camera và van là 11,25, không nguyên: PLC phải theo dõi theo quãng đường (encoder) hoặc theo thời gian, không được giả định "chai thứ 11".

Bài 3. Trong mô phỏng ở mục 4, giả sử nhà máy chỉ dùng duy nhất nắp trắng và không thể lắp đèn nền vì băng tải sát tường. Kể ba biện pháp không dùng đèn nền để tăng khoảng hở giữa hai nhóm điểm.

Xem đáp án
  • Che chắn trạm (hộp tối) và dùng đèn chớp mạnh: loại bỏ biến động ánh sáng xưởng, nguồn gây phần lớn độ trải điểm.
  • Đặt tấm nền tối (vải đen, tấm nhựa đen mờ) phía sau cổ chai: nắp trắng trên nền đen cho tương phản lớn, không cần đèn nền.
  • Đổi góc chiếu để vệt chói trên thủy tinh không rơi vào ROI, hoặc dùng filter phân cực trên đèn và ống kính để giảm chói.

Cả ba đều là thay đổi phần cứng, không phải thuật toán. Đó chính là ý của "chiếu sáng quyết định 80%".

Tóm tắt

  • Machine Vision là ngành kỹ thuật ứng dụng thị giác máy vào sản xuất: điều kiện chụp kiểm soát được, đầu ra là tín hiệu cho PLC/robot, thời gian và độ tin cậy là yêu cầu cứng.
  • Một trạm gồm: kích hoạt, chiếu sáng, quang học, camera, xử lý, I/O, cơ cấu loại hàng, HMI và lưu trữ. Một khối hỏng là cả trạm hỏng.
  • Với mỗi trạm, tính ngay chu kỳ sản phẩm và số sản phẩm nằm giữa camera và điểm loại; PLC phải theo dõi từng sản phẩm.
  • Chiếu sáng quyết định tương phản; phần mềm không tạo ra thông tin không có trong ảnh. Đo chất lượng ảnh bằng khoảng hở giữa điểm của nhóm OK và nhóm NG.
  • Thứ tự thiết kế: đặc điểm cần thấy → chiếu sáng → độ phân giải, FOV → camera, ống kính → xử lý → I/O.

Bài tiếp theo: 5 nhóm bài toán Machine Vision và cách giải, nơi bạn học cách nhận diện một yêu cầu thuộc nhóm nào và ước lượng độ khó của nó.

Bài tiếp theo
Ban biên tập HọcFree

Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.