La dernière fois, j'ai parlé des informations obtenues par le web scraping. Cette fois, laissez Raspberry Pi parler des informations météorologiques en utilisant openJtalk!
・ Python 3 et OpenJtalk peuvent être utilisés sur Raspberry Pi (L'installation d'OpenJtalk est expliquée dans cet article, donc si vous ne l'avez pas déjà fait!)
・ Raspberry Pi3 modèle B ・ Système d'exploitation: Raspbian ・ Python ver3.7
Dans cet article, https://openweathermap.org/ Utilisez l'API fournie par. Quant à savoir comment l'utiliser, mon prédécesseur l'a fait pour moi, veuillez donc vous référer à l'article suivant et vous inscrire. Article 1: https://qiita.com/syunyo/items/b408b8d61f9f73b21da7 Article 2: https://qiita.com/nownabe/items/aeac1ce0977be963a740
À partir de là, nous partirons du principe que l'enregistrement de l'API pour Open weather map a été effectué. Créez un répertoire approprié.
$ mkdir weatherapi
$ cd weatherapi
Tout d'abord, écrivez le code suivant afin qu'openJtalk puisse fonctionner avec des scripts Python.
$ vi jtalk.py
Appuyez sur i pour passer en mode édition, puis copiez et collez ce qui suit.
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 mois%jour de s,%s temps%s minutes%s secondes' % (d.month, d.day, d.hour, d.minute, d.second)
jtalk(text)
if __name__ == '__main__':
say_datetime()
Le code ci-dessus utilise la voix féminine non par défaut d'openJtalk. Pour ceux qui n'installent que openJtalk
htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
À
htsvoice=['-m','/usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice]
Veuillez changer en.
Ensuite, écrivez le code pour frapper l'API dans le même répertoire pour parler. De la même manière
$ vi weather_api_jtalk.py
Appuyez sur i pour passer en mode édition, puis copiez et collez ce qui suit.
weather_api_jtalk.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#open weather map &Sortie audio de la météo avec 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" #Mettez votre clé API ici
#Liste des villes pour lesquelles vous souhaitez consulter la météo
#cities = ["Sendai,JP", "London,UK", "New York,US"]
cities = ["Sendai,JP"] #Seulement Sendai cette fois
#Modèle d'API
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
#Conversion de température(Kelvin → Setsu)
k2c = lambda k: k - 273.15
#Obtenez la température de chaque ville
for name in cities:
#Obtenez l'URL de l'API
url = api.format(city=name, key=apikey)
#En fait, envoyez une requête à l'API et obtenez le résultat
r = requests.get(url)
#Le résultat est au format JSON, donc décodez json-> dictionary
data = json.loads(r.text)
#Résultat de sortie
jtalk.jtalk("Kokon'nichiwa, météo aujourd'hui")
time.sleep(2)
print("+ville=", data["name"])
print("|Météo=", data["weather"][0]["description"])
if "rain" in data["weather"][0]["description"]:
jtalk.jtalk("C'est la pluie.")
else:
jtalk.jtalk("Ce n'est pas la pluie")
time.sleep(2)
print("|Température la plus basse=", k2c(data["main"]["temp_min"]))
jtalk.jtalk("La température la plus basse est en degrés Celsius"+str(k2c(data["main"]["temp_min"]))+"Comment c'est?")
time.sleep(4)
print("|Température la plus élevée=", k2c(data["main"]["temp_max"]))
jtalk.jtalk("La température maximale est en degrés Celsius"+str(k2c(data["main"]["temp_max"]))+"Comment c'est?")
#print("|Humidité=", data["main"]["humidity"])
#print("|Pression=", data["main"]["pressure"])
#print("|Direction du vent=", data["wind"]['deg'])
#print("|Vitesse du vent=", data["wind"]["speed"])
#print("")
#print("missing some requested data or some error occurs")
$ python weather_api_jtalk.py
Et ça? Je fais toujours la navette en vélo, donc je veux juste savoir s'il pleut, donc s'il pleut, je dis "il pleut", sinon je dis "il ne pleut pas". Ensuite, il vous informera des températures minimales et maximales.
J'y suis un peu accro ici, alors je vais le souligner.
jtalk.jtalk("Kokon'nichiwa, météo aujourd'hui")
time.sleep(2)
Comme vous pouvez le voir ici, la fonction sleep est utilisée pour arrêter l'exécution tout en parlant avec jtalk. Si vous ne le faites pas, les informations vocales à émettre ensuite entreront pendant que vous parlez et la parole sera interrompue. Donc, après jtalk.jtalk (), il y a un temps d'arrêt similaire au temps qu'il faut pour parler. time.sleep (environ le temps qu'il faudra pour parler) Veuillez prendre un sandwich.
Cette fois, j'ai frappé l'API pour obtenir la météo et la diffuser en audio en utilisant OpenJtalk. Je pense que vous pourrez parler en utilisant l'API de dialogue naturel. Puis!
Recommended Posts