প্রকল্পের ধারণা ভয়েস-টু-টেক্সট হুইস্পার মডেল ব্যবহার করে আমাদের PC বা আমাদের Raspberry Pi-এর মাধ্যমে ইন্টারঅ্যাক্ট করার জন্য ভয়েস নির্দেশনা দিন.
আমরা হুইস্পার সহ একটি অর্ডার দেব যা প্রতিলিপি করা হবে, টেক্সটে রূপান্তর করা হবে এবং তারপরে যথাযথ অর্ডার কার্যকর করার জন্য বিশ্লেষণ করা হবে, যা একটি প্রোগ্রাম চালানো থেকে রাস্পবেরিপি পিনগুলিতে ভোল্টেজ দেওয়া পর্যন্ত হতে পারে।
আমি একটি পুরানো রাস্পবেরি পাই 2, একটি মাইক্রো ইউএসবি ব্যবহার করতে যাচ্ছি এবং আমি সম্প্রতি OpenAI দ্বারা প্রকাশিত ভয়েস-টু-টেক্সট মডেল ব্যবহার করব, ফিস্ ফিস্ শব্দ. নিবন্ধের শেষে আপনি দেখতে পারেন একটু বেশি ফিসফিস.
সব প্রোগ্রাম করা পাইথন.
ভয়েস দ্বারা পিসি নিয়ন্ত্রণ করে, এই ভিডিওতে এটি কীভাবে কাজ করে তার একটি প্রদর্শন আমি আপনাকে রেখেছি।
পটভূমি
পিসির সাথে এটি ব্যবহার করতে, আমাদের শুধুমাত্র একটি মাইক্রোফোন প্রয়োজন হবে।
আপনি যদি এটি RaspberryPi-এ মাউন্ট করতে যাচ্ছেন, তাহলে আপনার একটি USB মাইক্রোফোনের প্রয়োজন হবে, কারণ এটিতে থাকা জ্যাকটি শুধুমাত্র আউটপুটের জন্য।
আমাদের দরকার:
টুলটির সাধারণ উদ্দেশ্য হল ভয়েস আইডেন্টিফিকেশন। আমি এটিকে অন্যান্য ডিভাইসের ক্রিয়াকলাপে সংহত করা খুব দরকারী বলে মনে করি।
- মাইক্রো USB
- অপারেটিং সিস্টেম সহ রাস্পবেরি পিআই (রাস্পবিয়ান প্রো উদাহরণ)
- ইলেকট্রনিক্স (এলইডি, তার, 480 ওহম প্রতিরোধক এবং ব্রেডবোর্ড)
আমরা LED কে 17 পিনের সাথে সংযুক্ত করি, যেটি আমরা এই অভিজ্ঞতার জন্য সক্রিয় এবং নিষ্ক্রিয় করব।
কোড উন্নয়ন
এটি তিনটি ভাগে বিভক্ত, প্রথমটি, অডিও রেকর্ডিং যার জন্য আমি একটি কোড নিয়েছি geeksforgeeks, কারণ আমি সেই বইয়ের দোকানগুলো চিনি না। দ্বিতীয়টি, হুইস্পারের মাধ্যমে অডিওকে পাঠ্যে রূপান্তর করা এবং তৃতীয়টি, সেই পাঠ্যের চিকিত্সা এবং রাস্পবেরিপি-তে প্রতিক্রিয়া
পরীক্ষার উদাহরণে আমি শুধুমাত্র একটি Led-এর সাথে ইন্টারঅ্যাক্ট করতে যাচ্ছি, এটিকে আলোকিত বা ব্লিঙ্ক করে, কিন্তু আমরা এটিকে আমাদের প্রয়োজনের সাথে সামঞ্জস্য করার জন্য স্ক্রিপ্টটি বিকাশ করতে পারি।
আমি সচেতন যে এটি একটি রাস্পবেরি পাই 2 এবং এটি একটি রাস্পবেরি পাই 4 এর চেয়ে অনেক ধীর হতে চলেছে, তবে পরীক্ষার জন্য এটি ঠিক আছে।
আপনি এটি কাজ করার আগে, আপনি নিম্নলিখিত ইনস্টল করতে হবে
#Instalar whisper pip install git+https://github.com/openai/whisper.git sudo apt update && sudo apt install ffmpeg #para que funcione la grabación de audio python3 -m pip install sounddevice --user pip install git+https://github.com/WarrenWeckesser/wavio.git #si vas a instalarlo en la raspberry #dar permisos para usar la GPIO sudo apt install python3-gpiozero sudo usermode -aG gpio <username>
সমস্ত কোড
#!/usr/bin/env python3 import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv def main (): inicio = time.time() record_audio () model = whisper.load_model("tiny") result = model.transcribe("audio1.wav") words = result["text"].split() for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break fin = time.time() print(fin-inicio) def encender (): LED(17).on() def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1) def record_audio (): # Sampling frequency freq = 44100 # Recording duration duration = 5 # Start recorder with the given values # of duration and sample frequency recording = sd.rec(int(duration * freq), samplerate=freq, channels=2) # Record audio for the given number of seconds sd.wait() # This will convert the NumPy array to an audio # file with the given sampling frequency write("audio0.wav", freq, recording) # Convert the NumPy array to audio file wv.write("audio1.wav", recording, freq, sampwidth=2) main () #dar permisos para usar la GPIO #sudo apt install python3-gpiozero #sudo usermode -aG gpio <username> #Instalar whisper #pip install git+https://github.com/openai/whisper.git #sudo apt update && sudo apt install ffmpeg
আমি এটি পরীক্ষা করতে পারিনি কারণ আমার কাছে রাস্পবেরিপি-এর জন্য একটি মাইক্রোএসডি, বা সংযোগ করার জন্য একটি USB স্পিকার নেই, তবে আমি এটি চেষ্টা করার সাথে সাথেই আমি কিছু ত্রুটি সংশোধন করেছি যেটি স্লিপ করা সহজ।
কোডের ধাপে ধাপে ব্যাখ্যা
#!/usr/bin/env python3
আমরা কোন ভাষায় প্রোগ্রাম করেছি এবং কোন দোভাষী ব্যবহার করতে হবে তা ডিভাইসটিকে জানাতে Shebang। যদিও এটি তুচ্ছ মনে হয়, তবে এটি না রাখলে অনেক ক্ষেত্রে ত্রুটি ঘটে।
আমদানিকৃত লাইব্রেরি
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
মডেলের সাথে কাজ করতে ফিসফিস করুন
সময়, কারণ আমি স্ক্রিপ্ট চালানোর সময় নিয়ন্ত্রণ করতে এটি ব্যবহার করি, রাস্পবেরির জিপিআইও পিনের সাথে কাজ করার জন্য জিপিওজেরো এবং অডিও রেকর্ড করার জন্য সাউন্ড ডিভাইস, স্কিপি এবং ওয়াভিও
ক্রিয়াকলাপ
আমি 4টি ফাংশন তৈরি করেছি:
- প্রধান ()
- আলো ()
- পলক ফেলতে ()
- রেকর্ড_অডিও()
turn on () রাস্পবেরির পিন 17-এ ভোল্টেজ দেয় যেখানে আমরা এই ক্ষেত্রে LED পরীক্ষা করার জন্য সংযুক্ত করেছি।
def encender (): LED(17).on()
blink() on() এর মতো কিন্তু এটি একটি লুপের মধ্যে এটিকে চালু এবং বন্ধ করে LEED ব্লিঙ্ক করে।
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
record_audio() দিয়ে আমরা অডিও ফাইল রেকর্ড করি
def record_audio (): # Sampling frequency freq = 44100 # Recording duration duration = 5 # Start recorder with the given values # of duration and sample frequency recording = sd.rec(int(duration * freq), samplerate=freq, channels=2) # Record audio for the given number of seconds sd.wait() # This will convert the NumPy array to an audio # file with the given sampling frequency write("audio0.wav", freq, recording) # Convert the NumPy array to audio file wv.write("audio1.wav", recording, freq, sampwidth=2)
মেইন হল প্রধান ফাংশন, লক্ষ্য করুন যে ফাংশনের বাইরে আমাদের একমাত্র জিনিসটি হল স্ক্রিপ্টের শেষে main() কে কল করা। এইভাবে স্টার্টআপে, এটি লাইব্রেরিগুলি আমদানি করবে এবং তারপর ফাংশন কল করবে।
def main (): inicio = time.time() record_audio () model = whisper.load_model("tiny") result = model.transcribe("audio1.wav") words = result["text"].split() for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break fin = time.time() print(fin-inicio)
যে সময় আমরা ফাংশন চালানো শুরু করি সেই সময়টা আমরা বাঁচাই এবং তারপরে আমরা রেকর্ড অডিও ফাংশনকে কল করি যা আমাদের নির্দেশনা .wav, .mp3 ইত্যাদি ফাইলে রেকর্ড করবে যা আমরা পরে টেক্সটে রূপান্তর করব।
inicio = time.time() record_audio ()
একবার আমাদের কাছে অডিও হয়ে গেলে, হুইস্পার কল করা হবে এবং আমরা এটিকে বলব যে আমরা যে মডেলটি ব্যবহার করতে চাই, সেখানে 5টি উপলব্ধ রয়েছে এবং আমরা ক্ষুদ্র ব্যবহার করব, যদিও এটি সবচেয়ে ভুল কারণ এটি দ্রুততম এবং অডিওটি সহজ হবে, মাত্র 3 বা 4 শব্দ।
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
এটি দিয়ে আমরা অডিওটিকে টেক্সটে রূপান্তরিত করেছি এবং একটি ভেরিয়েবলে সংরক্ষণ করেছি। এর একটু পরিবর্তন করা যাক.
আমরা অডিওর প্রতিটি শব্দের সাথে ফলাফলকে একটি তালিকায় রূপান্তর করি
words = result["text"].split()
এবং আমাদের ডিভাইসের সাথে যোগাযোগ করার জন্য সবকিছু প্রস্তুত। এখন আমাদের শুধু আমাদের কাঙ্খিত শর্ত তৈরি করতে হবে।
যদি অডিওতে X শব্দ থাকে, তাহলে Y করুন। যেমন আমাদের একটি তালিকায় শব্দ আছে, শর্ত যোগ করা খুবই সহজ
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
লাইন
word = word.replace(',', '').replace('.', '').lower()
আমি অডিওর শব্দগুলিকে ছোট হাতের অক্ষরে রূপান্তর করতে এবং কমা এবং পিরিয়ডগুলি সরাতে এটি ব্যবহার করি। এবং এই ভাবে তুলনা ত্রুটি এড়ান
প্রতিটিতে যদি আমাদের বেছে নেওয়া শব্দগুলির কোনও থাকার শর্ত পূরণ করা হয়, তবে এটি একটি ফাংশনকে কল করে যা আমরা যা চাই তা করবে,
এখানেই আমরা এটিকে একটি পিন সক্রিয় করতে বলি যা একটি LED আলোকিত করবে বা এটিকে জ্বলজ্বল করবে৷ হয় কিছু কোড চালান, অথবা কম্পিউটার বন্ধ করুন।
এই সব একটি মৌলিক ধারণা. এখান থেকে আপনি প্রজেক্ট ডেভেলপ করতে পারবেন এবং আপনার ইচ্ছামত উন্নতি করতে পারবেন। প্রতিটি ব্যক্তি এটির জন্য একটি ভিন্ন ব্যবহার খুঁজে পেতে পারেন।
এই মন্টেজ দিয়ে আমরা যা করতে পারি
এই ধারনা যে এই montage সুবিধা নিতে আমার কাছে আসা. একবার কঙ্কালটি সশস্ত্র হয়ে গেলে, আমরা ভয়েস দ্বারা মনে আসা সমস্ত কিছু সক্রিয় করতে এটি ব্যবহার করতে পারি, আমরা একটি রিলে সক্রিয় করতে পারি যা একটি মোটর শুরু করে বা আমরা একটি স্ক্রিপ্ট চালু করতে পারি যা একটি স্ক্রিপ্ট, একটি ইমেল বা যাই হোক না কেন।
ফিসফিস কি
হুইস্পার হল একটি ভোল রিকগনিশন মডেল, বহু সংখ্যক ভাষার সাথে বহুভাষায় কাজ করে এবং ইংরেজিতে অনুবাদের অনুমতি দেয়। এটাকে আমরা টেক্সট-টু-ভয়েস টুল হিসেবে জানি, ডাল-ই-এর নির্মাতা ওপেনএআই টিম দ্বারা প্রকাশিত।