Doç. Dr. GÜRAY SONUGÜR

Doç. Dr. Güray SONUGÜR – Öğrenci Bilgi Paylaşım Platformu

Görüntü İşleme – Python Seri Port Haberleşme ve Görüntü İşleme ile Kullanımı

Seri port haberleşme, bir bilgisayarın veya cihazın diğer cihazlarla haberleşebilmesi için kullandığı bir veri iletim yöntemidir. Bu haberleşme yöntemi, verileri sıralı olarak bir bit (1 veya 0) olarak gönderir ve alır.

Python dilinde seri port haberleşme için birkaç farklı kütüphane bulunmaktadır. Bunlar arasında en popüler olanlar pySerial ve PyVISA’dır. pySerial, seri port haberleşme işlemlerini yapmak için kullanılabilecek bir Python kütüphanesidir. PyVISA ise, seri port haberleşmesi dışında USB, GPIB ve Ethernet gibi birçok veri iletim yöntemini destekleyen bir kütüphanedir.

Seri port haberleşme işlemlerini yapmak için, öncelikle seri port bağlantısını açıp kapatmak, veri göndermek ve almak gibi temel işlemleri yapabilecek bir kod bloğu yazmanız gerekmektedir. Bu kod bloğunu yazdıktan sonra, seri port haberleşme işlemlerini yapmak istediğiniz cihazla bağlantı kurarak haberleşmeyi gerçekleştirebilirsiniz.

Python pySerial kütüphanesinin kurulması

İlk olarak, Python dilinin yüklü olduğundan emin olun.

Python dilinin yüklü olduğundan emin olduktan sonra, Python paket yöneticisi olan “pip” komutunu kullanarak pySerial kütüphanesini kurun. “pip” komutunu aşağıdaki gibi terminal ekranında veya command prompt penceresinde çalıştırın:

>> pip install pyserial

Bu komutu çalıştırdıktan sonra, pySerial kütüphanesi kurulmuş olacaktır. Kurulum tamamlandıktan sonra, import serial komutuyla pySerial kütüphanesini içe aktararak seri port haberleşme işlemlerini yapmaya başlayabilirsiniz.

 

Python ile pySerial kütüphanesi ile seri haberleşme

Öncelikle pySerial kütüphanesini indirin ve projenize dahil edin. Daha sonra aşağıdaki adımları izleyerek seri port haberleşme işlemlerini yapabilirsiniz:

import serial

komutuyla pySerial kütüphanesini içe aktarın.

Seri port bağlantısını açmak için serial.Serial() fonksiyonunu kullanın. Bu fonksiyonun argümanları olarak seri port ismini (örneğin ‘COM2’), baud rate’i ve diğer ayarları verin. Örnek kod şu şekildedir:

import serial

ser = serial.Serial(‘COM2, 9600, timeout=1)

Seri port bağlantısını kontrol etmek için ser.is_open() özelliğini kontrol edin. Eğer seri port bağlantısı açıksa, True değerini döndürür.

Veri göndermek için ser.write() fonksiyonunu kullanın. Bu fonksiyonun argümanı olarak gönderilecek veri dizisini verin. Örnek kod şu şekildedir:

data = “Hello World!”

ser.write(data.encode())

Veri almak için ser.read() fonksiyonunu kullanın. Bu fonksiyon, belirtilen miktar kadar veri okur. Örnek kod şu şekildedir:

data = ser.read()

print(data)

Seri port bağlantısını kapatmak için ser.close() fonksiyonunu kullanın.

Bu adımları izleyerek pySerial kütüphanesi kullanarak seri port haberleşme işlemlerini yapabilirsiniz.

Örnek Kod:

Görüntü İşlemede seri haberleşme kullanımı:

