تحدث <تطبيق iOS الخاص بك>. تقرير ياندكس

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





- مرحباً بالجميع ، اسمي رومان فولكوف. سنتحدث اليوم عن كيفية تعليم تطبيق الهاتف المحمول الخاص بك التواصل مع المستخدمين.



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



أقوم بتطوير iOS منذ عام 2016. لدي خبرة في العمل الحر والعمل عن بُعد ، وخبرة المشاركة في إطلاق العديد من الشركات الناشئة. لقد قدمت أيضًا تطبيقًا ذا علامة تجارية لشركة Rolls Royce.



في عام 2018 ، انضممت إلى فريق Prisma ، وقمت بتطوير تطبيق Prisma وشاركت في تطوير وإطلاق Lensa Photo Editor. في عام 2019 ، انتقلت إلى Yandex كمطور iOS. منذ عام 2020 ، أقود مجموعة تطوير Yandex.Translator للهواتف المحمولة. لم يعد تطبيق المترجم مجرد تطبيق للعمل مع النص. لدينا الكثير من الميزات الرائعة مثل ترجمة الصور ووضع الحوار والإدخال الصوتي والتمثيل الصوتي والمزيد.



لقد بدأت للتو في الغوص في موضوع العمل مع الصوت في iOS ، ولم أجد أي مادة مضغوطة تتضمن العمل مع جلسة صوتية ، والتوليف ، والتعرف على الكلام. لهذا السبب قررت أن ألقي هذا الحديث.







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







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



نحن ننتقل بسلاسة إلى الجزء الأول من التقرير ، هذا هو جلسة AVAudioSession.







جلسة الصوت هي طبقة بين تطبيقنا ونظام التشغيل. بتعبير أدق ، بين التطبيق الخاص بك والأجهزة للعمل مع الصوت: مكبر الصوت والميكروفون. على iOS و watchOS و tvOS ، يحتوي كل تطبيق على جلسة صوتية افتراضية مُعدة مسبقًا. يختلف هذا الإعداد المسبق من نظام تشغيل إلى آخر.



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







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



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



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







على سبيل المثال ، في الشريحة ترى وضع الفيلم ، ويمكن ضبطه فقط لفئة التشغيل.



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







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







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



من المهم أيضًا تشغيل الصوت حتى إذا تم ضبط مفتاح كتم الصوت على كتم الصوت.



يوجد أيضًا خيار للتشغيل في حالة الخلفية لهذه الفئة ، ولكن لهذا الغرض ، يجب أن يتم تمكين Audio و AirPlay و Picture in Picture في التطبيق.



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



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







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



يمكنك أيضًا إضافة خيار allowBluetoothA2DP ، وهذا يسمح لك باستخدام سماعات الرأس مثل AirPods لتسجيل الصوت من ميكروفون وتشغيل الصوت فيها. هناك خيار أقدم لهذا ، والذي يبدو تمامًا مثل allowBluetooth ، لكنه يقلل من جودة الصوت كثيرًا.



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



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



يجب النظر في خيار notifyOthersOnDeactivation بشكل منفصل. يتم استخدامه في طريقة تنشيط الجلسة الصوتية. لماذا هو مهم جدا؟







إذا تم إلغاء تنشيط جلسة الصوت باستخدام هذا الخيار ، فستتلقى التطبيقات الأخرى تعريف AVAudioSessionInterruptionNotification مع المعلمة AVAudioSessionInterruptionTypeEnded مع المعلمة التي انتهت مقاطعة جلسة الصوت الخاصة بهم ويمكنهم متابعة العمل مع الصوت ، الذي بدأ قبل مقاطعتهم.



يكون هذا السيناريو ممكنًا إذا كنت تستخدم فئة التشغيل في تطبيق ما بدون خيار mixWithOthers ، وإلا فلن تقاطع صوت تطبيق آخر ، فسيتم ببساطة خلط الصوت مع تطبيق آخر.



يتيح لك استخدام هذا الخيار والتعامل مع التعديل بشكل صحيح تزويد المستخدمين بتجربة مستخدم مريحة عند العمل مع تطبيقك.







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



في الحالة الأولى ، يمكنك حفظ الحالة ، وفي الحالة الثانية ، يمكنك الاستمرار في تشغيل الصوت الذي تمت مقاطعته بواسطة تطبيق آخر.



فيما يلي مثال على كيفية عمل ذلك:



سيتم تشغيل الفيديو من اللحظة التي يتم فيها عرض المثال.في



هذا المثال ، تم تشغيل الموسيقى في تطبيق آخر ، وبالتحديد في VLC ، ثم بدأت التمثيل الصوتي داخل تطبيقنا. تمت مقاطعة الموسيقى ، وتم تشغيل الكلام المركب ، ثم استأنفت الموسيقى التشغيل تلقائيًا.



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







دعونا نلخص. لقد قمنا بتحليل مبدأ الجلسة الصوتية. لقد درسنا إمكانيات تكوين جلسة الصوت وفقًا لمتطلبات تطبيقاتك وتعلمنا كيفية تنشيط جلسة الصوت للمستخدم وإلغاء تنشيطها بسهولة.



