読者です 読者をやめる 読者になる 読者になる

Twenties Dirtbag

イギリスの大学院で脳の勉強をしてきた25歳、今はボルダリングジムを経営中。基本的にどうでもいいはなしです。

未経験でクリエイティブ業界にはいった

普通にデートとかしてても本屋にいきたくなってしまったら、本屋に行きます。よくそこで

「本なんて、アマゾンで買いなよ〜」

ってめっちゃ言われます。そしてその通り、本はインターネットで購入しています。では、なぜ本屋にいくの?って言われるんですけど、その理由としては、、本屋に行くと潜在的欲求がわかりやすいから。です。

 

まあ例えるのであれば、「スタバどや族のための、東京のおすすめカフェ25選」という本を買いに蔦屋とかに行くじゃないですか、そうしたら、なぜか知らないけど「1億年前に流行っていた女子の口説き方」という本をつい手に取ってたりします。

そういうとき、自分の潜在的欲求に「1億年前」だったり「女子の口説き方」というのがあったりするのが、関係してるわけですね。

 

そういうのを知るために、人間は本屋に行く必要があるです。

 

これは先日、本屋さんに行った話。

 

プログラミングの本を探しに本屋さんにいったんですが、ふと気になって手に取った本は「3分でわかる海底ケーブルの話」とか「オーガニック革命」とかを手にとったりするんですね(そしてその後購入した)。ということは無意識レベルでそのカテゴリーに興味があったらしいくて、それがしれる。ということ

 

なので、そういった本屋にいくこと、っていうのが大事なんですね〜

 

さーて、本題にはいりますか。

 

未経験でクリエイティブ業界にはいりました。

 

 

以上ー。

 

4月からのNew Lifeてきなやつ

前に少しだけ触れてしまったので、いまこうやって簡単に書くと、4月の上旬に東京に引っ越しをしまして、とあるクリエイティブエージェンシーで働きはじめました。

同様にボルダリングはやっていくつもりですが。

 

このクリエイティブ業界的なもの、すごく脳科学に付随するというかRelateしていることが多くて(例えば、どうやって発想力を鍛えるかなど)とてもおもしろくなりそうです。

 

まあ、そんなカンジです。

 

いじょうー。

この人のような英語を話したいシリーズ

Sam Claflinというイギリス人俳優が話すような、イギリス英語を話せるようになってやるぜ!っていう意気込みで毎日、彼のインタービューとかを見ているんです。

 

それだけ、おわり。(笑)

 

こんな人工知能がほしいよ

LINEのタイムラインで、「女子が彼氏にしてほしい10のこと」というのが流れてきたので、見ていました。そこにはこんな事が書いてありました。

1. おはようと、おやすみのLINEがほしい
2. 背後からのハグ
3. 深く、長い会話
4. 一緒に写真をとること
5. 小さいことでも良いので、サプライズを
6. なぜ、彼女が好きなのかを伝えてほしい
7. 彼女のために時間を作って欲しい
8. 寄り添ってネットフリックスをみたい
9. ランダムキス
10. うそをつかないでほしい

 

というような10項目がありました、これが女子が彼氏にしてほしい10個のことのようです。もちろんこれは女子次第で個人差があり、まだまだこの他にもあるはずですよね。

そこで、「女子が彼氏にしてほしいこと」のデータを集めまくって、それをビッグデータとします。そしてそれを人工知能のロボットに学習させて、Siriのように

こんにちは、今日の天気は晴れです、前回のサプライズから28日経過しているので、今日は小さいサプライズをしましょう。

とサジェストしてくれる、Siri的な人工知能ロボットを開発しましょう。こうすることによって、女子の幸福度が全体的に上がるはずです。

それと反比例して、男子の幸福度は下がりますが。f:id:flowertyyyy:20170222005951p:plain

結構、「彼女に何をすれば喜んでくれるのか?」という問は、男からしたら比較的カロリーを要する思考でございます。なので、なるべく避けたい、そしてその結果、何もしないというところに行き着きます。そうして最終的に彼女が女子会に行ったときに彼氏をディスる繰り返しです。

 

なので、ではそのカロリーの使う思考活動をロボットに任せましょう。というのが今回のブログ内容でした。

 

今こうやって図にもしてみましたが、女子がやってほしいことをSiriくんが提案してくれるのですが、提案してくれてもやりたくないものもあります。例えば、ぶっちゃけ、おはようとお休みのLINEはしたくありません。もうSiriくんが勝手にLINEを起動してパターンを決めて送信してくれるのが1番ありがたいですね。そういうBotも開発しましょう。

 

