Gemini ile YouTube özetleyici oluşturma

1. Giriş

Günümüzün hızlı tempolu dijital dünyasında zaman çok değerli. YouTube, büyük bir bilgi deposu olsa da uzun videolar önemli bir zaman yatırımı gerektirebilir. YouTube özetleyiciler bu noktada çok değerli hale gelir. Bu araçlar, uzun videoları kısa özetlere dönüştürerek kullanıcıların videonun tamamını izlemeden temel içeriği hızlı bir şekilde anlamasına olanak tanır. Bu özellik özellikle öğrenciler, profesyoneller ve online video içeriklerinden önemli bilgileri verimli bir şekilde çıkarmak isteyen herkes için yararlıdır. YouTube özetleyicileri, kullanıcıların harcadıkları zamanı en aza indirirken öğrenme ve bilgi edinme süreçlerini en üst düzeye çıkarmalarını sağlar.

Bu laboratuvarın sonunda, YouTube videolarından özet oluşturabilen çalışan bir web uygulamanız olacak. Ayrıca, Gemini API ve Google Gen AI SDK'yı nasıl kullanacağınız ve bunları birlikte entegre ederek nasıl web uygulaması oluşturacağınız hakkında daha iyi bir anlayışa sahip olacaksınız.

Web uygulamanız şöyle görünür:

13a0825947f9892b.png

YouTube videosunun bağlantısını sağlamanız yeterlidir. Gerisini Gemini halleder.

2. Başlamadan önce

Bu codelab'de, faturalandırmanın etkin olduğu bir Google Cloud projenizin olduğu varsayılmaktadır. Henüz kullanmıyorsanız başlamak için aşağıdaki talimatları uygulayabilirsiniz.

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  2. Google Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin.
  3. Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Bu araca erişmek için Google Cloud Console'un üst kısmındaki Cloud Shell'i etkinleştir'i tıklayın.

1829c3759227c19b.png

  1. Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını kontrol edin:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
  1. Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>

Alternatif olarak, PROJECT_ID kimliğini konsolda da görebilirsiniz.

4032c45803813f30.jpeg

Bu seçeneği tıkladığınızda sağ tarafta tüm projenizi ve proje kimliğini görürsünüz.

2b4c041c426d8b29.jpeg

  1. Aşağıdaki API'lerin etkinleştirildiğinden emin olun. Etkinleştirmek için aşağıdaki komutu kullanın:
  • Vertex AI API
  • Cloud Run Admin API
  • Cloud Build API
  • Cloud Resource Manager API
gcloud services enable aiplatform.googleapis.com \
                           run.googleapis.com \
                           cloudbuild.googleapis.com \
                           cloudresourcemanager.googleapis.com

gcloud komutunu kullanmak yerine bu bağlantıyı kullanarak konsolu da kullanabilirsiniz. gcloud komutları ve kullanımı için belgelere bakın.

Ön koşullar

  • Python ve HTML kodlarını okuyup yazabilir.
  • Gemini API ve Google Gen AI SDK ile çalışmaya alışkın olmak
  • Temel full-stack geliştirme bilgisi

Neler öğreneceksiniz?

  • Flask API kitaplığını kullanarak Gemini destekli bir arka uç API'si oluşturma
  • Üretken yapay zeka uygulaması oluşturma ve ön uç ile arka ucu birbirine bağlama
  • Geliştirilen üretken yapay zeka uygulamasını Cloud Run'a dağıtma

Gerekenler

  • Çalışan bir bilgisayar ve güvenilir kablosuz bağlantı
  • Meraklı bir zihin

3. Cloud Run'da Python Flask uygulaması oluşturma

Öncelikle Cloud Shell'den otomatik olarak oluşturulan şablonu kullanarak Cloud Run'da Python Flask uygulamasını oluşturacağız.

Cloud Shell Terminali'ne gidin ve Düzenleyiciyi Aç düğmesini tıklayın. b16d56e4979ec951.png

