イベント好きエンジニア鈴木さんのブログ

イベント駆動ものづくりPodcastのAKIあきラジオをやってる人のブログです。

【Java】Camera XをPreview(TextureView)なしでAnalyzeだけ動かす

ちょっと知り合いから相談されて、突然Androidのカメラを利用したAndroidアプリを触ることになりました。 そのソフトを作るために必要だったのが、プレビューを出さずに画像の解析を行う、ということでした。 Githubやブログに落ちているサンプル探していろいろ動かしてみましたが、どうしてもビューがないと動かないので困っていました。 そこで紹介されたのがCamera Xという機能です。

developer.android.com

これは最近追加された機能らしく、既存と同様の機能に加えて画像の解析もできるようです。 わかりやすいチュートリアルもありますが、新しい機能であるためKotlinで書かれたものになっています。

codelabs.developers.google.com

しかしながら、カメラを使って実装うする機能がソースコードJavaなのでどうしたものかと困ってしまいました。 ちょっと考えた結果、KotlinのソースをJavaに書き換えることにしました。

結果としてうまくいったのでそのソースコードを載せておきます。 一応おことわりとして、Androidは普段あまり開発していないので、なにか間違いがあるかもしれません。

プロジェクト設定

まず、AndroidManifest.xmlにカメラのパーミッションをいれることと、Camera Xを使うために必要なbuild.gradleの設定はしておいてください。

<uses-permission android:name="android.permission.CAMERA" />

build.gradle(Module: app)はandroidの中に、以下を追加。

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

dependenciesに以下を追加します。

    def camerax_version = '1.0.0-alpha06'
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"

dependenciesはalphaとなっているので時期によっては表記が変わるかもしれません。

なくてもいいはずだけど、コメントアウト解除したら使うのでActivityも載せておきます。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextureView
        android:id="@+id/view_finder"
        android:layout_width="640px"
        android:layout_height="640px"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

ビューなしでカメラの画像を解析する

そのうえで以下がメインのソース。本来Texture Viewが必要なところはコメントアウトしています。

package com.suzuki.camerax_appjava;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.os.Bundle;
import android.content.pm.PackageManager;
import android.util.Log;
import android.util.Size;
import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.view.TextureView;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import androidx.camera.core.*;
import androidx.camera.core.ImageAnalysis;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE_PERMISSIONS = 10;
    private static final String[] REQUIRED_PERMISSIONS = {Manifest.permission.CAMERA};
    private ExecutorService executor = Executors.newSingleThreadExecutor();

