Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2

Vorwort

Aus diesem Grund werde ich die tatsächliche Überprüfung der Sprecheridentifikation mithilfe der "Sprechererkennungs-API" beschreiben. (Bitte lassen Sie mich wissen, wenn es etwas Seltsames gibt!)

Prozessablauf

Die folgenden drei Schritte sind erforderlich, um den Sprecher zu identifizieren.

  1. Erstellen Sie ein Benutzerprofil
  2. Registrieren Sie die Stimme im Benutzerprofil
  3. Identifizieren Sie anhand der registrierten Stimme, wer dies gesagt hat

Dieses Mal möchte ich drei Prozesse für jeden Schritt erstellen, damit ich ihn leicht verstehen kann.

Schritt 1 Erstellen Sie ein Benutzerprofil

Erstellen Sie zunächst den Benutzer, für den Sie den Sprecher identifizieren möchten. Verwenden Sie als API-Funktion "Profil erstellen" unter "Identifikationsprofil". Es erstellt ein Profil für den Benutzer und gibt die Profil-ID des Benutzers zurück. (Da der Name nicht registriert ist, muss die Liste separat verwaltet werden.)

Im Überprüfungsskript wird der Benutzername als Argument angegeben und der Benutzername und die ID werden mit der Datei "Profile_List.csv" verknüpft und ausgegeben.

CreateProfile.py

########### module #############

import sys # Library zum Speichern von Argumenten Importanfragen # Bibliothek für HTTP-Kommunikation Importieren Sie die json # -Bibliothek für die Verwendung von Daten im json-Format import base64 import csv

########### Args & variable #########################
args = sys.argv
Profile_Name = args[1]
Profile_List = 'Profile_List.csv'

########### Create Profile #########################
with open(Profile_List) as fp:
    lst = list(csv.reader(fp))

for i in lst:
    if Profile_Name in i:

print ('Der angegebene Benutzer ist bereits registriert.') sys.exit()

ApiPath = 'https://speaker-recognitionapi.cognitiveservices.azure.com/spid/v1.0/identificationProfiles'

headers = {
    # Request headers
    'Content-Type': 'application/json',

'Ocp-Apim-Abonnement-Schlüssel': '<Abonnementschlüssel>', }

body = {
    'locale':'en-us',
}

