gpt4 book ai didi

php - 当我在 Raspberry pi 上单击网站中的链接时如何运行 espeak 命令

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:57 24 4
gpt4 key购买 nike

我需要帮助。我使用 Raspberry pi 构建了一个机器人,然后用相机和扬声器对其进行了扩展。我安装了一个 lighthttpd 服务器,我可以使用一个简单的网站来控制它。

工作正常,网络服务器显示此站点:https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/index.html单击按钮时,cgi 脚本会启动电机。例如 forward.cgi(已编辑 https://github.com/Mjrovai/MJRoBot-Web-RPi-Robot/blob/master/cgi-bin/forward.cgi)脚本包含:

#!/bin/bash
gpio mode 7 out
gpio mode 0 out
gpio mode 2 out
gpio mode 3 out
gpio write 7 0
gpio write 0 1
gpio write 2 0
gpio write 3 1

当上面的脚本运行时,它会设置每个 GPIO 并启动电机。

我现在想做的是在我按下按钮时添加一个功能,另一个 cgi 脚本将用于生成一些语音。我遇到的问题是,即使我在上面的文件中添加以下命令,它也会运行电机,但它不会说话。

espeak test

我尝试使用 PHP。我使用下面的 index.php 文件在单击链接时触发 speak.sh 但它不起作用。

索引.php

<?php
if ($_GET['run']) {
# This code will run if ?run=true is set.
exec("speak.sh");
}
?>

<!-- This link will add ?run=true to your URL, myfilename.php?run=true -->
<a href="?run=true">Click Me!</a>

speak.sh(从 stackoverflow.com 复制)

#!/bin/bash
#
# announce - script to convert text parameter into spoken sound
#
# Prerequisites:
# eSpeak
# mbrola binary
# mbrola voice
# alsa sound
# libportaudio
#
# Axel Kemper 21-Feb-2015
#
#==================================================================
#

get_abs_dir() {
echo "$(cd "$(dirname "$1")" && pwd)"
}

set_volume() {
# "amixer scontrols" lists all simple ALSA controls
# http://manpages.ubuntu.com/manpages/lucid/man1/amixer.1.html
amixer set Headphone $1 > /dev/null
amixer set Headphone $2 > /dev/null
amixer set PCM $1 > /dev/null
amixer set PCM $2 > /dev/null
}

text=$*
amplitude=100 # 0 .. 200 default: 100
pitch=50 # 0 .. 99 default: 50
wordsPerMinute=90 # 80 .. 450 default: 175
charFormat=2 # 8-bit character set
charFormat=1 # UTF-8 character set
soundDevice=sysdefault # cf. aplay -L
esHome=$(get_abs_dir $0)
esHome=${esHome%/bin}

voice=en+m3 # "de+f2"

export LD_LIBRARY_PATH=$esHome/shared_library

set_volume 100% on
# espeak-data has to reside in $esHome
espeak -a $amplitude -p $pitch -b $charFormat -v $voice "text" --stdout | aplay -D$soundDevice &$

上面的代码,在终端中运行时会产生声音,但在网络服务器中运行时不会。有什么办法可以从网站运行任何命令吗?是的,我知道这方面的安全隐患。我不是开发人员并且正在努力学习,所以欢迎任何想法。

还有没有办法创建一个带有字段的站点来键入文本,然后树莓派会使用 espeak 说话?

最佳答案

我在/etc/sudoers 文件中添加了以下内容,它起作用了。是的,我了解这背后的安全隐患,所以请不要在生产环境中这样做。

Cmnd_Alias ESPEAK_CMDS = /usr/bin/espeak
www-data ALL=(ALL) NOPASSWD: ESPEAK_CMDS

还要检查/var/log/syslog 以获得更多详细信息

关于php - 当我在 Raspberry pi 上单击网站中的链接时如何运行 espeak 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com