Google searching talking bot | পর্ব ১০ঃ গুগল সার্চিং টকিং বট
ওয়েব ক্রলার তো বানিয়ে ফেললাম এই সিরিজের ৮ নম্বর টিউটোরিয়ালেই। এবার একটু মজার কিছু করলে কেমন হয়? গুগল সার্চ তো আমরা প্রতিদিনই করছি। এই কাজটাই একটা বটকে দিয়ে করালে কেমন হয়? আমাদের হয়ে বটটাই নাহয় গুগলে সার্চ করলো, সার্চে পাওয়া ওয়েবসাইটগুলো ব্রাউজারে নিজে থেকেই ওপেন করে দেখিয়ে দিল। আবার একটু-আধটু কথাও বলল! মজা হবে না? হ্যাঁ, এই টিউটোরিয়ালে আমরা এরকম একটি বট তৈরী করবো। আদর করে বটটির নাম দিলাম ‘গুগলি পাগলী’। এই ‘গুগলি পাগলী’ তৈরী করা শিখে লাভটা কী? এই প্রশ্নের উত্তর টিউটোরিয়ালের শেষাংশে দেওয়া হবে।
প্রয়োজনীয় যন্ত্রপাতি | পরিমাণ | প্রডাক্ট লিংক |
Raspberry Pi 4 Model B 4GB Complete Set |
1 | এখানে ক্লিক করুন |
Any compatible monitor | 1 | |
Earphone/speaker | 1 |
কোডঃ
এই হচ্ছে গুগলি পাগলীর কোডঃ
from gtts import gTTS
import os
import webbrowser
import turtle
turtle.title("Googli pagli!Your google searching companion")
turtle.setpos(0,0)
#turtle.goto(50,-200)
turtle.goto(100,-200)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("magenta") # draw head
turtle.circle(200)
#turtle.circle(100)
turtle.end_fill()
turtle.penup()
turtle.setpos(0,0)
turtle.begin_fill()
turtle.fillcolor("black") # draw eye
turtle.circle(50)
turtle.end_fill()
turtle.penup()
turtle.goto(200,0)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("black") # draw eye
turtle.circle(50)
turtle.end_fill()
turtle.penup()
turtle.goto(200,-100)
turtle.pendown()
turtle.up()
turtle.goto(30, -100)
#turtle.goto(5, -100)
turtle.setheading(-60)
turtle.width(5)
turtle.down()
turtle.begin_fill()
turtle.fillcolor("red")
turtle.circle(80, 120) # draw smile
#turtle.circle(80, 200)
turtle.end_fill()
turtle.penup()
turtle.hideturtle()
turtle.setpos(100, 210)
turtle.write("Cross this window to start ", True, align="center", font=("Arial", 20, "italic"))
turtle.done()
count=0
mytext="Hello! I am Googli pagli. Your google search companion. What can I search for you?"
language='en'
myobj = gTTS(text=mytext, lang=language, slow=False)
# Saving the converted audio in a mp3 file named
# welcome
myobj.save("googlaintro.mp3")
# Playing the converted file
os.popen("omxplayer googlaintro.mp3").readline()
print(mytext)
try:
from googlesearch import search
except ImportError:
print("No module named 'google' found")
while True:
if(count!=0):
num = random.randrange(0,4)
mytext2="search complete.Ready for next search."
language='en'
myobj = gTTS(text=mytext2, lang=language, slow=False)
# Saving the converted audio in a mp3 file named
# welcome
myobj.save("mytext2.mp3")
# Playing the converted file
#os.system("welcome.mp3")
os.popen("omxplayer mytext2.mp3").readline()
print(mytext2)
query = input()
count=count+1
for j in search(query, tld="com", num=1, stop=5, pause=2):
print(j)
url=j
webbrowser.open(url)
True
যেভাবে কাজ করবেঃ
কোডটি রান করার পর এভাবেই একটি আলাদা উইন্ডোতে ভেসে উঠবে গুগলী পাগলীর চেহারা।
রাসবেরি পাই ৩ অথবা ৪ দুটির যেকোনোটি দিয়েই এই প্রোজেক্টটি করা যাবে। অবশ্যই ইয়ারফোনটিকে রাসবেরি পাইয়ের সাথে সংযুক্ত রাখবেন।
উইন্ডোটি ক্রস করার পর এভাবেই সে পরিচিত হবে আপনার সাথে। পাগলী যা বলবে তা স্ক্রিনেও ভেসে উঠবে।
এবার আপনি যা জানতে চান তা লিখুন। ‘গুগলি পাগলী’ গুগল সার্চ করে প্রাপ্ত টপ পাঁচটি রেজাল্টের লিংক স্ক্রিনে দেখাবে ।
এখানেই শেষ নয়। কষ্ট করে আপনাকে লিংকগুলো ব্রাউজারে কপি পেস্ট করতে হবে না। সে নিজেই ওয়েবসাইটগুলো ব্রাউজারে ওপেন করে দেবে আপনার জন্য।
সার্চিং শেষ হলে ‘Search complete. Ready for next search’ কথাটি আপনি শুনতে এবং স্ক্রিনে দেখতে পাবেন।
কোডের ব্যাখ্যাঃ কোডটিতে বেশকিছু মডিউল ব্যবহার করা হয়েছে। আলোচনার সুবিধার্থে আমরা কোডটিকে চারটি ভাগে ভাগ করব।
১)ফেইস পার্ট ২)ভয়েস পার্ট ৩)সার্চিং পার্ট ৪)ডিসপ্লে পার্ট
১)ফেইস পার্টঃপ্রথমে গুগলী পাগলীর যে ফানি চেহারা স্ক্রিনে ভেসে উঠেছে তার জন্য আমরা ব্যবহার করেছি পাইথনের টার্টল মডিউল। টার্টলের মাধ্যমে যেকোনো জ্যামিতিক নকশা আঁকা সম্ভব। কম্পিউটার গ্রাফিকস ডিজাইনার এবং গেম ডেভেলপারদের জন্য টার্টল বেশ কাজে দেয়। টার্টল মডিউলকে এজন্য কোডের শুরুতেই import turtle লিখে কোডে ইমপোর্ট করা হয়েছে। গুগলী পাগলীর মুখটা বানানো হয়েছে ছোটবড় তিনটি বৃত্ত (মাথা ও দুই চোখ) এবং একটি বক্ররেখার( হাসি) সমন্বয়ে। রঙ ব্যবহার করা হয়েছে মোট তিনটি। ম্যাজেন্টা(মুখ), কালো(ঠোঁটের আউটলাইন ও চোখ) ও লাল(ঠোঁটের হাসি)। আর এগুলো সবই আঁকা হয়েছে টার্টলের বিভিন্ন ফাংশন ব্যবহার করে।
২)ভয়েস পার্টঃ
ক)টেক্সট টু স্পিচ কনভার্শনঃ টেক্সট টু স্পিচ কনভার্শনের জন্য আমরা ব্যবহার করেছি পাইথনের গুগল টেক্সট টু স্পিচ সংক্ষেপে gTTS মডিউল। কোডের শুরুতে একে ইম্পোর্ট করে নেওয়া হয়েছে।
এবার নিচের লাইনগুলো দেখা যাকঃ
Mytext= “Hello this is googli pagli, your google search companion. What can I search you you”?
lang= ‘en’
myobj = gTTS(text=mytext, lang=language, slow=False)
এখানে,
Text= যে টেক্সটটিকে স্পিচে রুপান্তরিত করা হবে। আমাদের কোডের ক্ষেত্রে টেক্সটি ছিল “Hello this is googli pagli, your google search companion. What can I search you you”?
Language= যে ভাষায় টেক্সটিকে স্পিচে কনভার্ট করা হবে। এক্ষেত্রে আমরা সিলেক্ট করেছি ‘en’ অর্থ্যাত ইংরেজি।
Slow= এটি নির্দেশ করে স্পিচ স্লো হবে কি না। এর মান হতে পারে TRUE অথবা False. আমরা চাইনি আমাদের বট থেমে থেমে কথা বলুক। তাই এখানে slow=False লেখা হয়েছে।
এবার উপরে টেক্সট থেকে রুপান্তরিত স্পিচকে একটি নাম দিয়ে এমপিথ্রি ফরম্যাটে সেভ করা প্রয়োজন। সেই কাজটিই করা হয়েছে নিচের লাইনে।
myobj.save(“googlaintro .mp3”)
গুগলি পাগলির ইন্ট্রো ভয়েস সেভ হয়ে গেল। এই একই নিয়মে ‘Search complete….’ কথাটিও সেভ করা হয়েছে।
খ)ভয়েস প্লেঃ এই প্রোগ্রামে আমরা অডিও তথা স্পিচ প্লে করার জন্য ব্যবহার করেছি omxplayer. আপনার রাসবেরি পাইতে যদি omxplayer ইন্সটল করা না থাকে তাহলে কমান্ড প্রম্পটে গিয়ে লিখুন
sudo apt-get install omxplayer
Omxplayer প্লে করার জন্য আমাদের কোডের শুরুতে OS নামক মডিউল ইম্পোর্ট করা হয়েছে।নিচের লাইনটি আমাদের ইন্ট্রো ভয়েস ফাইল প্লে করবে।
os.popen(“omxplayer googlaintro .mp3”)
একই নিয়মে আমরা ‘Search complete— ‘ কথাটিও প্লে করেছি।
৩)সার্চিং পার্টঃ সার্চিং এর জন্য আমরা কোডের শুরুতেই import করেছি পাইথনের googlesearch module এর search নামক ফাংশনটি। Search ফাংশনটি কয়েকটি প্যারামিটার নিয়ে কাজ করে। যেমন-
query=আমাদের সার্চের বিষয়।
tld=টপ লেভেল ডোমেইন।
num=প্রতি পেইজে সার্চ রেজাল্টের সংখ্যা
stop= মোট যতগুলো রেজাল্ট দেখানো হবে।
pause=দুটি HTTP রিকোয়েস্টের মধ্যে সময়ের ব্যবধান।
আমাদের কোডে নিম্নলিখিত ফর লুপটি দিয়ে সার্চিং এর কাজটি করা হয়েছে।
For j in search(query, tld=”com”, num=1, stop=5, pause=2)
Print j
এই কারনেই আমাদের বট যেকোনো কি-ওয়ার্ডের জন্যই পাঁচটি করে ফলাফল দেখায়। কোডের ‘stop=5’ এর স্থলে সংখ্যাটি পরিবর্তন করে আমাদের কাঙখিত সার্চ রেজাল্টের সংখ্যাও কম-বেশি করা যাবে।
৪)ডিসপ্লে পার্টঃউপরোলিখিত ফর লুপের পরবর্তী লাইনেই ওয়েবপেইজ ডিস্প্লের কাজটি করা হয়েছে। প্রথমে সার্চ ফাংশনের রিটার্ন করা লিংকগুলোকে url নামক একটি ভ্যারিয়েবলে সেভ করা হয়েছে।
url=j
webbrowser মডিউলটিকে আমরা প্রোগ্রামের শুরুতেই ইম্পোর্ট করে রেখেছিলাম। তারপর webbrowser মডিউলের open ফাংশনের মাধ্যমে ওয়েবপেইজগুলোকে ওপেন করা হবে।
webbrowser.open(url)
এভাবেই আমাদের বট একে একে পাঁচটি ওয়েবসাইটই ইউজারকে সরাসরি ব্রাউজারে ওপেন করে দেখাতে সক্ষম হয়েছে।
সতর্কতাঃ কোডে ইমপোর্ট করা প্রতিটি মডিউল রাসবেরি পাইতে ইন্সটল করা থাকতে হবে। না থাকলে করে নিতে হবে।
একটু ভাবুন তোঃ ইকো ডট অ্যামাজন অ্যালেক্সা আমাদের অনেকেরই প্রিয়। অ্যালেক্সা কী করে? প্রথমে ইউজারের ভয়েসকে টেক্সটে কনভার্ট করে, তারপর টেক্সটটি ইন্টারনেটে সার্চ করে, তারপর ফলাফল থেকে তথ্য সংগ্রহ করে। তথ্য সংগ্রহের পর প্রাপ্ত তথ্যকে অডিওতে কনভার্ট করে আমাদের পড়ে শোনায়। আমরা যে এই এক্সপেরিমেন্টটি করতে গিয়ে অ্যালেক্সা তৈরীর সবগুলো ধাপের মধ্যে ছোট ছোট কয়েকটি শিখে ফেললাম, কেউ কি খেয়াল করেছেন?
রেফারেন্সসমূহঃ
৩)পাইথন googlesearch ডকুমেন্টেশন।