- Pi-C.A.R.D, Raspberry Pi üzerinde tamamen yerel çalışan bir yapay zeka sesli asistanı; Raspberry Pi donanımında etkileşimli LLM yeteneklerini hayata geçirmeyi amaçlayan bir proje
- Etkileşim için wake word tabanlı
main.py ve GPIO düğmesi tabanlı main_button.py olmak üzere iki yol var; konuşma sırasında wake word’ü tekrarlamak gerekmiyor
- Konuşma geçmişi
config.py üzerinden ayarlanabiliyor; bellek boyutu küçültülürse daha hızlı yanıt alınabiliyor
- Hızlı ve hafif olması için whisper.cpp ve llama.cpp gibi C++ implementasyonları kullanılıyor; dış bilgiye erişim gerekip gerekmediğini belirlemek için fine-tuned BERT modeli
tool-bert2 kullanılıyor
- Kamera tabanlı özelliklerin kurulumu README’nin çeşitli yerlerinde anlatılsa da, şu anda llama.cpp’nin vision model desteğindeki değişiklikler nedeniyle geçici olarak kaldırılmış olduğuna dair bir uyarı var
Pi-C.A.R.D ne yapıyor?
- Pi-C.A.R.D, Raspberry Pi üzerinde çalışan yapay zeka tabanlı bir asistan; ChatGPT gibi standart LLM’lerin sohbet ortamında yaptığı işleri yerel olarak işlemeyi hedefliyor
- Adı, Raspberry Pi - Camera Audio Recognition Device ifadesinin kısaltması
- Proje geliştirme aşamasında ve issue ya da pull request kabul edilebileceği belirtiliyor
- Yeni eklenen Docker desteğiyle kurulum ve değişiklik yapmanın kolaylaşmasının beklendiği ifade ediliyor
- Video tanıtımı henüz sunulmamış; ileride sağlanması planlanıyor
Çalışma şekli
-
wake word yöntemi
main.py çalıştırıldığında sistem wake word’ü dinleyip konuşmayı başlatıyor
- Varsayılan wake word’ler
"raspberry", "barry", "razbear"
- Konuşma başladıktan sonra wake word’ü her seferinde tekrarlamak gerekmiyor
"stop", "exit", "goodbye" gibi ifadeler söylendiğinde konuşma sonlandırılıyor
- Wake word ve ilgili davranışlar
config.py üzerinden değiştirilebiliyor
-
Düğme yöntemi
- Breadboard, kablolar ve bir düğme kullanılarak konuşma GPIO düğmesiyle başlatılabiliyor
- Düğmeye bastıktan sonra komutu söyleme şeklinde çalışıyor; README’ye göre daha akıcı bir etkileşim yöntemi olarak tanıtılıyor
- Düğme kurulumu için
main_button.py yönergeleri izleniyor
- Düğmeli sürümde düğmeyle konuşma başlatılabiliyor veya assistant istenildiği zaman durdurulabiliyor
-
Konuşma belleği
- Chatbot, ayarlanabilir bir konuşma belleğine sahip
- Önceki ifadeleri tekrar ettirmek veya önceki konuları daha ayrıntılı ele aldırmak mümkün
- Daha hızlı yanıt istenirse
config.py içinde bellek değeri daha küçük ayarlanabiliyor
Yerel çalıştırmanın hedefi ve sınırları
- Projenin hedefi, Raspberry Pi gibi görece ucuz bir donanımda tamamen çevrimdışı bir sesli asistanın ne kadar verimli yapılabileceğini görmek
- Tüm işlemler yerel yapıldığından, bulut tabanlı sistemler kadar güçlü veya hızlı değil
- README, son bir yılda küçük LLM modellerinde büyük ilerlemeler olduğunu ve bu projenin de bununla birlikte gelişebileceğini öngörüyor
- Uygulama olarak yapılmamasının nedeni, en zor kısmın Raspberry Pi üzerinde tamamen çevrimdışı bir sesli asistanı hızlı çalıştırmak olarak görülmesi
- Bu yöntem çalışırsa, benzer sistemlerin daha güçlü donanımlarda daha hızlı çalışabileceği açıklanıyor
Çalıştırma ve kurulum
- Depo indirildikten, gereksinimler ve ayarlar tamamlandıktan sonra şu komutla çalıştırılıyor
python main.py
- Düğmeli sürüm şu komutla çalıştırılıyor
python main_button.py
- Docker ile çalıştırma önerilen yöntem olarak tanıtılıyor ve şu komutlar kullanılıyor
sudo docker-compose build
sudo docker-compose up
- Docker desteği yakın zamanda eklendiği için kusursuz çalışmayabilir
- Docker yöntemi yalnızca wake-word sürümünde çalışıyor; GPIO erişimini container’a aktarma yöntemi henüz net değil
Kullanılan yazılımlar ve araçlar
- Hızlı ve hafif bir sistem oluşturmak için mümkün olan yerlerde C++ implementasyonları kullanılıyor
- Ses transkripsiyonu için whisper.cpp kullanılıyor; quick-start rehberi izlenerek kurulması gerekiyor
- README, vision özelliği için llama.cpp kullanıldığını açıklıyor; ancak üstteki uyarıda, llama.cpp artık vision model’leri aktif biçimde desteklemediği için kamera özelliğinin geçici olarak kaldırıldığı belirtiliyor
- Assistant’ın gerçek bir asistana daha yakın çalışması için bazı araç erişim özellikleri sağlanıyor
- Araç erişimi gerekip gerekmediği tool-bert ile belirleniyor
tool-bert2, dış bilgiye ne zaman erişileceğini belirleyen fine-tuned bir BERT
- Bu modelin nasıl oluşturulacağı tool-bert deposunda anlatılıyor
- Araç erişimini etkinleştirmek için
.env.example dosyasındaki gerekli anahtar ve secret’ları kontrol etmek gerekiyor
Kamera ve vision özelliklerinin durumu
- README metninde Raspberry Pi’ye kamera bağlanırsa fotoğraf çekilebileceği, görülen şeylerin açıklanabileceği ve ilgili görüntü hakkında soru sorulabileceği anlatılıyor
- Vision özelliğinin kurulumu,
config.py içinde vision_model değerini vlm olarak değiştirme şeklinde yapılıyor
- Kullanılacak model olarak Qwen2-VL-2B-Instruct belirtiliyor
- Girdi görüntüsü token boyutu dinamik olduğundan, çekilen fotoğrafın boyutunu küçültmenin çıkarım süresini azaltabileceği açıklanıyor
- Ancak projenin üst kısmındaki uyarıya göre kamera özelliği şu anda geçici olarak kaldırılmış durumda
Gerekli donanım
- Temel donanım yapılandırması Raspberry Pi 5 Model B, USB mikrofon ve hoparlörden oluşuyor
- USB mikrofon ve hoparlör Raspberry Pi’nin USB portlarına bağlanıyor
- Kamera, Raspberry Pi’nin kamera portuna bağlanıyor
- README’de kullanılan bileşenler şöyle
- Raspberry Pi 5 yeni kamera portunu kullandığı için yeni kamera konektörü gerekiyor
- Kamera konektörü isteğe bağlı, ancak kamera özelliğini kullanmak için satın alınması gerekiyor
- GPIO düğmesi kurulumu için eğitimin ilk kısmının yardımcı olduğu belirtiliyor
- Proje Raspberry Pi 5 üzerinde çalışacak şekilde uyarlamaya odaklansa da, başka cihazlarda da çalışabileceği açıklanıyor
Yol haritası ve mevcut durum
- Tamamlandı olarak işaretlenen öğeler arasında temel sohbet özelliği, kamera özelliği, yanıt süresi benchmark’ı, overclock testleri ve whisper süresini kısaltma yöntemlerinin araştırılması yer alıyor
- Assistant’ı durdurup yeni soru sorma özelliği, custom tuned model kullanımı ve dış servisler için fonksiyon modeli olan
tool-bert iyileştirmesi de tamamlandı olarak işaretlenmiş
- Taşınabilir güç bağlantısı testi ve daha fazla cihazda test için Docker’a geçirme de tamamlanmış
- Kalan öğeler arasında iyileştirilmiş tutorial ve video, entropix kullanarak isteğe bağlı model oluşturma, diğer dillerde test ve daha fazla dış servis ekleme bulunuyor
- İlerleme takibi için Notion panosu henüz tamamlanmamış; bağlantı sağlanıyor
1 yorum
Hacker News yorumları
Kullanıcının gizliliğini korumak ve verilerin üçüncü taraf sunuculara gitmesini engellemek için, internet bağlantısı hiç gerektirmeyen tamamen çevrimdışı bir sesli asistan yapmak istemiştim.
İyi bir deneme, teşekkürler.
Bunun yalnızca Pi5’te mi çalıştığını, yoksa Raspberry Pi olmayan başka kartlarda da çalışıp çalışmadığını merak ediyorum.
Ciddi konuşursam, isim dikkatimi çekti; tanıtımı okuyunca “Söylediğim her şeyi Amazon’a yüklemeyen bir Alexa ise benim için de işe yarayabilir” diye düşündüm.
Varsayılan uyandırma kelimesi “hey assistant” ise “Computer”ı öneririm :) Tabii sesi https://en.wikipedia.org/wiki/Majel_Barrett gibi duyulmalı.
İhtiyacım olan şey RPi 4’ün altından kalkabileceği, HomeAssistant ile entegre olan ve yalnızca çevrimdışı çalıştığı için verilerimi hiçbir yere göndermeyen bir sesli asistan.
Şimdiye kadar gördüklerimle karşılaştırınca bu proje neredeyse tüm koşulları karşılıyor gibi görünüyor; iyi yapılmış duruyor.
Ayrıca Alexa benzeri kullanım için işe yarayacak RPi uyumlu mikrofon önerileri varsa merak ederim.
4B üzerinde büyük dil modellerini pratik biçimde çalıştırmak zor, ama illa büyük dil modeli tabanlı olması gerekmiyor.
Rhasspy topluluğunda yaygın desen şu: mikrofonlu uydu cihazlarda ucuz ve hafif uyandırma kelimesi algılama yerel olarak yapılıyor (bunun için 4B de yeterli olur), asıl kayıt ise daha iyi sonuçlar için yerel ağ üzerinden merkezi bir hub’a stream ediliyor.
eBay’de 15–20 dolar civarına bulunabiliyor.
NabuCasa, Rhasspy’nin ana geliştiricisini bu özellik üzerinde çalışması için işe aldı ve her güncellemeyle daha iyi hale geliyor.
“Neden Pi-card? Raspberry Pi - Camera Audio Recognition Device” ise, LCARS fırsatı kaçırılmış gibi.
LLM Camera Audio Recognition Service olabilirdi ve doğal olarak “computer” anahtar kelimesine tepki verirdi. Pi dışında da çalışırsa LCARS olabilir.
%100 Picard diye okunuyor ve LCARS’tan daha kolay anlaşılıyor.
Bunu denemeyi sabırsızlıkla bekliyorum.
Açık, kararlı, esnek ve gizlilik odaklı sesli asistanların hâlâ çok az olduğunu biliyorum; bu projenin ivme kazanmasını umuyorum.
Yaklaşık bir yıl önce ailem Alexa’yı gerçekten eve almak istiyordu ama evde bir Bezos gözetleme cihazı istemediğim için onları kendimiz yapmayı denemeye ikna ettim. Pi 4 üzerinde Mycroft’u seçtim ama iyi gitmedi; uyandırma kelimesi algılama tutarsızdı, entegrasyon özellikleri de yetersizdi ve o noktada proje fiilen terk edilmiş gibi görünüyordu. Projeye ve takıldığım entegrasyonlara katkı yapmaya çalıştım ama hayat araya girdi ve geri dönemedim; neyse ki ailem de Alexa’yı unuttu.
nano mu pico mu, her neyse, SO-DIMM boyutlarında bir karttı. Uyandırma kelimesi yoktu; beyaz yanan düğmeye basınca renk iki kez değişiyordu: biri basıldığını onaylamak, diğeri dinlediğini göstermek içindi. Konuşmayı bitirince renk yine değişiyor ve yanıtı söylüyordu.
Arka uçta Google tarafında bir şey kullanıyordu; kurması ve sürekli çalışır halde tutması gerçekten sinir bozucuydu ama çalışıyordu. Bende böyle iki cihaz vardı, benzer bir şeyi kendi kendime barındırmamı sağlayacak bir şey bekliyordum.
Bunun üzerinde daha fazla çalışmayı planlıyorum. Mevcut kalite hakkında fikir veren birkaç kısa çalışma demosu YouTube’da var: https://www.youtube.com/watch?v=OryGVbh5JZE
Bunu normal bir Linux makinesinde çalıştırmanın mümkün olup olmadığını merak ediyorum.
Ya da buna benzer, bunu yapabilen projeler biliyor musunuz, onu da merak ediyorum.
Daha önce aramıştım ama bu alan karmaşık ve kısıtlar incelikliydi.
Genel olarak Pi-C.A.R.D Python ve C++ kullanıyor gibi görünüyor; Python ve C++ çalıştırıp derleyebilen her yerde çalıştırmakta pek sorun olmayacağını düşünüyorum.
Yaklaşık 3 yıl önce ilk nesil RPI 4 üzerinde böyle bir şey yapmaya çalışmıştım ama donanım sınırlarına ve kendi bilgi sınırıma takıldım.
Şimdi gerçekten çalışanını görmek harika.
GPU takılabilen bir raspi hat olsa güzel olurdu, ama pratik mi ya da mümkün mü pek emin değilim
Bugünün ekran kartı yarının elektronik atığı; böyle DIY raspi projelerini güçlendirmek için ikinci bir hayat bulabilir.
Ucuz CUDA çekirdeklerinden yararlanmak için GPU/adaptör/güç kaynağı eklemek; güç, fiyat ve boyut açısından daha iyi bir SoC ya da x86 NUC çözümünden muhtemelen daha kötü olur.
PCIe’de nasıl bir sihir var bilmiyorum ama en azından piyasadaki kartlardan biri olan Atomic Pi’de “dışa açılmış” bir PCIe arayüzü vardı.
Her hâlükârda GPU küçük bir PCB üzerindeydi ve o PCB, USB3 kablosuyla anakart PCIe yuvasındaki daha küçük bir PCB’ye bağlanıyordu. Mesele şu: PCIe her neyse, USB3 kablosu üzerinden GPU’ya aktarılıp çalıştırılabiliyor.
Donanım listesinde hoparlör görüyorum; bunun konuşarak yanıt verip vermediğini merak ediyorum
Şu anda https://espeak.sourceforge.net/ kullanıyor, bu yüzden dinlemesi pek keyifli değil.
Ayrıca büyük dil modeli yanıtlarını akış olarak verdiğimiz için cevap almak çok uzun sürmüyor. Parça parça işlendiğinden bazen bir kelimenin yalnızca bir kısmı kısa süreliğine seslendirilebiliyor. Elbette bekleme süresi hangi modeli kullandığınıza ve bağlam boyutunun ne olduğuna göre de değişiyor.
Picard neden her zaman Earl Grey çayının sıcaklık tercihini de belirtmek zorunda?
O kadar akıllı bir AI ise zevkini çoktan öğrenmiş olması gerekmez miydi?
Dizide birçok karakter replikatöre daha esnek talimatlar veriyor. “Tea, Earl Grey, Hot” Picard’ın bir alışkanlığı gibi; Enterprise-D’nin replikatöründen daha ilkel yiyecek-içecek cihazlarından kalma bir huy olabilir.
Kıtlık sonrası dünyada da davalar kalmış mıdır? Muhtemelen.
Starfleet’tekilerin çoğu replikatörü doğru kullanmayı bilmiyor gibi. O kadar akıllı bir cihazı, kullanım kılavuzunu hiç okumadıkları sıradan bir ev aleti gibi kullanıyor; özelliklerin %90’ını kaçırıp sonra replikatör yemeğinin tadı kötü diye şikâyet ediyorlar.
https://i.redd.it/hluqexh3oqc91.jpg
Uyandırma kelimesi nasıl çalışıyor merak ediyorum
Sürekli dinleyip son birkaç saniyede uyandırma kelimesi veya ifadesi yoksa yok sayma şeklinde mi?
Daha kesin söylersek, birden çok ses parçasını saklayıp en eskisini atma yöntemi; yani kayan pencere (rolling window)