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ő SpeechConfig
tulajdonsá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("");
}