دستیار شخصی
آموزش‌های پایه‌ای هوش مصنوعیآموزش‌های پیشرفته هوش مصنوعیپایتون و ابزارهای یادگیری عمیقپردازش گفتار

طراحی و ساخت دستیار شخصی مجهز به هوش مصنوعی به زبان پایتون

    0

    یک دستیار شخصی مجهز به هوش مصنوعی درواقع نرم‌افزاری است که دستورات گفتاری و نوشتاری شما را متوجه می‌شود و کاری که به آن محول کرده‌اید را به انجام می‌رساند. این دستیار در حقیقت نمونه‌­ای از هوش مصنوعی ضعیف weak AI به‌شمار می‌آید زیرا تنها خواسته‌های کاربر را انجام می‌دهد.

    آیا قصد دارید یک دستیار شخصی مثل سیری Siri شرکت اپل، کورتانای Cortana شرکت مایکروسافت یا دستیار صوتی گوگل بسازید؟

    با دنبال کردن این مقاله می‌توانید در چند مرحله ساده یک دستیار شخصی بسازید. زبان برنامه‌نویسی پایتون که در این مقاله مورد استفاده قرار می‌گیرد، پرکاربردترین زبان مورد استفاده برنامه‌نویسان است که می‌توان با استفاده از آن دستیار شخصی مجهز به هوش مصنوعی ساخت که مسائل طرح شده توسط کاربر را اجرا کند. درادامه نحوه ساخت یک دستیار شخصی صوتی را با استفاده از پایتون شرح خواهیم داد.

    قابلیت‌های دستیار شخصی:

    دستیار صوتی که طی این آموزش طراحی خواهد شد دارای توانایی‌ها زیر است:

    • باز کردن برنامه‌هایی از قبیل یوتیوب، جی‌میل، گوگل کروم و stack overflow
    • اعلام ساعت
    • گرفتن عکس
    • جستجو در وب‌سایت ویکی‌پدیا و جمع‌آوری داده از آن
    • پیش‌بینی آب و هوای شهرهای مختلف
    • نشان دادن سر خط خبرهای وب‌سایت Times of India
    • پاسخ دادن به سوالات محاسباتی و جغرافیایی

    پکیج‌های موردنیاز:

    برای ساخت یک دستیار شخصی صوتی لازم است پکیج‌های زیر را به کمک pip نصب کنید.

    • Speech recognition: تشخیص گفتار یکی از مهمترین مولفه‌هایی مورد استفاده در دستگاه‌های هوش مصنوعی و خانه‌های خودکار است. تابع اصلی این کتابخانه زمانی که یک صدا شنیده شود، این کتابخانه سعی می‌کند صدای انسان را در آن میان شناسایی کرده و گفتار را به نوشتار تبدیل کند.
    • pyttsx3: pyttsx3 کتابخانه‌ای پایتونی است که نوشتار را به گفتار تبدیل می‌کند. این پکیج از موتورهای تبدیل نوشتار به گفتار در سیستم‌عامل‌های Mac os x، ویندوز و لینوکس پشتیبانی می‌کند.
    • wikipedia: ویکی‌پدیا یک دایره‌المعارف آنلاین و چندزبانه است که در میان افراد تحصیل‌کرده از دانش‌آموزان گرفته تا اساتید دانشگاه بسیار پرکاربرد است. این پکیج در پایتون داده‌های موردنیاز ما را از ویکی‌پدیا استخراج می‌کند.
    • ecapture : این ماژول برای اجرای دستورات مبنی گرفتن عکس توسط دوربین دستگاه مدنظر لازم است.
    • datetime : datetime نیز یک ماژول تعبیه‌شده در پایتون است که با تاریخ و زمان کار می­کند.
    • os : این ماژول یک کتابخانه استاندارد در پایتون است که امکان تعامل با سیستم‌عامل را فراهم می‌آورد.
    • time : ماژول time برای نشان دادن زمان به‌کار گرفته می‌شود.
    • Web browser :Web browser یک پکیج تعبیه‌شده در پایتون است که داده‌ها را از صفحات وب استخراج می‌کند.
    • Subprocess: Subprocess یک کتابخانه استاندارد است که دستورات مختلف سیستم همچون خاموش کردن یا راه‌اندازی مجدد سیستم را پردازش می‌کند.
    • Json: ماژول Json نیز برای مرتب‌سازی و ردوبدل کردن داده‌ها مورداستفاده قرار می‌گیرد.
    • request: ماژول request برای ارسال انواع درخواست‌هایHTTP استفاده می‌شود. این ماژول یک URL را به‌عنوان پارامتر می‌گیرد و سپس امکان دسترسی به آن را فراهم می‌کند.
    • wolfram alpha :wolfram alpha یک رابط برنامه‌نویسی کاربردی است که می‌تواند با استفاده از الگوریتم‌های wolfram پاسخ­‌های مناسب را آماده کند.

    اجرا:

    ابتدا کتابخانه‌های ذکرشده در بالا را وارد کنید:

    تنظیم موتور گفتار:

    ماژول pyttsx3 را در یک متغیر به نام engine ذخیره می‌کنیم. Sapi5 نیز یک موتور تبدیل نوشتار به گفتار متعلق به شرکت مایکروسافت است که برای تشخیص صدا استفاده می‌شود. آی‌دی voice را می‌توان برابر ۰ یا ۱ گذاشت که ۰ به معنای صدای مردانه و ۱ نشان‌دهنده صدای زنانه است.

    حالا یک تابع به نام speak تعریف می‌کنیم که نوشتار را به گفتار را تبدیل کند. تابع speak، متن را به عنوان آرگومان دریافت کرده و به علاوه تابع engine را تعریف می‌کند.

    runAndWait: این تابع در زمانی که دستورات جاری در حال پردازش هستند، غیرفعال است. تابع runAndWait در ازای هر پردازش برای تابع engine یک اعلان ارسال می‌کند و زمانی برمی‌گردد که همه دستوراتی که در صف اجرا قرار گرفته بودند، به انجام برسند.

    تعریف یک تابع برای خوش‌آمدگویی به کاربر:

    یک تابع به نام wishMe برای دستیار هوش مصنوعی تعریف می‌کنیم که به کاربر خوش‌آمد بگوید. تابع now().hour ساعتی از روز که در آن هستیم را مشخص می‌کند. اگر ساعت بزرگ‌تر از عدد صفر و کوچک‌تر از ۱۲ باشد، دستیار صوتی به کاربر «Good Morning» می‌گوید، اگر ساعت بین عدد ۱۲ و ۱۸ باشد، دستیار پیام «Good Afternoon» را به کاربر نمایش می‌دهد و در غیر این‌صورت پیام «Good evening» را نشان خواهد داد.

    تنظیم تابع command  برای دستیار هوش مصنوعی:

    تابع takecommand را برای دستیار هوش مصنوعی خود تعریف می‌کنیم تا بتواند زبان انسان‌ها را درک کرده و دریافت کند. میکروفن دستگاه گفتار انسان را دریافت می‌کند و شناساگر این گفتار را شناسایی می‌کند تا بتواند به آن پاسخ دهد. فرایند مدیریت استثنا نیز برای مدیریت خطاهایی استفاده می‌شود که در زمان اجرای برنامه در اثر مواجهه با موارد استثنا پیش می‌آیند. تابع recognize_google نیز از google audio برای تشخیص گفتار استفاده می‌کند.

    تابع Main:

    کار تابع main  از این‌جا شروع می‌شود و دستوراتی که کاربر می‌دهد در متغیر statement ذخیره خواهند شد.

    اگر کلمات فعال‌کننده زیر در دستوراتی باشند که توسط کاربر گفته شده و در متغیر  ذخیره شده‌اند، دستیار مجازی جملات زیر را بیان خواهد کرد:

    قابلیت اول: گرفتن داده‌ها از ویکی‌پدیا

    دستور زیر برای استخراج داده از ویکی‌پدیا استفاده می‌شود. تابع wikipedia.summary() دو آرگومان می‌گیرد:

    ۱. متغیر statement که محتویات آن توسط کاربر داده شده و ۲. تعداد جملاتی که باید از ویکی‌پدیا دریافت کرده و در متغیر result ذخیره کند.

    قابلیت دوم: دسترسی دادن به مرورگرها از قبیل گوگل کروم، سامانه GMail و سایت یوتیوب

    مرورگر داده‌ها را از صفحات وب استخراج می‌کند. تابع open_new_tab،URL که می‌خواهیم به آن دسترسی داشته باشیم را به عنوان پارامتر دریافت می‌کند. تابع Python time sleep نیز تعریف می‌شود تا در اجرای برنامه‌ها تأخیر ایجاد کند. درواقع می‌توان با استفاده از این تابع زمانی مشخص (برحسب ثانیه) برای توقف اجرای برنامه تعیین کرد.

    قابلیت سوم: نشان دادن زمان

    تابع datetime.now() زمان را در هر لحظه با گفتن ساعت، دقیقه و ثانیه نشان می‌دهد و آن را در متغیری به نام strTime ذخیره می‌کند.

    قابلیت چهارم: نمایش دادن سر خط خبرها

    اگر کاربر از دستیار صوتی خود بخواهد که وی را از جدیدترین اخبار روز مطلع سازد، دستیار صوتی به این صورت برنامه‌ریزی شده که با استفاده از تابع web browser جدیدترین سرتیترهای سایت Time of India را برای کاربر به نمایش درآورد.

    قابلیت پنجم: عکس گرفتن

    تابع ec.capture() برای گرفتن عکس توسط دوربین دستگاه شما استفاده می‌شود. این تابع ۳ پارامتر دارد.

    1. اندیس دوربین (Camera index): اندیس اولین دوربینی که متصل می‌شود ۰ و اندیس دوربین بعدی ۱ خواهد بود.
    2. نام پنجره (Window name): این پارامتر می‌تواند یک متغیر یا یک رشته باشد. اگر نمی‌خواهید پنجره‌ای ببینید، مقدار این پارامتر را False تعریف کنید.
    3. نام فایل (Save name): نامی است که تصویر گرفته شده توسط دوربین با آن ذخیره خواهد شد. اگر نمی‌خواهید عکسی ذخیره شود، مقدار این پارامتر را False تعریف کنید.

    قابلیت ششم: جستوجو در اینترنت

    به کمک تابع web browser می‌توانید اطلاعات موردنیاز را جستوجو کنید. تنها کافی است دستورات کاربر را به تابع open_new_tab() بدهید. برای مثال، اگر کاربر بگوید:«سلام جی‌وان، لطفاً چندتا عکس از پروانه برای من پیدا کن.»، دستیار صوتی پنجره گوگل را باز می‌کند و تصاویری از پروانه‌ها که پیشتر در صفحات وب منتشر شده را به کاربر نمایش می‌دهد.

    قابلیت هفتم: تنظیمات لازم برای پاسخ‌گو بودن دستیار هوش مصنوعی به سوالات جغرافیایی و محاسباتی

    در این بخش می‌توانیم با استفاده از یک API دیگر به نام Wolfram alpha API دستیار هوشمند خود را به‌نحوی تنظیم کنیم که بتواند به سوالات جغرافیایی و محاسباتی نیز پاسخ دهد. درواقع زبان Wolfram این امکان را برای برنامه ما فرآهم می‌آورد. در کد پایین client  یک نمونه (کلاس) است که برای wolfram alpha ساخته شده است. متغیر res نیز مسئول ذخیره‌سازی پاسخ داده‌شده توسط wolfram alpha می‌باشد.

    برای آن که به wolfram alpha API دسترسی پیدا کنید، باید یک App ID منحصربه‌فرد داشته باشید که از روش زیر می‌توانید آن را بسازید:

    ۱. وارد وب‌سایت رسمی wolfram alpha شوید و در صورتی که حساب کاربری ندارید، یک حساب برای خود بسازید.

    دستیار شخصی با پایتون

    ۲. با استفاده از wolfram ID خود وارد سایت شوید.

    دستیار شخصی

    ۳. حالا می‌توانید صفحه اصلی سایت را ملاحظه فرمایید. از لیست کشویی گوشه سمت راست و بالای صفحه می‌توانید به بخش‌های مختلف حساب کاربری خود دسترسی داشته باشید. در این فهرست گزینه My Apps (API) را انتخاب کنید.

    چت بات

    ۴. در این مرحله پنجره زیر برای شما باز خواهد شد. در این پنجره روی گزینه Get APP_ID کلیک کنید.

    دستیار شخصی

    ۵. در این مرحله کادر زیر روی صفحه برای شما باز خواهد شد. پس از انتخاب یک نام مناسب و توضیحات لازمه روی گزینه Get AppID کلیک کنید. حال برای شما یک App ID کاملاً منحصربه‌فرد تعریف می‌شود که با استفاده از آن می‌توانید به Wolfram alpha API دسترسی پیدا کنید.

    دستیار شخصی

    برای مثال، کاربر می‌گوید:«سلام جی‌وان، پایتخت کالیفرنیا کجاست؟»

    دستیار صوتی چنین پاسخ می‌دهد:«ساکرامنتو، ایالات متحده آمریکا.»

    قابلیت هشتم: ویژگی‌های اضافه

    امکان پاسخ دادن به سوالاتی از قبیل «چه قابلیت‌هایی داری؟» و «چه کسی تو را ساخته است؟» نیز قابلیت جالبی است که می‌توانید به برنامه خود اضافه کنید.

    قابلیت نهم: پیش‌بینی آب‌وهوا

    حالا به‌منظور تعریف قابلیت پیش‌بینی آب‌وهوا برای دستیار هوش مصنوعی خود باید یک API key از Open Weather map بسازیم.

    Open Weather map یک سرویس آنلاین است که داده‌های مربوط به آب‌وهوا را ثبت می‌کند. با ایجاد یک API ID در وب‌سایت رسمی Open Weather map می‌توانید با استفاده از APP_ID در کد دستیار هوشمند خود قابلیت پیش‌بینی آب‌وهوا (در هر زمان و برای هر نقطه‌ای از جهان) را نیز به آن بیافزایید. ماژول‌هایی که برای افزودن این قابلیت به برنامه لازم هستند ماژول‌ها json و request  می‌باشند.

    متغیر city_name دستور صادر شده توسط کاربر را از طریق تابع takeCommand() دریافت می‌کند. متدget  از ماژولrequest  یک شیء به نامresponse  به ما می‌دهد. و متدهای json این شیء فرمت داده‌های json را به فرمت داده‌های پایتون تبدیل می‌کنند. متغیر X حاوی فهرستی از فرهنگ‌لغت‌های تودرتو است که بررسی می‌کنند که آیا مقدار COD برابر ۴۰۴ است یا خیر (یعنی این‌که آیا شهر مدنظر پیدا شده است یا نه). اعداد و ارقامی از قبیل دمای هوا و میزان رطوبت در کلید اصلی متغیر Y ذخیره می‌شوند.

    برای مثال، کاربر چنین می‌گوید:«سلام جی‌وان، من اطلاعات آب‌وهوا را می‌خواهم.»

    دستیار صوتی می‌پرسد:«نام شهر مدنظر شما چیست؟»

    و کاربر پاسخ می‌دهد:«هیماچال پرادش»

    دستیار صوتی نیز چنین پاسخ می‌دهد:«دمای هوا ۰۹/۳۰۱ درجه کلوین و میزان رطوبیت ۵۲ درصد است و احتمال بارش باران وجود دارد.»

    قابلیت دهم: خاموش کردن رایانه

    بدین منظور با استفاده از تابع subprocess.call() می‌توانیم عملکردهای سیستم را پردازش کنیم تا دستیار ما بتواند رایانه را خاموش یا روشن کند. این تابع از دستیار هوشمند شما می‌خواهد تا رایانه را به‌ صورت خودکار روشن و یا خاموش کند.

    بسیارخب، کار ساختن دستیار هوش مصنوعی در همین‌جا به پایان می‌رسد. البته همچنان می‌توانید عملکردها و قابلیت‌های بیشتری به دستیار صوتی هوشمند خود بیافزایید.

    ساخت دستیار شخصی

    برای دریافت کدهای این برنامه به لینک گیت‌هاب مراجعه نمایید.

    سامانه همسان‌گزینی آدم و حوا ؛ با کمک هوش مصنوعی همسر مناسبتان را بیابید

    مقاله قبلی

    ۱۰ استارتاپ برتر هوش مصنوعی جهان در سال ۲۰۲۱

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *