Yapay zeka ile görsel kalite kontrol, bir parçanın sağlam mı yoksa hatalı mı olduğuna hat hızında ve operatör yorgunluğu olmadan karar vermek için kameraları ve eğitilmiş modelleri kullanır. Bu makale bir kontrol istasyonunun nasıl kurulduğunu, yapay zekanın hangi hataları kural tabanlı makine görmesinden daha iyi ele aldığını ve hat kontrolü, gösterge panelleri ve izlenebilirlik kayıtlarının senkron kalması için her geçti/kaldı sonucunun MQTT üzerinden nasıl yayınlanacağını açıklıyor.
Yapay Zeka ile Görsel Kalite Kontrol Ne Yapar
Geleneksel makine görmesi elle ayarlanmış kurallara dayanır: bir kenarı ölç, eşiğin üzerindeki pikselleri say, bir şablonla karşılaştır. Bu, tutarlı parçalarda boyutsal kontroller için iyi çalışır. Ancak hatalar şekil ve görünüm açısından değişkenlik gösterdiğinde, örneğin çizikler, ezikler, gözeneklilik, kirlenme, buruşmuş etiketler veya tutarsız kaynaklar söz konusu olduğunda ya da vardiya boyunca aydınlatma ve parça yüzeyi değiştiğinde zorlanır.
Yapay zeka ile görsel kalite kontrol bu kuralları öğrenilmiş bir modelle değiştirir veya tamamlar. Probleme bağlı olarak model üç türden biridir:
- Sınıflandırma: görüntünün tamamı
okveyang(not good, yani hatalı) olarak etiketlenir ya da bir hata sınıfına atanır. - Nesne algılama veya segmentasyon: model hataların çevresine kutular veya maskeler çizer; böylece nerede olduklarını ve ne kadar büyük olduklarını bilirsiniz.
- Anomali tespiti: model çoğunlukla sağlam parçalarla eğitilir ve olağandışı görünen her şeyi işaretler. Bu, olgun bir hatta sıkça görüldüğü gibi hatalı örneklerin nadir olduğu durumlarda değerlidir.
Fabrika için önemli olan çıktı basittir: bir karar, bir güven değeri, hata türü ve sonucu belirli bir parçaya bağlayan bir tanımlayıcı.
Bir Kontrol İstasyonunun Anatomisi
Çalışan bir istasyon bir modelden çok daha fazlasıdır. Başarıyı belirleyen parçalar genellikle fizikseldir.
| Bileşen | Neye karar verilmeli | Yaygın tuzak |
|---|---|---|
| Kamera | Alan veya çizgi taramalı, çözünürlük, tek renkli veya renkli | En küçük hata boyutunu bilmeden çözünürlük seçmek |
| Optik | Lens odak uzaklığı, çalışma mesafesi, alan derinliği | Farklı yüksekliklerdeki parçaların odak dışında kalması |
| Aydınlatma | Halka, kubbe, arka ışık, düşük açılı karanlık alan | Pencerelerden gelen ortam ışığının sonuçları gün içinde değiştirmesi |
| Tetikleyici | Foto sensör veya PLC'den gelen enkoder sinyali | Konveyör hızıyla kayan, yazılımla zamanlanmış çekim |
| Hesaplama | GPU'lu endüstriyel PC, Jetson veya akıllı kamera | Çıkarımı paylaşılan bir ofis bilgisayarında çalıştırmak |
| Ret | Hava üfleme, yönlendirici, robotla alma | Retin gerçekten gerçekleştiğine dair doğrulama olmaması |
| Veri yolu | Hat kontrolü, MES ve gösterge panellerine MQTT | Sonuçların yalnızca kontrol bilgisayarında saklanması |
Aydınlatma en fazla dikkati hak eder. İyi bir aydınlatma düzeni, ham görüntüye bakan bir insan için hataları belirgin hale getirir; çiziği siz göremiyorsanız modelin onu güvenilir şekilde öğrenmesi pek olası değildir.
Hata Modelini Oluşturmak
Model iş akışı öngörülebilir bir yol izler:
- Görüntüleri gerçek istasyondan toplayın; nihai kamera, lens ve aydınlatma ile. Tezgâh üzerinde telefonla çekilen görüntüler aktarılamaz.
- Tutarlı etiketleyin. Her sınıftan örnekler ve kabul edilebilir ile ret arasındaki sınırı içeren kısa bir hata kataloğu yazın. Etiketleyiciler arasındaki anlaşmazlık model gürültüsüne dönüşür.
- Eğitin ve doğrulayın; farklı partilerden ve vardiyalardan parçalar da dahil olmak üzere modelin daha önce hiç görmediği görüntülerle.
- Eşiği kalite mühendisleriyle birlikte seçin. Bir hatayı kaçırmak (kaçak) ile sağlam bir parçayı reddetmek (yanlış ret) çok farklı maliyetlere sahiptir; bu yüzden güven eşiği bir iş kararıdır.
- Önce gölge modunda çalıştırın: model kararları yayınlar ancak ret tetiklemez ve siz bunları manuel kontrolle karşılaştırırsınız.
- Uca (edge) dağıtın; genellikle kameranın yanındaki bir GPU veya hızlandırıcı üzerinde optimize edilmiş bir model olarak. Paketleme ve güncelleme stratejileri için ML modellerini edge cihazlara dağıtma yazısına bakın.
Çıkarım uçta yapılmalıdır, çünkü ret kararı parça ret penceresinden çıkmadan önce verilmelidir. Tam görüntüleri buluta göndermek hiçbir fayda sağlamadan gecikme ve bant genişliği ekler. Ağ üzerinden giden şey sonuçtur. Edge AI ve bulut yapay zeka karşılaştırması bu ödünleşimi daha ayrıntılı ele alıyor.
Yapay Zeka Görsel Kontrol Sonuçları İçin Neden MQTT
Bir kontrol kararının birkaç tüketicisi vardır: reti tetikleyen PLC veya hat kontrolcüsü, sonucu bir seri numarasına karşı kaydeden MES veya izlenebilirlik veritabanı, bir andon panosu, bir kalite gösterge paneli ve devreye alma sırasında belki bir mühendisin dizüstü bilgisayarı. Her birine noktadan noktaya bağlantı kurmak kırılgandır. Yayınla/abone ol modelinde istasyon bir kez yayınlar ve her tüketici ihtiyaç duyduğuna abone olur.
MQTT buna çok uygundur; çünkü hafiftir, en az bir kez teslim için QoS 1'i destekler ve daha sonra başlayan bir gösterge panelinin istasyonun çevrimiçi olup olmadığını hemen bilmesi için retained bir istasyon durumu yayınlamanıza olanak tanır. ISA-95 seviyelerini izleyen topic hiyerarşileri her sonuca net bir adres verir, örneğin:
connectmq/plant1/assembly/line2/inspect1/result
connectmq/plant1/assembly/line2/inspect1/status
connectmq/plant1/assembly/line2/inspect1/stats
connectmq/plant1/assembly/line2/inspect1/cmd/threshold
ConnectMQ, ISA-95 ve Unified Namespace tarzı topic'leri algılar ve cihazlar görünümünde cihazları işletme, tesis, alan, hat ve hücreye göre gösterir; bu da büyüyen bir kontrol istasyonu kümesinde gezinmeyi kolaylaştırır. Hatta zaten Sparkplug B kullanıyorsanız, Sparkplug B ve Unified Namespace rehberi iki topic tarzının nasıl bir arada var olduğunu açıklıyor.
Sonuç Payload Tasarımı
Kontrol edilen her parça için küçük ve kendini açıklayan tek bir mesaj tutun:
{
"partId": "SN-24-104877",
"ts": "2026-10-16T09:41:07.312Z",
"verdict": "ng",
"defect": "scratch",
"confidence": 0.93,
"bbox": [412, 188, 470, 214],
"model": "housing-defects-v7",
"threshold": 0.80,
"inferenceMs": 18,
"imageRef": "inspect1/2026-10-16/SN-24-104877.jpg"
}
model ve threshold alanları, sonuçları aylar sonra izlenebilir kılan alanlardır: bir müşteri şikâyeti geldiğinde, parçayı hangi model sürümünün hangi ayarla değerlendirdiğini gösterebilirsiniz. Görüntünün kendisi yerel depolamada kalır veya bir görüntü deposuna gider; MQTT mesajı pikselleri değil, bir referansı taşır.
Örnek: Kontrol Sonuçlarını Python ile Yayınlamak
Bu örnek, istasyon döngüsünü paho-mqtt 2.x ile simüle eder. run_model() fonksiyonunu gerçek çıkarım çağrınızla değiştirin. Sonuçları QoS 1 ile, Last Will içeren retained bir online/offline durumunu ve periyodik verim istatistiklerini yayınlar.
import json
import random
import time
import uuid
from datetime import datetime, timezone
import paho.mqtt.client as mqtt
HOST, PORT = "broker.connectmq.com", 1883
RUN_ID = uuid.uuid4().hex[:8]
BASE = f"connectmq/demo/{RUN_ID}/plant1/assembly/line2/inspect1"
MODEL = "housing-defects-v7"
threshold = 0.80
def run_model(image=None):
"""Gerçek çıkarımın yerine geçer: (label, confidence, bbox) döndürür."""
if random.random() < 0.08:
return random.choice(["scratch", "dent", "missing_screw"]), random.uniform(0.6, 0.99), [412, 188, 470, 214]
return "ok", random.uniform(0.85, 0.99), None
def on_connect(client, userdata, flags, reason_code, properties):
print("connected:", reason_code)
client.publish(f"{BASE}/status", "online", qos=1, retain=True)
client.subscribe(f"{BASE}/cmd/threshold", qos=1)
def on_message(client, userdata, msg):
global threshold
try:
value = float(msg.payload)
if 0.5 <= value <= 0.99:
threshold = value
print("threshold set to", threshold)
except ValueError:
print("ignored invalid threshold", msg.payload)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"inspect1-{RUN_ID}")
client.will_set(f"{BASE}/status", "offline", qos=1, retain=True)
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT, keepalive=30)
client.loop_start()
ok = ng = 0
try:
for n in range(1, 10_000):
start = time.perf_counter()
label, conf, bbox = run_model()
inference_ms = round((time.perf_counter() - start) * 1000, 1)
verdict = "ng" if label != "ok" and conf >= threshold else "ok"
ok, ng = (ok + 1, ng) if verdict == "ok" else (ok, ng + 1)
part_id = f"SN-{RUN_ID}-{n:06d}"
result = {
"partId": part_id,
"ts": datetime.now(timezone.utc).isoformat(timespec="milliseconds"),
"verdict": verdict,
"defect": None if label == "ok" else label,
"confidence": round(conf, 3),
"bbox": bbox,
"model": MODEL,
"threshold": threshold,
"inferenceMs": inference_ms,
}
client.publish(f"{BASE}/result", json.dumps(result), qos=1)
if n % 20 == 0:
stats = {"ok": ok, "ng": ng, "yield": round(ok / (ok + ng), 4)}
client.publish(f"{BASE}/stats", json.dumps(stats), qos=1, retain=True)
time.sleep(0.5) # herkese açık broker'ın istemci başına 10 mesaj/sn sınırının epey altında kalır
finally:
client.publish(f"{BASE}/status", "offline", qos=1, retain=True)
client.loop_stop()
client.disconnect()
Sonuçları başka bir terminalden izleyin; kimliği topic'teki kimlikle değiştirin:
mosquitto_sub -h broker.connectmq.com -p 1883 -i qa-viewer-91c2 \
-t 'connectmq/demo/<run-id>/plant1/assembly/line2/inspect1/#' -v
Herkese açık test alanı payload ve topic tasarımını denemek için uygundur, ancak herkese açıktır. Üretim kontrol verileri, istasyon için verilen kimlik bilgileri ve client ID ile 8883 portunda TLS üzerinden özel bir broker'da yer almalıdır.
Hat Kontrolüyle Döngüyü Kapatmak
Ret aktüatörü buluta gidip gelen bir yolculuğa bağlı olmamalıdır. Çoğu tesiste istasyon, retin kendisi için PLC'ye doğrudan I/O veya bir saha veri yolu (fieldbus) üzerinden sinyal verir; MQTT ise aynı kararı diğer her şey için taşır: sayım, izlenebilirlik, gösterge panelleri ve alarmlar. Bir PLC veya edge kontrolcünün sonuç topic'ine abone olduğu durumlarda, broker'ı hatta yakın tutun veya bağlantı koptuğunda ret mantığının güvenli tarafta kalmasını sağlayın.
Birkaç kural sistemi dürüst tutar:
- Yönlendirici sensöründen bir ret onayı yayınlayın; böylece
ngkararlarını gerçek retlerle eşleştirebilirsiniz. - Model sürümünü her mesaja koyun ve aktif modeli tanımlayan retained bir
statustopic'i tutun. cmd/topic'lerine kimin yayın yapabileceğini kısıtlayın ve örnekte eşik için yapıldığı gibi her komut değerini istasyonda doğrulayın.- Verim kaymasında uyarı verin. Verimdeki ani bir düşüş, gerçek bir kalite sorunundan çok çoğu zaman bir aydınlatma veya kamera sorunudur.
ConnectMQ eşik uyarı kuralları, bir istatistik mesajındaki verim gibi sayısal değerleri izleyebilir ve uyarıları uyarı günlüğüne kaydedebilir; bu, ayrı bir izleme hizmeti kurmadan kaymayı fark etmenin hızlı bir yoludur.
Üretimde Sık Karşılaşılan Sorunlar
| Belirti | Olası neden | Neyi kontrol etmeli |
|---|---|---|
| Bakım duruşundan sonra doğruluk düştü | Kamera veya ışık yer değiştirdi | Bir referans görüntüyü bugünkü çekimle karşılaştırın |
| Öğleden sonra daha fazla yanlış ret | Ortam ışığı | Kontrol alanının çevresinde muhafaza veya örtü |
| İzlenebilirlik veritabanında eksik sonuçlar | Abone çevrimdışı, QoS 0 | Veritabanı yazıcısı için QoS 1 ve kalıcı oturum |
| Yinelenen kayıtlar | QoS 1 yeniden teslimi | Eklerken partId değerini idempotent anahtar olarak kullanın |
| Yeni hata türü algılanmıyor | Model onu hiç görmedi | Kaçakları etiketlemeye geri besleyin ve yeniden eğitin |
İlgili görü projeleri için MQTT üzerinden YOLO nesne algılama, Jetson Nano MQTT rehberi ve yapay zeka ve IoT ana rehberi yazılarına bakın.
Kontrol İstasyonlarınızı ConnectMQ'ya Bağlayın
Her istasyonun, gösterge panelinin ve izlenebilirlik yazıcısının buluşabileceği güvenilir bir yere ihtiyacı vardır. ConnectMQ, tesis ağında broker altyapısı çalıştırmadan size TLS, MQTT 5, ISA-95 cihazlar görünümü ve eşik uyarıları sunan barındırılan bir MQTT broker sağlar. app.connectmq.com adresinde ücretsiz Serverless planında kredi kartı gerektirmeden bir broker oluşturun ve hat üretime geçtiğinde Dedicated veya BYOC dağıtımına geçin. Hâlâ değerlendirme aşamasındaysanız, herkese açık MQTT test broker'ı payload'un prototipini oluşturmak için iyi bir yerdir.
Sık Sorulan Sorular
Yapay zeka görsel kalite kontrol modelini eğitmek için kaç görüntüye ihtiyacım var?
Parçaların ve hataların ne kadar çeşitli olduğuna bağlıdır. Gerçek istasyondan alınan görüntülerle başlayın, her hata sınıfını ve normal varyasyonu kapsayın ve model gölge modunda bir şeyi her kaçırdığında örnek ekleyin.
Görüntüler MQTT üzerinden gönderilmeli mi?
Genellikle hayır. Kararı, güven değerini ve bir görüntü referansını MQTT üzerinden gönderin, görüntüleri ise yerelde veya bir nesne deposunda saklayın; çünkü büyük ikili mesajlar broker boyut sınırlarına takılır ve her aboneyi yavaşlatır.
Yapay zeka ile görsel kalite kontrol, kural tabanlı makine görmesinin yerini alabilir mi?
Her zaman değil. Hassas boyutsal ölçüm hâlâ en iyi kurallarla yapılırken, yapay zeka değişken kozmetik hataları ele alır. Pek çok istasyon ikisini birleştirir ve tek bir karar yayınlar.
Kontrol sonuçları hangi QoS seviyesini kullanmalı?
Olağan seçim QoS 1'dir, çünkü izlenebilirlik için her sonucun ulaşması gerekir. Ara sıra oluşan yinelemelerin zarar vermemesi için veritabanı eklemesini parça kimliği üzerinden idempotent yapın.



