salut! Je m'appelle @ saike1119 et je suis ingénieur stagiaire chez Ozvision Co., Ltd.. Je suis généralement étudiant et je suis au chaud dans un laboratoire qui est fort en IA (intelligence artificielle) et en traitement du langage naturel. Là, nous développons une application utilisant Sota comme recherche de fin d'études. En plus de cela, l'intelligence artificielle, les robots et les haut-parleurs intelligents sont populaires de nos jours, je voudrais donc décrire la mise en œuvre d'un traitement simple à l'aide de Sota. Le processus à mettre en œuvre cette fois consiste à demander à Sota de rechercher dans la base de données le contenu parlé et de renvoyer le contenu associé. L'image est ici.
http://www.vstone.co.jp/sotamanual/index.php?Java%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B
Sota peut être développé avec VStone Magic ou Java, mais cette fois, nous l'implémenterons en Java.
Les fichiers Java à implémenter par Sota sont les suivants.
SearchDbSota.java
//Remplacez le package searchdbsota par n'importe quel nom de package
package jp.vstone.searchdbsota;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import jp.vstone.RobotLib.CPlayWave;
import jp.vstone.RobotLib.CRobotMem;
import jp.vstone.RobotLib.CRobotPose;
import jp.vstone.RobotLib.CRobotUtil;
import jp.vstone.RobotLib.CSotaMotion;
import jp.vstone.sotatalk.SpeechRecog;
import jp.vstone.sotatalk.TextToSpeechSota;
public class SearchDbSota {
static final String TAG = "SearchDbSota";
//Spécifiez le fichier d'exécution
static final String getText_url = "Spécifiez le fichier d'exécution"; //Exemple:http://192.168.11.10/SearchFruitsSotaSample/SearchFruits.php
//VSMD et prise de communication / classe d'accès mémoire
private static CRobotMem mem = new CRobotMem();
private static CSotaMotion motion = new CSotaMotion(mem);
//Classe de contrôle de mouvement pour Sota
private static SpeechRecog recog = new SpeechRecog(motion);
private static CRobotPose pose;
public static void main(String[] args) {
CRobotUtil.Log(TAG, "Start " + TAG);
//VSMD et prise de communication / classe d'accès mémoire
CRobotMem mem = new CRobotMem();
//Classe de contrôle de mouvement pour Sota
CSotaMotion motion = new CSotaMotion(mem);
if (mem.Connect()) {
//Initialiser VSMD aux spécifications Sota
motion.InitRobot_Sota();
CRobotUtil.Log(TAG, "Rev. " + mem.FirmwareRev.get());
//Activer le couple sur le servomoteur à la position actuelle
CRobotUtil.Log(TAG, "Servo On");
motion.ServoOn();
//Initialiser tous les axes
pose = new CRobotPose();
pose.SetPose(new Byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } // id
, new Short[] { 0, -900, 0, 900, 0, 0, 0, 0 } // target pos
);
//Allumez la LED (œil gauche: rouge, œil droit: rouge, bouche: Max, bouton d'alimentation: rouge)
pose.setLED_Sota(Color.ORANGE, Color.ORANGE, 255, Color.ORANGE);
motion.play(pose, 100);
CRobotUtil.wait(100);
}
while (true) {
pose();
CPlayWave.PlayWave_wait(TextToSpeechSota.getTTSFile("Quel fruit voulez-vous connaître? Lorsque vous arrêtez, dites fin."));
CRobotUtil.Log(TAG, "Mic Recording...");
String fruitName = recog.getResponse(15000, 3);
CRobotUtil.Log(TAG, fruitName);
if (fruitName.contains("Fin")) {
CRobotUtil.Log(TAG, "finish...");
break;
}
String speech_text = searchFruit(fruitName);
CPlayWave.PlayWave_wait(TextToSpeechSota.getTTSFile(speech_text));
}
}
/**
*Traitement pour accéder au serveur Web et obtenir le texte par GET
*
* @param strGetUrl
* @return
*/
public static String getStringByCallGET(String strGetUrl) {
HttpURLConnection con = null;
StringBuffer result = new StringBuffer();
try {
URL url = new URL(strGetUrl);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.connect(); //Envoyer la demande par GET à l'URL
//Code de réponse HTTP
final int status = con.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
//Communication réussie
//Obtenez le texte
final InputStream in = con.getInputStream();
String encoding = con.getContentEncoding();
if (null == encoding) {
encoding = "UTF-8";
}
final InputStreamReader inReader = new InputStreamReader(in, encoding);
final BufferedReader bufReader = new BufferedReader(inReader);
String line = null;
//Lire le texte ligne par ligne
while ((line = bufReader.readLine()) != null) {
result.append(line);
}
bufReader.close();
inReader.close();
in.close();
} else {
// System.out.println(status);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (con != null) {
//Déconnecter
con.disconnect();
}
}
// System.out.println("result=" + result.toString());
return result.toString();
}
/**
*Rechercher des valeurs dans DB
*
* @param fruit
* @return
*/
public static String searchFruit(String fruit) {
String param = "?";
String speechSota = "";
String error = "error";
if (fruit != null && fruit.length() > 0) {
param += "fruitsName=" + encodeWord(fruit);
}
speechSota = getStringByCallGET(getText_url + param);
if (speechSota != null && speechSota.length() > 0) {
return speechSota;
}
return error;
}
/**
*Encoder la chaîne reçue
*
* @param word
* @return
*/
public static String encodeWord(String word) {
if (word != null) {
try {
word = URLEncoder.encode(word, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return word;
}
/**
*Pose de l'azatoi
*/
public static void pose() {
pose.SetPose(new Byte[] { 1, 2, 3, 4, 5 }, new Short[] { 0, 180, -850, -180, 850 });
motion.play(pose, 1000);
CRobotUtil.wait(100);
}
}
Placez le fichier Java ci-dessus dans la hiérarchie que vous souhaitez exécuter. Exemple: SearchFruitsSotaSample / bin / jp / vstone / searchdbsota / SearchDbSota.java
Côté serveur, préparez un environnement LAMP simple accessible depuis Sota.
Les fichiers PHP à implémenter côté serveur sont les suivants.
db_def.php
<?php
//au dessous de$Définissez une valeur autre que dbname
$dbhost = '127.0.0.1';
$dbuser = 'root';
$dbpasswd = 'root';
$dbname = 'fruits_data';
?>
SearchFruit.php
<?php
include_once('db_def.php');
$speech_txt = "";
$fruitsName = "";
$mysqli = new mysqli($dbhost, $dbuser, $dbpasswd, $dbname);
if ($mysqli->connect_error) {
echo $mysqli->connect_error;
exit();
}
if (isset($_REQUEST['fruitsName'])) {
$fruitsName = $_REQUEST['fruitsName'];
$fruitsName = mysqli_escape_string($mysqli, $fruitsName);
$speech_txt = $fruitsName;
}
$query = "select * from fruits WHERE fruit = '{$fruitsName}';";
$result = $mysqli->query($query);
if ($result->num_rows >= 1) {
while ($row = $result->fetch_assoc()) {
$speech_txt .= 'Est' . $row["description"];
}
$result->free();
} else {
$speech_txt .= 'N'a pas été trouvé.';
}
$mysqli->close();
echo $speech_txt;
Placez le fichier PHP ci-dessus dans une hiérarchie exécutable au sein du serveur. Exemple: /var/www/html/SearchFruitsSotaSample/db_def.php Exemple: /var/www/html/SearchFruitsSotaSample/SearchFruit.php
Cette fois, nous chercherons la valeur dans la table de base de données de test. Dans ce cas, c'est mysql. Connectez-vous à mysql et exécutez l'instruction sql suivante.
create database fruits_data;
use fruits_data;
create table fruits (id int not null primary key auto_increment, fruit varchar(20), description varchar(255));
insert into fruits (fruit, description) values ('pomme', 'Un arbre à feuilles caduques de la famille des roses. Au printemps, des fleurs blanches ou rouge clair fleurissent. Les fruits sont sphériques et aigre-doux. Il existe de nombreuses variétés, début juin et fin décembre. Il existe également des couleurs telles que le rouge, le jaune et le vert clair.'), ('Mandarine', 'Mandarine科の常緑低木または高木。六月ごろ白い花が咲き、冬に黄色で丸い果実を結ぶ。食用。品種が多い。'), ('Grain de raisin', 'Grain de raisin科の落葉植物。茎がつるになって他の物にからみついて伸び、夏、球状の実が房のような形につく。実は食用、またGrain de raisin酒の原料。');
Une fois que vous avez fait ce qui précède, déplaçons Sota! Envoyez le contenu implémenté côté Sota dans send.xml, et en cas de succès, connectez-vous à Sota avec ssh. (Sota prononce le nom d'hôte de send.xml et ssh) Ensuite, exécutez le fichier SearchDbSota.java que vous venez de créer avec ``. / Java_run.sh ''!
C'est fait! Avec cela, Sota recherchera dans la base de données ce que vous avez dit et répondra.
Comment était-ce? Sota est un excellent robot humanoïde qui est utilisé dans diverses scènes et est en fait introduit par de nombreuses entreprises. Ici, nous n'utilisons que la composition vocale, la reconnaissance vocale et la pause, mais les possibilités sont infinies en intégrant la reconnaissance d'image et en créant des liens avec diverses API! Même ainsi, il n'y a pas beaucoup d'articles sur Sota, donc c'est un processus simple, mais j'espère que ce contenu sera utile à ceux qui l'ont lu! Aussi, si vous avez des questions ou des préoccupations, veuillez laisser un commentaire. Noshi
Recommended Posts