أبسط مساعد صوت Python





لإنشاء مساعد صوتي ، لا تحتاج إلى الكثير من المعرفة في البرمجة ، فالشيء الرئيسي هو فهم الوظيفة التي يجب أن يمتلكها. تقوم العديد من الشركات بإنشائها على خط الاتصال الأول مع العميل لتوفير الراحة وتحسين سير العمل وأفضل تصنيف للمكالمات. تقدم هذه المقالة برنامجًا يمكن أن يصبح أساسًا لروبوت الدردشة الخاص بك ، أو بشكل أكثر دقة ، مساعد صوتي للتعرف على الصوت وتنفيذ الأوامر اللاحقة. بمساعدتها ، سنتمكن من فهم كيفية عمل المساعدين الصوتيين الأكثر استخدامًا.



أولاً ، دعنا نعلن عن المكتبات التي نحتاجها:



import speech_recognition as sr
import os
import sys
import webbrowser
import pyttsx3 as p
from datetime import datetime
import time
import datetime
import random


أيضًا ، دعونا لا ننسى الاحتفاظ بملف السجل ، والذي سنحتاجه إذا قررنا مع ذلك تحسين الروبوت للعمل مع شبكة عصبية. تستخدم العديد من الشركات شبكة عصبية في مساعديها الصوتيين لفهم مشاعر العملاء والاستجابة لها.



أيضًا ، لا تنس أنه من خلال تحليل السجلات ، سنكون قادرين على فهم نقاط الضعف في خوارزمية الروبوت وتحسين التفاعل مع العملاء.



# 
chat_log = [['SESSION_ID', 'DATE', 'AUTHOR', 'TEXT', 'AUDIO_NUM']]
#  
i = 1
exit = 0
while exit == 0:
    session_id = str(i)
    if session_id not in os.listdir():
        os.mkdir(session_id)
        exit = 1
    else:
        i = i + 1
#   bot
author = 'Bot'
text = '!     ?'


في ملف السجل ، نكتب وقت الرسالة ، المؤلف (الروبوت أو المستخدم) والنص الفعلي نفسه.



#       
def log_me(author, text, audio): 
    now = datetime.datetime.now()
    i = 1
    exit = 0
    while exit == 0:
        audio_num = str(i)+'.wav'
        if audio_num not in os.listdir(session_id):
            exit = 1
        else:
            i = i + 1
    os.chdir(session_id)
    with open(audio_num , "wb") as file:
        file.write(audio.get_wav_data())
    chat_log.append([now.strftime("%Y-%m-%d %H:%M:%S"), author, text, audio_num])


نعرض أول رسالة كتبها الروبوت: مرحبًا! كيف يمكنني مساعدك؟



#             
print("Bot: "+ text)
log_me(author, text, audio)


وباستخدام هذا الإجراء في Jupyter Notebook ، يمكننا التحدث من خلال جهاز التشغيل الافتراضي ، الكلمات المنطوقة:



# words
def talk(words):
    engine.say(words)
    engine.runAndWait()


ناقشنا أعلاه كيفية التعبير عن النص ، ولكن كيف يمكننا تحويل صوتنا إلى نص؟ هنا سيساعدنا التعرف على الكلام من Google وبعض التلاعبات باستخدام الميكروفون.



#     
def command():
    rec = sr.Recognizer()
    with sr.Microphone() as source:
        #   
        print('Bot: ...')
        #   
        rec.pause_threshold = 1
        #    
        rec.adjust_for_ambient_noise(source, duration=1)
        audio = rec.listen(source)
    try:
        #     GOOGLE
        text = rec.recognize_google(audio, language="ru-RU").lower()
        #    
        print(':  ' + text[0].upper() + text[1:])
        log_me('User', text, audio)
    #     
    except sr.UnknownValueError:
        text = ' . .'
        print('Bot: ' + text)
        talk(text)
        #  
        text = command()
        log_me('Bot', text, , Null)
    return text


ما الذي يمكن أن يفعله مساعدنا بجانب الاستماع إلينا؟ كل شيء محدود بخيالنا! دعونا نلقي نظرة على بعض الأمثلة المثيرة للاهتمام.



لنبدأ بأمر بسيط ، دعه يفتح الموقع بالأمر - سيفتح الموقع (ألم تتوقع؟).



#  ,       
def makeSomething(text):
    if ' ' in text:
        print('Bot:   NewTechAudit.')
        talk('  NewTechAudit.')
        log_me('Bot','  NewTechAudit.', Null)
        webbrowser.open('https://newtechaudit.ru/')


من المفيد أحيانًا الاستماع إلى كلماتك الخاصة ، ولكن من خلال شفاه شخص آخر. دع البوت يظل قادرًا على التكرار بعدنا:



#  
    elif '' in text or '' in text or '' in text:
        print('Bot: ' + text[10].upper() + text[11:])
        talk(text[10:])
        log_me('Bot', text[10].upper() + text[11:] , Null)


دعه يكون أيضًا المحاور ، لكن في الوقت الحالي سنبدأ فقط مع أحد معارفه:



#  
    elif ' ' in text or '  ' in text or ' ' in text:
        print('Bot:   Bot.')
        talk('  Bot')
        log_me('Bot', '  Bot', Null)


يمكننا أيضًا أن نطلب من المساعد الصوتي تسمية رقم عشوائي ضمن الحدود التي اخترناها بالتنسيق: قم بتسمية رقم عشوائي من (الرقم الأول) إلى (الرقم الثاني).



#  
    elif ' ' in text:
        ot=text.find('')
        do=text.find('')
        f_num=int(text[ot+3:do-1])
        l_num=int(text[do+3:])
        r=str(random.randint(f_num, l_num))
        print('Bot: ' + r)
        talk(r)
        log_me('Bot', r, Null)


لإكمال البرنامج ، ما عليك سوى أن تقول وداعًا للروبوت:



# 
    elif '' in text or ' ' in text:
        print('Bot:  !')
        talk(' ')
        log_me('Bot', ' ', Null)
        os.chdir(session_id)
        log_file = open( session_id + ".txt", "w")
        for row in chat_log:
            np.savetxt(log_file, row)
        log_file.close()
        sys.exit()


ولجعل كل ذلك يعمل بشكل مستمر ، نقوم بإنشاء حلقة لا نهاية لها.



#   
while True:
    makeSomething(command())


لنجري حوارًا اختباريًا:







في مجلد الجلسة الذي تم إنشاؤه ، يتم تخزين جميع ملفات التسجيل الصوتي الخاصة بصوتنا وملف سجل نصي:







تمت كتابة ملف السجل النصي:







في هذه المقالة ، قمنا بفحص أبسط روبوت صوتي والوظيفة الرئيسية المفيدة لعمل الروبوت الإضافي مع شبكة عصبية. لتحليل جودة المساعدة المقدمة والعمل الإضافي على التحسين ، سنتمكن من التحقق من ملف السجل.



يمكن أن يكون هذا الروبوت أساس جارفيس الخاص بك!



All Articles