e在京白堊会のサイトを念願の常時SSLに対応できるように、引っ越しと移植を 実施しました。Topページには、こっそり「47ML」へのリンクも貼っています。 ついでに、テーマのカストマイズで保守性を犠牲にしていた「子テーマ」設置と MyFunctionとした私的関数の維持管理の知恵をメモしておきます。 1)子テーマの設置 twentyten-child として次のstyle.css を設置(他のCSS値も置換できる)/* Theme Name: Twenty Ten Child Theme URI: https://wordpress.org/themes/twentyten-child/ Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar. Author: the WordPress team Author URI: https://wordpress.org/ Template: twentyten Version: 1.0.0 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Tags: blog, two-columns, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu, flexible-header, featured-images, footer-widgets, featured-image-header Text Domain: twenty-ten-child */2)MyFunctionのinclude方法 childのfunction.php には、次の記述を実施した。add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style')); } //ここから自由インクルード function Include_my_php($params = array()) { extract(shortcode_atts(array( 'file' => 'default' ), $params)); ob_start(); include(get_stylesheet_directory() ."/$file.php"); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php'); Include_my_php(array('file'=>'myFunction')); //ここまでこれで、テーマ「twentyten」の更新があっても、全く影響が出ない。
サイトのセキュリティ強化
Raspberry Pi 4で スマスピ動作
(RaspbianOS 2020-02-05版では、Debian向けのAIYインストールを使って楽になったので、コメント4に投稿)
Raspberry Pi 4でAIY Voice Kit を動作させ、「ね~グーグル」の呼びかけができたので、
備忘録とする。RasPi3でも勿論動作する。
更に、14)のcheck_audio.pyを飛ばせば、AIY Voice Kit が無くても動作したので驚いた。Pulseaudioでマイク・スピーカーを切り替えることで自由に構築・運用ができる。
(下記原稿中、「–ダッシュ2個」の表現が全角文字置換されているので要注意)
【新規SDカードに書き込む場合】
1)MicroSDの初期化
PCにてExplorerがすべて閉じた状態でディスク管理を開いて
SDドライブのパーティションをすべてボリューム削除する
2)Win32DiskImager等でMicroSDに最新RaspbianOSを書き込む
https://downloads.raspberrypi.org/raspbian_full_latest
2019-09-26-raspbian-buster-full.img(Busterバージョン)
3)bootのconfig.txtに次の追記をする
dtoverlay=googlevoicehat-soundcard
また次をコメントアウトする
#dtparam=audio=on
なお、ミニLCDを使う場合は、次の追記も必要になることが多い。
7Inch 1024×600だと、config.txtに次の追加を指示されている。
max_usb_current=1
hdmi_force_hotplug=1
config_hdmi_boost=7
hdmi_group=2
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0
4)bootのトップにsshダミーファイルをおく
5)RasPiにMicroSDを入れ、電源をオンにして起動する
(もしRasPi4だった場合は、まだgooglevoicehat-soundcardの
ボードをドッキングさせずに電源を入れる)
6)RaspberryPiの設定誘導に対し、Password,Locale,Time zoneを適切に
変更し、WiFiのPassKeyを設定する(スマホのGoogleツールで
デバイス設定するとき、同一AP配下となる様に考慮)
updateはここではskipする
7)PCからSSHツールにてraspberrypi.localに接続する
SSHで時々の休止が気になるときは、次のコマンドで省エネを停止できる
sudo iw dev wlan0 set power_save off
8)ダウンロードリストを拡張して、UPGRADEを実施する
echo “deb https://dl.google.com/aiyprojects/deb stable main” | sudo tee /etc/apt/sources.list.d/aiyprojects.list
wget -q -O – https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add –
sudo apt-get update
sudo apt-get -y upgrade
sudo reboot する
(RasPi4については、ここで画面出力を2Kに確定し、Shutdown
してgooglevoicehat-soundcardのボードをドッキングさせる)
9)仮置きとしてAIY V2のインストールをする
sudo apt install –fix-missing dkms
sudo apt-get install -y aiy-voicebonnet-soundcard-dkms aiy-dkms
処理中に–configureのエラーが発生するが、無視する:
aiy-dkms
aiy-voicebonnet-soundcard-dkms
10)AIYのadcとi2cの変更
sudo cp /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c.org
sudo vi +138 /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c
該当1行の削除
sudo cp /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c.org
sudo vi /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c
2か所のi2c_lock_adapter(i2c->adapter);をi2c_lock_bus(i2c->adapter, I2C_LOCK_ROOT_ADAPTER);に変更
2か所のi2c_unlock_adapter(i2c->adapter);をi2c_unlock_bus(i2c->adapter, I2C_LOCK_ROOT_ADAPTER);に変更
インストールする
sudo dkms install aiy/1.1
sudo dkms remove aiy-voicebonnet-soundcard/1.0 –all
sudo reboot する
11)Audioのインストール
sudo apt-get update
sudo apt-get install -y pulseaudio pavucontrol
タイムアウトだったら、上手く行くまでinstallを再試行する。
処理中のaiy-voicebonnet-soundcardに関するエラーは無視する。
sudo mkdir /etc/pulse/daemon.conf.d/
echo “default-sample-rate = 48000” | sudo tee /etc/pulse/daemon.conf.d/aiy.conf
sudo apt-get install -y aiy-python-wheels
処理中にlinux_armv6lと–configureのエラーが発生するが、無視する:
aiy-python-wheels
aiy-voicebonnet-soundcard-dkms
また、VLCのHDMIからの音声出力を選択したいならば、
#dtparam=audio=on
のコメントを外し、カード番号を入れ替え、さらに次の
定義を、/etc/asound.conf に追加する。
<AIY VoiceKITのサウンドカードの人は、次のように設定>
options snd_rpi_googlevoicehat_soundcard index=0
pcm.softvol {
type softvol
slave.pcm dmix
control {
name Master
card 0
}
}
pcm.micboost {
type route
slave.pcm dsnoop
ttable {
0.0 30.0
1.1 30.0
}
}
pcm.!default {
type asym
playback.pcm “plug:softvol”
capture.pcm “plug:micboost”
}
ctl.!default {
type hw
card 0
}
<カード番号の入れ替え>/etc/modprobe.d/alsa-base.conf
options snd slots=snd_rpi_googlevoicehat_soundcard,snd_bcm2835
options snd_rpi_googlevoicehat_soundcard index=0
options snd_bcm2835 index=1
12)protobufのインストール
cd Downloads
pip3 download protobuf
pip3 install ./protobuf-3.11.2-py2.py3-none-any.whl
(3.11.2の部分は、最新Vnoを使う)
sudo vi +7 /var/lib/dpkg/info/aiy-python-wheels.postinst
7-8行をコメントアウトする
sudo dpkg –configure –force-overwrite –force-overwrite-dir -a
処理中に–configureのエラーが発生するが、無視する:
aiy-voicebonnet-soundcard-dkms
sudo reboot する
13)実行準備
git clone https://github.com/google/aiyprojects-raspbian.git AIY-projects-python
sudo mv AIY-projects-python /opt/aiy/projects-python
ln -s /opt/aiy/projects-python AIY-projects-python
ln -s /home/pi/AIY-projects-python AIY-voice-kit-python
sudo pip3 install -e AIY-projects-python
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
このエラーが出たとしても無視する。
sudo cp /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py \
/opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py.org
sudo vi +75 /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py
この行末カッコ内の最後のパラメタ’,-1’を削除する
pip3 install google-assistant-library==1.0.0
# (Segmentation Fault防止のため、1.0.1を推奨するメッセージを
無視して1.0.0をPre設置)
pip3 install google-assistant-library
pip3 install google-auth-oauthlib
sudo pip3 install grpcio
AIYプロジェクト内の日本語対応が不完全なところを修正する。
vi +214 /home/pi/.local/lib/python3.7/site-packages/google/assistant/library/assistant.py
の.encode(‘ASCII’) を.encode(‘utf-8’) にする。
AIYボードの初期化のために、命令を追加する。
vi +284 /home/pi/AIY-voice-kit-python/src/aiy/board.py
に、GPIO.setwarnings(False) を行追加する。
14)次の確認を実施する
amixer sset Master 50% で、音量を半分にしておく
export PYTHONPATH=”/home/pi/AIY-voice-kit-python/src”
/home/pi/AIY-voice-kit-python/checkpoints/check_audio.py
15)次のURLに基づき、アカウント登録をする
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00255/042600011/?P=4
assistant.json ファイルを /home/piに置く
16)サンプルコードの実行
export PYTHONPATH=”/home/pi/AIY-voice-kit-python/src”
$PYTHONPATH/examples/voice/assistant_library_with_button_demo.py
初回のスクリプト実行時にURLが表示され、ブラウザでアクセスする
ことで認証文字列が返される。
それをスクリプト実行中の質問に貼り付ける。
17)デバイスの登録
サンプルコードの実行でしばらく放置し、スマホのHomeアプリの設定・詳細設定の
「アシスタント」に出現した新たなデバイス(Voice Kit)の言語を
日本語に設定し、属性参照を許可する。
以下は、SmartTV(PX-W3U4,PX-Q3U4使用)に変身させるときの追加作業
18)TVチューナーサポートシステムのインストール
curl –silent https://mori1-hakua.tokyo/test/TVget.sh | sh
19)N2TTS,youtube-dl,mojimojiのインストール
このURLに従う:https://support.kddi-research.jp/n2/service.html
(wget -O n2-linux-foc.tgz https://support.kddi-research.jp/n2/download.php?type=5)
sudo -H pip install youtube-dl
pip3 install mojimoji
pip3 install –upgrade google-api-python-client
【RasPi4に対応させ、multiTV.shから aiyTV.shを用意】
MPEG2に対するプレーヤーとして、OMXからVLCメディアプレーヤに
切り替えるため、
source ~/.biling
if [ “$BILING” = “yes” ]; then
MPG2 =`vcgencmd codec_enabled MPG2`
if [ “$MPG2” = “MPG2 disabled” ]; then
BILING=sel
fi
fi
とし、
elif [ “$BILING” = “sel” ]; then
(recdvb –dev ${DEV} –b25 –strip –http 8080 ${LCH}; exit) &
(sleep 2) &
cvlc -f –no-video-title-show http://localhost:8080/${CH}/
fi
と、プレーヤーを取り換える。
VLCはマルチスレッドではブロックノイズが出やすいため、スレッドを
シングルに切り替える。
<sayJ関数の追加>
vi $PYTHONPATH/aiy/voice/tts.py
<pre>
def sayJ(text, asynch=0, lang=’ja-JP’, volume=60, pitch=130, speed=100, device=’sysdefault:CARD=ALSA’):
logging.info(text) with tempfile.NamedTemporaryFile(suffix='.wav', dir=RUN_DIR) as f: cmd = 'n2tts -p VOLUME=%s -o %s "%s" && aplay -q -D %s %s' % \ (volume, f.name, text, device, f.name) if asynch==0: subprocess.check_call(cmd, shell=True) else: subprocess.Popen(cmd, shell=True) </pre>
以上
コマンドプロンプトからファイル数
Windowsのコマンドプロンプトから、 フォルダ(ディレクトリ)配下の全ファイル数、全フォルダ数を取得するコマンドのメモ
——————–
ファイル数
dir /A-D /S /B | find /c /v “”
——————–
フォルダ数
dir /AD /S /B | find /c /v “”
——————–
dir /A-D は、ディレクトリ以外
dir /AD は、ディレクトリのみ
dir /S /B は、サブフォルダも含めて、配下のファイル名/フォルダ名のみ
出力
find /c /v “” は、行数を出力
AIY Voice KIT にAlexaとGoogleAssistantを同居
3月26日のOSアップグレードで、少しインタフェースが変わったため、確実な同居方法を
メモした。また、04-13版のレベルダウンへも対応追記。
1.AIYプロジェクトのVoice Kit SD imageをダウンロード
aiyprojects-2018-04-13.img.xz
https://dl.google.com/dl/aiyprojects/aiyprojects-latest.img.xz
2.MicroSDに書き込み、インストール
aiyprojects-2018-04-13.img.xzを解凍し、書き込みする
参照:https://aiyprojects.withgoogle.com/voice/#assembly-guide-5-2–boot-the-device
2.1 Audio音量関数の修正
2018-04-13.imgにはレベルダウンがあり、AIY-project*/src/aiy/audio.py を修正する。
113行 db_range = -60.0 – (-60.0 * (volume / 100.0)) を
db_range = -6.6 – (-6.6 * (volume / 100.0)) に書き換え。
3.AIYでの日本語動作確認
PulseAudioの初期値が未設定なので、/etc/pulse/default.pa を編集します。
バックエンドドライバーをロードする行を探してアンコメント(#削除)し、
以下のように device パラメータを追加してください。
さらに autodetect モジュールをロードする行をコメントアウトしてください。
load-module module-alsa-sink device=dmix
load-module module-alsa-source device=dsnoop
# load-module module-udev-detect
# load-module module-detect
再起動
amixer sset Master 50% (初期音量を変更したい)
参照:https://kureuetan.com/web/raspberrypi/4998/#OS
~/bin/AIY-projects-shell.sh
src/examples/voice/assistant_grpc_demo.py
この後、GoogleAssistantアプリで、デバイスVoiceKitの言語選択を日本語に設定してください。
4.RasPi用Snowboyのインストール
参照:https://github.com/wanleg/snowboyPi
4.1 事前準備
sudo apt update && sudo apt -y upgrade && sudo apt-get -y auto-remove && sudo reboot
OSのバージョンは、3月末で、次のようになります。
Linux raspberrypi 4.14.30-v7+ #1102 SMP Mon Mar 26 16:45:49 BST 2018 armv7l GNU/Linux
sudo apt -y install python-pyaudio python3-pyaudio sox python3-pip python-pip libatlas-base-dev
sudo pip3 install pyaudio
sudo cp ~/.asoundrc /root/
4.2 Snowboyの準備
wget https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/rpi-arm-raspbian-8.0-1.1.1.tar.bz2
tar xvf rpi-arm-raspbian-8.0-1.1.1.tar.bz2
mv rpi-arm-raspbian-8.0-1.1.1 snowboy
4.3 サウンドテスト
speaker-test -c 2
arecord -d 3 test.wav
aplay test.wav
4.4 Hotwordの作成
pip install requests
cd snowboy
wget https://github.com/wanleg/snowboyPi/raw/master/training_service.py
https://snowboy.kitt.ai にログインし、Profile settings をクリック、
作成された API token をコピーしてメモする。
training_service.pyの次のパラメタを設定する
############# MODIFY THE FOLLOWING #############
token = “コピーしてメモしたAPI token”
hotword_name = “ホットワードの名前”
language = “jp”
age_group = “30_39”
gender = “M”
microphone = “usb microphone”
############### END OF MODIFY ##################
rec -r 16000 -c 1 -b 16 -e signed-integer 1.wav
rec -r 16000 -c 1 -b 16 -e signed-integer 2.wav
rec -r 16000 -c 1 -b 16 -e signed-integer 3.wav
python training_service.py 1.wav 2.wav 3.wav NeGoogle.pmdl
cp NeGoogle.pmdl resources/NeGoogle.pmdl
4.5 Hotwordのテスト
python3 demo.py ~/snowboy/resources/NeGoogle.pmdl
startAlexa.sh,assistant_grpc_snow_demo.pyのダウンロードと走行確認
wget -O startAlexa.sh https://mori1-hakua.tokyo/test/startAlexa.txt
wget -O _snowboydetect.so https://mori1-hakua.tokyo/test/_snowboydetect.so
wget -O assistant_grpc_snow_demo.py https://mori1-hakua.tokyo/test/snow_demo.txt
python3 assistant_grpc_snow_demo.py
5. Alexaのインストール
参照:https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide-with-Script
cd wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/config.txt wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh vi setup.sh で次の変更を実施 en-US を ja-JP vi config.txtで次の設定を実施 Client ID, Client Secret, and Product IDの設定 vi avs-device-sdk/build/BuildDefaults.cmake で include(KeywordDetector) をコメント化 sudo bash setup.sh config.txt sudo bash startauth.sh の起動後、http://localhost:3000をアクセス sudo cp ~/.asoundrc /root/ sudo bash startsample.sh を実行し、c、1、6と入力して日本語モードにする
6. AlexaとGoogleAssistantの同時実行
cd ~/snowboy
python3 assistant_grpc_snow_demo.py NeGoogle.pmdl
この他、
python3 assistant_grpc_snow_demo.py snowboy.umdl も試せます。
岩手日報webnews、大幅改装で追随大変!
// $body = mb_convert_encoding ($response['body'],"utf-8","Shift_JIS"); $body = $response['body']; } $pos = 10000; $table = ""; // mb_substr($body,$pos,$pos2-$pos); $pos = mb_strpos($body,$from,$pos); if ($pos === false) { return($table.$body); } $pos2 = mb_strpos($body,$to,$pos+30); if ($pos2 === false) print "<br>strpos2がfalseを返しました。<br>"; if (substr($ton,0,1)=="+") { $pos2 += mb_strlen($to); if (strlen($ton)>1) $pos2 += substr($ton,1); } else $pos2 += $ton; $body1 = mb_substr($body,$pos,$pos2-$pos); if ($url=="") return ($body1); return (div_cut($body1)); } function div_cut($str) { global $time; if ($str=="") return ""; $pos = strpos($str,'<article>',0); if ($pos === false) return ""; $pos2 = strpos($str,'<div class="outer">',$pos); if ($pos2 === false) return $str; $pos3 = strpos($str,'</h1>',$pos2); $time1 = substr($str,$pos3+24,19); if (strcmp($time,$time1)<0) $time = $time1; return str_replace("<a href=","<a target='_NEW' href=",substr($str,$pos,$pos2-$pos))." ". substr($str,$pos2+36,$pos3-$pos2-36)."</a></article>".div_cut(substr($str,$pos3)); // <div class="outer"><dl><dt><div><h1>
メールでの投稿について
このWordPressへの投稿は、電子メール(写メ)でできます。
まず、あなたのメールIDを管理者に申請しておいてください。
投稿は、次のURLの説明通りですが、発信宛先を、
hakua.bukatsu+47hakua@gmail.com
とします。
投稿方法
よろしくお願いします。