using System;
using System.Drawing;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using S7.Net;
class Program
{
static void Main(string[] args)
{
// Kameradan görüntü almak için bir VideoCapture nesnesi oluşturun
VideoCapture capture = new VideoCapture(0); // 0, varsayılan kamera için
// Eğer kamera başlatılamazsa, hata mesajı ver ve çık
if (!capture.IsOpened)
{
Console.WriteLine("Kamera başlatılamadı.");
return;
}
// CascadeClassifier ile nesne tespiti için bir sınıflandırıcı yükleyin
CascadeClassifier faceCascade = new CascadeClassifier("haarcascade_frontalface_default.xml");
// PLC'ye bağlanma ayarları
var plc = new Plc(CpuType.S71200, IPAddress.Parse("PLC_IP_ADRESI"), rack: 0, slot: 2);
try
{
// PLC'ye bağlan
plc.Open();
while (true)
{
// Kameradan bir kare al
Mat frame = new Mat();
capture.Read(frame);
// Kameradan gelen görüntüyü işleme
if (!frame.IsEmpty)
{
// Yüz tespiti yap
var grayFrame = new Mat();
CvInvoke.CvtColor(frame, grayFrame, ColorConversion.Bgr2Gray);
var faces = faceCascade.DetectMultiScale(grayFrame, 1.1, 3);
// Tespit edilen nesne (örneğin, yüz) koordinatlarını alın
foreach (var face in faces)
{
int x = face.X;
int y = face.Y;
// Koordinatları Siemens PLC'ye yazma işlemi
plc.Write("DB1.DINT0", x); // X koordinatını yaz
plc.Write("DB1.DINT4", y); // Y koordinatını yaz
}
// Görüntüyü göster
CvInvoke.Imshow("Nesne Tespiti", frame);
}
// Klavyeden "ESC" tuşuna basılırsa döngüyü kır
if (CvInvoke.WaitKey(1) == 27)
break;
}
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
}
finally
{
// Kamerayı kapat
capture.Dispose();
CvInvoke.DestroyAllWindows();
// PLC bağlantısını kapat
plc.Close();
}
}
}