こんにちは、インダストリー事業部でデータサイエンティストをやっている宇佐見です。この記事では、インダストリー事業部の技術スタックについて紹介したいと思います。
過去にHACARUS全体の技術スタックについて紹介する記事も書かれているのですが、今回は私が所属しているインダストリー事業部における技術スタックについて紹介します。
インダストリー事業部の事業内容
まず技術スタックの前に、イメージが湧きやすいようにどんな事業をやっているかを簡単に紹介します。詳細はこちらの事業部の業務内容紹介に詳しいですが、簡単に言えばカメラと照明が先端につけられたロボットアームで最終製品を外観検査するプロダクトを作っています。あと、画像・カメラを用意すればロボット無しで検査ができるようなソフトウェアも作っています。
従って、ざっくりいうと
- 機械学習モデルを作成する部分(独自アルゴリズムの開発など)
- お客様が「モデルの学習」「検査の設定」「実行」を行うためのUI
- ロボット、カメラ、照明などのハードウェアの設定、制御部分
などを開発しています。
HACARUS内における、インダストリー事業部が特異な点としてはハードウェアが絡んでくるところでしょう。それ故に、選ばれている技術も他の事業部とは異なっています。
採用している技術スタック
プログラミング言語はC++、C#、 Pythonが使用されています。
C++は機械学習アルゴリズムの実装に使われています。以前は実装の簡易さからPythonで書かれていたのですが、生産ライン上での許される計算時間がmsオーダーであるため、その処理時間を出すために計算方法の見直しを行ったり、高速化のためのライブラリ(EigenおよびIntel Math Kernel Library)を使いたかったりという理由があってC++を使うようになったという背景があります。この辺の詳細は長くなりそうなのでまた別の機会に。ただC#、Pythonから呼べるようにプラットフォーム呼び出し(Platform Invoke), pybind11でラッパーを用意していて、C#、 Pythonからも等価な結果を再現できるようになっています。
C#はUI作成及び機械学習アルゴリズム以外のバックエンド処理に使われています。UIはWPFを使っていて、画像処理やハードウェアの制御周りもC#で書かれています。フレームワークは.NET 6.0を使っています。当初はカメラのSDK対応の関係から.NET Framework 4.8を使わざるを得なかったのですが、最近SDKが対応したためにフレームワークを.NET 6.0にアップデートすることができました。アップデート自体にもちょっと苦労したので、別の機会に記事にしたいものです。
また、主な外部ライブラリとして使っているのはOpenCvSharp4、 Caliburn.Micro、Serilogなどで、画像処理や、XAMLとのデータバインディング、ロギングにはこの辺りに助けられています。(OpenCvSharp4なんかはきっちりリソースを開放しないとメモリリークするみたいな憂き目に会うこともありますが。。。)
Pythonは正確にはプロダクト自体には使われていません。ただ、ちょっとした機械学習モデルの性能検証や、お客様からの頂いたデータでHACARUS Checkが機能しそうか?などの検証に使っています。
コード自体はGitLabにホスティングしていて、CI/CDはGitLabCIを使って実現しています。リモートリポジトリにコードがPushされる度にCIが走り、MSTestが実行されるようになっています。併せて、リリース用のタグ付けをした時のみ、GitLabCI上でボタンを押せばタグ付けされたコミットでReleaseビルドを行い、GitLab上でリリースが作成され、GoogleDrive上の特定のフォルダにインストーラーがアップロードされるようになっています。これをセールスチームからお客様に配布してもらうようにしています。CI/CDの実現についても別途記事にしたいと思います。
DockerもC++のコードやPythonラッパーのビルドに使われたりしていますが、プロダクトそのものはWPFを使っているのでコンテナ化されてはいません。
また、技術スタックではないのですが開発のスタイルはスクラム開発で、2週間のスプリントで開発するものを決めて開発しています。詳細はこちらの記事をご覧ください。
最後に
もし、既にHACARUSの募集要項や過去の技術紹介の記事を見てくださった方がいれば、今回紹介した内容はかなり意外だと思われる内容だったのではないでしょうか。それくらい、HACARUSの中では様々な事業が展開されています。
C#(.NET)を使って自社プロダクトを開発したい、ロボットを使った新しい外観検査装置を作ってみたい、C++で高速で生産ライン上での検査に耐えうるアルゴリズムを作ってみたい。。。などといった野望のある方は是非とも募集を覗いて、お話を聞きに来てください。
もちろん、医療、労働安全支援といった領域でもプロダクトを作ってますので、そちらに興味がある方もウェルカムです。
株式会社HACARUS's job postings