//    private TextureView viewFinder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        viewFinder =  findViewById(R.id.view_finder);

        if (allPermissionsGranted()) {
            startCamera();
//            viewFinder.post(() -> {
//                startCamera();
//            });
        } else {
            ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
        }
    }

    private void startCamera() {
        ImageAnalysisConfig config =
                new ImageAnalysisConfig.Builder()
                        .setTargetResolution(new Size(1280, 720))
                        .setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
                        .build();

        ImageAnalysis imageAnalysis = new ImageAnalysis(config);

        imageAnalysis.setAnalyzer(executor, imageAnalyzer);
        CameraX.bindToLifecycle( this, imageAnalysis);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_CODE_PERMISSIONS) {
            if (allPermissionsGranted()) {
                startCamera();
//                viewFinder.post( () -> {
//                    startCamera();
//                });
            } else {
                Toast.makeText(this,
                        "Permissions not granted by the user.",
                        Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }

    private boolean allPermissionsGranted() {
        for(String permission : REQUIRED_PERMISSIONS){
            if(ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){
                return false;
            }
        }
        return true;
    }

    private ImageAnalysis.Analyzer imageAnalyzer = new ImageAnalysis.Analyzer() {
        private long lastAnalyzedTimestamp = 0L;
        @Override
        public void analyze(ImageProxy image, int rotationDegrees) {
            long currentTimestamp = System.currentTimeMillis();
            // Calculate the average luma no more often than every second
            if (currentTimestamp - lastAnalyzedTimestamp >= TimeUnit.SECONDS.toMillis(1)) {
                // ここに画像の解析処理を書く[f:id:suzu_hack:20200320205423p:plain]

                // Log the new luma value
                Log.d("CameraXApp", "Analyzed");
                // Update timestamp of last analyzed frame
                lastAnalyzedTimestamp = currentTimestamp;
            }
        }
    };
}

うまく動けばlogcat画面にAnalyzedという文字がでます。

f:id:suzu_hack:20200320205423p:plain

画面は真っ白なので、一見動いたようには見えないのでご注意を。

New sense instrument operated in VR space, "CUVR" #ヒーローズリーグ

日本語は下にあります。


This is the 21st day of the MA Heroes League Advent Calendar 2019. Although it was a bit late, I wrote it on the day so it was barely safe!

Nice to meet you, this is Suzuki. I'm software engineer. and I love hackathon! So, I introduce my product developed in hackathon.

This time, I will introduce another product exhibited at FESTA.

Trigger of Development

This work was made in Music Hack Day 2019.

The theme is "update of music expression". We did ideas along the theme and shared ideas. Among them, the idea of ​​the one who was at the same table seemed interesting, so I decided to do it. The idea was to operate a TENORI-ON instrument in a cube shape.

TENORI-ON

TENORI-ON is a new concept electronic musical instrument developed by a collaboration between Toshio Iwai and Yamaha. It is an interface consisting of 16x16 LEDs with switches. A major feature is that music can be established simply by pressing it appropriately.

It is a musical instrument released more than 10 years ago, but for me it seems to be interesting at the time and I want to touch it, and it is one of those that has a strong impact. When I heard the story at the social gathering after the Hackathon, there were quite a few people who felt the same impression.

CUVR

This product takes over the operation feeling of TENORI-ON and operates it in a VR space. A new VR electronic musical instrument that operates CUBE in VR. CUBE in VR.
So the name is "CUVR".

f:id:suzu_hack:20191221172854p:plain

CUVR is a sequencer that can play music by turning on and off 8x8x6 panels. Manipulate the cube in the virtual space. The TENORI-ON philosophy can be succeeded musically just by taking appropriate actions. In addition, it has a communication function and can be operated by many people at the same time.

This is video during actual operation.

www.youtube.com

CUVR has 3 points. First, the sequence moves vertically and horizontally at the same time, realizing complex and deep multidimensional music. The movement of the two sequences provides a novel musical experience.    Second, the operation feeling with a new interface using virtual space. You can experience a mysterious feeling like never before because it is an instrument operated in VR. Of particular interest is the operation inside the cube. Because of VR, it can get inside the cube. This also creates fun that cannot be expressed well in words.    Finally, unexpected synergy effects by sharing operations. By communicating and operating one cube, multiple people can make music together. The experience of changing the color of the other cubes on your own will give you a strange feeling of unexpectedness.

The future of CUVR

CUVR has not yet won an award. However, We have been receiving expectations from various people at various events including [Etsuko Ichihara] (https://twitter.com/etsuko_ichihara).
She is a judge for Music Hack Day 2019 and hosts [Virtual Currency Offering Festival] (https://virtual-currency-festival.com/)    And I myself feel the potential, so I would like to brush it up and expand it. Those who have come to the event have also advised on future developments, so next year you may see a more powerful CUVR somewhere.

Please pay attention to the future development of CUVR!

By the way, I may talk about CUVR at Podcat AKI Aki Radio, a real event-driven manufacturing system I'm doing (but it is spoken in japanese... ).
Please pay attention if you like!


この記事は MAヒーローズ・リーグ Advent Calendar 2019 の 21日目 の記事です。 ちょっと遅れちゃったけど、当日中に書いたのでギリギリセーフということでなんとか!

はじめまして、もしくはこんにちは、鈴木です。 簡単な自己紹介は前回の厨二病したので省略。

今回はFESTAに展示したもう一つの作品を紹介します。

開発のきっかけ

この作品はMusic Hack Day 2019で作られたものになります。

テーマは、「音楽表現のアップデート」。 テーマに沿ってアイディアソンを行いアイディアを出し合いました。 その中で、同じテーブルにいた方のアイディアが面白そうだったので、やりましょうと、言ったののがきっかけです。 そのアイディアは、TENORI-ONという楽器をキューブ型にして操作するというものでした。

TENORI-ON

TENORI-ONとは、岩井俊雄氏とヤマハのコラボレーションにより開発された新しいコンセプトの電子楽器です。
16x16 に配置されたスイッチ付き LED からなるインターフェースになっています。
適当に押すだけでも音楽として成立するというのが大きな特徴です。

もう10年以上前に発売された楽器ではありますが、私としては当時面白そうで触ってみたいなと思い、強くインパクトに残っているもの一つです。 ハッカソン後の懇親会で話を聞いてみると同じように印象に残っているという方は結構いました。

CUVR

そんなTENORI-ONの操作感を引き継ぎ、仮想空間内で操作するようにしたのが今回の作品です。 CUBEをVR内で操作する新しいVR電子楽器、「CUVR」(キューブイアール)です。

f:id:suzu_hack:20191221172854p:plain

CUVRは、8x8x6のパネルをOn Offすることにより音楽を奏でることができるシーケンサです。
仮想空間上でキューブを操作します。 TENORI-ONの思想を引き継ぎ適当に操作するだけでも音楽的に成立するようにできてます。 さらに通信機能も有し、同時に多人数で操作できることもできます。

実際に操作している時の動画はこちら。 www.youtube.com

CUVRのポイントは3点。 まず、シーケンスが縦横同時に動き複雑で深みのある異次元音楽を実現しました。
2つのシーケンスが動くことで斬新な音楽体験ができます。

つぎに、仮想空間を利用した新しいインターフェースによる操作感。 VR内で操作する楽器、ということで今までになかった不思議な感じの体験ができます。
特に面白いのはキューブの中での操作です。
VRゆえにキューブの中にも入り込むことができます。
これがまた言葉では言葉ではうまく表現できない面白さを生み出します。

最後に操作を共有することによって思いもよらないシナジー効果。 通信して一つのキューブを操作することにより、複数人で一緒に音楽を作ることができます。 勝手に他のキューブの色が変わる体験は、意外性を感じる不思議な感覚がします。

CUVRの今後

CUVRは、まだ賞とった経歴がありません。
しかし、Music Hack Day2019の審査員でもあり、仮想通貨奉納祭の主催でもある市原えつこさんはじめ、様々なイベントで様々な方から期待の声をいただいています。

そして私自身も可能性を感じているので、よりブラッシュアップをして広げていきたいと考えています。 イベントに来ていただいた方から、今後の発展についてアドバイスもいただいているので、来年はよりパワーアップしたCUVRがどこかでみられるかもしれません。

今後のCUVRの展開にご注目ください!

ちなみに、私がやっているリアルイベント駆動ものづくり系Podcat AKIあきラジオでもCUVRのことを話すかもしれません(日本語ですが)。よろしければそちらもご注目ください!

厨二病の力を蘇らせるアプリを作って賞もらってきた #ヒーローズリーグ #AKIあきラジオ

この記事は MAヒーローズ・リーグ Advent Calendar 2019 の 17日目 の記事です。

はじめての方ははじめまして、そうでない方はこんにちは。鈴木です。

世の中たくさんの鈴木さんがいますが、その中でもYahoo! HackDay 2018の壇上でUDXから飛び降りたことで知られている方の鈴木さんです。

最近はリアルイベント駆動ものづくり系Podcat AKIあきラジオをやっています。
このラジオは、5日目の記事を執筆されている@t_furuさんと私鈴木が、テック系イベントや作っているものについて話してるラジオです。

そんなラジオの第2回でヒーローズリーグに参加する作品で「こういうの作ろうと思ってんだ」と話していたものを今回紹介します。

近年ではVR、AR、MRなどさまざまなxRが叫ばれていますが、そんな中今回私は新たなるxRを提唱しました。

いくつかのイベントでも展示していましたが改めて作品を紹介します。

厨二病とは

f:id:suzu_hack:20191217032011p:plain

厨二病ーー。
それは誰もが通る道。

  • いつも黒ずくめの服装
  • 意味はわからないけどかっこいい言葉を遣う
  • 世界という敵に挑み、そして挫折する
  • 選ばれし特別な存在であると確信する
  • 意味もなく眼帯をつける
  • 独りの俺(私)かっこいい
  • †←こういうのよく使う

中学生だった皆さん、もしくは今まさに中学生の皆さんも多少なりとも心当たりがあると思います。

私はあります。

中学生を過ぎ去った皆さんは、当時はかっこよかったと思ったものも恥ずかしくなって治そうと必死になっていたのではないでしょうか?

私はそうです。 めちゃくちゃそうです。

厨二病の抱える問題点

そんな厨二病の問題点。
それはーー

f:id:suzu_hack:20191217032109p:plain

「治したいと思っていたのに治ることが問題点とはまた何を言っているんだ?」と思われるかもしれません。
しかし中学生時代を過ぎ去って今思うのは、厨二病が思いのほか、ものづくりの原動力になっているということです。
何を作るにも0から作るにはアイディアが必要です。
そんなアイディアを考えていると、以前よりもかっこよくて面白いアイディアが浮かばなくなっている自分に気づいたのです。

あのときはあんなにかっこいいアイディア思い浮かんでいたのに今となってななんだか浮かんでこない。
浮かびそうになっても気恥ずかしてすぐにひっこめてしまう。
心の中で知らず知らずのうちに大人という理性の壁が立ちはばかるのです。

厨二病の心持っていた頃の発想力はよかった……。

しかし、あの力はすぐには取り戻せない……。

そこで、作ったのがこちら!!

CR(Chunibyo Relity) - 厨二病現実感 -

CR(Chunibyo Relity) - 厨二病現実感 -

CR(Chunibyo Relity) - 厨二病現実感 -」は、厨二病という虚構の存在を現実に実体化させることのできるVR(?)アプリです。

操作は簡単、指示に従ってポーズをとり、大きな声でセリフを叫ぶ。
そうすることによって派手な演出とともに厨二病な世界が実体化します。

動画がこちら。

youtu.be

ご覧いただくとわかるようにちゃんとやらないとかっこ悪くなるので、堂々とやるのがポイントです。
ちなみに、セリフは私が頑張って考えました。

HMDの中はこうなっています。

youtu.be

HMDを使っているけどVRでもない、なんとなくARやMRっぽくもある、ということで今回新しいxRとしてCRを提唱しました。

HMDで覆われているおかげでセリフは常に見やすい位置にあります。
しかも周りの人がまったく見えません。
なので緊張を緩和して思う存分厨二病なセリフを叫ぶことができます。

叫ぶと気持ちいいぞ!!!!!!!!!!

仕組み

構成はシンプル。 HMDの操作の結果ををネットワーク経由でPCに送りプロジェクタで映像をだす。以上。

f:id:suzu_hack:20191217031852p:plain
CR システム構成

開発にはUnityを使っています。

この作品のポイントはHMD Oculus Questを使うのに、メインは現実世界のプロジェクションするというところです。
実は、作品を作るときの動機にOculus Questのコントローラーおもしれえええ!! ってなったのでもっとコントローラに焦点を当てたいなと思った、というものが含まれていたりします。

6DoFのコントローラなので、実空間のコントローラの位置をアプリに反映することができます。
お手軽にに手の簡易モーションキャプチャができてしまうわけです。

さらにHTC ViveやOculus Riftにもある機能ですが、Oculus Questになることにより可搬性が非常に高まりました。
どこでも気軽にデモができます。
Oculus Quest最近ハンドトラック機能が追加されましたが個人的にはまだOculus Touchの方が面白いんじゃないかと思っています。
それはそれで語りたいことはありますが、それはまた今度。

ヒーローズリーグの結果

最初にこの作品を出したのは東京予選だったのでした。こちらでは惜しくも決勝進出ならず。
一方でのちの書類審査でXUIリーグの決勝リーグに進出しました。

会場は大阪。

私は東京在住ですが大阪にいきました。
日帰りで。

大阪で出向いた甲斐あり大阪駆動開発賞を頂きました!
プレゼンした時は、一時審査員のコメントはCRでもちきりでしたよ!

またヒーローズリーグには個人賞という個人が個人を表彰するシステムがあるのですが、そちらでもたくさんの個人賞いただきました。
個人からもらうとはいえ、これだけの数もらえるのはなかなかないと思います。

CR(Chunibyo Relity) - 厨二病現実感 - の効用

CRは体験した人に厨二病の心を取り戻してアイディア力を高めてほしい、という目的で作りましたが、結果は若干想定と異なってしまいました。

なんやかんや厨二病の力を一番養ったのは厨二病のセリフを考えていたとき。
また、使い方を教えるために人前で厨二病なセリフを何度も言い続けた結果、人前で厨二病なことを言うことでメンタルが強くなる。
考えてみれば厨二病の力ついたのは作った本人だけだったのでは? という気がしなくもありませんがよしとします。

厨二病を知らない50代の人に作品の説明したときは、隠す気のない地雷の上に飛び乗るような気分でした。

CRでほかにやろうと思っていたこと

本当はIFTTTかなんかでコンセントを制御してサーキュレーター動かせたらもっといいな、と思っていました。
マントをつけて決めポーズとるときに風が吹いてマントがはためくのをやりたかったんですが、購入した中華WiFiコンセントがうまく反応してくれなかったので今回は断念しました。

CRの今後と将来性

ぶっちゃけだいぶプレゼン映えを狙った作品になっちゃいましたが、個人的にはホリエモンがカラオケのように手軽にできる演劇にこのシステムを応用できるのでは? と思ったりしています。

だから素人が演技をするには、カンペがあればいいんですよ。モニターにせりふが流れるようにする「デジタルカンペシステム」を作ればいいのです 僕の足を引っ張らない社会を作る――ホリエモンが演劇をアップデートする理由 http://bit.ly/2XE14gt

今回作ったCRは、ポーズとセリフが目の前に出てくる、まさに厨二病のカラオケような形になっています。同様に演劇のセリフとポーズをHMDに出してその通りにポーズをとりセリフを言う。
そしたらホリエモンのいうデジタルカンペシステム作れるやーん! と思って1人で勝手にテンション上がってました。

今後この作品を続けていくかは、読者の皆さんの声次第です。
体験してみたい! という方の声をお待ちしております。

あと、AKIあきラジオの方もよろしくお願いします!

MacでM5 Stick Vのソフト開発できるようになるまで

今回は実家に帰ったのでM5 Stick Vを触ってみることにしました。 なんか場所を変えると普段あんまやれないことをやれたりするじゃないですか。あれです。

M5 Stick Vとは

M5Stick VはAIOT(AI + IoT)カメラです。これだけで顔認識や物体認識などができてしまいます。
https://www.switch-science.com/catalog/5700/

SoCはKendryte社のK210です。 他のM5 Stackと同じのようにArduinoのスケッチ描いて……みたいにはいかない模様。

とりあえず動かす

Quick StartだとEasy Loaderをダウンロードって書いてあるけどWindowsしかないので無視。
次にQuickStartのページから、Kflash_GUIMac版とfirmwareをダウンロード。
Kflash_GUIを起動したらこんな感じで設定してDownloadをクリック。

f:id:suzu_hack:20190817120834p:plain

firmwareの書き込みが始まります。 うまくいったら"Download Success"というメッセージが出ます。

次にシリアル接続をします。
まずは接続先を確認しましょう。
ターミナルを開き以下のコマンドを実行します。

ls /dev/tty.*

バイスの一覧が出てきます。

/dev/tty.Bluetooth-Incoming-Port     /dev/tty.usbserial-00002014

この中でtty.usbserial-00002014というのがそれっぽいのでこれに接続します。
接続はscreenコマンドを利用します。
インストールされてない場合はhomebrewなどでインストールしてください。

screen /dev/tty.usbserial-00002014 115200

うまく行くとこんな感じになります。

[MAIXPY]Pll0:freq:832000000
[MAIXPY]Pll1:freq:398666666
[MAIXPY]Pll2:freq:45066666
[MAIXPY]cpu:freq:416000000
[MAIXPY]kpu:freq:398666666
[MAIXPY]Flash:0xc8:0x17
open second core...
gc heap=0x8016fbe0-0x801efbe0
[MaixPy] init end

 __  __              _____  __   __  _____   __     __
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ /
| |\/| |   / /\ \     | |     > <   |  ___/    \   /
| |  | |  / ____ \   _| |_   / . \  | |         | |
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|

M5StickV by M5Stack : https://m5stack.com/
M5StickV Wiki       : https://docs.m5stack.com
Co-op by Sipeed     : https://www.sipeed.com

[MAIXPY]: result = 0
[MAIXPY]: numchannels = 1
[MAIXPY]: samplerate = 44100
[MAIXPY]: byterate = 88200
[MAIXPY]: blockalign = 2
[MAIXPY]: bitspersample = 16
[MAIXPY]: datasize = 158760
init i2c2
[MAIXPY]: find ov7740

ここままだとデフォルトのコードが実行された状態なので、Ctrl+Cでデフォルトコードを停止させます。
すると
">>>" というマークが出てコマンドを入力できる状態になるのでコマンドを入力します。

import lcd

lcd.init()
lcd.draw_string(100, 100, "hello world", lcd.RED, lcd.BLACK)

LCDhello worldと出てきたら成功。
終了したい場合はCtrl+A, K(controlキーを押しながらaとdを順番に押す)です。

ここまでで、一応M5 StickVのプログラミングができるようになりましたが、これだけだと再起動するたびにプログラムが消えてしまうので、ファイルをアップロードしてプログラムを書き換えられるようにします。

プログラムを書き換える

uPyLoaderの準備

uPyLoaderをダウンロードします。 https://github.com/BetaRavener/uPyLoader/releases/tag/v0.1.3
ちなみに最新は0.1.4だが、mac版がないので一つ古いバージョンをダウンロードしました。

uPyLoaderを開きます。
Connectionを先ほど開いたシリアルポートを選択します。
M5 Stickが立ち上がる時にLCD隣の大きなボタンを押しながら起動します。
ちなみにM5 Stickの電源を落とすのは、SDカードリーダ隣のボタンを6秒長押しです。
USBで接続されていれば勝手に再起動します。
再起動した状態でuPyLoaderのConnectボタンを押します。
うまくいけば右側にファイルのリストが表示されます。

f:id:suzu_hack:20190817120917p:plain

File -> Init transfer files

を選択するとファイル転送の準備ができます。

バックアップ

念の為M5 StickV内のファイルはバックアップを取っておきましょう。
boot.pyを上書きしても削除したら復活するらしいのでしなくても良さそう。

右側のリストからboot.pyを選択します。PC Pathを任意のディレクトリにします。
PC Pathの右隣にあるTransferボタン(左ではないので注意)を押すと設定したディレクトリにファイルが保存されます。

プログラムの書き換え

boot.pyを書き換えます。
boot.pyを作成し、適当なプログラムを作成します。
書き込めるかの確認だけなので先ほどと同じhello worldを表示するプログラムを作りました。

import lcd

lcd.init()
lcd.draw_string(100, 100, "hello world", lcd.RED, lcd.BLACK)

uPyLoaderの左側のパネルから作成したboot.pyを選択しMCU name:右隣にあるTransferボタンを押すとファイルが転送されます。
m5Stickを再起動すると起動後hello worldが表示されます。

この要領でファイルを書き換えればM5 StickVでいろいろできるようになります。

以上、MacでM5 StickVで開発できるようになるまででした。
素敵なM5 StickVライフを!

日本は「変」であることが強みだ【SXSW2019】

f:id:suzu_hack:20190404183544j:plain

はじめに

今回は、SXSW(サウスバイ・サウスウエスト)2019の所感を書こうと思います。

SXSWに行くのは今回が初めて。 国内でみるとまだ知名度は高くないようですが、スタートアップ界隈ではそれこそ見たことのないものが次々と見つかるパラダイスのようなイメージを持って語られることが多いです。 周りの人に意気揚々と、

「SXSW行くんだ!」

って言ったら、

「なにそれ?」

って言われる率が高くびっくりしました(5人中4人くらいから言われるイメージ)。 だからこそ、日本では見られない新しいプロダクトやカンファレンスへの期待に胸を馳せて出発しました。

行ってきた印象

帰国した今振り返ってみて、印象に残ったものが2つあります。 ひとつは電動キックスケーター、もう1つは日本企業の展示でした。 テキサスまで10時間以上も飛行機に乗っていった感想が日本の展示面白いとはなんとも皮肉なもんだとも思います。 正直、日本人SXSWに期待しすぎなのでは感がありますが、今回はこの日本の展示について書こうと思います。

日本の展示は変

私が日本の展示で感じた印象は「変」だということでした。

まず、SXSW2019の「変」なものの筆頭として挙げられるものが、The New Japan Islandsです。

f:id:suzu_hack:20190404183613j:plain

施設の近くまできて目立つのは反対になった赤と白の円錐台。 日本人が見たら赤富士を逆にしたものだろうなーとわかります。 ほかにもハニワ、フォークリフトに工事中の看板まで。 最初はまだ工事中なのでは? と思ってしましたがそう言う展示でした。

靴を脱いで入ると、畳の床、ギラギラした色をした魚のCG、さらに奥に行くとパチンコやパックマンDDRといったアーケードゲーム、カンファレンスは真ん中でコタツに入って話す、といった日本人にとってはすごく変な空間が、そこにはありました。

テーマは"Digitally Fermenting Landscape"(発酵するデジタル空間)、というコンセプトから察するに狙ってやっていることはわかります。

次に紹介したいのがTrade Show。 コンベンションセンターで行われた企業の展示会です。CEATECやJapan IT Weekみたいなイメージに近い感じの展示です。

f:id:suzu_hack:20190404183638j:plain

個人的にコンベンションセンターの中で最も変なことをやっていたと思うのは「電通」ブース。 まずは、自分の顔と文字を組み合わせてハンコを作るHanko-han。実際にハンコも作れるようでしたが、15分に1本しかできないとのことでハンコそのものの作成は断念。 専用のアプリを使えばハンコの模様から顔が浮き出てくるAR機能付きというもの。 ほかにも去年もあったと言われる3Dプリンターで作る寿司(Sushi Singularity)や男性が授乳を体験できる機械なんかがありました。

hankohan.com

バンダイナムコの展示もインパクトがありました。THE AI GAMERは、ひたすらゼビウスをプレイするロボット。見た感じDQNを使って学習させた結果をロボットが物理的にコントローラで操作しているという仕組みなのでしょう。

日本のスタートアップ企業も興味深いものがありました。その中でもスケールがでかいと思ったのがALE株式会社。 この企業でやろうとしている事業が人工的に流れ星を作るというもの。人工衛星から流れ星の種を飛ばして流れ星を作りだすらしく、イベントの演出の利用を想定しているのだとか。

他にも、NTTのME-HADALevioPoleなんかも印象的でした。

f:id:suzu_hack:20190404183439j:plain

変であることで勝負する

いくつか日本発の展示を紹介しました。そして、それらが「変」だと書きました。 変であるということは、言い換えれば「他がやっていない」ものであり、ひいては競争力をもつ可能性があるものであることになります。 だから、世界中の企業があつまる場で「変」なものを出すことができる日本の発想力は世界で勝負できるものなのではないか。

私が今回SXSWで得たものは、この「日本は変であることで勝負できる」という感覚です。

よく日本が日本独自のもので勝負するという話をすると大概はオタク向けコンテンツだとか、歌舞伎や桜といったものが挙げられます。 そういったものは形あるのでわかりやすいということもありますが、本当に勝負できるものはもっと根本的なところにあるんじゃないかと思いました。

ここまで「変」という言葉をポジティブに説明をしてきましたが、一方で「変」に含まれる「他と違うことによる恥」という意味合いも無視はできません。 長く「不景気だ」「世界から遅れを取ってきている」と言われ続けてきた日本人のコンプレックス、つまり海外と違うことによる恥も、この展示にはにじみ出ているような気がしました。 ただ、私はこれこそがエネルギーとなりうるのではないか? とも思います。 なぜなら、コンプレックスが生み出す原動力は強いからです。 物語の主人公の多くはコンプレックスを解消させるために行動し、ストーリーが展開するようにコンプレックスは魅力的なものを生み出すために必要なものだと考えます。 日本は日本が持つコンプレックスに向かい合ったほうがいい。 臭いものだとして蓋をしてきたものにちゃんと向き合ったほうがいいんだろうなと思いました。

ま、私も臭いものに蓋したものばっかだけど……