月別アーカイブ: 2023年5月

本実験 事前準備

実験環境

1. メモ
・室温24~26℃
・パーテーション2枚
・モニタ
・マスキングテープ
・計測機器(BF装置, PC, USB)

(BF装置配布時に、単4電池3本・教示文スライドを忘れずに)

2. 注意点
・窓は閉める
・室温は適切か
・センサに風は当たってないか

データ関連

1. Forms(編集者用)
計測初日:MAIA, 事前質問
計測4回分:Rosenberg, 独自項目→完成!!
自宅訓練:訓練時の温度など→インストラクション挿入のみ
実験参加のお願い:第1~3希望

2. Forms(参加者用)
・計測初日:リンク
・計測4回分:リンク
・自宅訓練:BF装置裏面に添付
・実験参加のお願い:リンク

3. 教示文

自宅での訓練・実験室での効果測定について

・教示文
1. 実験手順
2. 実験概要
3. 制御方略

*制御方略の「その他」は,1~3に該当しないもの,そして温冷感・情動イメージの併用などが該当します。制御方略には個人があるため,ご自身に合ったものを選択して訓練を行ってください。

4. 実験スケジュール
パターンA
パターンB
5. 自宅での訓練

・大学での計測:4回
・自宅などでの訓練:3週間

訓練毎にForms回答!!

訂正:目を開けて訓練, 安静中FBなし
6. BF装置の使用方法

連絡先:Teamsチャットにて

【電池交換】

