A Speech SDK-ba való bejelentkezés engedélyezése

A fájlba történő naplózás a Speech SDK választható funkciója. A fejlesztés során a naplózás további információkat és diagnosztikákat biztosít a Speech SDK alapvető összetevőiről. Ezt úgy engedélyezheti, hogy egy Speech_LogFilename beszédkonfigurációs objektum tulajdonságát a naplófájl helyére és nevére állítja. A naplózást egy statikus osztály kezeli a Speech SDK natív könyvtárában. Bármely Speech SDK-felismerő vagy szintetizáló példány naplózását bekapcsolhatja. Az ugyanabban a folyamatban lévő összes példány naplóbejegyzéseket ír ugyanarra a naplófájlra.

Minta

A naplófájl neve egy konfigurációs objektumon van megadva. Példaként tekintveSpeechConfig, és feltételezve, hogy létrehozott egy példányt:speechConfig

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

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

A konfigurációs objektumból létrehozhat egy felismerőt. Ez lehetővé teszi a naplózást az összes felismerő számára.

Feljegyzés

Ha létrehoz egy SpeechSynthesizer konfigurációs objektumot, az nem engedélyezi a naplózást. Ha azonban a naplózás engedélyezve van, a rendszer diagnosztikát is kap a SpeechSynthesizer.

A JavaScript kivétel, ha a naplózás SDK-diagnosztikával engedélyezve van, ahogyan az a következő kódrészletben látható:

sdk.Diagnostics.SetLoggingLevel(sdk.LogLevel.Debug);
sdk.Diagnostics.SetLogOutputPath("LogfilePathAndName");

Naplófájl létrehozása különböző platformokon

Windows vagy Linux esetén a naplófájl bármilyen elérési úton lehet, amelyhez a felhasználó írási engedéllyel rendelkezik. Előfordulhat, hogy más operációs rendszerek fájlrendszer-helyeinek írási engedélyei alapértelmezés szerint korlátozottak vagy korlátozottak.

Univerzális Windows-platform (UWP)

Az UWP-alkalmazásoknak a naplófájlokat az alkalmazásadatok egyikén kell tárolniuk (helyi, roaming vagy ideiglenes). A helyi alkalmazásmappában létrehozhat egy naplófájlt:

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

A Unity UWP-alkalmazásokban az alábbi módon hozható létre naplófájl az alkalmazás állandó adatútvonal-mappájában:

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

További információ a UWP-alkalmazások fájlhozzáférési engedélyeiről: Fájlhozzáférés engedélyek.

Android

A naplófájlokat mentheti belső tárolóba, külső tárolóba vagy a gyorsítótár könyvtárába. A belső tárolóban vagy a gyorsítótárkönyvtárban létrehozott fájlok privátak az alkalmazás számára. Célszerű egy naplófájlt külső tárolóban létrehozni.

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

A fenti kód egy naplófájlt ment egy alkalmazásspecifikus könyvtár gyökerében lévő külső tárolóba. A felhasználó hozzáférhet a fájlhoz a fájlkezelővel (általában ebben a fájlban Android/data/ApplicationName/logfile.txt). A fájl az alkalmazás eltávolításakor törlődik.

A jegyzékfájlban is engedélyt kell kérnie WRITE_EXTERNAL_STORAGE :

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

Egy Unity Android-alkalmazásban a naplófájl az alkalmazás állandó adatelérési útjának mappája segítségével hozható létre az alábbiak szerint:

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

Ezenkívül meg kell adnia az írási engedélyt az Android Unity Player-beállításaiban "Külső (SDCard)" értékre. A napló egy olyan könyvtárba van írva, amelyet egy eszköz, például az AndroidStudio Device Fájlkezelő használatával kaphat meg. A címtár pontos elérési útja androidos eszközöktől függően változhat. A hely általában a sdcard/Android/data/your-app-packagename/files könyvtár.

Az Android-alkalmazások adatairól és fájltárolásáról itt olvashat bővebben.

iOS

Csak az alkalmazás tesztkörnyezetében lévő könyvtárak érhetők el. Fájlok hozhatók létre a dokumentumokban, tárakban és ideiglenes könyvtárakban. A dokumentumok könyvtárában lévő fájlok elérhetővé tehetők a felhasználó számára.

Ha Objective-C-t használ iOS rendszeren, az alábbi kódrészlet használatával hozzon létre egy naplófájlt az alkalmazásdokumentum könyvtárában:

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

Egy létrehozott fájl eléréséhez adja hozzá az alábbi tulajdonságokat az Info.plist alkalmazás tulajdonságlistájához:

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

Ha a Swiftet iOS rendszeren használja, a naplók engedélyezéséhez használja az alábbi kódrészletet:

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)

Az iOS fájlrendszerről itt olvashat bővebben.

Naplózás több felismerővel

Bár a naplófájl kimeneti elérési útja konfigurációs tulajdonságként van megadva egy SpeechRecognizer vagy más SDK-objektumban, az SDK-naplózás egyetlen, folyamatszintű létesítmény, amely nem rendelkezik az egyes példányok fogalmával. Ezt úgy gondolhatja, hogy a SpeechRecognizer konstruktor (vagy hasonló) implicit módon meghív egy statikus és belső "Globális naplózás konfigurálása" rutint a megfelelő SpeechConfigtulajdonságadatokkal.

Ez azt jelenti, hogy például nem konfigurálhat hat párhuzamos felismerőt úgy, hogy egyszerre hat különálló fájlba kimeneteljenek. Ehelyett a legújabb létrehozott felismerő konfigurálja a globális naplózási példányt a konfigurációs tulajdonságokban megadott fájl kimenetére, és a rendszer minden SDK-naplózást kibocsát az adott fájlba.

Ez azt is jelenti, hogy a konfigurált naplózási objektum élettartama nincs a naplózás időtartamához kötve. A naplózás nem áll le az SDK-objektumok kiadására válaszul, és mindaddig folytatódik, amíg nincs megadva új naplózási konfiguráció. Az első lépések után a folyamatszintű naplózás leállítható úgy, hogy a naplófájl elérési útját üres sztringre állítja egy új objektum létrehozásakor.

A több példány naplózásának konfigurálásakor felmerülő esetleges zavar csökkentése érdekében hasznos lehet a valós munkát végző objektumok naplózásának absztrakciós vezérlése. Példa pár segítő rutinra:

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("");
}

Következő lépések