Cloud Shell düzenleyicisinin sol alt köşesinde (durum çubuğu) Cloud Code projesinin ayarlandığından emin olun. Bu proje, aşağıdaki resimde vurgulandığı gibi faturalandırmanın etkinleştirildiği etkin Google Cloud projesi olarak ayarlanmalıdır. İstenirse Yetkilendir'i tıklayın.

NOTLAR: Cloud Shell Düzenleyici başlatıldıktan ve gerekli tüm eklentiler yüklendikten sonra

Cloud Code - Sign In

düğmesi görünür. Lütfen sabırlı olun

f5003b9c38b43262.png

Durum çubuğunda etkin projeyi tıklayın ve Cloud Code pop-up'ının açılmasını bekleyin. Pop-up pencerede "Yeni Uygulama"yı seçin. 70f80078e01a02d8.png

Uygulama listesinden Cloud Run Uygulaması'nı seçin:

39abad102a72ae74.png

2/2 sayfasında Python Flask şablonunu seçin:

a78b3a0311403ad.png

Projeye istediğiniz adı verin (ör. "amazing-gemini-app") ve Tamam'ı tıklayın:

4d8f77279d9509cb.png

Bu işlem, yeni oluşturduğunuz projenin şablonunu açar.

e85a020a20d38e17.png

Google Cloud Shell ile Cloud Run'da Python Flask uygulaması oluşturmak bu kadar basittir.

4. Ön ucu oluşturma

Daha önce de belirtildiği gibi, nihai web uygulaması aşağıdaki gibi görünecektir:

13a0825947f9892b.png

Kullanıcıdan YouTube bağlantısı almak için bir giriş alanı, farklı bir model ailesi seçme seçeneği, gerekirse ek istem sağlamak için bir metin alanı ve formu göndermek için bir düğme içerir.

Bu zorlu görevi üstlenmek isterseniz kendi formunuzu tasarlayabilir veya CSS özelliklerini düzenleyebilirsiniz. Aşağıdaki kodu kopyalayıp templates klasöründeki index.html dosyanızın içeriğiyle de değiştirebilirsiniz.

<!DOCTYPE html>
<html>
 <head>
   <title>YouTube Summarizer</title>
   <style>
     body {
       font-family: sans-serif;
       display: flex;
       justify-content: center;
       align-items: center;
       min-height: 100vh;
       background-color: #f4f4f4;
     }
     .container {
       background-color: white;
       padding: 30px;
       border-radius: 8px;
       box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
       text-align: center;
     }
     h2 {
       text-align: center;
       margin-bottom: 20px;
     }
     input[type="text"], textarea, select {
       width: 100%;
       padding: 10px;
       margin-bottom: 15px;
       border: 1px solid #ccc;
       border-radius: 4px;
       box-sizing: border-box;
     }
     button {
       background-color: #4CAF50;
       color: white;
       padding: 12px 20px;
       border: none;
       border-radius: 4px;
       cursor: pointer;
     }
   </style>
 </head>
 <body>
   <div class="container">
     <h2>YouTube Summarizer</h2>
     <form action="/summarize" target="_blank" method="post">
       <input type="text" name="youtube_link" placeholder="Enter YouTube Link">
       <select name="model">
         <option value="gemini-2.0-flash-001">Gemini 2.0 Flash</option>
       </select>
       <textarea name="additional_prompt" placeholder="Write your additional prompt here. For example: 'explain to me like I am five years old'"></textarea>
       <button type="submit">Summarize</button>
     </form>
   </div>
 </body>
</html>

Bu adımı doğru şekilde yapıp yapmadığınızı test etmek için app.py dosyasını sağ tıklayın ve Run Python File in Terminal'i (Terminalde Python Dosyasını Çalıştır) seçin.

690765473f94db9c.png

Her şey yolunda gittiyse Cloud Editor'ın sağ üst tarafındaki Web Preview düğmesini tıklayıp Preview on port 8080 seçerek web uygulamanıza erişebilirsiniz.