(+基盤の薄さがわかる画像を添付

電池ボックスがかなりキツく簡単に取り外せません。電池交換の際は、千枚通し, ボールペンなど細く尖ったものをお使いください。

*基盤が非常に薄いため乱雑にとると簡単に壊れます。そのため、右画像のようにしっかりと両手で抑えて外すようにしてください。

【装着例】

ストラップは自由に付け替えてok

【説明に用いた資料】

Pythonを用いたツンデレChat GPTとの対話

サンプル動画

ツンデレ

開発環境準備
・Chat GPT:テキストを考える
・Coeiroink:テキスト読みあげ→Voicevoxはコードを指定すれば使える
・Notepad++:プログラム書く
・python:プログラム動作
・IrfanView:Chat GPTリロードのスクショに

*Pythonの開発環境設定も忘れずに

Pythonプラグ(参考サイト

$ pip install requests
$ pip install pydub
$ pip install pyaudio
$ pip install pillow
$ python hello_ink.py

*ctrl+Cでpython対話終了

ファイルの保存先

Cドライブ直下に「INK」というファイルを作成し、そこにNotepad++で書いたプログラムなど今回用いるファイルを格納する。INK意外にした場合、プログラムを書き換える必要がある(auto01.py)。

Anaconda Navigater

以前使用したのが保存されないのか、「Anaconda Navigater→INK」を選択してからでないと左画像のようにPrompt内で(base)のままでエラーをはかれる。

動作チェック
そもそもCoeiroinkに読んでもらえるかの動作チェックは下記プログラムから。9行目のspeaker_idからつくよみちゃんのタイプを切り替える(ID6など)。

import json
 
import requests
from pydub import AudioSegment, playback
 
# パラメータ
text = "こんにちは、つくよみちゃんです。よろしくお願いします。"  # セリフ
text2="先日さ、友達とカラオケに行ったんだけど、その時の話がすごく面白かったんだよね。みんなで歌って楽しんでいたんだけど、途中で友達の一人が「誰か知らないけど、めちゃくちゃ上手い人が歌ってる!」って言い出したんだ。";
speaker_id = 1  # スピーカーID (0:つくよみちゃん)
 
# 音声合成のクエリの作成
response = requests.post(
    "http://localhost:50031/audio_query",
    params={
        'text': text2,
        'speaker': speaker_id,
        'core_version': '0.0.0'
    })
query = response.json()
 
# 音声合成のwavの生成
response = requests.post(
    'http://localhost:50031/synthesis',
    params={
        'speaker': speaker_id,
        'core_version': "0.0.0",
        'enable_interrogative_upspeak': 'true'
    },
    data=json.dumps(query))
 
# wavの音声を再生
playback.play(AudioSegment(response.content,
    sample_width=2, frame_rate=44100, channels=1))

実行するためのプログラム
この後に出てくる「setting01.txt」というChat GPT性格設定に使うテキスト文を元に、ヤンデレなり、ツンデレなり、思春期の娘など自分の好きなタイプに合わして会話できる。

注意点
・15行目:txtファイルの呼び出し
・21, 55, 69行目:カーソル位置
・38行目:画面のサイズを適当に→設定からMaxサイズを調べちょい減らした値

#auto01.py
import pyautogui
import pyperclip
import time
import json
import requests
from pydub import AudioSegment, playback
 
speaker_id = 0  # スピーカーID (0:つくよみちゃん)
#speaker_id = 1  # スピーカーID (まなノーマル)
config=""
 
##########################################
def copy_and_paste(text):
    with open('C:/INK/setting1.txt', 'r',encoding='utf-8') as f:
        config = f.read()
    #print(config)
 
    # インプット部分をクリックします
    #pyautogui.moveTo(-905, 1370)
    pyautogui.moveTo(361, 994)
    pyautogui.click()
    time.sleep(0.5)
 
    #print(text)
    print("_")
     
    #入力する
    pyperclip.copy(text)
    pyautogui.hotkey('ctrl', 'v')
    pyperclip.copy(config)
    pyautogui.hotkey('ctrl', 'v')
    pyautogui.press('enter')
 
    #出力終了を待つ
    time.sleep(1)
    print('scan ',end='')
    search_region = (0, 800, 900, 1070)
    
    time.sleep(5)
    
    
    while pyautogui.locateOnScreen('C:/INK/regbutton.png', region=search_region) == None:
        time.sleep(0.1)
        print('>',end='')
    print(" found")
    
   
    
         
    #下までスクロール
    #time.sleep(1)
    #pyautogui.scroll(-5000)
    #time.sleep(1)
    pyautogui.moveTo(856, 923)
    pyautogui.click()
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
 
    #x, y = -548, 1321
    x, y = 856, 901
    step=20
    prev_clipboard = pyperclip.paste()
 
    time.sleep(1)
 
    for i in range(40):
        y -= step
        pyautogui.moveTo(x, y)
        pyautogui.click()
         
        # クリップボードのテキストを取得して表示する
        clipboard_text = pyperclip.paste()
        #print(y, clipboard_text)
        if clipboard_text != prev_clipboard:
            break
         
        # 前回のクリップボードの内容を更新する
        prev_clipboard = clipboard_text    
 
    print(clipboard_text)
    pyautogui.moveTo(1791, 1220) #コンソールに復帰
    pyautogui.click()    
    return clipboard_text
 
##########################################
def speakINK(msg):
    # 音声合成のクエリの作成
    response = requests.post(
        "http://localhost:50031/audio_query",
        params={
            'text': msg,
            'speaker': speaker_id,
            'core_version': '0.0.0'
        })
    query = response.json()
      
    # 音声合成のwavの生成
    response = requests.post(
        'http://localhost:50031/synthesis',
        params={
            'speaker': speaker_id,
            'core_version': "0.0.0",
            'enable_interrogative_upspeak': 'true'
        },
        data=json.dumps(query))
      
    # wavの音声を再生
    playback.play(AudioSegment(response.content,
        sample_width=2, frame_rate=44100, channels=1))    
     
##########################################
def main():
  
    print("チャットをはじめます。q または quit で終了します。")
    print("-"*50)
    while True:
        user = input("<あなた>\n")
        if user == "q" or user == "quit":
            print("お疲れ様でした")
            break
        else:
            buf1=copy_and_paste(user)
            speakINK(buf1)
 
 
 
# 現在のカーソル位置を取得
#current_position = pyautogui.position()
#print("現在のカーソル位置:", current_position)
 
 
 
#buf1=copy_and_paste("こんにちは")
#speakINK(buf1)
 
 
 
#image_location  = pyautogui.locateOnScreen('C:/Users/Science/SELENIUM/clipicon.png')
#print(image_location )
 
if __name__ == "__main__":
    main()

人格設定
Chat GPTの人格設定で、文頭に「。」がついていると読み込みやすい。「~の話し方」「~という感じで」とかアバウトでok.

。敬語は使わず、ヤンデレの話し方をして下さい。回答は50~100文字くらいで行ってください。口調は「なんで逃げるの?」とか「あなたのことは何でも知ってる」「私だけはずっと側にいるよ」といった感じで話してください。

カーソル位置の取得
Pythonで勝手に文章のコピペ(コントロール)してもらうのに、座標を一つずつ教えてやらないといけないみたい。x, y座標を調べるためのプログラムは「auto02」。やり方は下記動画の通りマウスカーソルを合わして実行するだけ。座標の入力は「auto01」21, 55, 69行目。

#auto02.py
import pyautogui
import pyperclip
import time
  
# 現在のカーソル位置を取得
time.sleep(1)
current_position = pyautogui.position()
print("現在のカーソル位置:", current_position)

参考サイト(152)
Pythonで画面操作
Pythonでつくよみ