なぽろぐ

気ままに感じたことを記事にまとめます。

opencvで顔認識しようとしたらカスケードファイルが見つからなかった

opencvのカスケードで顔認識をしたい!

今回の環境です

  • mac book Pro 2017
  • python 3.6.5
  • venvの仮想環境内でコードを走らせている

こんな感じです.windowsとかUbuntuではどうなるかよくわかりません

モザイクアートをつくっていたら画像の大きさがバラバラだったので,正方形にできたら楽だな〜って思いました. 今回は顔判別をしてトリミングするという目的でやっていきま!

Pythonopencvを使いたい!

pip install opencv-python
# pip3を使っているなら
pip3 install opencv-python

これだけでおk!pipは簡単でいいですね

カスケードファイルを取ってくる

opencvで顔認識をするにあたりopen-cv側ですでに用意されている顔認識モデルを使っていきます。

僕はここで結構躓いたんですけど・・・

だいたいのサイトでは

/usr/local/opt/opencv/share/OpenCV/haarcascades/

ここにカスケードファイルが入っているよ!とのことなのですが、僕の場合は仮想環境でインスコしたためかこのディレクトリがそもそも存在しませんでした.そこでcv2のライブラリが入っている場所を調べてみようと思いました.

import cv2
print(cv2)

これでopencvがどこに入っているかがわかります

<module 'cv2.cv2' from 'パスがうんにゃらってかいてある/python3.6/site-packages/cv2/cv2.cpython-36m-darwin.so'>

こんな感じ

どうやら /python3.6/site-packages/cv2/ のなかになにかありそうですね・・・ 僕の場合は/python3.6/site-packages/cv2/dataのなかにカスケードファイルが入っていました〜これ躓きポイントでは・・・?

こうやって詰まるたびに同じ思いを次の自分がして欲しくないのでmyModules.pyみたいなものを作っています.

"""
cv2カスケードファイルを探しに行って辞書で返す関数
castom_cascade_pathはカスケードファイルが格納されているディレクトリをさします。
自分の環境に合わせて作ったのでデフォルト引数がdataになっています。
カスケードファイルが見つからなかったらFalseを返します
"""
def search_cv2_cascade(castom_cascade_path="data"):
    from os.path import splitext, basename, join, dirname, isdir, isfile
    from glob import glob
    import cv2

    cv2_path = dirname(str(cv2).split()[-1].strip(">").strip("'"))
    cascade_dir_path = join(cv2_path, castom_cascade_path)
    if isdir(cascade_dir_path):
        cascade_xml_path_list = join(cascade_dir_path, "*.xml")
        cascade = {splitext(basename(path))[0][12:]:path for path in glob(cascade_xml_path_list)}
        return cascade
    else:
        return False

こんな感じで使えばxmlファイルがどさっと辞書型で返されます.なぜ辞書を使うかは,僕が好きだからです

search_cv2_cascade()

本題の顔認識

import cv2
import matplotlib.pyplot as plt
#画像を読み込む
src = cv2.imread("画像のパス")
#グレースケールにする
cv2_img = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
#黒色で認識した部分を囲む
color = (0, 0, 0)
#カスケードファイルの読み込み
face_cascade = cv2.CascadeClassifier(search_cv2_cascade()["frontalface_default"])

