- とりあえず動作確認したラズパイ5ですが、目的用途のための動作確認などを、
- 1. 起動媒体
まず、間に合わせ使ったsdカードがメチャクチャ遅い、ドラレコから抜いてきたからほぼ寿命終わりらしい
かなり昔のusbメモリにインストして立ち上げた方がはるかに高速、なので追加でSDカード(UHS-1規格)購入してインストすると体感かなりサクサク
shutdown ~ reboot(ログオン完了)時間は、
Shutdown ~ reboot時間
どちらもヘッドレス、
古いmicro SD : 1:40 min/ 2:20 min(媒体終わってるよね)
Stick USB : 1:10 min
SDカード(UHS-1):40 sec(デスクトップモードなのに)
という結果、ついでにsdカードのベンチマークは、
UHS-1カードのPiBenchmarks結果
$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
Category Test Result
HDParm Disk Read 90.82 MB/sec
HDParm Cached Disk Read 90.94 MB/sec
DD Disk Write 32.5 MB/s
FIO 4k random read 6317 IOPS (25268 KB/s)
FIO 4k random write 845 IOPS (3382 KB/s)
IOZone 4k read 29989 KB/s
IOZone 4k write 3288 KB/s
IOZone 4k random read 30032 KB/s
IOZone 4k random write 3268 KB/s
Score: 2530
ラズパイ5ではおそらく平均的な値だろう
2. Pythonのインスト
ラズパイではpyenvを使うことが推奨というかほぼマストです
https://zenn.dev/technicarium/articles/00b32d390e82ec
がわかりやすかったのでこのサイトとPerplexityでPyenvと現状安定版の最終3.13.1をインスト、必要なライブラリは都度
3. text2speechでスピーカ機能も確認
音声の入出力にUSB接続のマイクとスピーカーを使いますが、その機能確認含めて、ロワーケースはssd用HAT(見た目ロワ側なのでHATじゃなくてHAB、そのそも上側にはGPIOコントロールのカスタムボードが追加されるし)に置き換えてます
フリーのopen_jtalkのインストと動作確認
open-jtalkインスト
$ sudo apt-get update
$ sudo apt-get install -y open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001
女性の声のインスト
$ wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip
$ unzip MMDAgent_Example-1.7.zip
$ sudo cp -r ./MMDAgent_Example-1.7/Voice/* /usr/share/hts-voice/
合成音声(text2speech)のサンプルコード(Perplexityで作成)
#
# pactl set-sink-volume @DEFAULT_SINK@ +10% 音量アップ
#
import subprocess
import os
from datetime import datetime
def jtalk(text):
open_jtalk = ['/usr/bin/open_jtalk']
mech = ['-x', '/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice = ['-m', '/usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice']
speed = ['-r', '1.0']
outwav = ['-ow', 'out.wav']
cmd = open_jtalk + mech + htsvoice + speed + outwav
try:
proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate(input=text.encode('utf-8'))
if proc.returncode != 0:
print(f"Error in open_jtalk: {stderr.decode('utf-8')}")
return
if not os.path.exists('out.wav'):
print("Error: out.wav was not generated.")
return
# Raspberry Pi での音声再生
subprocess.call(['aplay', 'out.wav'])
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == '__main__':
current_time = datetime.now().strftime("%H時%M分")
text = f"現在の時刻は{current_time}です。"
jtalk(text)
4. マイク機能の確認
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 2: SF558 [SF-558], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
のように見えているので、Linuxの基本コマンドで確認
// record
$ arecord -d 5 -r 12000 out.wav
// play
$ aplay out.wav
後ペリフェラルではカメラ必要だけど、それはリサーチの後だな、それにステッピングモータとか駆動させるとACアダプタ5Aで足りるのかな?
admin