Herkese merhabalar,
Bugün sizlerle birlikte LabVIEW uygulamalarınıza nasıl sesli asistan özelliği ekleyebileceğimizi öğreneceğiz. Hazırsanız başlayalım.
Bunu yapmanın birden fazla yöntemi var, tabii ki, ancak biz burada Python dilinin gücünü kullanacağız. Bildiğiniz üzere Python, dünyada en çok kullanılan programlama dillerinden biri haline geldi ve geniş topluluğu ile zengin kütüphaneleri sayesinde ön plana çıkmaktadır.
Biz de Python ile LabVIEW entegrasyonuna, hem Udemy platformunda hazırladığımız kurslarla hem de çeşitli projelerle katkı sağlamaya çalışıyoruz.
Bu kapsamda projeyi gerçekleştirmek için öncelikle Python’da kod yazmamız gerekiyor. Kod geliştirirken PyCharm IDE’sini kullanıyoruz. Ancak siz, bildiğiniz herhangi bir IDE ile de devam edebilirsiniz.
Kullanılacak Kütüphaneler:
İhtiyacımız olan kütüphanelerden biri Vosk kütüphanesidir. Bu kütüphane, çevrimdışı ortamda çalışan ve 20’den fazla dili destekleyen bir konuşma tanıma aracıdır. Bu kütüphane ile sanal asistanlar ve sohbet botları geliştirebilirsiniz.
Diğer bir kütüphane ise pyttsx3 kütüphanesidir. Bu kütüphane, yazıyı sese çeviren bir araçtır. Yani bir kütüphane ile söylediklerimizi anlıyor, diğer kütüphane ile uygun şekilde sesli yanıt verebiliyoruz.
Bunların dışında, sesi hoparlörden duymak için PyAudio kütüphanesini kullanmaktayız.
Ayrıca sys ve os gibi yerel Python kütüphanelerini de kullanarak, örneğin model dosyalarının konumunu tespit etmek gibi işlemleri gerçekleştiriyoruz.
Projeyi Gerçekleştirmek İçin Gerekli Adımlar:
- Python yüklü değilse bilgisayarınıza yükleyin. Önerilen sürüm: Python 3.10.11 (32-bit)
- LabVIEW 2020 (32-bit) veya daha yeni bir sürüm kullandığınızdan emin olun.
- Python kurulumu sırasında “Add Python to PATH” (sistem değişkenlerine ekleme) seçeneğini işaretlemeyi unutmayın.
- Sanal bir ortam kurun veya kullandığınız IDE ile aşağıda belirtilen kütüphaneleri kurun:
voskpyttsx3pyaudio
- Aşağıda verilen Python kodunu yazın veya kopyala-yapıştır yöntemiyle
.pyuzantılı dosyanızı oluşturun. - Model dosyasını Python dosyasının bulunduğu dizine yerleştirmeyi unutmayın.
import pyaudio # Mikrofon girişinden ses almak için kullanılır
import vosk # Vosk konuşma tanıma kütüphanesi
import pyttsx3 # Metni sese çevirme (text-to-speech) kütüphanesi
import os # Dosya ve dizin işlemleri için
import sys # Sistemle ilgili işlemler için
# Eğer program .exe olarak çalıştırılmışsa, vosk model dosyasının .exe'nin bulunduğu klasörde olduğunu varsay
# Eğer script olarak çalıştırılıyorsa, model dosyasının script dosyasının bulunduğu klasörde olduğunu varsay
if getattr(sys, 'frozen', False):
exe_path = os.path.dirname(sys.executable) # Derlenmiş (.exe) dosyanın dizini
else:
exe_path = os.path.dirname(os.path.abspath(__file__)) # Python dosyasının bulunduğu dizin
# Vosk Türkçe model dosyasının tam yolu
dependent_file_path = os.path.join(exe_path, 'vosk-model-small-tr-0.3')
# pyttsx3 motorunu başlatıyoruz (metni sesli okumak için)
engine = pyttsx3.init()
engine.setProperty('rate', 130) # Konuşma hızını ayarlıyoruz (default: 200)
# Vosk modeli yükleniyor
model = vosk.Model(dependent_file_path)
# Ses tanıyıcı (recognizer) nesnesi oluşturuluyor, 16000 Hz örnekleme hızı ile çalışacak şekilde
recognizer = vosk.KaldiRecognizer(model, 16000)
# PyAudio kullanarak mikrofondan ses alacak bir ses akışı (stream) başlatılıyor
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, # Ses verisi 16-bit formatında
channels=1, # Mono ses
rate=16000, # Örnekleme hızı
input=True, # Giriş (mikrofon) olarak ayarlandı
frames_per_buffer=4000) # Her seferinde 4000 örnek okuma yapılacak
# Ses tanıma fonksiyonu
def get_sound_text():
i = 0 # Zaman aşımını kontrol etmek için sayaç
while True:
data = stream.read(4000) # Mikrofondan 4000 örnek ses verisi okunur
i += 1 # Sayaç artırılır
# Eğer konuşma tamamlandıysa (Vosk bir cümle tanıdıysa)
if recognizer.AcceptWaveform(data):
result = recognizer.Result() # Tanıma sonucu JSON olarak gelir
result_text = eval(result)["text"] # JSON string'ini dict'e çevirip "text" kısmı alınır
if result_text: # Eğer boş değilse
engine.say(f"{result_text} page will be opened.") # Tanınan metni sesli oku
engine.runAndWait()
stream.stop_stream() # Ses akışını durdur
stream.close() # Ses akışını kapat
p.terminate() # PyAudio'yu sonlandır
engine.stop() # pyttsx3 motorunu kapat
return result_text # Tanınan metni döndür
# Belirli bir süre konuşulmazsa zaman aşımı hatası verilir (yaklaşık 30*4000 örnek = 7.5 saniye)
if i >= 30:
engine.say("You did not say anything. Please try again.") # Sesli uyarı
engine.runAndWait()
stream.stop_stream()
stream.close()
p.terminate()
engine.stop()
return "Timeout Error" # Zaman aşımı hatası döndürülür
# Fonksiyonu çağır ve sonucu ekrana yazdır debug amaçlı kullanılır.
# print(get_sound_text())
Yukarıda verilen koda genel olarak bakıldığında, get_sound_text() fonksiyonu ile kullanıcıdan alınan sesin anlamlı bir metne dönüştürüldüğü ve bu metnin kullanıcıya sesli olarak bildirildiği görülmektedir.
Eğer belirli bir süre içerisinde herhangi bir ses algılanmazsa, “timeout” devreye girmekte ve böylece kodun kilitlenmesinin önüne geçilmektedir.
Bu fonksiyonun döndürdüğü string (metin) verisine göre, LabVIEW uygulamamızda ilgili işlemleri gerçekleştireceğiz.
Biz bu örnekte İngilizce dil modelini kullandık; ancak siz isterseniz Türkçe dil modelini de kullanabilirsiniz.
Aşağıda LabVIEW kodunun görseli verilmiştir.
Burada dikkat edilmesi gereken nokta, Python dosyasının konumunu path control üzerinden seçmeniz gerektiğidir.
Bu yapıyı bağıl (relative) yol haline getirerek daha taşınabilir hâle getirebilirsiniz.
Bir diğer önemli konu ise, Python Node’dan dönen metnin bağlı olduğu Case Structure yapısını projenizin ihtiyacına göre özelleştirebilmenizdir.
Yani, hangi sesli komutta ne yapılması gerektiğini bu yapı üzerinden kontrol edebilirsiniz.

