こんにちは、未来環境ラボの中口です。みなさんもうChatGPTは使っていますか?ChatGPTと会話するだけでも楽しいですが、Webページの要約や論文の検索、Pythonコードの実行など、次々と新しい機能がリリースされてどんどん進化しています。今回はそんなChatGPTに近い性能を持ち、かつ無償で利用できるLLM(Large Language Model)を紹介します。
投稿者「loudstrie」のアーカイブ
2020年度 活動まとめ
2020年度はコロナ禍の中,活動方法を模索する1年でした。年度当初より京都情報大学院大学,京都コンピュータ学院含むKCGグループは一斉にオンライン講義に移行し,ラボの活動も全てオンライン化しました。その影響で機材を使ったプロトタイピング などができなくなりましたが,金曜夕方に実施していたゼミの参加者は増加しました。
できごと
- 9/18 オンラインアイデアソン :「オンライン授業を効率的に行う仕組みを考えよう」
- 11/6 KCGI創立17周年記念式典,技術交流会
対外発表など
- 堀口尚史, 中口孝雄, 佐藤元昭, “フォームサービスを用いた口腔ケア実施報告システム ,” 電子情報通信学会サービスコンピューティング研究会, 2020.8.
- 中口孝雄,”リアルタイムコラボレーションツールのためのオブジェクト共有サービス,” 電子情報通信学会サービスコンピューティング研究会, 2020.11.
- 堀口尚史, 中口孝雄, 佐藤元昭, “フォームサービスとスプレッドシートサービスおよびテキスト解析サービスを組み合わせた口腔ケア実施報告分析システム,” NAIS Journal, 2021.3.
- 中口孝雄, “機械学習サービスを登録・提供するサービス基盤の構築に向けて,” NAIS Journal, 2021.3.
ゼミは主に授業期間中,隔週で金曜日の夕方に開催しています。大学で実施されているようなゼミと同様で,KCG生,KCGI生,他大学の学生,OBや現役エンジニアも参加する,研究開発活動の発表や議論の場です。毎回数件の発表ののち,オンライン飲み会に以降し,交流を深めるとともに熱い議論を交わしています。
ゼミのテーマ例
コラボレーションツール,仮想空間+ビデオ会議,ソーラー発電+仮想通貨マイニング,DeepL,口腔ケアシステム,消防団員支援,なでしこ,M1Macなど
前年度→ 2019年度 活動まとめ
Firebase無しでGoogle ML Kitを試す
未来環境ラボの中口です。衝撃です。衝撃。去る5月11日に、毎年様々な技術が発表されるGoogleのイベント、Google I/O 2018にて、Google ML Kitが発表されました。何が衝撃かって、その簡単さです。ML KitはGoogleが提供する機械学習フレームワーク(TensorFlow)や機械学習クラウドサービスをAndroid端末で使うためのSDKで、非常に簡単に機械学習アプリを作ることができます。
本来はFirebaseというクラウドサービスと連携して使うことが想定されていますが、オフラインのみでも動作します。早速サンプルを動作させてみましょう。
Android Studioのインストール
Android用のSDKなので、Android Studioが必要です。最新版をダウンロード、インストールして下さい。
GitHubからサンプルをクローン
Android Studioを起動し、起動画面で[Check out project from Version Control] → [GitHub]を選んで下さい。
サンプルのURLは下記です。
Clone後は様々なサンプルプロジェクトが見えている状態で、他のプロジェクトがビルドに失敗することもあるので、ML Kitだけにしましょう。[File]→[Open]と選択して、quickstart-androidディレクトリ内の、mlkitディレクトリを開いて下さい。
google-services.jsonの作成
mlkitをビルドするには、google-services.jsonというファイルが必要です。mlkitはGoogle Firebaseというサービスの利用を前提としていて、プロジェクトをビルドする際にもFirebaseから取得した設定ファイルがあるか、その内容が正しいかが検証されます。ただし端末上で動作する機能を利用するだけの場合は、下記のファイルを用意すればOKです。mlkitプロジェクトのappディレクトリ内に、google-services.jsonという名前でファイルを作成し、下記内容をペーストして保存して下さい。
{ "project_info": { "project_number": "", "firebase_url": "", "project_id": "", "storage_bucket": "" }, "client": [{ "client_info": { "mobilesdk_app_id": "1:1:android:1", "android_client_info": { "package_name": "com.google.firebase.samples.apps.mlkit" } }, "oauth_client": [], "api_key": [{ "current_key": "" }], "services": {} }], "configuration_version": "1" }
起動!
ではアプリを起動しましょう。PCにスマホを接続し、IDEの上の方にある、緑色の再生ボタンを押して下さい。起動すると、次のような画面が表示されます。
上のLivePreviewActivityが、カメラ映像をリアルタイムで識別するデモです。これを選びます。すると認識画面が表示されます。画面下部の、フォルダのようなアイコンをタップすると、背面カメラか前面カメラ化を切り替えられます。その横の文字列をタップすると、認識モードを切り替えられます。Face Detectionにすると、顔認識が試せます。
うまく動作しています。(写真はフレッシュマンキャンプ2018の記事から)
Google ML Kitは非常に手軽に試せるSDKです。モデルの差し替えや、Googleのクラウドサービスを使うこともできるので、いろいろと遊べそうです。
Parrot Drone SDKの使い方
未来環境ラボの中口です。未来環境ラボには、ホビードローンの一つ、Parrot Mamboが置いてあります(ラボメンバーであればいつでも使えます!)。今回はこのParrot MamboをAndroidからコントロールするためのSDKをビルドする方法を紹介します。使用するPCはMacを想定していますが、Windowsでも同じ様にビルドできるはずです。
Parrot Mambo
いわゆるホビードローンと呼ばれているもので、200g未満の、飛行許可申請のいらないドローンです。申請がいらないと言っても、重要施設の周辺や公園など、飛行が禁止されている場所も多いこと、そもそも軽いので風邪に弱いことから、屋内で飛ばすのが良いです。未来環境ラボにあるのは、Parrot Mambo Missionという、Mamboにキャノン砲やアームが付属したモデルに、さらにFPVのパーツ、前方カメラとスマホ用ゴーグルも加えたものです。
Parrot Drone SDK
このParrot Mamboや、Parrot社が発売している他のドローンを制御するためのSDKやサンプルが、GitHubで公開されています。Android用とiOS用があり、さらにはドローン内部で使用されているソフトウェアも公開されています。今回はAndroid用のサンプルを実際に動作させてみましょう。
Android Studioのインストール
Android用サンプルを利用するには、Android Studioが必要です。ダウンロードしてインストールしておきましょう。
サンプルのClone
Android Studioを起動して、GitHubからソースをcloneしましょう。まず起動画面で、[Check out project from Version Control] → [GitHub] と選びます。
Android Studioで初めてGitHubからクローンする場合、ユーザ設定などが出てくるので、アカウントを持っている人は入力します。その後リポジトリのURLなどを聞かれます。
リポジトリのURLとして,
- https://github.com/Parrot-Developers/Samples
を入力して、[Clone]をクリックします。
もう一度チェックアウトするかを聞かれるので[Yes]を選びます。
次にプロジェクトを作成するかインポートするかを聞かれるので、[Create project from existing sources]を選びます。この後プロジェクト名などを聞かれますが、[Next]を選び続けます。4〜5回[Next]を選ぶとIDEが表示されます。
サンプルのビルドと実行
この画面になったら、一旦ターミナルを開き、次のコマンドを入力します。
cd ~/AndroidStudioProjects/Samples/Android/SDKSample/buildWithPrecompiledSDK/ ANDROID_HOME=/Applications/android-sdk/ ./gradlew
これでSDKのビルドが行われます。環境変数ANDROID_HOMEには、Android SDKの位置を指定します。/Applications/android-sdk以外の場所にインストールしている場合は、適切に値を変更して下さい。また、既にANDROID_HOMEが設定されている場合は、./gradlewだけでもOKです。
しばらくすると、ビルドが完了します。
次にAndroid Studioに戻り、メニューから[File]→[Open]とクリックし、SamplesのAndroid/SDKSample/buildWithPrecompiledSDK/settings.gradleを選択し、[Open]をクリックします。
新たにウィンドウを開くかを聞いてくるので、[This Window]を選びましょう。その後IDEが再度表示されます。
この状態で、次の手順でサンプルを実行できます。
- スマホをMacに接続する。
- FPVカメラを接続したMamboの電源を入れる。
- スマホでWiFi設定を開き、Mambo_XXXXXX(Xは数字)に接続する。
- Android Studioの実行ボタン(緑の再生ボタン)をクリック。
以上の手順でサンプルアプリが起動し、うまくいけば次のような画面が表示されます。
上記の”Mambo_・・・”と表示されているところをクリックすると、次のような画面が表示されます。
公式のアプリよりはだいぶ見た目が簡素ですが、ソースコード付きなので、自由に改変できます。一通りの操作もできるので、頑張れば自動操縦できるかも?興味を持ったKCG生、KCGI生は、是非ラボに遊びに来て下さい。
MacでMovidius : 手軽に使えるディープラーニングスティック
未来環境ラボの中口です。ディープラーニングしてますか?
GoogleやFacebookなど,一部の先進的な企業で導入されだしたディープラーニングも,最近ではライブラリや学習済みモデルが無料で公開され,徐々に一般の開発者にも手が届くものになってきています。昨年度のKCG Awardsでもディープラーニングを使った学生作品が発表され,大きな話題となりました。
どんどん身近な存在になっているディープラーニングですが,実践するにはまだまだ性能の高いコンピュータが必要です。そんな中,昨年夏にIntelがUSBで接続できるディープラーニングスティック,Movidius Nural Computing Stickを発表しました。日本でもすぐに市販され,当初すぐ売り切れたようですが,今はAmazonで1万円ほどで買えます。ディープラーニングに特化したチップが載っていて,PCやRaspberry Piに指すだけで手軽に使えるとあって,今非常に注目されています。
今回はこのMovidiusを,Macから使ってみましょう。
VirtualBoxのインストール
Macから,と言いつつ,いきなりVirtualBoxをインストールします。Movidiusの公式SDKはUbuntu Linuxにしか対応していないので,まずはUbuntuをMac上にインストールします。
ダウンロードページから,最新のVirtualBox(現時点で5.2.8)をダウンロードし,インストールして下さい。Extension Packも忘れずにインストールしておきます。
VMの作成とUbuntuのインストール
まず,Ubuntu 16.04のディスクイメージを入手します。Ubuntu Japanese Teamのダウンロードページから,isoファイルをダウンロードして下さい。
次にVirtualBoxを起動しましょう。起動すると,次のような画面が表示されます。
[新規]を押して,LinuxタイプのVMを作成しましょう。
メモリは2048MBに,ハードディスクは可変サイズにして40GBにしておきましょう(余裕があればより多く確保しても問題ありません)。名前は後でわかりやすいものにしておきましょう。
作成後起動すると,利用するディスクを尋ねられるので,ダウンロードしておいたUbuntuのisoファイルを指定します。
いくつかオプションを選択するとインストールが始まるので,しばし待ちます。
インストールが終わると再起動を求められますが,再起動しても立ち上がってこないので,一旦終了(Power off)します。
Movidiusの仮想マシンへの登録
いよいよMovidiusをMacに接続します。接続は簡単で,開封してUSB端子に挿すだけ。
次にVirtualBoxの仮想マシンの設定画面を開き,ポートのUSB設定で,USB 3.0 (xHCI) コントローラを選択します(Extension Packを入れていないと選択できないので注意)。次にUSB デバイスフィルターの右側の,プラスがついたアイコンをクリックし,Movidiusを選択します。うまく認識されていないと表示されないので,その場合は差しなおしてみて下さい。
OKを押し,仮想マシンを起動して,Guest Additionsをインストールしておきます。
インストールが終わったら,同じDeviceメニューの[Shared Clipboard]から[Bidirectional]も選んで起きましょう。VMをまたいでコピー&ペーストできるようになるので非常に便利です。一旦再起動してターミナルを開き,いよいよMovidius SDKのインストールです。
Movidius SDKのインストール
ターミナルを開いて,次のコマンドを実行します。
sudo apt install git git clone https://github.com/movidius/ncsdk.git cd ncsdk make install
インストールが開始されるので,しばし待ちます。
おわりました。
次にサンプルを実行してみましょう(この時点ではまだ成功しません)。
make examples
ソースやらモデルやらがダウンロードされ,サンプルの実行が行われます。
が,赤字の2行目のところ,エラーが出て正常に実行できていません。どうもMovidiusが見つからないようです。再びVM設定に行き,USB デバイスフィルターの右側,緑のプラスのついたアイコンをクリックしてみると,何やら謎のデバイスが。
- Movidius VSC Loopback Device
詳細は不明ですが,Movidiusは状態によって2つの名前を持っているようです。これも追加しておきます。
設定後,sudo rebootと打ち込んでVMを再起動して,起動後に右下のUSBデバイスからMovidiusを選択して下さい(名前が戻ってる・・)。
そしてこの状態からターミナルでmake examplesすると,全てのサンプルが実行できます。
個別にサンプルを実行することも可能です。例えば,次のコマンドを実行してみると,
cd examples/caffe/GoogLeNet/ ./run.py
次のような画像が,
無事ギターと判別されるのがわかります。
(当初アコースティックギターの画像を載せていましたが,ソースはエレキギターを参照していましたので修正しました。)
おわりに
だいぶ長くなってしまいましたが,Movidius Neural Stickの使い方を一からざっくり解説しました。1万円程度と決して安くはないデバイスですが,手軽に使えるので,アイデア次第でいろんな応用が可能です。今は学習済みモデルもたくさん公開されているので,いろいろ組み合わせて遊んでみてはいかがでしょうか。
Java10がリリースされました
未来環境ラボの中口です。
遂にJava10がリリースされました。前バージョンのJava9から半年でリリースされことになり,Java8からJava9までに3年半かかったことを考えると大幅なスピードアップです。これはJavaを提供しているOracleが,新機能をどんどん取り入れてJavaを進化させるよう方向転換したためで,今後半年毎に新しいバージョンがリリースされる予定です(関連記事)。
さて,Java10ではいくつか新機能が導入されていますが,目玉はやはり,ローカル変数の型推論,”var”でしょう。JavaはJavaScriptやPythonと違って,変数の型を強く意識する必要がある,静的型付け言語です。静的型付け言語では,ソースを記述する際に,変数の型を決めておく必要があり,一旦型を決めると,後で変更できません(例えばint型の変数にString型のオブジェクトを入れることはできません)。そのため変数を使うたびに型を明示的に記述する必要があり,どうしても記述が冗長になってしまいます。コード例を見てみましょう。
List<String> strings = new ArrayList<String>();
Javaを書いたことがある人なら一度はこんなコードを書いたことがあると思いますが,変数の宣言時(“=”の左側)で変数の型(List<String>)を指定し,変数に代入するオブジェクトの生成時(“=”の右側)でも型(ArrayList<String>)を記述しています。varでは,この左側の型を省略できます。
var strings = new ArrayList<String>();
もちろんメソッドの戻り値を代入する際にも利用できます。
var r = Math.random() * 10;
ただしJavaは静的型付け言語であるという特徴は変わっておらず,スクリプト言語のように後から型を決めたり変えたりということができるようになったわけではありません。例えば次のコードはコンパイルエラーになります。
var i; i = 10;
varを使うと変数の型を省略できますが,同時に変数の初期化を行う必要があり,その初期化で実際の型がわかる必要があります。例えば,次のコードはコンパイルできますが,
Runnable r = () -> {};
varを使うとコンパイルエラーになります。
var r = () -> {}; // コンパイルエラー!!
右側はラムダ式ですが,ラムダ式は実際のクラスを代入先の変数の型などで決めるので,varを使うと変数もラムダ式も型を決めようとしてお互いの情報に頼ってしまうので決まりません。逆に実際の型さえわかればその型として使えるので,今まで明示的に指定できなかった匿名クラスを扱うことができ,そのメソッドを呼び出せます(関連記事)。
var o = new Object(){ public void func(){ } } o.func();
個人的にはこれが一番嬉しいんですが,結構特殊なケースなのでピンとこない人も多いかもしれません。
Javaは今後半年ごとに新機能が追加され,どんどん進化していきます。他の言語も良いものがたくさんありますが,今一度Javaを見直してみてはいかがでしょう?