r = requests.post(
    ApiPath,            # URL 

Header = Header, # Header json = body # body )

try:
    ProfileId = r.json()['identificationProfileId']
except Exception:
    print('Error:{}'.format(r.status_code))
    print(r.json()['error'])
    sys.exit()

print(ProfileId)

f = open(Profile_List, 'a')
writer = csv.writer(f, lineterminator='\n')
writer.writerow([Profile_Name, ProfileId])
####################################

Schritt 2 Registrieren Sie die Stimme im Benutzerprofil

Wir werden die Stimme bei dem oben erstellten Benutzer registrieren. (Im Gegensatz zur Sprecherauthentifizierung wird keine Phrase angegeben, daher scheint alles in Ordnung zu sein.)

Die folgenden Funktionen werden hier verwendet.

  1. "Registrierung erstellen" von "Identifikationsprofil" (Sprachregistrierung)
  2. "Get Operation Status" von "Speaker Recognition" (Bestätigung des Registrierungsstatus)

Ich bin auch persönlich verrückt danach, aber es gibt einige ziemlich strenge Einschränkungen für die Audiodateien, die verwendet werden können.

Eigentum Erforderlicher Wert
Container WAV
Kodieren PCM
Bewertung 16K
Beispielformat 16 Bit
Kanal monaural

Ich konnte den Sound, der die Bedingungen erfüllte, nicht bekommen, aber ich konnte ihn mit einer kostenlosen Software namens "Audacity" aufnehmen. (Dies ist sehr praktisch)

Das Argument des Skripts ist der Benutzername. (Es wird angenommen, dass die Audiodatei einen Benutzernamen hat, aber es ist gut zu überprüfen)

CreateEnrollment.py

########### module #############

import sys # Library zum Speichern von Argumenten Importanfragen # Bibliothek für HTTP-Kommunikation Importieren Sie die json # -Bibliothek für die Verwendung von Daten im json-Format import base64 import csv import time

########### Args & variable #########################
args = sys.argv
Profile_Name = args[1]
Profile_List = 'Profile_List.csv'
WavFile = f'{Profile_Name}.wav'

with open(Profile_List) as fp:
    lst = list(csv.reader(fp))

for i in lst:
    if Profile_Name in i:
        break

j = lst.index(i)
ProfileId = lst[j][1]

########### Create Enrollment #########################
ApiPath = f'https://speaker-recognitionapi.cognitiveservices.azure.com/spid/v1.0/identificationProfiles/{ProfileId}/enroll?shortAudio=true'

headers = {
    # Request headers
    'Content-Type': 'application/octet-stream',

'Ocp-Apim-Abonnement-Schlüssel': '<Abonnementschlüssel>', }

with open(WavFile, 'rb') as f:
    body = f.read()

r = requests.post(
    ApiPath,            # URL 

Header = Header, # Header data = body # body )

try:
    response = r
    print('response:', response.status_code)
    if response.status_code == 202:
        print(response.headers['Operation-Location'])
        operation_url = response.headers['Operation-Location']
    else:
        print(response.json()['error'])
        sys.exit()
except Exception:
    print(r.json()['error'])
    sys.exit()
####################################
########### Get Operation Status #########################
url = operation_url

headers = {
    # Request headers

'Ocp-Apim-Abonnement-Schlüssel': '<Abonnementschlüssel>', }

status = ''
while status != 'succeeded':
    
    r = requests.get(
        url,            # URL 

Header = Header, # Header )

    try:
        response = r
        print('response:', response.status_code)
        if response.status_code == 200:
            status = response.json()['status']

print (aktueller Status; {status} ') if status == 'failed': message = response.json()['message'] print(f'error:{message}') sys.exit() elif status != 'succeeded': time.sleep(3) else: print(r.json()['error']) sys.exit() except Exception: print(r.json()['error']) sys.exit()

enrollmentStatus = response.json()['processingResult']['enrollmentStatus']
remainingEnrollmentSpeechTime = response.json()['processingResult']['remainingEnrollmentSpeechTime']
speechTime = response.json()['processingResult']['speechTime']

if enrollmentStatus == 'enrolling':

status = 'Das Profil wird gerade registriert und ist nicht zur Identifizierung bereit. ' elif enrollmentStatus == 'training': status = 'Das Profil wird gerade trainiert und ist nicht zur Identifizierung bereit. ' else: status = 'Das Profil wird gerade registriert und ist zur Identifizierung bereit. '

print (f '\ n Status; {EnrollmentStatus}') print (aktueller Status; {status} ') print (insgesamt gültige Audiozeit (Sekunden): {languageTime} ') print (f'Resting Audio Time (Sekunden) für eine erfolgreiche Registrierung erforderlich: {verbleibendeEnrollmentSpeechTime} ')

Schritt 3 Identifizieren Sie anhand der registrierten Stimme, wer dies gesagt hat

Es ist endlich der Hauptprozess. Die folgenden Funktionen werden hier verwendet.

  1. "Identifizierung" von "Sprechererkennung"
  2. "Betriebsstatus abrufen" von "Lautsprechererkennung"

Bei dieser Überprüfung wird die Audiodatei verwendet, deren Argumente Sie identifizieren möchten. Übrigens scheinen in Bezug auf die Sprecheridentifikation bis zu 10 Benutzer (Profile) gleichzeitig verifiziert werden zu können. POSTEN Sie dabei die Sprach- und Profil-ID (Plural), die Sie mit "Identifikation" identifizieren möchten, führen Sie "Get Operation Status" für die zurückgegebene URL "Operation-Location`" aus und überprüfen Sie den Identifikationsstatus und das Ergebnis. Dies ist das Bild zu bekommen. {Bei der Überprüfung dauerte es bis zu 9 Sekunden, bis die Identifizierung abgeschlossen war.) Da die "Profil-ID" als Identifikationsergebnis zurückgegeben wird, muss sie separat durch den Benutzernamen ersetzt werden. Die Zuverlässigkeit der Identifizierung wird ebenfalls zurückgegeben, es scheint jedoch drei Ebenen zu geben: niedrig, mittel und hoch.

Identification.py

########### module #############

import sys # Library zum Speichern von Argumenten Importanfragen # Bibliothek für HTTP-Kommunikation Importieren Sie die json # -Bibliothek für die Verwendung von Daten im json-Format import base64 import csv import time

########### Args & variable #########################
args = sys.argv
WavFile = args[1]
Profile_List = 'Profile_List.csv'

with open(Profile_List) as fp:
    lst = list(csv.reader(fp))

########### Identification #########################
ProfileIds = ''
for a, b in lst:
    ProfileIds += b + ','

ProfileIds = ProfileIds[:-1]

url = 'https://speaker-recognitionapi.cognitiveservices.azure.com/spid/v1.0/identify'

params = {
    'identificationProfileIds': ProfileIds,
    'shortAudio': True,
}

headers = {
    # Request headers
    'Content-Type': 'application/octet-stream',

'Ocp-Apim-Abonnement-Schlüssel': '<Abonnementschlüssel>', }

with open(WavFile, 'rb') as f:
    body = f.read()

r = requests.post(
    url,            # URL 
    params = params,

Header = Header, # Header data = body # body )

try:
    response = r
    print('response:', response.status_code)
    if response.status_code == 202:
        print(response.headers['Operation-Location'])
        operation_url = response.headers['Operation-Location']
    else:
        print(response.json()['error'])
        sys.exit()
except Exception:
    print(r.json()['error'])
    sys.exit()

####################################
########### Get Operation Status #########################
url = operation_url
#url = 'https://speaker-recognitionapi.cognitiveservices.azure.com/spid/v1.0/operations/ea1edc22-32f4-4fb9-81d6-d597a0072c76'

headers = {
    # Request headers

'Ocp-Apim-Abonnement-Schlüssel': '<Abonnementschlüssel>', }

status = ''
while status != 'succeeded':
    
    r = requests.get(
        url,            # URL 

Header = Header, # Header )

    try:
        response = r
        print('response:', response.status_code)
        if response.status_code == 200:
            status = response.json()['status']

print (aktueller Status; {status} ') if status == 'failed': message = response.json()['message'] print(f'error:{message}') sys.exit() elif status != 'succeeded': time.sleep(3) else: print(r.json()['error']) sys.exit() except Exception: print(r.json()['error']) sys.exit()

identifiedProfileId = response.json()['processingResult']['identifiedProfileId']
confidence = response.json()['processingResult']['confidence']

for i in lst:
    if identifiedProfileId in i:
        break

j = lst.index(i)
Profile_Name = lst[j][0]

print (f '\ n Sprecher; {Profilname}') print (Zuverlässigkeit; {Vertrauen} ') ####################################

Ende

Also habe ich diesmal versucht, "Speaker Recognition API" zu überprüfen. Es wurde gesagt, dass es nicht mit Japanisch kompatibel sei, aber ich persönlich war der Meinung, dass die Sprecheridentifikation ziemlich genau war. Es scheint, dass Sie verschiedene Dinge tun können, wenn Sie es gut verwenden!

Vorheriger Artikel

Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 1

Recommended Posts

Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
[Python] Verwenden Sie die Face-API von Microsoft Cognitive Services
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich habe versucht, eine RESTful-API zu erstellen, indem ich die explosive Fast-API des Python-Frameworks mit MySQL verbunden habe.
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, den Verkauf von Spielesoftware mit VARISTA anhand des Artikels von Codexa vorherzusagen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht zu beheben "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren"
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten
[Python] Ich habe versucht, das Preisgeld von "ONE PIECE" über 100 Millionen Zeichen mit matplotlib zu visualisieren.
Ich habe versucht, den Inhalt jedes von Python pip gespeicherten Pakets in einer Zeile zusammenzufassen
Ich habe versucht, die erste Frage der Mathematik-Aufnahmeprüfung 2019 der Universität Tokio mit Python Sympy zu lösen
Ich habe versucht, die COTOHA-API zu berühren
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
765 Ich habe versucht, die drei Berufsfamilien durch CNN zu identifizieren (mit Chainer 2.0.0).
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die optimale Route des Traumlandes durch (Quanten-) Tempern zu finden
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
[Linux] Ich habe versucht, die sichere Bestätigungsmethode von FQDN (CentOS7) zu überprüfen.
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.