49cbdfdf77964065.jpeg

5. Arka ucu oluşturma

Ön uç ayarlandıktan sonra, kullanıcının sağladığı YouTube videosunu özetlemek için Gemini modelini kullanan bir arka uç hizmeti oluşturmanız gerekir. Bu görevi tamamlamak için app.py dosyasının üzerine yazacağınızı unutmayın.

Kodu değiştirmeden önce sanal bir ortam oluşturmanız ve Gemini bileşenlerini çalıştırmak için gerekli kitaplıkları yüklemeniz gerekir.

Öncelikle Google Gen AI SDK kitaplığını requirements.txt dosyasına eklemeniz gerekir. Şöyle görünmelidir:

Flask==2.3.3
requests==2.31.0
debugpy # Required for debugging.
google-genai==1.2.0

İkinci olarak, arka uç kodunu başarıyla çalıştırabilmek için sanal bir ortam oluşturmanız ve requirements.txt dosyasındaki paketleri yüklemeniz gerekir.

  1. Sol üst köşedeki çubukları tıklayın ve Terminal > New Terminal'ı (Yeni Terminal) seçin (Alternatif olarak, yeni terminal açmak için Ctrl + Shift + C tuşlarına da basabilirsiniz).

2cda225f0cd71e7e.png 2. Terminalde yazarak sanal bir ortam oluşturun ve başarılı bir şekilde yüklenmesini bekleyin.

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Kendinize meydan okuyarak Flask API'yi kullanarak Gemini uç noktası oluşturabilirsiniz. app.py dosyasındaki kodunuz aşağıda verilen koda benzer olmalıdır.

import os

from flask import Flask, render_template, request
from google import genai
from google.genai import types

app = Flask(__name__)

PROJECT_ID = "REPLACE_WITH_YOUR_PROJECT_ID"

client = genai.Client(
   vertexai=True,
   project=PROJECT_ID,
   location="us-central1",
)

# Define the home page route.
@app.route('/', methods=['GET'])
def index():
   '''
   Renders the home page.
   Returns:The rendered template.
   '''
   return render_template('index.html')


def generate(youtube_link, model, additional_prompt):

   # Prepare youtube video using the provided link
   youtube_video = types.Part.from_uri(
       file_uri=youtube_link,
       mime_type="video/*",
   )

   # If addtional prompt is not provided, just append a space
   if not additional_prompt:
       additional_prompt = " "

   # Prepare content to send to the model
   contents = [
       youtube_video,
       types.Part.from_text(text="""Provide a summary of the video."""),
       additional_prompt,
   ]

   # Define content configuration
   generate_content_config = types.GenerateContentConfig(
       temperature = 1,
       top_p = 0.95,
       max_output_tokens = 8192,
       response_modalities = ["TEXT"],
   )

   return client.models.generate_content(
       model = model,
       contents = contents,
       config = generate_content_config,
   ).text

@app.route('/summarize', methods=['GET', 'POST'])
def summarize():
   '''
   Summarize the user provided YouTube video.
   Returns: Summary.
   '''

   # If the request is a POST request, process the form data.
   if request.method == 'POST':
       youtube_link = request.form['youtube_link']
       model = request.form['model']
       additional_prompt = request.form['additional_prompt']
     
       # Generate the summary.
       try:
           summary = generate(youtube_link, model, additional_prompt)
           return summary

       except ValueError as e:
           raise e
 
   # If the request is a GET request, redirect to the home page.
   else:
       return redirect('/')


if __name__ == '__main__':
   server_port = os.environ.get('PORT', '8080')
   app.run(debug=False, port=server_port, host='0.0.0.0')

Kod temelde şunları yapar:

Gerekli kitaplıkları içe aktarır:

  • Flask: Web uygulamasını oluşturmak için.
  • os: Ortam değişkeni erişimi için.
  • google.genai: Google'ın Gemini yapay zekasıyla etkileşim kurmak için kullanılır.
  • google.genai.types: Gemini için veri yapılarını tanımlamak üzere kullanılır.

