fix: Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

RPi 4B で以下エラーで詰まった時の備忘録です。

1
2
3
$ pip3 install xxx

Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

一時的に tmp ディレクトリを指定してからインストールを再度実行することで回避してみます。

1
2
3
4
$ mkdir $HOME/tmp
$ export TMPDIR=$HOME/tmp

$ pip3 install xxx

これでうまくいきました ♪

以上
参考になれば幸いです。

Raspberry Pi 4 Model B に google-cloud-speech インストール時にハマったこと

Raspberry Pi 4 Model B に google-cloud-speech インストール時にハマったこと

Raspberry Pi 4 Model B の環境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cat /etc/os-release

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

$ cat /proc/version

Linux version 5.10.103-v8+ (dom@buildbot) (aarch64-linux-gnu-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1529 SMP PREEMPT Tue Mar 8 12:26:46 GMT 2022

$ uname -a

Linux pi4b-talk 5.10.103-v8+ #1529 SMP PREEMPT Tue Mar 8 12:26:46 GMT 2022 aarch64 GNU/Linux

google-cloud-speech インストール

1
2
$ sudo apt-get install -y libffi-dev libssl-dev
$ pip3 install grpcio google-cloud-speech

「デバイスに空き領域がありません」エラーが発生した場合

1
Could not install packages due to an EnvironmentError: [Errno 28] デバイスに空き領域がありません

一時的に tmp ディレクトリを指定してからインストールを再度実行することで回避できます。

1
2
$ mkdir $HOME/tmp
$ export TMPDIR=$HOME/tmp

それでも以下エラーが出ました。

1
2
3
$ pip3 install grpcio google-cloud-speech

Command "python setup.py egg_info" failed with error code 1 in /home/pi/tmp/pip-install-qocpvlue/grpcio/

デフォルトの pip でなく
python3 で https://bootstrap.pypa.io/get-pip.py 実行し
pip をインストールし直し、再チャレンジしてみます。

1
2
3
4
5
6
7
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py
$ pip --version

pip 23.1.2 from /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

$ pip install --upgrade google-cloud-speech

以上で成功しました。

参考になれば幸いです。

Raspberry Pi に USB スピーカーを接続しテキストを音声変換しお話しさせる

Raspberry Pi に USB スピーカーを接続しテキストを音声変換しお話しさせる


概要

Raspberry Pi と OpenAI を通じて英会話しよう!という動機から
最初の一歩として USB スピーカーから指定したテキストを読み上げる様にしてみました。

環境

Marstudy Raspberry Pi 4 Model B Starter キット
プリインストールされた Raspbian OS を利用しています。

1
2
3
4
5
6
7
8
9
10
11
12
$ cat /etc/os-release

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

usb スピーカー接続

サンワサプライ コンパクト PC スピーカー MS-P08UBK を利用します。

自分が購入した 2023-05-10 は ¥857 でした。

接続先の USB スピーカーのカード番号・デバイス番号を確認

1
2
3
4
5
6
7
8
9
10
11
12
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
サブデバイス: 8/8
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
サブデバイス #7: subdevice #7
  • カード番号 = 1
  • デバイス番号 = 0

音がスピーカーから聞こえるかテスト

1
2
3
4
// plughw:<カード>,<デバイス>
$ speaker-test -D plughw:1,0 -t wav

// Ctrl+c で中断し終了します

python スクリプトから再生してみる

1
$ pip3 install pygame
1
$ curl https://www.soundjay.com/buttons/button-3.mp3 -o button.mp3
  • play_sound.py
1
2
3
4
5
6
7
8
9
10
11
12
13
import pygame


def play_sound_file(file_path):
pygame.mixer.init()
pygame.mixer.music.load(file_path)
pygame.mixer.music.play()

while pygame.mixer.music.get_busy() == True:
continue

if __name__ == "__main__":
play_sound_file('button.mp3')

以下実行し mp3 が再生されることが確認できます。

1
$ python3 play_sound.py

テキストから音声ファイルを作成し読み上げる

  • speech.py
1
2
$ pip3 install gTTS
$ pip3 install pydub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play
import sys


def speechja(stext):
tts = gTTS(stext, lang="ja")
tts.save("/tmp/out.mp3")

sound = AudioSegment.from_mp3("/tmp/out.mp3")
play(sound)


if __name__ == "__main__":
msg = "はい、お元気ですか?"
speechja(msg)

以下実行しスピーカーから「はい、お元気ですか?」と再生されます。

1
$ python3 speech.py

以上
参考になれば幸いです。

次回はマイクから音声認識させる設定を執筆したいと思います。

RPi opencv で笑顔検知して Slack に通知するカメラを作った


概要

以前 RPi bullseye でカメラモジュール周りの設定が変わったことについて記載させていただきました。

RPi で opencv をセットアップする記事をネット上でいくつか見ましたが
bullseye より前のバージョンでの場合が多く、うまくいかないということが多かったです。

その為、 bullseye での設定をまとめます。

続きを読む

fix the system should be configured for the legacy camera stack


概要

Raspberry PI bullseye で raspistill -o test.jpg 実行時に掲題のエラーが発生しました。

1
2
3
$ raspistill -o test.jpg

the system should be configured for the legacy camera stack

以下公式にしっかりと bullseye 以降は libcamera ベースのスタックのみが含まれている、と記載されていました。

https://www.raspberrypi.com/documentation/accessories/camera.html

Raspberry Pi OS images from Bullseye onwards will contain only the libcamera-based stack.

続きを読む

RaspberryPI に Go をインストールする

RPi に Go をインストールする手順です。
2022.05.15 時点最新 1.18.2 をインストールします。

1
2
3
4
5
6
7
8
wget https://golang.org/dl/go1.18.2.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.18.2.linux-armv6l.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

// バージョン確認
go version

※ Raspberry PI OS Bullseye 2022.04.04 リリースで検証しました。