Görüntü işlemede seri port haberleşmesi, görüntü işleme algoritmalarının çalıştırıldığı bilgisayar ve görüntülerin çekildiği cihazlar arasında veri iletimi için kullanılabilir. Örneğin, bir görüntü sensörü veya kamera ile bir bilgisayar arasında veri iletimi için seri port haberleşmesi kullanılabilir. Bu sayede, görüntü sensörü tarafından çekilen görüntüler bilgisayar tarafından işlenebilir ve görüntü işleme algoritmaları tarafından analiz edilebilir.

Görüntü işlemede seri port haberleşmesinin diğer bir önemi ise, görüntü sensörü veya kamera gibi cihazların çalışma parametrelerinin değiştirilebilmesidir. Örneğin, görüntü sensörünün çözünürlük ayarı veya kameranın açıklaması gibi parametreler bilgisayar tarafından değiştirilerek cihazın çalışma şeklinin değiştirilebilir. Bu sayede, görüntü işleme sistemlerinin performansı ve doğruluğu artırılabilir.

Bir başka önemi ise görüntü sinyallerinden elde edilen bilgilerin dış çevreye gönderilebilmesini sağlamasıdır. Bu sayede dış çevredeki aktivatörler çalıştırılabilir. Bir örnek vermek gerekirse:

Girişin yasak olduğu bir bölgeye yerleştirilen kamera ile piksel hareketleri izlenebilir. Piksel hareketi belii bir eşiği geçtiğinde seri port ile bir alarm kontağı tetiklenebilir, SMS gönderilebilir vs. Piksel hareketini tespit etmek için ardışık video çerçeveleri birbirinden aritmetik olarak çıkarılabilir. Böylece korunan alanda herhangi bir hareket olmazsa fark ekran siyah olacaktır. Eğer bu alanda bir hareket olursa fark ekran tamamen siyah olmayacaktır. Görüntü işleme algoritmaları ile bu durum tespit edilerek seri porttan bilgi gönderilebilir.

Başka bir örnek vermek gerekirse; Bir sabit kanat veya döner kanatlı İHA ile hedef tespit edildiğinde görüntü işleme programının çalıştığı bilgisayarın seri portundan bomba haznesini tutan servo motora sinyal gönderilerek bombanın bırakılması sağlanabilir.

Bu işlem için örnek bir kod oluşturalım:

Yukarıdaki kod parçasında:
Videodan gelen canlı görüntüde kırmızı renkli nesne tespit edildiği anda seri porttan “ON” değeri 10. Com porta bağlı olan cihaza gönderilmektedir. Eğer kırmızı nesne yok ise yine aynı cihaza “OFF” değeri gönderiliyor.
Eğer seri portun ucunda bir Arduino cihazı var ise, bu cihazın gelen bilgiyi alıp bir aksiyonda bulunması için aşağıdaki gibi bir Arduino kodu yeterli olcaktır.

Bu koda göre; gelen veri ON ise 46. Pine bağlı ledi yakacak, OFF ise bu ledi söndürecek, her ikisi de değilse 13. Pine bağlı ledi döngüsel olarak yakıp söndürecektir.
Python Seri porttan veri okuma
Arduino ile Python arasında seri port haberleşmesi gerçekleştirilebilir. Bu haberleşme işlemi için, öncelikle Arduino tarafında gönderilecek verilerin seri port üzerinden gönderilmesi gerekmektedir. Arduino kodlarında, Serial.println() fonksiyonu kullanılarak veriler seri porta gönderilebilir.
Örnek olarak, aşağıdaki Arduino kodu çalıştırıldığında, “Merhaba AKÜ” yazısı seri port üzerinden gönderilecektir:

Python tarafında ise, pySerial kütüphanesini kullanarak seri porttan veri alınabilir.
Şimdi kendi kodumuzu yazalım:
Yukarıdaki arduino kodu aynen kalsın. Bu kodu python tarafında okuyarak ekrana yazdıracak bir kod oluşturalım:

Yukarıdaki kodda Arduino’dan seri olarak gönderilen ifade 10 defa sayaç ile birlikte yan yana yazdırılacaktır.

Sonuç:

 

 

, , ,