Gemini istemcisini başlatma:

  • Google'ın Vertex AI'ına bağlantı kurarak uygulamanın Gemini yapay zeka modelini kullanmasını sağlar. "REPLACE_WITH_YOUR_PROJECT_ID" kısmını proje kimliğinizle değiştirdiğinizden emin olun.

generate işlevini tanımlama:

  • Bu işlev, giriş olarak bir YouTube video bağlantısı, bir Gemini modeli kimliği ve ek bir istem alır. Ardından, videoyu ve istemi Gemini'a gönderir ve oluşturulan özet metni döndürür.

Ana Sayfa Rotasını Tanımlama (/):

  • Bu işlev, kullanıcının bir YouTube bağlantısı girebileceği bir formun gösterildiği index.html şablonunu oluşturur.

Özetleme Rotasını Tanımlama (/summarize):

  • Bu işlev, form gönderimlerini işler. Formdan YouTube bağlantısını, modeli ve istemi alır, özet almak için generate işlevini çağırır ve ardından özeti result.html şablonunda gösterir.

Uygulamayı çalıştırma:

  • Ortam değişkenlerinden sunucu bağlantı noktasını alır ve Flask web sunucusunu başlatır.

Kodu, terminalden app.py dosyasını çalıştırarak test edebilirsiniz. Ön ucu test etmek için kullanılan yöntemle aynıdır. app.py dosyasını sağ tıklayın ve Run Python File in Terminal'ı (Terminalde Python Dosyası Çalıştır) seçin.

Uygulamanızı test etmeye başlayın. Beklendiği gibi çalışıyor olmalıdır.

6. Web Uygulamasını Dağıtma

Çalışan bir üretken yapay zeka uygulamanız olduğuna göre, uygulamayı Cloud Run'a dağıtarak arkadaşlarınız ve iş arkadaşlarınızla paylaşabilir ve denemelerini sağlayabilirsiniz.

Cloud Shell Terminali'ne gidin ve mevcut projenin etkin projeniz olarak yapılandırıldığından emin olun. Aksi takdirde, proje kimliğini ayarlamak için gcloud configure komutunu kullanmanız gerekir:

gcloud config set project [PROJECT_ID]

[PROJECT_ID] ifadesini kendi proje kimliğinizle değiştirmeyi unutmayın. Terminaldeki mevcut çalışma dizininizin **amazing-gemini-app** olduğundan emin olun. Ardından aşağıdaki komutları sırayla tek tek girin:

gcloud run deploy --source .

Hizmetiniz için bir ad girmeniz istenir. Örneğin, "youtube-summarizer" adını girebilirsiniz. "us-central1" bölgesi için ilgili numarayı seçin. Kimliği doğrulanmamış çağrılara izin vermek isteyip istemediğiniz sorulduğunda "y" deyin. Bunun bir demo uygulaması olması nedeniyle burada kimliği doğrulanmamış erişime izin verildiğini unutmayın. Kurumsal ve üretim uygulamalarınız için uygun kimlik doğrulama yöntemini kullanmanız önerilir.

Dağıtım tamamlandığında aşağıdakine benzer bir bağlantı alırsınız:

https://amazing-gemini-app-*******.a.run.app/

Uygulamanızı gizli pencereden veya mobil cihazınızdan kullanmaya devam edebilirsiniz. Bu özellik zaten kullanıma sunulmuş olmalıdır.

7. Zorluk

Şimdi parlamanın tam zamanı. Videoları doğrudan bilgisayarınızdan yükleyebilmek için kodu değiştirecek bilgiye sahip misiniz?

8. Temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:

  1. Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
  2. Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
  3. İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
  4. Alternatif olarak, konsolda Cloud Run'a gidebilir, yeni dağıttığınız hizmeti seçip silebilirsiniz.