استمر. توليف الكلام.







تعرض الشريحة رسمًا تخطيطيًا للفئات المشاركة في عملية تركيب الكلام. الفئات الرئيسية هي AVSpeechSynthesiser و AVSpeechUtterance و AVSpeechSynthesisVoice مع إعداداتها.



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



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







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



بعد ذلك ، تقوم بإنشاء كائن من فئة AVSpeechSynthesizer واستدعاء طريقة التحدث. الكل. بعد ذلك ، سيتم توليف النص وتشغيله ، وسوف تسمع النتيجة.



لكن في الحقيقة ، هذه فقط البداية. يحتوي تركيب الكلام على الكثير من الاحتمالات ، والتي سنتحدث عنها الآن.







أولاً ، يمكنك ضبط السرعة عند استقبال الصوت. يتم تحديد السرعة كرقم حقيقي في النطاق من صفر إلى واحد. يختلف السعر الفعلي من صفر إلى واحد إذا قمت بتعيين خاصية السعر إلى نطاق من 0 إلى 0.5.



إذا قمت بتعيين قيمة المعدل في النطاق من 0.5 إلى 1 ، فإن المعدل يتغير نسبيًا في القيم من 1X إلى 4X.



مثال على كيفية العمل بسرعة.







في AVFoundation ، يوجد AVSpeechUtteranceDefault ثابت ، وهو في الواقع 0.5 ، وهو ما يعادل السرعة العادية لتشغيل الصوت.



يمكنك أيضًا تحديد سرعة تساوي نصف السرعة المعتادة ، تحتاج إلى تحديد قيمة 0.25. إذا قمت بتحديد 0.75 ، ستتم زيادة السرعة 2.5 مرة عن السرعة العادية. أيضًا ، للراحة ، هناك ثوابت للحد الأدنى والسرعة القصوى.



سأقوم الآن بتشغيل بعض الأمثلة:



سيتم تشغيل الفيديو من لحظة عرض المثال ،



وكان هذا مثالاً على كيفية تحدث Macintosh لأول مرة بصوتها الخاص في عرض تقديمي من Apple. وكان هذا مثالاً على سرعة الكلام الطبيعي المركب.





هذا أبطأ مرتين.





هذا 2.5 مرة أسرع.



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







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



من الجدير بالذكر أنه إذا قمت بتمرير معرف غير صالح إلى المنشئ ، فسيعيد المنشئ "no".



الخيار الثاني هو الحصول عليه من خلال اللغة أو رمز المنطقة المحلية. أريد أيضًا أن أشير إلى أن Apple تقول إن أصوات Siri غير متوفرة ، لكن هذا ليس صحيحًا تمامًا: لقد تمكنا من الحصول على معرّفات بعض الأصوات المستخدمة في Siri على بعض الأجهزة. ربما هذا خطأ.



الأصوات لها صفتان - التقصير والمحسن. بالنسبة لبعض الأصوات ، يمكنك تنزيل نسخة محسنة ، وسنتحدث عن هذا في القسم الأخير ، وسنناقش كيف يمكنك تنزيل الأصوات الضرورية.







مثال على كيفية اختيار صوت معين. الطريقة الأولى - عن طريق معرّف محدد ، والطريقة الثانية - بالسطر الذي يشير إلى رمز اللغة ، والطريقة الثالثة - حسب مكان محدد.



الآن أريد تشغيل مثالين لدبلجة نفس النص بلغات مختلفة.



سيتم تشغيل الفيديو من لحظة عرض المثال



، ويبدو أن الخيار الثاني أقرب إلى النطق الروسي.







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



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







في iOS 13.1 ، قد تُرجع قائمة الأصوات قائمة فارغة في المكالمة الأولى. الحل: يمكنك إعادة الاستعلام عن القائمة بأكملها مرة واحدة في عدد معين من الثواني. بمجرد أن يعود ليس فارغًا ، نعتقد أننا تلقينا أخيرًا قائمة أصوات محدثة.



تم إصلاح هذا الخطأ في الإصدارات اللاحقة من iOS ، ولكن لا تتفاجأ إذا رأيت هذا في تطبيقاتك.



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



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







هنا يمكنك أن ترى مثالاً على كيفية قيامنا في الواجهة باختيار الصوت بناءً على اللغة والجنس وكيف نمنح القدرة على تحديد سرعة التمثيل الصوتي للغة معينة.







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



على سبيل المثال ، يوجد هنا مستودع للغة الإنجليزية يحتوي على قاموس كبير لارتباط الكلمات والنطق.







تعرض الشريحة مثالاً على كيفية استبدال نطق كلمة معينة في لغة واحدة. في هذه الحالة ، يكون | təˈmɑːtəʊ | ، طماطم.



سيتم تشغيل الفيديو من اللحظة التي يظهر



فيها المثال.الآن تم تشغيل خيار تعيين السمة للنطق وبدون.







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







دعنا ننتقل إلى التعرف على الكلام. يتم تقديمه في iOS في شكل إطار عمل يسمى Speech ، ويسمح بالتعرف على الكلام مباشرة على أجهزتك.



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



