Beim letzten Mal habe ich die Informationen gesprochen, die durch Web Scraping erhalten wurden. Lassen Sie diesmal Raspberry Pi die Wetterinformationen mit openJtalk sprechen!
・ Python 3 und OpenJtalk können auf Raspberry Pi verwendet werden (Die Installation von OpenJtalk wird in diesem Artikel erläutert. Wenn Sie dies noch nicht getan haben!)
・ Himbeer Pi3 Modell B. ・ Betriebssystem: Raspbian ・ Python Version 3.7
In diesem Artikel, https://openweathermap.org/ Verwenden Sie die von bereitgestellte API. Mein Vorgänger hat dies für mich getan. Lesen Sie daher den folgenden Artikel und registrieren Sie sich. Artikel 1: https://qiita.com/syunyo/items/b408b8d61f9f73b21da7 Artikel 2: https://qiita.com/nownabe/items/aeac1ce0977be963a740
Von hier aus gehen wir davon aus, dass die API-Registrierung für Open Weather Map abgeschlossen ist. Erstellen Sie ein geeignetes Verzeichnis.
$ mkdir weatherapi
$ cd weatherapi
Schreiben Sie zunächst den folgenden Code, damit openJtalk mit Python-Skripten arbeiten kann.
$ vi jtalk.py
Drücken Sie i, um den Bearbeitungsmodus aufzurufen, und kopieren Sie dann Folgendes und fügen Sie es ein.
jtalk.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
from datetime import datetime
def jtalk(t):
open_jtalk=['open_jtalk']
mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
c.stdin.write(t.encode())
c.stdin.close()
c.wait()
aplay = ['aplay','-q','open_jtalk.wav']
wr = subprocess.Popen(aplay)
def say_datetime():
d = datetime.now()
text = '%s Monat%s Tag,%s Zeit%s Minuten%s Sekunden' % (d.month, d.day, d.hour, d.minute, d.second)
jtalk(text)
if __name__ == '__main__':
say_datetime()
Der obige Code verwendet die nicht standardmäßige weibliche Stimme von openJtalk. Für diejenigen, die nur openJtalk installieren
htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
Zu
htsvoice=['-m','/usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice]
Bitte wechseln Sie zu.
Schreiben Sie als Nächstes den Code, um die API zu treffen, in dasselbe Verzeichnis, um zu sprechen. Auf die gleiche Weise
$ vi weather_api_jtalk.py
Drücken Sie i, um den Bearbeitungsmodus aufzurufen, und kopieren Sie dann Folgendes und fügen Sie es ein.
weather_api_jtalk.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#open weather map &Audioausgabe des Wetters mit openJtalk
#Reference: https://qiita.com/syunyo/items/b408b8d61f9f73b21da7
#API import
import requests
import json
### jtalk import
import jtalk
import time
# API key
apikey = "your api key" #Geben Sie hier Ihren API-Schlüssel ein
#Liste der Städte, für die Sie das Wetter überprüfen möchten
#cities = ["Sendai,JP", "London,UK", "New York,US"]
cities = ["Sendai,JP"] #Diesmal nur Sendai
#API-Vorlage
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
#Temperaturumwandlung(Kelvin → Setsu)
k2c = lambda k: k - 273.15
#Holen Sie sich die Temperatur jeder Stadt
for name in cities:
#Holen Sie sich die API-URL
url = api.format(city=name, key=apikey)
#Senden Sie tatsächlich eine Anfrage an die API und erhalten Sie das Ergebnis
r = requests.get(url)
#Das Ergebnis ist im JSON-Format, dekodieren Sie also json-> dictionary
data = json.loads(r.text)
#Ausgabeergebnis
jtalk.jtalk("Kokon'nichiwa, Wetter heute")
time.sleep(2)
print("+Stadt=", data["name"])
print("|Wetter=", data["weather"][0]["description"])
if "rain" in data["weather"][0]["description"]:
jtalk.jtalk("Es regnet.")
else:
jtalk.jtalk("Es ist kein Regen")
time.sleep(2)
print("|Niedrigste Temperatur=", k2c(data["main"]["temp_min"]))
jtalk.jtalk("Die niedrigste Temperatur ist in Grad Celsius"+str(k2c(data["main"]["temp_min"]))+"Wie ist das?")
time.sleep(4)
print("|Höchste Temperatur=", k2c(data["main"]["temp_max"]))
jtalk.jtalk("Die maximale Temperatur ist in Grad Celsius"+str(k2c(data["main"]["temp_max"]))+"Wie ist das?")
#print("|Feuchtigkeit=", data["main"]["humidity"])
#print("|Druck=", data["main"]["pressure"])
#print("|Windrichtung=", data["wind"]['deg'])
#print("|Windgeschwindigkeit=", data["wind"]["speed"])
#print("")
#print("missing some requested data or some error occurs")
$ python weather_api_jtalk.py
Wie wär es damit? Ich pendle immer mit dem Fahrrad, also möchte ich nur wissen, ob es regnet. Wenn es regnet, sage ich "es regnet", ansonsten sage ich "es regnet nicht". Als nächstes werden Sie über die minimalen und maximalen Temperaturen informiert.
Ich bin hier ein bisschen süchtig danach, also werde ich es betonen.
jtalk.jtalk("Kokon'nichiwa, Wetter heute")
time.sleep(2)
Wie Sie hier sehen können, wird die Schlaffunktion verwendet, um die Ausführung zu stoppen, während der jtalk spricht. Wenn Sie dies nicht tun, werden die als nächstes auszugebenden Sprachinformationen während des Gesprächs eingegeben und die Sprache wird unterbrochen. Nach jtalk.jtalk () gibt es also eine Ausfallzeit, die der Zeit ähnelt, die zum Sprechen benötigt wird. time.sleep (ungefähr die Zeit, die zum Sprechen benötigt wird) Bitte Sandwich.
Dieses Mal habe ich die API aufgerufen, um das Wetter abzurufen und es mit OpenJtalk als Audio auszugeben. Ich denke, dass Sie mit der natürlichen Dialog-API sprechen können. Dann!
Recommended Posts