どうでしょう、いい感じにHappyになれそうじゃないですか。ちょっと寝る前にこのような変なことを思いついて3秒位でなにも考えずにかいているので、まとまってないんですけど、こんな感じで、どうでしょうか。

では、ねます。

 

おわり。

 

 

 

 

 

OF:雪のなかで人影が遊ばせたらエラーが出た話

openFrameworksを勉強する際に、とても参考にしているのがこここじ研(openFrameworks)なんですが、この、「雪のなかで人影が遊ぶ」を実行していこうとした際に、エラーが出たので他のやり方でやってみた結果を書いていきます。

 

上のリンク先の「シルエットと雪との相互作用を実現」というところの、シルエットをポリゴンに変換する際のこちら↓

// make a polygon shadows[j].get()->clear();
shadows[j].get()->addVertexes(shadowLines[j]);
shadows[j].get()->triangulatePoly(30);
shadows[j].get()->setPhysics(1.0, 0.5, 0.1);
shadows[j].get()->create(world2d.getWorld());

 

のところで、「signal SIGABRT」というエラーが出てきてビルドはできたのですが、Workしない状態となってました。そのエラーの原因をいろいろとGoogle itしたのですが、なかなかこれと言った解決のためのKeyが手に入らなかったので、計算量が多いためのコマ落ちかな。と自分の中で勝手に結論を出してしまい、別の方法でやることにしました。

f:id:flowertyyyy:20170220183604p:plain

 

それは、単純に分析した輪郭線の位置情報を

 

    for(int i = 0; i < finder.nBlobs; i++){
        for(int j = 0; j < finder.blobs[i].pts.size(); j++){
            ofPoint pos = finder.blobs[i].pts[j];
            ofPtr<ofxBox2dCircle> circle = ofPtr<ofxBox2dCircle>(new ofxBox2dCircle);
            circle.get() -> setup(world2d.getWorld(), pos.x, pos.y, 3);
            ContourCircles.push_back(circle);
        }
    }

 

これで取得して、そこに半径3の円をおいているという状態です。これだと実行できました。(おそらくポリゴンをつくるより正確性は下がりますが。)
f:id:flowertyyyy:20170220185059p:plain


参考:
Amazon CAPTCHA

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    // window
    ofBackground(80, 80, 120);
    ofSetWindowShape(640, 480);
    
    // box2d
    world2d.init();
    world2d.setFPS(60.0);
    world2d.setGravity(0, 2);
    
    // snow
    snow.load("snow.png");
    snow.setAnchorPoint(0.5, 0.5);
    
    // ground
    world2d.createGround(0, 480, 640, 480);
    
    // setup OpneNI
    kinect.setup();
    kinect.setRegister(true);
    kinect.setMirror(true);
    kinect.addDepthGenerator();
    kinect.start();
    minDist = 500;
    maxDist = 1500;
    shadowImage.allocate(640, 480);
    invertImage.allocate(640, 480);
    
    //  shadow of a person
    for (int i = 0; i < MAX_BLOBS; i++){
        shadows[i] = ofPtr<ofxBox2dPolygon>(new ofxBox2dPolygon);
    }
}

void ofApp::makeSnow(float x, float y, float size){
    // create a new circle
    ofPtr<ofxBox2dCircle> circle = ofPtr<ofxBox2dCircle>(new ofxBox2dCircle);
    
    // set attributes to this circle
    circle.get() -> setPhysics(1.0, 0.5, 0.1);
    circle.get() -> setup(world2d.getWorld(), x, y, size);
    circle.get() -> setVelocity(ofRandom(-1.0, 1.0), ofRandom(-1.0, 1.0));
    
    // add this circle to "circles" vector
    circles.push_back(circle);
}

bool objectkiller(ofPtr<ofxBox2dBaseShape> shape) {
    float yPos = shape.get() -> getPosition().y;
    return (yPos >= 500);
}

