こんにちは!はるなしです。
プログラミングをしたりロボットを作ったりしている田舎の医学部6年生です。
最近は国試の勉強に苦しんでいます(泣)
この記事ではプログラミングに初めて触れてからの僕の制作物を時系列順にまとめていきます。
「プログラミングの勉強法」ではなく、ただの僕の記録です。
僕がプログラミングに挑戦していた時、周りに仲間や成功例がありませんでした。
「プログラミングを『勉強』しているけど何かを作るイメージが沸かない」
「うまくいかない、これを続けて何かが作れるのだろうか」
「Twitterの凄い人達は凄すぎて参考にならない」
と、孤独に苦しんでいました。
その当時の僕を振り返ると、「自分はこういうふうにやったよ」という体験談を聞くだけでも、かなりの励みになったのかなと思います。
なので、
- プログラミングを初めたいけど何ができるようになるのかイメージできない人
- 入門の教材をやってみたけど何ができるのかよくわからない人
- 他人の成長を眺めて目を細めてみたい人
などがこの記事の想定読者です!
2年生 冬 じゃんけんゲーム
プログラミングに興味を持ち、入門の教材である「Progate」を修了しました。
これは非常に良い教材だったと思いますし、「勉強」した気にもなれました。
いきなり高額な何かを受講するより、とりあえずこれ1周したほうがなんぼかマシ
ただ、この後「勉強したことを生かしてなにか役に立ちそうなものを作る」イメージが全く湧きませんでした。
で、とりあえず教材内で作った「じゃんけんゲーム」を自分でもう一度作ってみよう、と思い立ちました。
(教材内ではテキストを埋める形で進めるだけで、実際パソコン上で動くものではなかった)
自分のパソコンでこのゲームを再現するために、「Atom」というコードエディタを入れて環境構築をしました。
結果↓↓↓
内容は、なんてことないです。
当時「環境構築」なんて大層な事はできなくて、Atomは「普通のアプリみたいに入れただけでなんか動いた」というのが使った理由だったと思います。
結局この次になにかを作ることはできず、プログラミングはやめてしまっていました。
3年生 秋 Google ColabでtSNE
僕の大学では3年生の秋に「研究室研修」というのがあり、自分は免疫学教室で実験していました。大雑把には、「T細胞にある刺激をしたときの分化を調べる」ということをしていました。
当時免疫学、ひいては「複雑系」「創発」としての生命現象に興味があり、
「いま1つの条件を変えただけの実験をしているけど、それでは現象の説明に限界があるのではないか。たくさんの変数を同時に扱って、それでいて現象の全体的な方向を同時に理解することはできないだろうか」
ということを考えていました。生意気!!!!!!
また、同時に「Google Colab」というものでpythonを動かせると知り、「tSNE」という次元削減手法を知ったので、とりあえず手元にあるデータでtSNEをやってみたい、と考えました。
試行錯誤した結果↓↓↓
いろいろツッコミどころはあるのですが、ともかく出力ができたのです。
ここで「じゃんけんゲーム」からけっこう難易度が飛躍していますが、この解析を実装できたのは以下のような理由があると思います。
- プログラミングが「勉強するもの」から「何かを作るための手段」に変化したこと
- Google Colabのおかげで、「環境構築」を飛ばしてプログラミングできるようになったこと。
とくに「1」が大事です。このおかげで「真似したいコードを探す」とか「エラー解決のためにググる」というような具体的な作業ができるようになりました。
「入門の教材をやってみたけど何ができるのかよくわからない人」は「もっと勉強する」よりも「自分が作りたいものを見つける」ほうが重要だと思います。
ここから先は作りたいものがある→とりあえずコピペなどで動かす→エラーを解決する→教材やオンライン講義を受けまくる
といったかんじで背景は単純なので、作ったものをどんどん紹介していきます。
4年生 5月 はじめてのCNN
いわゆるAIというやつですね。
COVIDの影響もあって公開されている胸部X線の画像がたくさんあり、それを利用しました。
これもツッコミどころいろいろありますが、初めてエラーなく動いた記念写真です。
この後いろいろ教科書、論文、オンライン講座で勉強し、麻酔科の先生と一緒に救急の領域で論文を書きました。実装と解析を全担当しました。めちゃ勉強になりました。
4年生 6月 FXの予測
僕は貧乏学生なので、「FXは勝率51%になったら勝ちなんだから、AI最強じゃん!」みたいなことを考えました。
わりと誰でも通る道なんじゃないか、と思ってます。
↓なんかちゃんと予測できてそうな感じがしますね!!!大金持ちか??
取り組んでいる対象の良し悪しは置いておいて、これはめちゃくちゃ勉強になりました。
挙げるとキリが無いですが、
- 評価値ではうまく行っているように見える予測モデルでも、実際にはうまく行かない場合があること
- 複雑なモデルよりも、簡単な(古典的な)予測モデルのほうがうまくいく場合があること
- 時系列予測ならではの難しさ
- もろもろの基本的表データの操作、APIを通じたデータ取得
などなど学びました。
後輩にプログラミング教えると「AIでなんかの取引すれば最強じゃないですか?」という話をたまにするのですが、僕は必ず「やってみたらいいんじゃない?大金持ちなれるかもよ?」と焚き付けています。
4年生1月 体温報告LineBot
僕の大学では毎朝「体温報告」というものをGoogleFormから行う必要がありました。
毎回学籍番号や名前などを記入する必要があり、かなり手間で、報告忘れをしてしまうことが結構有りました。
で、自分の名前や学籍番号を登録しておいて、毎朝Lineに記入催促の通知が来、体温を返信するとサーバー経由でGoogleFormに自動で記入をする、というBotを作りました。
↓↓↓
体温報告botアップデートしました!目玉はデータベース作って利用者情報保持できるようになったことです。(複数人で使えるようになりました)毎朝報告催促する通知も来ます。
— はるなし (@kk_mdimm) 2021年1月4日
まだまだやりたいことあるけど割と実用では。 pic.twitter.com/ayXrfEAd5m
これはかなり好評で、最終的に利用者は300人を超えました。
5年生 5月 iPhoneアプリでAIをやる
データを集めてAIに学習させても、パソコンの上でしか動かないのはつまらない、スマホで動かせるようにしよう、ということでiPhoneのアプリ開発を勉強しました。
これはスクレイピングで犬猫画像を集めて、ColabでCNNに学習させて、重みをiPhoneが読み込める形に変換して、アプリにしたものです。
結構苦労しました。
Kerasで作った犬猫分類モデルをSwiftでiPhoneアプリにしました!!デザインは無視で…。
— はるなし (@kk_mdimm) 2021年5月20日
大変だった!swiftむずすぎ! pic.twitter.com/w3ka74rhHY
5年生6月 電子カルテ検査値整形アプリ
電子カルテから血液検査の値を得てレポートなどに書く時、電子カルテからの出力の形が独特で、手打ちで転記する必要がありました。
それがめんどくさく、検査項目と単位と結果を自動で検出して、レポートの形式に書き換えて出力する、というデスクトップアプリを作りました。
例外がけっこう多様で、正規表現だけではうまく対応できず、「うまく検出できなかった部分」はそのまま出力する、という工夫をしました。
とりあえず完成!余計な機能もついた。
— はるなし (@kk_mdimm) 2021年6月15日
例外がけっこ多様なので、正規表現でうまく取り出せなかったもの、をそのまま吐き出す仕組みにしました。 pic.twitter.com/2I0tRUR4yf
半角スペースなどちゃんとレポートの様式に合うようにしているのが良いポイント。
5年生9月 ノートアプリの開発(無期限凍結)
国家試験の勉強などするなかで、「GoodNoteより良いノートアプリ」を作りたいと思いました。
紙のノートのように、ノートの「厚み」をアプリ上で表現できたら、もっと直感的に使えるのではないか、という発想でした。
これはけっこう頑張ってそれらしいものができたのですが、データの管理で苦戦してしまい、途中で断念しました。
でも失敗はしていないです。無期限に凍結しているだけです。時間が割ければ完成させれると思う。一緒にやりたい人いたら声かけてください。
いまこんなかんじ!!!🔥🔥🔥
— はるなし (@kk_mdimm) 2021年9月4日
ノートの最低限の機能は実装できた。
この次は「アプリ内のデータ管理」が大きな壁。それを越えたらリリースしちゃう。 pic.twitter.com/vhl1MjGjGs
5年生9月 ARアプリの開発
ノートアプリを作る際に、いろいろな他のアプリのソースコードを参照するのですが、iPhoneでARアプリをかなり高精度に、簡単に作れることに気が付きました。
これくらいのものは数時間で作れるようになる↓
swiftのARKitで3Dのガイコツを表示するARアプリを作りました。画像をマーカーにしてその上に乗っけた。
— はるなし (@kk_mdimm) 2021年9月17日
これはちょっとすごい。(自分がすごいんじゃなくてappleがすごい pic.twitter.com/rhExx6OCfb
CTのデータから立体再構成をして、空中に表示する、といったアプリも作りました
こうしてこうしてこうじゃ! pic.twitter.com/PFTXVzZxDz
— はるなし (@kk_mdimm) 2021年10月21日
5年生12月 はじめてのUnity
さらに本格的なARアプリの開発をしたくなり、Unityに手を出しました。
(このあと脱線してUnityで強化学習の勉強をしました)
はじめてのunity!ブロック崩し!
— はるなし (@kk_mdimm) 2021年12月23日
これは面白い予感がする。(また脱線して強化学習とかしてみたくなる pic.twitter.com/1L4V0VG6xj
5年生3月 Hololensのアプリ開発
研究室でHoloLensを使った研究をしよう、ということになりその実装を担当しました。
HoloLensで手技を支援する、というおもしろ研究です。
↓これは基本的な実装をなんやかんや試しているところ
これはHololensで基本の実装。地味だけど画像トラッキング、座標の管理、保持、トラッキングの有効化、無効化などいろいろ含まれてる。録画してるから重いけどほんとはもっとぬるぬる動くよ。 pic.twitter.com/EuyohTYVu8
— はるなし (@kk_mdimm) 2022年3月5日
5年生3月 はじめてのロボット開発
さまざまな背景、アイデアがあって、医療用ロボットを作りたくなりました。(雑)
なぜかそれまで「ロボットだけは難しそうで無理」と思っていたのですが、手を出してみると難しいなりに案外なんとかなりました。
ロボットの関節の角度をリアルタイムで取得できた!サンプルをとりあえず動かすんじゃなくて自分で通信やらデータ取得やらをちゃんと書いたのがえらい。#mycobot pic.twitter.com/koQcF73VbC
— はるなし (@kk_mdimm) 2022年3月13日
5年生3月 ロボットで遠隔エコーをする
さまざまな実装、調整があって、遠隔エコーロボットを作りました(雑)
「マスタースレーブ」といって、操作側のロボットを手動で動かすと、遠隔側のロボットが同じ動きをする、というロボットです。
大枠では手術ロボットダヴィンチと似ています。
先生方の協力ありここまでできた。この後、心エコーの長軸像など出すことができました。
— はるなし (@kk_mdimm) 2022年3月21日
腕が短いのでこれだけでFASTとかは無理かも。学生1人がここまで作れる。時代は変わりつつある。
今後どうやると実際に使ってもらえるようになるだろうか、ということをずっと考えてる。#mycobot pic.twitter.com/gEQ0bS06gA
ここから「エコー検査をロボットで行う」ということを一生懸命がんばり始めます。
6年生7月 コーヒー生豆自動選別マシンの開発
いきなりぜんぜん違うことに手を出している。
モーターやセンサー、マイコンの取り扱いに詳しくなりたかったのと、機械の「ハード部分」を作る、という経験をしたかったので作りました。
コーヒー豆の良し悪しをCNNで判別するモデルを作って、ラズパイに載せ、モーターで豆を次々選別する、という仕組みですね。
というわけで完成しました!コーヒーの生豆自動選別機です!!夏休みの自由工作です(何やってんだ pic.twitter.com/Z7UYmT2ATA
— はるなし (@kk_mdimm) 2022年7月20日
6年生 8月 エコー検査を自動で行う
さまざまな実装、調整があって、自動エコーロボットを作っています(雑)
これが現在僕が一生懸命開発しているロボットです。
エコー検査を自動で行います。↓↓↓
エコー検査の自動化を行なっています。体表面の任意の位置で撮像を行い、AIがより良い画像を撮るための移動を自動で行います。特許出願済みです。
— はるなし (@kk_mdimm) 2022年8月16日
まだまだ個人開発の範囲で道のりは長いですが頑張ります!! pic.twitter.com/Rprs9pCTMg
以上 おわりに
これで制作物は以上です!ほかにもいろいろありますが、公開して良いものはすべて載せたと思います。
まず、プログラミングをはじめてみたい人、やってみたけどうまく行かない人がこれを読んで、「なんか面白そうだな」と思ってもらえたらこれを書いたかいがあります。
自分がまともにプログラミング初めたのが3年生の終わり頃なので、3年弱でもろもろ作れるようになります。ぜひ、自分が作りたいものを見つけて取り組んでもらえたらと思います。
自分はいまエコー検査自動化ロボットを開発しています。優秀な仲間が集ったチームを作っていて、製品として、事業として開発を行っています。興味ある方はぜひ声をかけてください!