【インターンシップ体験談】岐阜県情報技術研究所に行ってきました
この文章および図表、写真等については、実習先より掲載許可を受けております
はじめに
2017年8月、僕は「岐阜県情報技術研究所」というところに1か月間インターンシップに行ってきました。
岐阜県情報技術研究所は、岐阜県商工労働部に属する公設試験研究機関で、研究開発と技術支援を主要業務としています。また、情報システム研究部とメカトロ研究部の2つの部署があり、合計で14人が所属していました。
インターンシップの内容
今回のインターンシップでは、情報システム研究部で「運動器機能のリハビリ支援を目的とした安価な身体動揺解析技術」というテーマの研究開発に参加させていただきました。
具体的にこの研究は、リハビリテーションの経過観察等に資する情報をPT(理学療法士)等に提供する目的で、身体の動揺をWii Board(WB)を利用して定量化するための、床反力計測・解析システムを開発するものでした。このうち、僕が参加した業務は以下の3つでした。
・データ収集の補助
・データ分類アプリケーションの開発
・アプリケーションを用いたデータの分類
データ収集の補助
この研究では県内の健康増進施設やイベントに出向いてデータの収集を行っていて、インターン中に行われた4回の出張すべてに同伴させていただきました。
データは、WBに配置された4箇所のフォースセンサ情報をBluetooth経由で取得しており、そのデータから足圧中心の位置や床反力の時間変化を求め医学的な知見を得ているようです。
お年寄りやインストラクターの方々と話すのは楽しかったです。いろんな人がいました。
おばあさん「私は朝4時に起きて毎回こうやって1時間くらい体操やるのよ ほらお腹触ってみてよ カッチカチやろ?」
おじさん「ちょっと 片足で立てんから つかまらしてや」
おばさん「お兄さんかっこいいねぇ 22歳か??」
この研究を主でやっている研究者の方に聞くと、地道にデータを集めるこの作業を数年間続けているらしく、こういう作業が結果につながるんだろうなと感心しました。
生きたデータって貴重なんだなあ…
データ分類アプリケーションの開発
先述のデータ収集作業で繰り返し蓄積されたデータ群を機械学習に利用するためにはラベル付けが重要になります。
ラベル付けをやってくれないか?と言われたのですが、このラベル付け作業というのは至極めんどくさいものです。
それならばラベル付けを効率化するGUIアプリを作っても良いですか?と相談したところ、快くOKしてもらえたので、これに取り組むことになりました。
とはいうものの、僕はGUIアプリを作った経験はありませんでした。そこで、最も慣れ親しんでいるPythonでGUI開発できないかな、と調べるとどうやらPyQtなるものがあるようで、今回はそれを使うことにしました。
PyQtは、クロスプラットフォームなGUIツールキットであるQtのPythonバインディングにして、PythonでGUIプログラミングをするときの選択肢の一つである。
実装のためにいろいろ調べて分かったのですが、
①QtDesignerというソフトウェアでGUIのガワ(.uiファイル)を作る
②変換スクリプトで.uiファイルをPythohモジュールに変換
③実行スクリプトからモジュールを呼び出してGUIインスタンスを生成
という流れでGUIアプリは実現できるようです。
簡単なサンプルから少しずつグレードアップしていき、最終的に完成したのが冒頭にも表示したこちらです。
具体的にこのアプリでは、左の被験者のデータと右のサンプルを見比べながらラジオボタンでラベル付けをし、保存ボタンでCSVファイルに書き出すという処理を行うことができます。また、被験者移動ボタンで次/前の被験者データに表示を切り替えることができます。
その他、左上のメニューボタンでダイアログも起動します。
内部的な処理は以下の通りです。
①被験者データ(複数のCSVファイル)をpandasで読み込む
②matplotlib+seabornでデータをグラフ化しpng形式で保存
③被験者データ画像とサンプル画像をPyQt5で読み込んで表示
④保存ボタンが押された時のラジオボタンの位置に応じてラベルリストを作成
⑤ラベルリストをpandasでCSVファイルに書き出し
画像を読み込んでGUI上に表示するのが地味に難しく、実装までに数日かかってしまいました…笑
結構面倒なことやってます。ざっくりとまとめると
①pixmap=PyQt5.QtGui.QPixmap(filepath)
②item = PyQt5.QtWidgets.QGraphicsPixmapItem(pixmap)
③scene=PyQt5.QtWidgets.QGraphicsScene()
scene.addItem(Item)
④imageviewer=PyQt5.QtWidgets.QGraphicsView()
imageviewer.setScene(scene)
という感じ。以下のサイトが参考になりました。
まぁやりたいことはできるアプリが完成したし、何度かアプリを使ってもらって不満な点も洗い出してもらった上で、それを改善することができたので満足はしています。
初めてにしては上出来でしょう…笑
アプリケーションを用いたデータの分類
実際のデータを自分で作ったGUIアプリでラベル付けしました。基準に基づいてラベル付けを行ったのですが、微妙なラインのデータもあり、ラベル付けの難しさを感じました。
ラベル付けの作業自体はアプリのおかげで大分ラクに行うことができました。
感想
企業でのインターンではなく、官公庁でのインターンだったのでかなり独特な経験ができたと思います。
よく言えばゆったりとした。悪く言えば刺激が少ない環境のように見え、合う合わないは人を選ぶと思いますが、働いていらっしゃる方々は皆話しやすい方たちで、自分の研究の相談にも乗っていただいたりとたくさんお世話になりました。
あと、みんな6時には帰宅していてホワイトに感じたのも印象的だったなぁ。笑
技術面では、GUIアプリに初挑戦してスキルアップできたことと、実地でのデータ収集を体験できたことが今回の収穫です。
このころは自分が何を成したいか定まっておらず、ふわふわしていたのですが、このインターンを経ていくつかの職業観?的なものが定まりました。
・一般の人に役立つ製品やサービスに関わりたい
機械学習やIoTなど新しい分野のスキルを学び、駆使して生活を豊かにできるような製品・サービスを創るエンジニアになりたい。
・新しいことに果敢に挑戦するような企業で働きたい
既存の事業だけではなく、先端技術を恐れずに、効果的な形で取り込んで変容していくような、リスクを恐れない企業で働きたい。
・個人だけでなくチームでプロジェクトに挑みたい
個人だと出せるアイデアや技術に限りがあることが分かった。人とかかわりながら仕事をすることで分かることも多いと感じた。
・個人としても成長できる企業で働きたい
常に新しい風が入ってくるような、そんな場所に身を置きたい。また、それらに敏感に反応できるエンジニアでありたい。