#まほうのことば(コピペソースなので全くまだ調べてないです)
facerect = face_cascade.detectMultiScale(cv2_img, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

#1つ以上囲む部分があれば元の画像に矩形を付け足す
if len(facerect) > 0:
    #検出した顔を囲む矩形の作成
    for rect in facerect:
        cv2.rectangle(src, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
#結果をmatplotlibで表示
plt.imshow(cv2.cvtColor(src, cv2.COLOR_BGR2RGB))
#保存
cv2.imwrite("detected.jpg", src)

Twitterの僕のアイコン f:id:Naporitan:20190219023343j:plain

顔認識させて見た結果 f:id:Naporitan:20190219023348j:plain

微妙で草・・・・

おわりに

なんとなくopencvを触って見ました。画像処理をMNISTでしか(PyTrochでMNISTをDNNで判別しただけ・・)触ったことがなかったので結構面白かったです。なんとかモザイクアートスクリプトを早く完成たせたいところ・・・!!!

【しゃべフェス】1分間の夢を体験しに行ってきた

しゃべフェスに行ってきた!

会える! 話せる! VTuberおしゃべりフェス on バレンタインのチケット情報・予約・購入・販売|ライヴポケットこれです

 

僕はテストが13:00からあったので到着が15:30位になってしまいました。テストはまぁ…まぁ…と行った感じです。

会場の写真

f:id:Naporitan:20190215202304j:image

ただのZeppですね

プレゼントボックス

写真はないです…

名取のところめっちゃ色々入ってた!

僕も手紙を書きました〜

 

当日の流れ

16:00〜 物販開始

〜 17:30 自分の物販はおわり

18:00〜 開場

20:00〜名取とお話し

20:05〜 フブキちゃんとお話し

物販

プロマイドです.一枚500円かと思っていたら2枚で500円でした.スタンドを買って飾ります!缶バッチもあったんですけど,お金がなくて買えませんでした・・・・かなしい・・・ですが!ぎゅてちて…だこちて…チケットは買えました

f:id:Naporitan:20190216145648j:plain

f:id:Naporitan:20190215202515j:image

入場

整理券はB72でBの中では結構早かったんですけど,空腹と疲労でアナウンスが聞こえずB250くらいでの入場になりました・・・(Vのファンみんな優しくて「みすっちゃいました!!!」っていったら前までどんどん先に行かせてくれてありがとうございます・・・・)(ホントは直接お礼を言いたいところなんですが,出会えそうにないのでブログで感謝を述べます)

めっちゃ誤字ってる・・・めちゃめちゃ焦っていたんだと思います

ぎゅてちて…だこちて...チケット

なんか聴き始めた途端室内でこっちはあったかいんだよって寒暖差マウント取られた…いやこちらだって雪国出身で寒さには強いうえにダウンちゃんと着てきましたが・・・・?ここでは全然まだ負けていません.当たり前です.目を閉じて下さい....といわれたのでいわれるがままに閉じました.(大人はいうことをちゃんと聞けるため),毅然とした態度で目を閉じで妄想を膨らませていると名取が後ろからきてぎゅとされた…(とおもったらうさちゃんせんせえでした????)(ぎゅてされた途端声が出たので負けです…)

内容はBoothで聞けるように名取がしてくれています.(圧倒的感謝・・・・)

sana-natori.booth.pm

誰と喋った?

名取!

名取と話す前のツイートです

かなり己と戦っている様子がうかがえますね・・・

はじめて2ショット!10秒くらいここでつかいました.ただ5年後10年後にこの写真をみてこの時のことをこのブログを見ながら思い出したいって感じですね

ここから会話

ワイ<たいよろ!

 

名取<たいよろ~!

 

ワイ<今日は負けません!

 

名取<大人が勝ち負け気にしてるのは負けなのでは?

 

ワイ<(は・・・・?ぐぅ正論じゃん・・・)(一瞬の思考で負けたことを認知)(ここで負けを否定することはワンちゃんズ以下だッ!)負けました・・・(ここで残り30秒)

 

名取<何かを言っていた気がする(申し訳ないすべてを覚えているわけではないため)

 

ワイ<今回どうしても面と向かって言いたかったこと(感謝の意)を伝えた(かなり自分の中では大切なことで今でもそのことが自分の原動力となっているため)

 

名取<うん.わかったよ!(多分こんな感じだった気がする)

 

ワイ<名前いうの忘れてた!なぽりたんってっていうんですけど・・・

 

名取<なぽりたん・・・なぽりたんせんせえ!?(なんか二度見みたいな反応をされました)

 

ワイ<(あと5秒か・・・)多分今日はありがとう!みたいなことを言った気がする.たいありでした!(ここでちょうど1秒前)

 

名取<たいあり~!

 

こんな感じの流れです.絶対に言いたいことは1つしか言えないといった感じでした.ホントはぎゅてちて...だこちて...の感想とかも言いたかったんだけど今思えばかなり緊張していたのかも

Twitterではちゃんとイキってますね.僕らしいです

名取...結構話遮ってしまってごめん・・・・時間確認していたら結構あせっちゃった・・・

 

f:id:Naporitan:20190215213635j:image

フブキちゃん

はじめはおるやんけがめっちゃうろうろしてくれててめっちゃひぃぃってなった!(もちろん楽しかったです!)

バ美肉DbDのお話をしました!またおじさんを可愛い声で鳴かせてくれるとのこと…待ってるぞ…(この可愛さやっぱり猫じゃないか!)

f:id:Naporitan:20190215213555j:image

もらった(すこーん!)

f:id:Naporitan:20190216150301j:plain

紹介動画が流れてた

順番とか書いてある紙が配られた〜

f:id:Naporitan:20190216150302j:plain



塩天使リエルちゃんがマジでおもろーだったのでフォローしてチャンネル登録した!

名取の紹介動画めちゃ面白かった!ようつべに上がるらしいので早く見たいー!

2/16: 名取のちゃんねるにて上げられました


10分以内に理解る!名取さな(ポケモン/マイクラ編)

最後に

雰囲気といい、ファン同士の交流といい満足度のかなーり高いイベントでした!名取めちゃ可愛かったぞ…今後もこう言ったイベントが増えればなぁと思います。運営結構大変そうだった〜やっぱりあれだけ通話かけてる上にみんなスマホ使ってるから回線が大変なんやなって…

 

1日置いて加筆しているのですが,結構感情がふきだしてきました.アドレナリン出まくってて話すときはあんまり緊張してなかったからかも.自分は名取と話したのか・・・という感情になった.はじめて自分1人の声だけが名取に届いた瞬間が1分あった日だったので2/15は何かの記念日にすべきだと思います.言えたこと,言えなかったこと両方とも会ったけど自分の気持ちを推しに表現できて本当に良かった・・・

 

名取愛してるぞ…

f:id:Naporitan:20190215214540j:image

Railsのインストールでハマった話

sqlite3 のバーションで怒られた!

僕はmacだったので最速!MacでRuby on Rails環境構築をみながら環境構築をしていました. Rubyのバーションは2.4.0にしました.

bundlerインストールって項目まで先ほどのサイトで行ってからrailsのインストールは公式サイトのRails をはじめようで進めていたのですが

rails server

やってhttp://localhost:3000に接続すると・・・・・・・でました!!!!!!でやがったぞ!!!!!

#<LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile.>

うっきうきで始めたらこんなん出てきてやる気失うやつ・・・

今回はこれを解決していきます

Gemfile で sqlite3 の gem install を書き換える

Gemfile を開くと多分 9 行目くらいに以下があると思います

gem 'sqlite3'

次にように書き換えちゃってください.上のエラーで

「すでに sqlite3-1,4.0 が入ってるけど 1.3.6 の方がええやで」

って感じのことを言われているので(英語弱者なので間違えてるかもしれませんが・・・・)次のように書き換えてインストールするバーションを変えてあげます.

ここからしただけやればいいような気がします

# gem 'sqlite3'
gem 'sqlite3', '~> 1.3.6'

sqlite3-1.4.0 を消そう!

1.4.0 はもう用済みなので消してしまいしましょう!じゃあな!バグの原因!!!!

gem uninstall sqlite3 -v 1.4.0

さて設定ファイルからアップデートだ!

bundle update

これで

rails server

が難なく起動してエラーもなく大好きな f:id:Naporitan:20190212221815p:plain この画面が出てくると思います.

終わりに

Rails をちょっとやる機会が週末ありそうなので先に環境構築しようとしたらハマったので書きました.

環境構築は何かと難しいですね・・・・・

Vue.jsをFlaskで動かす

Vue.jsをFlaskで動かしたい

VueとFlaskの連携について説明します.flask_restfulを用いて簡単な通信もやります.

Vueのプロジェクトを作る

vue init webpack test

いろいろ聞かれますが,だいたいEnterで大丈夫です.ESLintだけは使い方がよくわかってないのでNoにしてます. f:id:Naporitan:20190210224121p:plain

まってるとめっちゃインストーーーーーーーールって感じになるので放置です.結構長い時間がかかるかも

インストールが終わったら以下のコマンドでプロジェクトに入っておいてください

cd test

あとで使うのでインストールしておくといいかも・・・

npm install axios --save 
npm install url-join --save

Flaskをインストール

先ほどtestディレクトリに入ったのでそのまま

mkdir env
python3 -m venv env
source env/bin/activate

pip3 install flask flask_cors flask_restful

これでとりあえずFlaskを使える環境は整いました

Flaskでサーバーを立てる

次にFlaskでwebサーバーを立てます

そのまえにVueのプロジェクトをビルドして・・・・

npm run build

ビルドしている間にバックエンドの方やっちゃいましょう!

ファイル名はserver.pyで

配置する場所はプロジェクトフォルダ直下(index.htmlとか.gitignoreある場所)

from flask import Flask, jsonify, render_template
from flask_cors import CORS
from flask_restful import Api, Resource, reqparse

app = Flask(__name__, static_folder="dist/static", template_folder="dist")
CORS(app)
api = Api(app)

#get, post, put, deleteリクエストがあったときの処理をそれぞれ書く
class test(Resource):
    parser = reqparse.RequestParser()
    # add_argumentでパラメータを取得できます
    # この辺はflask_restfulの公式ドキュメントに色々乗ってるのでそっち見た方がよさげ
    parser.add_argument("message")

    def get(self):
        args = self.parser.parse_args()
        return {"message": args["message"]}

    def post(self):
        args = self.parser.parse_args()
        return {"message": args["message"]}

    def put(self):
        args = self.parser.parse_args()
        return {"message": args["message"]}

    def delete(self):
        args = self.parser.parse_args()
        return {"message": args["message"]}


api.add_resource(test, "/api/test")


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_vue(path):
    return render_template('index.html')

# 一応エラーハンドラ


@app.errorhandler(403)
@app.errorhandler(404)
@app.errorhandler(500)
def error_handler(error):
    msg = 'Error: {code}'.format(code=error.code)
    return jsonify({"result": "Failed",
                    "message": msg,
                    "errorcode": error.code})


if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)
python3 server.py

これでlocalhost:5000につないだときにVueの画面が出てこれば成功です

server.jsも全く同じことしてるんだから早めに気づけばよかった・・・って思ってます

API叩きたくない?叩きたいよね

先ほど作ったserver.pyにAPIが生えているのでちょっと通信してみましょう

いちいちビルド(npm run build)していると面倒なので開発版でもserver.pyに接続できるようにします.

と言っても,npm run devで立つサーバーとserver.pyで立てるサーバで2つあるからserver.pyの方に誘導してあげるだけですが・・・・

APIと通信するモジュール(myAxios.js)

import axios from 'axios'
const urljoin = require('url-join');
const debug = process.env.NODE_ENV != 'production'
const debug_url = "http://localhost:5000"

const onSuccess = (res) => {
    if (debug) console.log(' << ' + JSON.stringify(res.data))
    return Promise.resolve(res)
}

const onError = (res) => {
    console.log(res)
    throw new Error('API error')
}

const accessUrl = (endpoint) => {
    if (debug) return urljoin(debug_url, endpoint)
    else return endpoint
}

const debugMessage = (type, url, params) => {
    console.log(type + ": " + url + '\nparams: ' + JSON.stringify(params))
}

export default {
    get: (url, params) => {
        let reqUrl = accessUrl(url)
        if (debug) debugMessage("GET", reqUrl, params)
        return axios.get(reqUrl, {
            params
        }).then(onSuccess).catch(onError)
    },
    post: (url, params) => {
        let reqUrl = accessUrl(url)
        if (debug) debugMessage("POST", reqUrl, params)
        return axios.post(reqUrl, params).then(onSuccess).catch(onError)
    },
    put: (url, params) => {
        let reqUrl = accessUrl(url)
        if (debug) debugMessage("PUT", reqUrl, params)
        return axios.put(reqUrl, params).then(onSuccess).catch(onError)
    },
    delete: (url, params) => {
        let reqUrl = accessUrl(url)
        if (debug) debugMessage("DELTE", reqUrl, params)
        return axios.delete(reqUrl, {
            data: params
        }).then(onSuccess).catch(onError)
    }
}
const debug_url = "http://localhost:5000"

となっているのはserver.pyがポート5000で立つからです.server.pyの立つポート別の時はそれを指定してあげてください

test.vueをcomponentsの中に作ってください.内容はこんな感じ

<template>
  <h1>
    {{get}}
    {{post}}
    {{put}}
    {{del}}
  </h1>
</template>

<script>
import myAxios from "./myAxios.js";
export default {
  name: "ApiTest",
  data() {
    return {
      get: "",
      post: "",
      put: "",
      del: ""
    };
  },
  created() {
    myAxios.get("api/test", { message: "Hello" }).then(res => {
      this.get = res.data.message;
    });
    myAxios.post("api/test", { message: "World" }).then(res => {
      this.post = res.data.message;
    });
    myAxios.put("api/test", { message: "Vueと" }).then(res => {
      this.put = res.data.message;
    });
    myAxios.delete("api/test", { message: "Flaskの連携" }).then(res => {
      this.del = res.data.message;
    });
  }
};
</script>

このままだとHelloWorld.vueしか表示されないのでちょっと変えます.

router/index.jsを以下のように変更

import Vue from 'vue'
import Router from 'vue-router'
import test from '@/components/test'

Vue.use(Router)

export default new Router({
    mode: 'history',
    routes: [{
        path: '/',
        name: 'Test',
        component: test
    }]
})

npm run devしてhttp://localhost:8080に接続すると・・・ f:id:Naporitan:20190210223952p:plain できましたね!

もちろん

npm run build

をしてhttp://localhost:5000に接続しても同じ画面になると思います.

終わりに

FlaskとVueの連携を説明してみました. めっちゃむずかしそーって思ってたんですけど案外簡単ですね!これでめんどくさそうなDB処理はPythonでかけそうです

というかVueRouterでルーティングした時Flaskでルーティングしたところあけなきゃいけないのかなぁ・・・・まだまだわからないところがあるので実験して分かったらまた記事を書きます〜

そろそろPyTrochとかの記事書きたいんだけど,如何せんチュートリアルに書いてある以上のことがまだできてない・・・・チュートリアルがある程度理解できたらなにか書くかもしれません

多分MQTTサーバーをFlaskで作ったよ〜って記事が先になると思います

こんな感じで今回は終わりにします.ありがとうございました

よかったらフォローしてね〜

twitter.com

タスク管理アプリを作った話

タスク管理アプリを作りました

まぁオタクが作ったタスク管理アプリです.機能がいちいちコアユーザー向けな感じになってます. このブログでは作った経緯とかではなく新たに得られた知見とかを備忘録的につけていこうかと思います.

これがGitHub github.com

こっちが作ったサイト sana-task.herokuapp.com

PWAで作ってみたかった

1年前からPWAって言葉は知ってたんですが,どうやってやるのかわからずに今日までたちました. Vueでできるらしいということで調べたら

vue init pwa プロジェクト名

って書くだけですぐにできました.なんて楽なんだ・・・・・ SPAでいつも通りサイトを作ればすぐにPWAのネイティブアプリ感とサクサク感が体験できます!気持ちよすぎる

アイコンはデバイスの分だけ用意する必要がある

AndroidiPhoneでホームに追加するときに表示されるアイコンを自作することくらいがいつもと違うところかなって思います. 僕は適当にキャラットってサイトでアイコンを作ってサイズ変更をしてsrc/static/manifest.jsonindex.htmlの数行を変更しました.変更はgitのほうを確認してもらえるとすぐだと思います.

localStrageを使う

vuexを使ってデータを管理していて,ローカルに保存したい場合は

npm install vuex-persistedstate

をして

import Vue from 'vue';
import Vuex from 'vuex';
import * as actions from './actions';
import {
    getters
} from './getters';
import {
    state,
    mutations
} from './mutations';
import createPersistedState from "vuex-persistedstate"; //モジュールを追加

Vue.use(Vuex);

export default new Vuex.Store({
    actions,
    getters,
    state,
    mutations,
    plugins: [createPersistedState()] // これを追加
});

するだけですぐにローカルにstateデータが保存できます.

めっちゃ簡単.Vueすごすぎて去年までプログラムも全く分からないのにjQueryをコピペコピペしてた時間がもったいなく感じされますね・・・・

jsをimportできるようになった

これを作ったときは全く分からなかったです.適当に調べてできているので今のやり方でやってますが,どこかの記事でexport defaultはやめとけ~みたいな記事を見かけたので少し不安です .

Vueの環境だけで動いているやつです 例えばUNIXtimestampモジュールを作りたいな~と思ったら以下を書いて

timestamp.js

export default {
    toString: (timestamp) => {
        let d = new Date(timestamp * 1000);
        let year = d.getFullYear();
        let month = d.getMonth() + 1;
        let day = d.getDate();
        return year + "-" + month + "-" + day;
    }
}

別ファイルで

import TimeStampModule from "modules/timestamp.js"
//new Date()から生成されるtimestampはmsなので1000をかける
let now = new Date().getTime() / 1000;

let dateString = TimeStampModule.toString(now);
console.log(dateString);

するとちゃんと動きました~

最後に

PWAでアプリを作りたーいって適当に作ってみましたが結構成長があったように思えます.あと割とRT,Favをもらえて喜んでいます!!!!めちゃめちゃうれしい!!!

twitter.com

年が明けました

気づいたら2019年新しい年が始まってました

 

去年は名取すきしか言ってなかったような気がしますが、今年も名取すきしか言わないつもりです

 

今年は1月に一回なにが作って出したいなぁと思ってます

 

fusion360でモデル作って出したり、変なアプリをたくさん作りたいと思ってます

 

昨日は大晦末だったので自分の中での毎年恒例なのですが、来年のこの日はなにしてるかなって考えました

 

今年はVがめちゃめちゃ流行ったけど引退、卒業イベントも流行った分だけありましたね

たまたま音声合成とか音声認識とか興味を持ってたのでVが近い未来、魂が引退したとしても音声認識音声合成の技術があるので、他の魂が入っても声、声色、仕草(似せれば)が見分けつかないくらい一緒になるシステムが出来上がって、「Vtuber」のキャラクター自体が引退することはなくなるのかなと(この議論は夏くらいに死ぬほどされた気はしますが)思ったり思わなかったり〜(完全にオタク特有の早口)

 

単に推しがいなくなって欲しくないだけなんですけど…こんな思いを抱くことすら押し付けがましい〜っておもって年末はうだうだ考えてました。あと、引退した魂が報われないとかね

 

いつもはPCで書いてるんですけど今日はPC開く気にならなかったのでiPhoneで…

 

新年早々がっつりオタクの記事から始まりました。今年もよろしくお願いします。

名取が声に反応してくれるアプリを作りました

名取が声に反応してくれるResponSa-naを作りました

なにこれ???

名取さなアドベントカレンダー22日の記事です

辛いことがあったり疲れたりするそんな日々を送っていたかもしれない・・・(いたかな?)(そうでもない)(多分割と楽しかった)

そこで推しと喋れたらめっちゃ人生楽しくなってそれだけでQoL爆上がりキター(^o^)/ってなると思ったのでつくりました

こちらがつくったものです このサイトファンサイトであり、ご本人様とは無関係です。

これ自分で作っておいて何ですがめっちゃ楽しいです

コードとかレポート買いている時に「疲れた〜」とかいうと「頑張れ、無理せずに」って返してくれるんですよ

こんなの頑張るしかないじゃないですか!!

レポートがガリガリかけるようになりました!!!(作ってよかった〜)

作ってしまったけど大丈夫だったのだろうかという気持ちはあります。まずかったらすぐ消します

さなボタン(2)様のサイトを反応ボイスを選択する時に使っています。さなボタンの製作者様に感謝・・・・!圧倒的感謝

どうやって使うの?

Chromeのみ使えます(Chrome以外のせんせえ方ごめんね・・・・・)(この期にChromeに乗り換えて・・)(ごめんそこまでしなくていいよ)

説明するやつやっていくぞ!

1. 音声認識開始ボタン

  • このボタンを押すと音声を認識してくれるよ(さあおしゃべり開始だ!)

2. 追加ボタン

  • もっと認識させる単語、言葉を増やしたいってなったら押してね③④⑤の入力フォームが出てくるよ
  • 20個まで登録できるよ〜

3. 単語、言葉入力

  • 反応させたい単語、言葉を入れてね。入力した言葉に反応して名取が喋ってくれるよ
  • ⑦に表示される言葉を全く同じものを入れてね例えば「楽しい」って⑦に出ているのに「たのしい」と入力していたら反応しないよ

4. 放送タイトル選択

  • さなボタン(2)にあるボタンカテゴリがここで選べるよ。僕のオススメはがんばれ♡がんばれ♡です(これもうたまんねぇな・・・・)

5. 反応ボイス選択

  • 再生したいさなボタンを選択してね③とうまく組み合わせると会話も可能かも!?

6. 削除ボタン

  • なんかこの設定違うな〜ってのがあればこのボタンを押せば一行全て消せます。割とお手軽にしたはず・・・・(いるこの機能????)

7. テキストエリア

  • 認識した言葉をここに表示するよ
  • ここに表示された単語、言葉と全く同じものを③に入れるようにしてね!じゃないと反応しないから・・・・(うまいことできなくてごめんなさい・・・・)

f:id:Naporitan:20181221201824p:plain
ResponSa-naの画面

一応一通り説明した(できてるのかこれ?)(わからん)(なにもわからん)のでつかってみてね〜〜〜

わからなかったり、こうしたらどうってのがあれば twitter.com ここまでどうぞ

作者の技術力は低いです。何とか完成までこぎついた感じです。なので本当にいろいろ教えて欲しい〜〜〜・・・・

最後に

マジで名取の配信のおかげで毎日生き生きできるようになっています。本当に励みになっています。名取はなんで?こんなに人気出てるのって言ってるけど間違いなく名取は一回の配信でみんなを確実に楽しませているし、1視聴者としてめっちゃ楽しんでる。これは間違いないと思う。僕はアーティストじゃないから絵とか可愛らしいものは全然作れないから、こう言った形で自分の気持ちを表現してみました。(作ってから気づいたけどこれかなりきもちわるくねーか???)

これからも名取がんばってくれよな!!!!

チャンネル登録者12万人おめでとーーー!!!

以上です