التعرف على الكلام متاح من كل من الميكروفون والملف الصوتي. إذا كنت ترغب في منح المستخدم القدرة على التعرف على الكلام من الميكروفون ، فيجب على المستخدم إذن منح إذنين. الأول هو الوصول إلى الميكروفون ، والثاني هو حقيقة أن حديثه سينتقل إلى خوادم Apple للتعرف عليه.



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







القائمة مأخوذة من موقع Apple. هذه هي اللغات واللغات المتوفرة للتعرف على الكلام. ولكن في الواقع ، هذه قائمة باللغات واللغات المتاحة للإملاء على لوحة مفاتيح قياسية. وتشير واجهة برمجة تطبيقات Speech framework الموجودة أسفل الغطاء إلى تنفيذ الإملاء من لوحة المفاتيح القياسية.







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



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



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







على الشريحة ، يمكنك رؤية رسم تخطيطي شرطي للفئات المشاركة في عملية التعرف على الكلام. على غرار التوليف ، فإن العمل مع التعرف يعمل مع مكواة صوتية ، لذا فإن AVAudioSession هو أيضًا تبعية واضحة هنا.







الدعم. للحصول على مجموعة من جميع اللغات المدعومة ، تحتاج إلى الوصول إلى خاصية صفحة supportLocales. لا يضمن دعم الإعدادات المحلية بشكل عام إتاحة التعرف على الكلام لتلك الإعدادات المحلية. على سبيل المثال ، قد يلزم الاتصال المستمر بخوادم Apple.



يطابق دعم الإعدادات المحلية للتعرف على قائمة الإعدادات المحلية للإملاء في لوحة المفاتيح على نظام iOS. ها هي قائمة كاملة . للتأكد من إمكانية التعامل مع لغة معينة في الوقت الحالي ، يمكنك استخدام الخاصية isAvailable.







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



على سبيل المثال ، للغة الإنجليزية نستخدم en-US. في المرة الأولى التي يحاول فيها المستخدم التعرف على شيء ما باللغة الإنجليزية ، نستخدم اللغة الأمريكية.







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



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







هنا مثال أكثر تعقيدًا - طلب التعرف من الميكروفون. للقيام بذلك ، نحتاج أيضًا إلى كائن AVAudioEngine ، وهو المسؤول عن العمل مع الميكروفون. لن ندخل في تفاصيل حول كيفية عمل هذا. يمكنك تعيين الفئة التي تريدها - إما .record أو .playRecord. قم بتشغيل الجلسة الصوتية. قم بتكوين AudioEngine والاشتراك لتلقي مخازن الصوت من الميكروفون. تقوم بإضافتها إلى طلب التعرف ، وعندما تنتهي من التعرف ، يمكنك الخروج من الميكروفون.



تجدر الإشارة إلى أنه تم تعيين الخاصية shouldReportPartialResults ، المسؤولة عن إصدار نتائج التعرف المؤقت ، على true. دعنا نلقي نظرة على الخيارات: كيف يمكن أن يبدو التطبيق مع وبدون علامة shouldReportPartialResults.



سيتم تشغيل الفيديو من اللحظة التي يتم فيها عرض



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



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







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



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



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







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







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







لن نتطرق إلى هذا لفترة طويلة. فيما يلي مثال لكيفية الحصول على التحليلات نتيجة للنص الذي تم التعرف عليه.







في المجمل ، درسنا إمكانات إطار عمل الكلام للتعرف على الكلام ، وتعلمنا كيفية إعطاء تلميحات للتعرف على الكلام ، وبسرعة في إمكانيات التحليلات.



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



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



وتتطابق هذه القائمة بوضوح مع ما تعيده AVSpeechSynthesisVoice.speechVoices داخل التطبيق. هذا يعني أنه يمكنك تعليم المستخدمين أنه يمكنهم تنزيل اللغات التي يحتاجون إليها لاستخدام ميزة تحويل النص إلى كلام في وضع عدم الاتصال.







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



وتجدر الإشارة إلى أن التعرف في وضع عدم الاتصال متاح على الأجهزة المزودة بشريحة A9 وأقدم.







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



ثم ذهبت إلى تطبيقنا ، وأوقفت الإنترنت ، ومن دواعي سروري أن التعرف دون اتصال باللغة الإسبانية يعمل.



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







على نظام iOS ، حتى إذا كان لديك وصول إلى الإنترنت على هاتفك ، يمكنك تشغيل الجهاز والقيام بالتعرف على الكلام عليه ، إذا كان التعرف متاحًا بالطبع.



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



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



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







نظرنا في كيفية تنزيل حزم تركيب الكلام بشكل صريح في وضع عدم الاتصال ، ووجدنا طريقة لمحاولة إجبار iOS على تنزيل حزم التعرف على الكلام في وضع عدم الاتصال.



أنت الآن تعرف كيفية إضافة تركيب الكلام والتعرف عليه بسرعة إلى تطبيقاتك. لدي كل شيء ، شكرا لاهتمامكم.



All Articles