//--------------------------------------------------------------
void ofApp::update(){
    // shadow
    kinect.update();
    unsigned short *depthData = kinect.getDepthRawPixels().getData();
    unsigned char *shadowData = shadowImage.getPixels().getData();
    for (int k = 0 ; k < 640 * 480; k++) {
        shadowData[k] = (minDist < depthData[k] && depthData[k] < maxDist)? 255:0;
    }
    shadowImage.flagImageChanged();
    invertImage = shadowImage;
    invertImage.invert();
    
    // find contours
    shadowImage.threshold(threshold);
    for(int i = 0; i < ContourCircles.size(); i++){
        ContourCircles[i]->destroy();
    }
    ContourCircles.clear();
    finder.findContours(shadowImage, 1000, 640*480/4, 4, false);
    for(int i = 0; i < finder.nBlobs; i++){
        for(int j = 0; j < finder.blobs[i].pts.size(); j++){
            ofPoint pos = finder.blobs[i].pts[j];
            ofPtr<ofxBox2dCircle> circle = ofPtr<ofxBox2dCircle>(new ofxBox2dCircle);
            circle.get() -> setup(world2d.getWorld(), pos.x, pos.y, 3);
            ContourCircles.push_back(circle);
        }
    }
    
    /*
    numShadows = finder.nBlobs;
    for (int j = 0; j < MAX_BLOBS; j++) {
        shadowLines[j].clear();
        shadows[j].get()->clear();
        if (j < numShadows) {
            //  make a contour
            for (int k = 0; k < finder.blobs[j].pts.size(); k+=60){
                shadowLines[j].addVertex(finder.blobs[j].pts[k]);
            }
            shadowLines[j].close();
            shadowLines[j].simplify();
            //  make a polygon
            shadows[j].get()->clear();
            shadows[j].get()->addVertexes(shadowLines[j]);
            shadows[j].get()->triangulatePoly(5);
            shadows[j].get()->setPhysics(1.0, 0.5, 0.1);
            shadows[j].get()->create(world2d.getWorld());
        }
    }
     */
    
    // make a new snow
    if (ofRandom(0, 100) < 40) {
        makeSnow(ofRandom(-40, 680), -40, ofRandom(5, 10));
    }
    
    
    // box2d
    ofRemove(circles, objectkiller);
            
    //update the world
    world2d.update();
}

//--------------------------------------------------------------
void ofApp::draw(){
    shadowImage.draw(640, 0, 640, 480);
    // draw shadow
    ofSetColor(80, 80, 120);
    //ofSetColor(255, 255, 255);
    invertImage.draw(0, 0, 640, 480);
    //  draw contours
    /*
    ofSetLineWidth(3);
    ofSetColor(140, 140, 200);
    for (int j = 0; j < numShadows; j++){
        shadowLines[j].draw();
    }
     */
    //shadowImage.draw(0, 0, 640, 480);
    
    // draw contours
    finder.draw(0, 0, 640, 480);
    
    
    // draw the ContourCircles
    ofSetColor(255, 255, 255);
    for(int i = 0; i < ContourCircles.size(); i++){
        ContourCircles[i]->draw();
    }
    

    
    // draw each circle
    ofSetColor(255, 255, 255);
    for (int i = 0; i < circles.size(); i++) {
        ofPoint pos = circles[i].get() -> getPosition();
        float size = circles[i].get() -> getRadius()*10.0;
        snow.draw(pos, size, size);
    }
    
    // draw the number of circles and fps
    ofSetColor(255, 100, 100);
    char buf[100];
    sprintf(buf, "%ld circles", circles.size());
    ofDrawBitmapString(buf, 20, 20);
    sprintf(buf, "%5.2f fps", ofGetFrameRate());
    ofDrawBitmapString(buf, 20, 40);
    sprintf(buf, "%1d fps", threshold);
    ofDrawBitmapString(buf, 20, 60);

}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){
    switch(key){
            case '+':
            threshold ++;
            if(threshold > 255) threshold = 255;
            break;
            case '-':
            threshold --;
            if(threshold < 0) threshold = 0;
            break;
            
    }

}

kinect with openFrameworksはまじ簡単だった話

もうすでに大学院を卒業しておりますが、私、非常に残念ではありますが卒業式に行けなかった身分でございます。だけど、よくSNSで見かけるグラデュエーションガウンを着て、ハットを投げるやつの写真

 

f:id:flowertyyyy:20170218233107p:plain

 

これにはすごく憧れがあって、このためだけにイギリス戻って学長との握手会(卒業式)に参加しようかと考えましたがやめました。

でも、それでもあきらめ切れない部分があったため、どうにかテクノロジーの力を借りて実現しようと思ったのが今回のブログテーマ、

 

今回はopenFrameworksで人物だけ切り取ってMovie上に貼り付けよう!というブログ内容。まずこれが完成図。

結構本気出して、ガウン着て、友人がFacebookにUpしていたMovieを使ってガチでGraduationしようかと思いましたが、「あ、結構できるんだ〜」っていうところで、そこまでやるものめんどくさくなったので、その(上述した)プロジェクトはこの下のところで終了してます。

でも、もしガウンとか手に入れたらやってみようかなー。

 

f:id:flowertyyyy:20170218232745p:plain
大学の公式YoutubeかVideoを流して、そこでkinectで切り取った自分を、そのVideo上に貼り付けている。若干ズレ的なものがみられる。

 

さて、openFrameworks(OF)でkinectを操作するのって自分が思っていたのより25倍くらい簡単でびっくりしています。

