Bu projede, Python ile görüntü işleme kullanarak, bir kitabın sayfasını tarayıp sesli kitaba dönüştürmeyi amaçlıyoruz. Ayrıca, taranan sayfadan bir sonraki sayfaya geçmek için bir Arduino sistemi de kuracağız. Hadi, projemize daha yakından bakalım!
Kullanılan Malzemeler:
- Arduino UNO R3
- SG90 RC Mini (9gr) Servo Motor
- 6 V 250 RPM Motor ve Tekerlek Seti
- L298N Voltaj Regulatörlü Çift Motor Sürücü Kartı (Kırmızı PCB)
- GP Ultra 9V Pil
- 40 Pin Ayrılabilen Erkek-Erkek M-M Jumper Kablo
- 40 Pin Ayrılabilen Dişi-Erkek M-F Jumper Kablo
Projede, öncelikle DC motor kullanarak kitabın sayfasını kaldıracağız. Ardından, servo motor yardımıyla sayfayı çevireceğiz. L298N motor sürücü sayesinde DC motoru kontrol edebileceğiz. Python kodlarıyla da kitabın sayfalarını okuyarak sesli kitap oluşturacağız. İlk adım olarak Arduino devremizi kuracağız. Kitap sayfalarını okumak için telefonumuzu kullanacağız. Telefon, bir tripod yardımıyla kitaba yerleştirilecek ve bilgisayarımıza bağlanacak. Sonra, görüntü işleme yaparak kitabın sayfalarını tarayıp sesli dosyalar olarak kaydedeceğiz. Ses kaydı alındıktan sonra, Arduino’ya gönderdiğimiz bir komutla sayfa çevireceğiz. Böylece kitaplarımızı sesli kitaba dönüştürüp, sesli bir kütüphaneye sahip olabileceğiz.
Projemiz, bir kitabın sayfalarını otomatik olarak okuyup sesli hale getirmeyi amaçlıyor. İlk olarak, telefonumuza yükleyeceğimiz bir webcam uygulaması ile kitap sayfalarının görüntülerini çekeceğiz. Bu görüntüleri bilgisayarımıza aktardıktan sonra, OpenCV kütüphanesi ile sayfaları sağ ve sol olarak ayıracağız. Ayrılan sayfaları metne dönüştürüp, sesli olarak kaydedeceğiz. Her iki sayfa okunduktan sonra, Arduino ile kontrol edilen bir mekanizma sayesinde kitabın sayfası çevrilecek ve bu işlem tekrarlanacak.
Bu sistem, Python kodu ile bir kitap sayfasını kameradan alıp üzerinde bulunan metni tanıyıp sesli olarak okumayı sağlıyor. İlk adımda, OpenCV ile kameradan görüntü alınıp kaydediliyor. Sonrasında, Google’ın yapay zeka modeli, bu görüntülerdeki metni analiz ediyor. Tespit edilen metin, gTTS (Google Text-to-Speech) kullanılarak sesli hale getiriliyor ve pygame ile çalınıyor. Ardından Arduino’ya bir komut gönderilerek sayfa çevriliyor. Bu işlem, her sayfa okunduktan sonra bir sonraki sayfaya geçerek devam ediyor. Böylece, kitapları otomatik olarak sesli kitaba dönüştürürken, Arduino sayesinde fiziksel sayfa çevirmeyi de sağlıyoruz.
PYTHON KODU:
import cv2
import google.generativeai as genai
import PIL.Image
from gtts import gTTS
import os
import pandas as pd
import serial
import pygame
import time
genai.configure(api_key="")
ser = serial.Serial('COM3', 9600)
def kameradan_goruntu_al_ve_kaydet(dosya_adi="kitap_sayfa.jpeg"):
kamera = cv2.VideoCapture(0)
if not kamera.isOpened():
print("Kamera açılamadı!")
return None
# Kameradan bir kare oku
ret, kare = kamera.read()
if not ret:
print("Görüntü alınamadı!")
kamera.release()
return None
## Görüntüyü doğru renk uzayında kaydet
bgr_kare = cv2.cvtColor(kare, cv2.COLOR_BGR2RGB) # OpenCV BGR formatından RGB'ye çeviriyor
cv2.imwrite(dosya_adi, bgr_kare) # Görüntüyü dosyaya kaydet
kamera.release()
print(f"Görüntü {dosya_adi} dosyasına kaydedildi.")
return dosya_adi
while True:
kameradan_goruntu_al_ve_kaydet()
try:
# Görüntüyü yükle
img = PIL.Image.open("kitap_sayfa.jpeg")
model = genai.GenerativeModel(model_name="gemini-1.5-flash")
response = model.generate_content(["Sana bir kitap sayfası gönderdim. Bu kitabın sol ve sağ sayfaları var. önce sol sayfadaki , sonra sağ sayfada yazıları bana söyler misin", img])
if response.text:
print("Algılanan metin:", response.text)
else:
print("Görüntüde metin bulunamadı.")
except Exception as e:
print(f"Görüntü işlenirken bir hata oluştu: {e}")
text_to_speech = gTTS(response.text,lang='tr')
text_to_speech.save(f"sayfa.mp3")
pygame.init()
pygame.mixer.music.load(f'sayfa.mp3')
pygame.mixer.music.play()
# engine = pyttsx3.init()
# engine.setProperty('voice', 'turkish') # Türkçe ses motorunu seç
# engine.say("Merhaba! Bu bir metinden sese örneğidir.")
# engine.runAndWait()
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
pygame.quit()
ser.write(b'c')
time.sleep(5)
ARDUİNO KODU:
#include <Servo.h>
Servo servom;
const int in1Pin = 6;
const int in2Pin = 5;
void setup() {
Serial.begin(9600);
servom.attach(3);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
servom.write(0);
}
void loop() {
if (Serial.available() > 0)
{
char veriyioku = Serial.read();
if (veriyioku == 'c')
{
// Motoru ileri yönde çalıştır
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
delay(3000);
// Motoru durdur
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, LOW);
delay(200);
servom.write(120);
delay(500);
servom.write(0);
}
}
}
DEVRE ŞEMASI:
Servo motorun kırmızı kablosu Arduino’nun 5V’ine, kahverengi kablosu GND’sine, turuncu kablosu ise bir dijital çıkış pinine (örneğin 3. pin) bağlanır. Motor sürücüsünün 12V girişi pile, GND’si hem pile hem de Arduino’nun GND’sine bağlanır. Sürücünün 5V çıkışı Arduino’nun 5V’ine, OUT1 ve OUT2 çıkışları DC motorun uçlarına, INPUT 1 ve 2 ise Arduino’nun farklı dijital çıkış pinlerine (örneğin 5. ve 6. pinler) bağlanır. Bu bağlantılar sayesinde Arduino, servo motorun pozisyonunu ve DC motorun hızını ve yönünü kontrol edebilir.
YOUTUBE VİDEOSU:
Kitaplarınızı sesli formata dönüştürme teknolojisi, okuma alışkanlıklarınıza yeni bir boyut kazandırıyor. Bu sayede, kitaplarınızı işlerinizle meşgul olurken veya yolculuk ederken dinleyebilirsiniz. Sonraki projelerde görüşmek üzere!