Üretken seslerin neler yapabileceğini biliyor musunuz? Hangi geniş olanakların önünü açıyorlar ve bunlardan kaç alan yararlanabilir?
Belki bir video blogu veya kitabı seslendirmek için bir uygulamaya ihtiyacınız vardır. Belki profesyonel bir seslendirme ile bir oyun karakterine hayat vermek istiyorsunuz. Yabancı dil öğrenmek için bir uygulama oluşturmaya ne dersiniz?
Bugün lablab.ai sizin için AI ses teknolojilerini daha iyi tanımanıza yardımcı olacak bir eğitim hazırladı! Hadi dalalım!
Piyasada çeşitli " üretken yapay zeka " araçlarının ortaya çıkmasıyla birlikte, yazılım geliştirme için en heyecan verici zamanlardan biri. Sadece adını verin, kapak mektubu oluşturma? Kontrol etmek! E-posta üretimi? Kontrol etmek! Otomatik kod yorumu oluşturma? Kontrol etmek! Kodlama ve yazılım geliştirmenin dışında bile kullanım senaryosu olanakları çok büyüktür.
Artık çeşitli görüntü oluşturma modelleri ile metin istemli görüntüler üretebiliyoruz. Böylece, üretilen varlıkları çeşitli ürünlerimize dahil etmemizi mümkün kılıyor. Bir sonraki soru şu: Peki ya sesler? Son birkaç yıldaki kullanıcı deneyimi trendi, ortaya çıkan trendlerden biri olarak "sesli komut"tan bahsetti.
Oluşturduğumuz yazılımın özelliklerden biri olarak sesleri de içermesi doğaldır. Bu nedenle, bu eğitimde ElevenLabs tarafından sunulan, rastgele kelimeler üreten ve bunları hecelemesini sağlayan " Konuşma Sentezi " özelliğini basit bir uygulamada sergileyeceğiz. Bu Python tabanlı uygulamanın kullanıcı arayüzünü oluşturmak için veri bilimi projelerini paylaşmaya yönelik yeni bir kullanıcı arayüzü kitaplığı olan Streamlit'i kullanacağız.
ElevenLabs , konuşma sentezi çözümü sunan bir ses teknolojisi araştırma şirketidir. Kullanımı kolay API ile geliştiricilerin yapay zekayı kullanarak yüksek kaliteli konuşmalar oluşturmasına olanak tanır. Bu, çok sayıda sesli kitap ve podcast üzerinde eğitilmiş yapay zeka modeliyle mümkün oluyor. Eğitim, yapay zekanın konuşma oluşturmada öngörülebilir ve yüksek kaliteli sonuçlar sunmasına olanak tanıyor.
ElevenLabs'ın sunduğu iki ana özellik var; bunlardan ilki, kullanıcıların kayıtlı seslerden ve/veya mevcut önceden hazırlanmış seslerden sesleri kopyalayabildiği ve ayrıca sesleri cinsiyet, yaş, etnik köken ve ırklara göre "tasarlayabildiği" VoiceLab'dır. Kullanıcılar üzerinde çalışacakları seslere sahip olduklarında, bir sonraki özellik olan Konuşma Sentezi'ne geçebilirler; burada kendi tasarladıkları sesleri veya yalnızca önceden hazırlanmış sesleri kullanarak konuşmalar üretebilirler.
Claude , yapay zeka sistemlerinin birlikte çalışabilirliğini, sağlamlığını ve güvenliğini artırmaya odaklanan bir yapay zeka araştırma kuruluşu olan Anthropic tarafından geliştirilen en son yapay zeka modelidir.
Claude modeli, insan benzeri yanıtlar üretmek üzere tasarlanmıştır; bu da onu içerik oluşturma, hukuk ve müşteri hizmetlerine kadar çok çeşitli uygulamalar için güçlü bir araç haline getirir. Piyasadaki diğer tüm yapay zeka modelleri gibi Claude da çeşitli internet metinleri konusunda eğitimlidir. Ancak çoğu yapay zeka modelinin aksine, kullanıcılar için "zararlı" veya "gerçek dışı" olduğunu düşündüğü çıktıların reddedilmesini mümkün kılan "güvenlik" konusuna odaklanıyor.
Streamlit , geliştiricilerin ve veri bilimcilerinin görsel olarak çekici ve özelleştirilmiş web uygulamaları oluşturmasını ve paylaşmasını kolaylaştıran ve mümkün kılan açık kaynaklı bir Python kitaplığıdır. Geliştiriciler, tam özellikli veri bilimi uygulamalarını dakikalar içinde oluşturmak ve dağıtmak için Streamlit'i kullanabilir. Veri komut dosyalarını kullanıcı arayüzü bileşenlerine dönüştürmek için kullanılabilecek basit ve sezgisel API sayesinde bu mümkün hale gelir.
Bu eğitimde geçeceğimiz en az dört adım var. Streamlit kullanarak kullanıcı arayüzleri geliştirme konusunda genel bir fikir edinmek için öncelikle Streamlit tabanlı projeyi başlatmamız gerekiyor.
Daha sonra, Claude modelinin bize genellikle yanlış yazılan rastgele bir kelime vermesini sağlamak için mühendislik istemiyle başlayarak daha fazla özellik eklemeye başlıyoruz. Bundan sonra, çok dilli modelin sözcükleri nasıl yazdığını göstermek için ElevenLabs tarafından sağlanan metinden sese oluşturma özelliğini ekleyeceğiz. Son olarak basit uygulamayı test edeceğiz.
Hadi kodlama eylemine geçelim! Öncelikle projemiz için bir dizin oluşturalım ve içine girelim!
mkdir randomwords cd randomwords
Daha sonra bu dizini Streamlit projemizin temeli olarak kullanacağız. Streamlit projesi aslında bir Python projesi olduğu için Python projemizi başlatmak için sanal ortamımızı tanımlayıp aktif hale getirmek gibi bazı adımlar yapmamız gerekiyor.
# Creating the virtual environment python -m venv env # Activate the virtual environment # On Linux/Mac source env/bin/activate # On Windows: .\env\Scripts\activate
Etkinleştirildiğinde, terminalimizin çıktısı sanal ortamın adını (env) şu şekilde göstermelidir:
Sırada bu proje için ihtiyacımız olan kütüphaneleri kurmanın zamanı geldi! streamlit
, anthropic
ve elevenlabs
kütüphanesini kurmak için pip
komutunu kullanalım. Ayrıca, elevenlabs
işlevinden birinde Pydantic ile ilgili bir hatayı önlemek için sürüm kilitli bir pydantic
kütüphanesi kurduğumuzu unutmayın.
pip install streamlit anthropic elevenlabs "pydantic==1.*"
Projenin tüm gerekliliklerini bir kenara bıraktığımıza göre, şimdi kodlama kısmına geçelim! Proje dizinimizin içinde yeni bir dosya oluşturun, buna randomwords_app.py
adını verelim.
touch randomwords_app.py
Dosya oluşturulduktan sonra dosyayı favori kod düzenleyicimizde veya entegre geliştirme ortamımızda (IDE) açalım. Başlangıç olarak, basit uygulamamızı mümkün olan en basit parçalardan, bir başlıktan ve resim yazısı için bir metinden oluşturalım!
import streamlit as st st.title("Random Words Generator") st.text("Hello, this is a random words generator app")
Proje başlatma bölümümüzü tamamlamak için uygulamayı çalıştırmayı test edelim. Mevcut çalışma dizinimizin hala projemizin içinde olduğundan ve sanal ortamımızın zaten aktif olduğundan emin olun. Her şey hazır olduğunda uygulamayı çalıştırmak için streamlit run <app-name>
kullanın.
streamlit run randomwords_app.py
Uygulama varsayılan tarayıcılarımızda otomatik olarak açılmalıdır! şimdilik başlığı ve metni göstermesi gerekiyor. Daha sonra Anthropic'in Claude modelini kullanarak rastgele kelime üretme özelliğini ekleyeceğiz.
Ancak son bir şey olarak, kullanacağımız hizmetler için, yani Anthropic'in Claude modeli ve ElevenLabs'ın Konuşma Sentezi özelliği için API anahtarlarını uygulamamıza sağlamamız gerekecek. Bu anahtarlar hassas kabul edildiğinden onları güvenli ve izole bir yerde saklamalıyız.
Ancak bu sefer bunları bir .env
dosyasında saklamıyoruz. Bunun nedeni Streamlit'in ortam değişkenlerini farklı şekilde ele almasıdır. Belgelere göre .streamlit
dizini içinde gizli bir yapılandırma dosyası oluşturmamız gerekiyor. Projemizin içinde dizini oluşturabilir ve ardından dosyayı oluşturabiliriz.
mkdir .streamlit touch .streamlit/secrets.toml
Oluşturduğumuz TOML dosyasını düzenleyelim, TOML dosyasının normal .env
dosyasından farklı formatlama kullandığını unutmayın.
xi_api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" claude_key = "sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Bu adımda rastgele kelimeyi üretecek bir buton, oluşturulan kelimeyi gösterecek başlık elemanını ve kelimenin anlamını gösterecek alt başlığı ekleyeceğiz. Bununla birlikte, bir webdev geçmişinden geldiğim için, UI öğelerinin konteynerlerin içine yerleştirilmesi ve düzenlenmesi gerektiğine kuvvetle inanıyorum. Yani tam olarak bunu yapacağız.
Öncelikle bazı import ifadeleri ekleyelim. Rastgele kelimelerimizi oluşturmak için anthropic
kütüphaneyi içe aktaracağız.
import streamlit as st import anthropic
Daha sonra UI kısmına geçmeden önce öncelikle kelime üretme fonksiyonumuzu oluşturalım.
def generate_word(): prompt = (f"{anthropic.HUMAN_PROMPT} Give me one non-English word that's commonly misspelled and the meaning. Please strictly follow the format! example: Word: Schadenfreude; Meaning: joy at other's expenses." f"{anthropic.AI_PROMPT} Word: Karaoke; Meaning: a form of entertainment where people sing popular songs over pre-recorded backing tracks." f"{anthropic.HUMAN_PROMPT} Great! just like that. Remember, only respond following the pattern.") c = anthropic.Anthropic(api_key=st.secrets["claude_key"]) resp = c.completions.create( prompt=f"{prompt} {anthropic.AI_PROMPT}", stop_sequences=[anthropic.HUMAN_PROMPT], model="claude-v1.3-100k", max_tokens_to_sample=900, ) print(resp.completion) return resp.completion
Bu fonksiyonda en ağır kaldırma ** Anthropic'in Claude modu **l (Teşekkürler, Claude ! 😉) tarafından yapılır. Ancak bu işlevdeki bizim rolümüz, Claude'un tam formatı tutarlı bir şekilde döndürmesini nasıl sağlayacağımızdır. Bu yüzden hem Claude'a "formatı sıkı bir şekilde takip etmesi" talimatını vermemiz hem de ilk istemimizin sonrasına ekleyerek ona örnek bir yanıt vermemiz gerekiyor.
Son olarak Claude'dan "Yalnızca kalıba göre yanıt vermeyi unutmayın" diyerek anlaşmalarımıza uymasını sağlıyoruz. İşlev, Claude'dan gelen yanıtı döndürerek sona erer.
Şimdi kullanıcı arayüzünü düzenlemeye geri dönelim!
st.title("Random Words Generator") with st.container(): st.header("Random Word") random_word = st.subheader("-") word_meaning = st.text("Meaning: -") st.write("Click the `Generate` button to generate new word") if st.button("Generate"): result = generate_word() # Split the string on the semicolon split_string = result.split(";") # Split the first part on ": " to get the word word = split_string[0].split(": ")[1] # Split the second part on ": " to get the meaning meaning = split_string[1].split(": ")[1] print(f"word result: {word}") random_word.subheader(word) word_meaning.text(f"Meaning: {meaning}")
Bu sefer içinde bazı elementlerin bulunduğu bir kap ekledik. Rastgele sözcüğü görüntülemek için başlık, alt başlık ve sözcüğün anlamını gösteren metin öğesi. Ayrıca uygulamanın nasıl kullanılacağına dair ipucunu gösteren bir metnimiz ve bunun altında bir düğmemiz var.
Streamlit'te , düğmeye tıklandığında True
değerini döndüren koşullu bir ifade kullanarak click olay işleyicisini bildirebiliriz. Bu kodda, oluşturulan kelimeyi ve anlamını döndüren generate_word()
fonksiyonunu çağırıyoruz ve sonucu sırasıyla kelime ve anlam için ayrı değişkenlere bölüyoruz. Son olarak alt başlığı ve metin öğesini kelimeyi ve anlamını gösterecek şekilde güncelliyoruz.
Kodumuzu bir kez daha kontrol edelim! İçe aktarma ifadelerini, rastgele sözcük oluşturma işlevini ve alt başlığı içeren güncellenmiş kullanıcı arayüzünü ve metin öğelerinin yanı sıra generate_word()
işlevini çağırarak sözcüğü üreten düğmeyi içermelidir.
import streamlit as st import anthropic def generate_word(): prompt = (f"{anthropic.HUMAN_PROMPT} Give me one non-English word that's commonly misspelled and the meaning. Please strictly follow the format! example: Word: Schadenfreude; Meaning: joy at other's expenses." f"{anthropic.AI_PROMPT} Word: Karaoke; Meaning: a form of entertainment where people sing popular songs over pre-recorded backing tracks." f"{anthropic.HUMAN_PROMPT} Great! just like that. Remember, only respond following the pattern.") c = anthropic.Anthropic(api_key=st.secrets["claude_key"]) resp = c.completions.create( prompt=f"{prompt} {anthropic.AI_PROMPT}", stop_sequences=[anthropic.HUMAN_PROMPT], model="claude-v1.3-100k", max_tokens_to_sample=900, ) print(resp.completion) return resp.completion st.title("Random Words Generator") with st.container(): st.header("Random Word") random_word = st.subheader("-") word_meaning = st.text("Meaning: -") st.write("Click the `Generate` button to generate new word") if st.button("Generate"): result = generate_word() # Split the string on the semicolon split_string = result.split(";") # Split the first part on ": " to get the word word = split_string[0].split(": ")[1] # Split the second part on ": " to get the meaning meaning = split_string[1].split(": ")[1] print(f"word result: {word}") random_word.subheader(word) word_meaning.text(f"Meaning: {meaning}")
Uygulamayı aynı komutla bir kez daha çalıştıralım. Ayrıca, uygulamayı daha önce çalıştırmışsak, sağ üst menüye tıklayıp " Yeniden Çalıştır " seçeneğine tıklayarak uygulamayı yeniden çalıştırabiliriz.
Bu güncellenmiş kullanıcı arayüzünü göstermelidir.
Şimdi Generate
düğmesine tıklamayı deneyelim!
Streamlit'in güzel yanlarından biri de yükleme işlemini gerçekleştirmesi ve yükleme göstergesini kutudan çıkarmasıdır. Sağ üst köşede göstergenin yanı sıra işlemi " durdurma " seçeneğini de görmeliyiz. Güzel, değil mi?
Birkaç saniye sonra sonuç kullanıcı arayüzünde gösterilmelidir.
Mükemmel! Uygulamanın, Claude modelinden oluşturulan metni doğru şekilde kelime ve anlam olarak ayırdığına dikkat edin. Ancak sonuç beklenen formatta çıkmazsa her zaman Generate
butonuna tekrar tıklayabiliriz.
Bir sonraki adım, bu uygulamanın ana özelliği, konuşma oluşturmayı rastgele kelime oluşturucumuza dahil etmektir. Bu adım, ElevenLabs tarafından sağlanan API kullanılarak ses dosyasının nasıl oluşturulacağını göstermenin yanı sıra, ElevenLabs'ın çok dilli modelinin yeteneklerini de göstermeye hizmet eder.
Bu bölümün ilk adımı, muhtemelen tahmin ettiğiniz gibi, daha fazla import ifadesi eklemektir! O halde elevenlabs
konuşma oluşturma özelliği için kullanacağımız bazı işlevleri ekleyelim.
import streamlit as st import anthropic ++ from elevenlabs import generate, set_api_key
Daha sonra, konuşma oluşturma işlemini gerçekleştirecek işlevi tanımlayacağız.
def generate_speech(word): set_api_key(st.secrets['xi_api_key']) audio = generate( text=word, voice="Bella", model='eleven_multilingual_v1' ) return audio
Python'un basitliği ve okunabilirliği ve ayrıca ElevenLabs'ın kullanımı kolay API'si sayesinde, konuşmayı yalnızca bu kodu kullanarak üretebiliriz! İşlev, konuşmayı oluşturmak için kullandığımız rastgele sözcüğü kabul eder. Ayrıca, çok dilli bir model olan "eleven_multilingual_v1" modelini de özellikle kullanıyoruz; yabancı ve yaygın olarak yanlış yazılan kelimelerin yazılışını ve telaffuzunu göstermek için kullanım örneğimiz için mükemmel! Son olarak, bu eğitim için ElevenLabs tarafından sağlanan önceden hazırlanmış seslerden biri olan " Bella " sesini kullanıyoruz.
Daha sonra, oluşturulan konuşmayı oynatmak için bir ses oynatıcı ekleyeceğiz.
print(f"word result: {word}") random_word.subheader(word) word_meaning.text(f"Meaning: {meaning}") ++ speech = generate_speech(word) ++ st.audio(speech, format='audio/mpeg')
Önceki kodumuzun hemen altına, oluşturulan konuşmayı depolamak için değişkeni ekliyoruz ve konuşmayı Streamlit'in st.audio
işlevi tarafından sağlanan ses oynatıcısını kullanarak çalıştırıyoruz. Bu noktada, uygulamamız beklendiği gibi çalışmalı ve ses oynatıcısını yalnızca "okunabilecek" rastgele bir kelime olduğunda göstermelidir.
Nasıl çalıştığını merak mı ediyorsunuz? Ben de! Şimdi uygulamayı test edelim!
Uygulamayı streamlit run
kullanarak tekrar çalıştıralım veya uygulamayı zaten çalıştırıyorsak yeniden çalıştıralım. En son bıraktığımız zamankiyle tamamen aynı görünmeli. Ancak bu sefer "Oluştur" butonuna tıklamayı deneyelim!
İnanılmaz! Bu sefer uygulama aynı zamanda bir ses oynatıcısını da gösteriyor! Oynamayı deneyelim. Çok dilli modeli kullanarak oluşturulan konuşmada, kelimenin köken diline yakın aksan ve tonlama kullanılmalıdır. Örneğin "girişimci" Fransızca aksanıyla telaffuz edilmelidir.
Bu kısa eğitimde, ElevenLabs tarafından sunulan konuşma oluşturma teknolojisinin yeteneklerini araştırdığımızı umuyoruz. Çok dilli model sayesinde İngilizce bilmeyen dinleyicilere yönelik konuşmalar oluşturmak kolaydır. Kullanım durumumuzda, İngilizce dışında sıklıkla yanlış yazılan kelimeleri telaffuz etmenin ve hecelemenin doğru yolunu bulmamıza yardımcı olacak çok dilli bir modele ihtiyacımız var.
28 Temmuz'da lablab.ai , ElevenLabs modelleriyle kendi sesli yapay zeka uygulamanızı oluşturabileceğiniz bir yarışma başlatıyor ! (Ayrıca, hackathon teknolojisiyle doğrudan rekabet halinde olmadıkları sürece büyük dil modelleri, görüntü ve video oluşturma modelleri vb. gibi diğer AI modellerinden de yararlanabilirsiniz).
*Your final submission should consist of a ready-to-play working prototype of your idea, a video pitch, and a presentation showcasing your solution.
BURADA daha fazla eğitim bulabilir ve en son teknolojilerle geliştirmek için diğer hackathon'lara KATILABİLİRSİNİZ !
Ve bu makalenin yazarı Septian Adi Nugraha'ya büyük teşekkürler. 💚