تمكين تسجيل الدخول إلى "حزمة SDK الكلامية"

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

ملاحظة

يتوفر التسجيل بجميع لغات برمجة Speech SDK المدعومة، باستثناء جافا سكريبت.

العينة

يتم تحديد اسم ملف السجل على كائن تكوين. مع أخذ المثال SpeechConfig كمثال وافتراض أنك قمت بإنشاء مثيل يسمى config:

config.SetProperty(PropertyId.Speech_LogFilename, "LogfilePathAndName");
config.setProperty(PropertyId.Speech_LogFilename, "LogfilePathAndName");
config->SetProperty(PropertyId::Speech_LogFilename, "LogfilePathAndName");
config.set_property(speechsdk.PropertyId.Speech_LogFilename, "LogfilePathAndName")
[config setPropertyTo:@"LogfilePathAndName" byId:SPXSpeechLogFilename];
import ("github.com/Microsoft/cognitive-services-speech-sdk-go/common")

config.SetProperty(common.SpeechLogFilename, "LogfilePathAndName")

يمكنك إنشاء أداة التعرف من كائن التكوين. سيؤدي ذلك إلى تمكين التسجيل لجميع أدوات التعرف.

ملاحظة

إذا قمت بإنشاء SpeechSynthesizer كائن من كائن التكوين، فلن يتمكن من التسجيل. إذا تم تمكين التسجيل ، فستتلقى أيضا تشخيصات من SpeechSynthesizer.

إنشاء ملف سجل على منصات مختلفة

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

النظام الأساسي العام لـ Windows ‏(UWP)

يجب أن تكون تطبيقات UWP عبارة عن ملفات سجل في أحد مواقع بيانات التطبيق (محلية أو متجوالة أو مؤقتة). يمكن إنشاء ملف سجل في مجلد التطبيق المحلي:

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile logFile = await storageFolder.CreateFileAsync("logfile.txt", CreationCollisionOption.ReplaceExisting);
config.SetProperty(PropertyId.Speech_LogFilename, logFile.Path);

داخل تطبيق Unity UWP، يمكن إنشاء ملف سجل باستخدام مجلد مسار البيانات الثابتة للتطبيق كما يلي:

#if ENABLE_WINMD_SUPPORT
    string logFile = Application.persistentDataPath + "/logFile.txt";
    config.SetProperty(PropertyId.Speech_LogFilename, logFile);
#endif

لمزيد من المعلومات حول أذونات الوصول إلى الملفات في تطبيقات UWP، راجع أذونات الوصول إلى الملفات.

Android

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

File dir = context.getExternalFilesDir(null);
File logFile = new File(dir, "logfile.txt");
config.setProperty(PropertyId.Speech_LogFilename, logFile.getAbsolutePath());

سيقوم الرمز أعلاه بحفظ ملف سجل إلى وحدة التخزين الخارجية في جذر دليل خاص بالتطبيق. يمكن للمستخدم الوصول إلى الملف باستخدام مدير الملفات (عادة في Android/data/ApplicationName/logfile.txt). سيتم حذف الملف عند إزالة تثبيت التطبيق.

تحتاج أيضا إلى طلب WRITE_EXTERNAL_STORAGE إذن في ملف البيان:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">
  ...
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  ...
</manifest>

داخل تطبيق Unity Android ، يمكن إنشاء ملف السجل باستخدام مجلد مسار البيانات الثابت للتطبيق على النحو التالي:

string logFile = Application.persistentDataPath + "/logFile.txt";
config.SetProperty(PropertyId.Speech_LogFilename, logFile);

بالإضافة إلى ذلك ، تحتاج أيضا إلى تعيين إذن الكتابة في إعدادات Unity Player لنظام Android إلى "خارجي (SDCard)". ستتم كتابة السجل إلى دليل يمكنك الحصول عليه باستخدام أداة مثل جهاز AndroidStudio مستكشف الملفات. قد يختلف مسار الدليل الدقيق بين أجهزة Android ، وعادة ما يكون الموقع هو الدليل sdcard/Android/data/your-app-packagename/files .

يتوفر المزيد حول تخزين البيانات والملفات لتطبيقات Android هنا.

iOS

يمكن الوصول فقط إلى الدلائل الموجودة داخل وضع الحماية التطبيقي. يمكن إنشاء الملفات في المستندات والمكتبة والدلائل المؤقتة. يمكن توفير الملفات الموجودة في دليل المستندات للمستخدم.

إذا كنت تستخدم Objective-C على iOS، فاستخدم مقتطف التعليمات البرمجية التالي لإنشاء ملف سجل في دليل مستند التطبيق:

NSString *filePath = [
  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
    stringByAppendingPathComponent:@"logfile.txt"];
[speechConfig setPropertyTo:filePath byId:SPXSpeechLogFilename];

للوصول إلى ملف تم إنشاؤه، أضف الخصائص التالية إلى Info.plist قائمة خصائص التطبيق:

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

إذا كنت تستخدم Swift على iOS ، فيرجى استخدام مقتطف التعليمات البرمجية التالي لتمكين السجلات:

let documentsDirectoryPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let documentsDirectoryPath = NSURL(string: documentsDirectoryPathString)!
let logFilePath = documentsDirectoryPath.appendingPathComponent("swift.log")
self.speechConfig!.setPropertyTo(logFilePath!.absoluteString, by: SPXPropertyId.speechLogFilename)

يتوفر المزيد حول نظام ملفات iOS هنا.

تسجيل الدخول باستخدام أدوات التعرف المتعددة

على الرغم من تحديد مسار إخراج ملف السجل كخاصية تكوين في SpeechRecognizer كائن SDK أو كائن SDK آخر، إلا أن تسجيل SDK هو مرفق مفرد على مستوى العملية بدون مفهوم للمثيلات الفردية. يمكنك التفكير في هذا على أنه منشئ (أو ما شابه) يدعو ضمنيا روتين "تكوين التسجيل العام" الثابت والداخلي مع بيانات الخاصية المتاحة في SpeechRecognizer المقابلة SpeechConfig.

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

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

لتقليل الارتباك المحتمل عند تكوين التسجيل لمثيلات متعددة، قد يكون من المفيد التحكم المجرد في التسجيل من الكائنات التي تقوم بعمل حقيقي. مثال على زوج من الإجراءات الروتينية للمساعدين:

void EnableSpeechSdkLogging(const char* relativePath)
{
	auto configForLogging = SpeechConfig::FromSubscription("unused_key", "unused_region");
	configForLogging->SetProperty(PropertyId::Speech_LogFilename, relativePath);
	auto emptyAudioConfig = AudioConfig::FromStreamInput(AudioInputStream::CreatePushStream());
	auto temporaryRecognizer = SpeechRecognizer::FromConfig(configForLogging, emptyAudioConfig);
}

void DisableSpeechSdkLogging()
{
	EnableSpeechSdkLogging("");
}

الخطوات التالية