لإلقاء نظرة فاحصة على مفاهيم "Speech Recognition" قم بمراجعة مقالة "overview". راجع العقدة المرجعية في الجزء الأيمن للحصول على قائمة بالأنظمة الأساسية المدعومة.
للاتصال بخدمة الكلام باستخدام Speech SDK تحتاج إلى إنشاءSpeechConfig مثيل. في هذا المثال تقوم بإنشاءSpeechConfigمثيل باستخدام مفتاح الاشتراك والمنطقة. يمكنك أيضًا إنشاء بعض التعليمات البرمجية الأساسية المتداولة لاستخدامها لبقية هذه المقالة التي تقوم بتعديلها لتخصيصات مختلفة.
تذكر إزالة المفتاح من التعليمة البرمجية عند الانتهاء وعدم توزيعها علناً. للإنتاج استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها مثل Azure Key Vault. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي للحصول على مزيد من المعلومات.
التحقق من المتحدث هو عملية تأكيد أن المتحدث يطابق صوتًا معروفًا أو مسجل . تتمثل الخطوة الأولى في تسجيل ملف تعريف صوتي بحيث يكون للخدمة شيء ما لمقارنة عينات الصوت المستقبلية به. في هذا المثال تقوم بتسجيل ملف التعريف باستخدام إستراتيجية تعتمد على النص والتي تتطلب عبارة مرور معينة لاستخدامها في التسجيل والتحقق. يُرجى الرجوع إلى مستندات المرجع للحصول على قائمة عبارات المرور المعتمدة.
في هذه الوظيفة await client.CreateProfileAsync() هو ما يخلق في الواقع ملف تعريف الصوت الجديد. بعد إنشائه يمكنك تحديد كيفية إدخال عينات الصوت باستخدامAudioConfig.FromDefaultMicrophoneInput() في هذا المثال لالتقاط الصوت من جهاز الإدخال الافتراضي الخاص بك. بعد ذلك تقوم بتسجيل عينات صوتية فيwhile حلقة تتعقب عدد العينات المتبقية والمطلوبة للتسجيل. في كل تكرار client.EnrollProfileAsync(profile, audioInput)يطلب منك نطق عبارة المرور في الميكروفون ويضيف العينة إلى ملف تعريف الصوت.
بعد انتهاء التسجيل اتصلawait SpeakerVerify(config, profile, profileMapping) للتحقق من الملف الشخصي الذي أنشأته للتو. إضافة دالة أخرى لتعريف SpeakerVerify.
في هذه الدالة يمكنك تمرير الكائن الذي VoiceProfile قمت بإنشائه لبدء نموذج للتحقق في المقابل. بعد ذلكawait speakerRecognizer.RecognizeOnceAsync(model) يطلب منك نطق عبارة المرور مرة أخرى. هذه المرة يتحقق من صحة ذلك مقابل ملف التعريف الصوتي الخاص بك ويعيد درجة تشابه تتراوح بين 0.0 و1.0. يعود الكائنresult أيضًاAccept أوReject بناءً على ما إذا كانت عبارة المرور متطابقة أم لا.
بعد ذلك قم بتعديل الدالة الخاصة بك Main() لاستدعاء الوظائف الجديدة التي قمت بإنشائها. لاحظ أيضًا أنك تنشئ Dictionary للمرور حسب المرجع باستخدام اتصالات الوظائف. والسبب في ذلك هو أن الخدمة لا تسمح بتخزين اسم يمكن قراءته بواسطة الإنسانVoiceProfile ولا تخزن سوى رقم تعريف لأغراض الخصوصية. في VerificationEnroll الدالة يمكنك إضافة إدخال مع معرف هوية أنشئ حديثًا مع اسم نص. في سيناريوهات تطوير التطبيق حيث تحتاج إلى عرض اسم يمكن للمستخدم قراءته يجب تخزين هذا التعيين في مكان ما لأن الخدمة لا يمكنها تخزينه .
قم بتشغيل البرنامج النصي يُطلب منك نطق عبارة صوتي هو جواز سفري تحقق مني ثلاث مرات للتسجيل ومرة أخرى للتحقق. والنتيجة التي يتم إرجاعها هي نقاط التشابه والتي يمكنك استخدامها لإنشاء عتبات مخصصة للتحقق.
على النقيض من التحقق المعتمد على النص لا يتطلب التحقق من النص المستقل ثلاث عينات صوتية ولكن لا تتطلب 20 ثانية من إجمالي الصوت.
قم بإجراء بعض التغييرات البسيطة على VerificationEnroll الدالة للتبديل إلى التحقق من النص المستقل. أولاً يمكنك تغيير نوع التحقق إلى VoiceProfileType.TextIndependentVerification. بعد ذلك قم بتغيير while الحلقة لتتبع result.RemainingEnrollmentsSpeechLength والتي ستستمر في مطالبتك بالتحدث حتى يتم التقاط 20 ثانية من الصوت.
يتم استخدام تعريف المتحدث لتحديد من يتحدث من مجموعة معينة من الأصوات المسجلة. تشبه هذه العملية التحقق المستقل عن النص . يتمثل الاختلاف الرئيسي في القدرة على التحقق من ملفات تعريف صوتية متعددة في وقت واحد بدلاً من التحقق من ملف تعريف واحد.
إنشاء الدالة التالية SpeakerIdentification لإرسال طلب تعريف. والفرق الرئيسي في هذه الوظيفة مقارنة بطلب التحقق من المتحدث هو استخدام الذي يقبل SpeakerIdentificationModel.FromProfiles() قائمة VoiceProfile بالكائنات.
تغيير Main() الدالة الخاصة بك إلى ما يلي. إنشاء قائمة سلاسل نصيةprofileNames التي تقوم بتمريرها إلى IdentificationEnroll() الدالة الخاصة بك. يُطلب منك إنشاء ملف تعريف صوتي جديد لكل اسم في هذه القائمة بحيث يمكنك إضافة المزيد من الأسماء لإنشاء المزيد من الملفات الشخصية للأصدقاء أو الزملاء.
قم بتشغيل البرنامج النصي يُطلب منك التحدث لتسجيل عينات الصوت للملف الشخصي الأول. بعد انتهاء التسجيل ستتم مطالبتك بتكرار هذه العملية لكل اسم في قائمة profileNames. بعد انتهاء كل تسجيل ستتم مطالبتك بجعل أي شخص يتحدث. تحاول الخدمة بعد ذلك تحديد هذا الشخص من بين ملفات التعريف الصوتية المسجلة الخاصة بك.
يعرض هذا المثال فقط أقرب تطابق ودرجة تشابهها. للحصول على الاستجابة الكاملة التي تتضمن أعلى خمس نقاط تشابه قم بإضافة string json = result.Properties.GetProperty(PropertyId.SpeechServiceResponse_JsonResult) إلى الدالة SpeakerIdentification الخاصة بك.
لحذف ملف تعريف مسجل استخدم DeleteProfileAsync() الدالة الموجودة على VoiceProfileClient الكائن. توضح دالة المثال التالية كيفية حذف ملف تعريف صوتي من معرف ملف تعريف صوتي معروف:
للاتصال بخدمة Speech باستخدام Speech SDK قم بإنشاء فئة SpeechConfig. تتضمن هذه الفئة معلومات حول اشتراكك مثل مفتاحك والمنطقة المرتبطة أو نقطة النهاية أو المضيف أو رمز التفويض المميز.
ثم تستدعي دالتي مساعدة لتحددهما لاحقًا AddEnrollmentsToTextDependentProfile وSpeakerVerify. وأخيرًا استدعِ DeleteProfileAsync لتنظيف التشكيل الجانبي.
في هذه الدالة تقوم بتسجيل عينات صوتية في حلقة while تتعقب عدد العينات المتبقية والمطلوبة للتسجيل. في كل تكرار يطالبك EnrollProfileAsync بنطق عبارة المرور في الميكروفون ويضيف العينة إلى ملف تعريف الصوت.
03c5feb9e7