プログラミング未経験の新人がラズパイを使って非接触体温計を作ってみた!

はじめまして。

2020年入社、プログラミング歴10ヶ月のmenoです。
今回は「ラズパイを使った自動体温測定装置」の作成過程をお届けします。

新型コロナウイルスの影響で体温を計測する機会が増えました。
そこで出社時に体温を完全非接触で計測し、データを管理する(お金のあまりかからない)システムが欲しいという要望があり開発を行いました。

RaspberryPi(ラズベリーパイ)とは

ずばり超小型のシングルボードコンピュータです!

手のひらサイズで低価格(なんと5000円程度)ながらHDMIやUSB、LANポートが搭載されているため拡張性に優れています。
本来は教育向けとして作られたのですが、近年IoTデバイスとして注目されています。

*ちなみにラズパイという名前ですが、Appleなど果物の名前が付いたコンピュータ会社が多かったため果物の「ラズベリー」とPythonの「パイ」から命名されたそうです。

では、始めていきましょう!
使用言語:Python
日本語音声合成システム:OpenJTalk
画像処理ライブラリ:OpenCV
Webフレームワーク:web2py
データベース:MongoDB

非接触体温測定の仕組み

まずは非接触での体温測定を可能にした仕組みから!

距離計を用いて、人物との距離を計測します。
人物がある一定の距離に近づいたことを感知すると、モータが回り体温計を作動させます。
そして、体温が表示されている画面をカメラで撮影し文字認識することで体温の非接触計測を行っています。

※ちなみにこのハードは大先輩であるMさん作っていただきました。
OJTではたくさんのことを勉強させていただきました。
次からは一人で作れるように頑張ります!

音声出力

とりあえず何か喋らせたい!喋ったらかっこいい✨

…という思いで音声出力機能を搭載しました!
喋らせる内容は、体温計との距離が遠い時の「近づいてください」というメッセージと体温が正常か否かの判定です。

ラズパイにスピーカを接続し、音声ファイルを再生することで喋らせることができます。

音声ファイルを作成する方法は2つあります。
①自分で録音する。
②日本語音声合成システムの使用。

①の方法が簡単なのですが、セリフ数分の音声を録音する必要があり柔軟性が低いため、②の方法で行います。(自分の声を喋らせるのが嫌だという理由も…。)

今回、使用したのはOpenJTalkです。

Open JTalk - HMM-based Text-to-Speech System

OpenJTalkは、テキストを日本語音声に変換することができるソフトウェアです。
では早速やってみましょう!!!

– 男の人の声 –

喋りましたーー!
でも女の人の声が良いなぁという思いでいろいろと設定を変更!

– 女の人の声 –

できましたぁっ!
少し抑揚が変なところはありますが良しとしましょう(笑)
ちなみにこの女の人は喜怒哀楽別に音声データが用意されています。

– 女の人の声(Happy♪) –

文字認識

体温を画像として取得しテキストに変換したい!

測定した体温のデータが、画像だと何かと不便じゃないですか?
そうですよね。不便なこと極まりないです。
やはりテキストデータでDB(データベース)に貯めて、最終的にはそのデータを活用したいですよね。
…ということで文字認識をやっていきます!

【前処理】

取得した画像をそのまま使用すると余分な情報が含まれており、文字認識精度が低下します。
適切な前処理を実施する必要があります。

①トリミング

②グレー・スケール化→2値化→ノイズ処理

【文字認識】

画像をテキストに変換する技術OCR(Optical Character Recognition)を使用します。
今回はTesseractOCRというOCRエンジンを使用し文字認識を行いました。

tesseract-ocr/tesseract
Tesseract Open Source OCR Engine (main repository) - tesseract-ocr/tesseract

認識した結果がこちら

36.2

きちんと認識ができています。やったぁ!

しかし、ノイズがあると認識精度が低下してしまうという問題があります。。。
追加学習や、前処理方法を検討する必要がありそうです。

web画面

これまでの工程で基本的な体温測定機能は完成しました。
しかし!画像前処理の各種パラメータやハンドルの角度などファイルを開いて設定しなおすのは大変です。。
…ということでwebで各種設定機能を変更できる画面を作ります!

今回はweb2pyというpythonのフレームワークを使用して簡単な設定画面を作成しました。

http://www.web2py.com/

実を言うとwebの実装は初めて!!!
HTML, CSS, JavaScript という新しい言語に触れることができました✨

web2pyに関する日本語の情報は少ないですが公式ドキュメントが充実しており、何とか画面を作成することができました。
最低限の機能の実装はできましたが、UIやデザイン面などまだまだ改良の余地ありですね。。。
これからwebに関する知識もどんどん身に付けていきます💪

非接触体温計費用

気になる非接触体温計作成にかかったお値段は計2354円でした!!!

というのも会社にあった機材を使わせていただきました。
全て合わせると計16,314円でした。

・非接触型体温計 4980円(会社にあったもの)
・Raspberry Pi 3 5000円(会社にあったもの)
・Raspberry Pi カメラモジュール 3980円(会社にあったもの)
・距離センサ 948円
・Seeeduino XIAO 810円
・マイクロサーボ 596円

高いと思うか安いと思うかはあなた次第です。
ちなみに私はお安いと感じました(笑)

これからの挑戦!

 

実は現在、「Deep Learning顔認証システム」を作成しています!

マスク無しの顔認証は精度の高いものが完成しています。しかし、コロナでマスク着用が当たり前となってしまった世界。。。

マスク着用の有無に関わらず、高い精度で顔認証することが求められています。

今後はマスク有りでの顔認証精度を上げ、今回作成した非接触体温計システムに合体させる!ことに挑戦していきます。顔認証を用いることにより、人物と体温データの紐づけを可能にします。

また体温データの見える化・データ活用にも挑戦します。
この挑戦もブログにUPします。乞うご期待ください!✨

以上、プログラミング未経験の新人がラズパイを使って非接触体温計を作ってみた!でした。

最後までお読みいただき本当にありがとうございます。

 

下記のコメント欄に感想・応援メッセージなど頂けるととても嬉しいです。
どしどしお待ちしております!

他のブログもご覧ください⇒プログラミング初心者が知っておくべきポイント

 

コメント

タイトルとURLをコピーしました