Untitled

mail@pastecode.io avatar
unknown
csharp
7 months ago
2.6 kB
1
Indexable
Never
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();
        }
    }
}