Bu koda genel olarak baktığımızda, “Start Assistant” butonuna basıldığında, bu işlem Event Structure içerisinde çalışmaktadır.
Kullanıcının mouse hareketini kısıtlamak amacıyla bir önlem alınmış ve işlem tamamlanana kadar beklemesi sağlanmıştır.
Python 3.10 sürümü ile bağlantı kurulduktan sonra, Python kodu ve ilgili fonksiyon, Python Node aracılığıyla çalıştırılmaktadır.
Fonksiyonun döndürdüğü metne göre, eğer yaklaşık 7.5 saniye boyunca herhangi bir ses algılanmazsa, kod timeout (zaman aşımı) vererek duracaktır.
Eğer ses algılanır ve beklenen metin elde edilirse, buna uygun olarak tab control yapısı üzerinden ilgili sayfa açılacaktır.
İşlem tamamlandıktan sonra Python referansı kapatılır ve mouse kilidi kaldırılır.
Bu yapıyı kendi ihtiyacınıza göre özelleştirmek mümkündür.
Evet, şimdi kodumuzu çalıştırıp test edelim.
Front Panel üzerinden kodu çalıştırdıktan sonra, “Start Assistant” butonuna basalım.
Butona bastıktan yaklaşık 1-2 saniye içinde “home” dediğimizde, sistem hem “home sayfası açılacak” şeklinde sesli yanıt verecek hem de yazılım Home sayfasını açacaktır.
Eğer “alarm” denirse, Alarm sayfası açılacaktır.
Hiçbir şey söylenmezse kod duracak ve kullanıcı uyarılacaktır.
Aşağıda, Front Panel’in görseli verilmiştir.

Ve uygulama kullanıma hazırdır.
Projenin kaynak kodlarına ve model dosyalarına aşağıdaki linkten ulaşabilir, kendi ihtiyaçlarınıza göre özelleştirebilirsiniz. Uygulama ile ilgili sorularınız veya karşılaştığınız problemler için bizlere İletişim bölümünden ulaşabilirsiniz.
Uygulamanın eğitim videosu yakında Udemy kurs içeriklerine eklenecektir. Takipte kalın! 😊
Umarım sizin için de faydalı bir eğitim olmuştur. Böylece Python ve LabVIEW entegrasyonunun gücüne bir kez daha şahit olduk. Diğer eğitimlerde görüşmek üzere!
Not: Bu uygulama tamamen test ve deneme amaçlı hazırlanmıştır. Yazılan kodlar temel seviyede tutulmuştur ve referans olarak sunulmuştur. Profesyonel projeleriniz için daha gelişmiş ve optimize edilmiş yapılar tercih edilmelidir.