kinectドライバをインストールとかする必要があるのかな。と思っていたけれども何もいりませんでした。

OpenNIのビルドが若干面倒ですが、ここに書いてある通りにすれば問題なくビルドができました。

先程のリンク先にもあるんですが、ここで書いてある通りに人物を切り抜いて、その前に動画を流しているだけです。

なので、これ、とてつもなく簡単に作ることができました。

 

まあ、こんな感じの、内容が非常にうすいブログでしたー

なにがいいたかったかというと、kinectでOFまじらくだよ!ってこと!

 

おわり。

選択することで好きのレベルが上がる理論

好きなことはなんですか?って聞かれても、スパッと出てくることがなかなか無い。

そもそも、「好き」って何?「好き」を言語化するのって難しくない?

 

ということを思ったので、今日は待ったく科学に基いていない自分の(いま思いついた)妄想理論を紹介します。その名も、「好きだから選択するんじゃなくて、選択するから好き(だと思っているだけ)理論」です。

 

まあ、ただ単純にそれだけなんだけさ。

 

先に結論ですが、人間は1日に何回も選択をすることで人生をつくっていると思います。その選択の積み重ねが「好き」を作っているということです。

 

例えばスタバにいてソイラテにするかティーラテにするかを迷っているとします。そこで、店員さんが「ソイラテおすすめですよー!」とか言うので、ソイラテを選択しました。その時点で、脳は

 

脳氏「あ、俺、ソイラテ好きなんだな。」

 

ってまず、思います。でももしそこで美味しくなかったら

 

「やっぱり、ティーラテのほうが良かったなー、次回はティーラテにしよう。なのでこのコトを海馬に記憶させておこう」

 

って思うんです。なので、次回はティーラテを選択するじゃないですが。そしたら

 

「あ!やっぱりティーラテはソイラテより良いね!」

 

ってなるわけです。良し悪しは相対的なので、ここで初めて2つの商品に良し悪しが生まれるんですね。これができた時点で、これ以降、脳はティーラテを選択しやすくなるのです。

 

そして、これ以降も脳は、海馬という名の内部ストレージにスタバの商品を登録して、その中からそのときの気分や気温などを考慮して、今日はどのドリンクにするかを選択するのですが、相対的基準の高いティーラテが選択されやすくなるのです。その選択のフィードバックとして、「好きレベル+1」が生まれます。その循環でどんどんティーラテを好きになります。

 

こういうことです。このとき、人間は「自分は好きだから選択をしている」を無意識に思っておりますが、実は、「選択しているから好きだ」ということなんです。

 

ここをはっきりと意識することで、「実はホントは好きじゃいないもの」だったり、「実は好きなもの」が見えてきたりします。

 

例えば居酒屋に行って、自分が特に何も考えずに注文したものをメモ(レシートでも可)しておいて、それのデータを取ってみてください。自分は居酒屋に行ったら「チキン南蛮」が好きだと思っていましたが、実は、「カルボナーラ」のほうが注文していたりします。あれ?自分の脳ってそういう順位付けになってるんだ〜という感じで自分の好きを可視化できるはずです。

 

これは実は、恋愛関係もの言える話で、

 

「好きだから、付き合っている」

 

というのは、実はそうではなくて、

 

「付き合っているから、好き」

 

ということなんです。

 

好きか無関心かわからない状態って、付き合っている以上すごくあると思っていて、それは何故かと言うと、「好きだから付き合う」という方程式が日本で一般的になっているからで、

 

「付き合ってるということは・・・俺は相手のことを好きなんだよあ」

 

って自分のマインドをコントロールしている状態でもあるんです。

つまり、付き合っているという事実があると、本当の「好き」がぼやけてしまうのです。

 

でも実は、好きか無関心か分からない状態では、人間は「選択」をしなくなっているはずです。まじで好きと思っていた時代だったら選択していたことも、今は選択しなくなっている。

ということは、好きではなくなっている証拠ではないでしょうか。

 

なので、付き合ているときに、

 

「好きだから付き合っている」

 

という考えを一旦外してみて、「付き合っているから好き(と思っている)」と考えてみると、いいかもしれませんね。そうすることで、本当に好きか否かを脳にアクセスして確認できると思います。

 

 

つまり、無意識に選択しているもの(例えば、コンビニでついつい買っちゃうもの)にフォーカスをして、あ、自分はこれを選択するということは、好きなんだ。っていうのを考えながらいきると、このブログの冒頭で言った

「好きなことはなんですか?」

という質問にすんなり答えられるようになるかもしれないですね。

 

どうでしょう。いみわからない理論ですね。(笑)

 

 

おわり。