[Hackathon] Easy Medicine アプリの紹介 – Team Healthy Healthier

[Hackathon] Easy Medicine アプリの紹介 – Team Healthy Healthier

現在、日常生活の動作をよりシンプルかつ効率的にするために多くのアプリが作成されています。その色々なアプリの中で最も競争力のある機能の 1 つは自動化です。ということは、人間は最小限の動作のみを行い、残りはアプリケーションに任せます。人工知能 – AI が普及してから、これらの動作の自動化がより可能になり、同時に、アプリケーションに多くの新機能を取り入れることができています。EasyMedicine も AI テクノロジに基づいて作成されたアプリケーションであり、服用管理の自動化に役立ちます。

目次

  1. EasyMedicine はどのような問題を解決しますか?
  2. AI はどのような問題を解決しますか?
  3. Google Cloud Vision APIの紹介
  4. AWS Comprehend Medicalの紹介
  5. システムの構成
  6. アプリのデモ
  7. 将来に開発したい機能
  8. 今度の欠点
  9. 最後の言葉
  10. 参考元

#1. EasyMedicine はどのような問題を解決しますか?

あなたが健康な人なら、なぜ服用管理アプリが必要なのか納得できていないかもしれません。しかし、あなたがさまざまな病気に苦しんでいる状況になることを考えたら、服用をうまく管理し、よく時間通りに薬を飲むことができたとしても、それはかなり難しいことと言えるのではないでしょうか。一方で、それはアプリで完全にコントロールできるため、服用の時間を気にせず、仕事などの他のことに集中できます。問題を明確に強調する特定の状況の例をあげましょう。例えば、病気になっている家族のメンバーの世話をしている私たちのお母さんです。もし、お母さんがアプリを使えば簡単に服用時間を管理して家族の世話をすることがうまくできるのではないでしょうか。また、私たちは薬を飲むのを忘れることもあります。特に病気が回復しているときは、薬を飲まなくてもいいという気持ちもよくあります。その結果、私たちの健康に悪影響を及ぼす恐れにつながりはずです。

具体的には、次の問題を解決するためのツールが必要です:

  • • 今日は何時に薬を、どの薬を、どれくらい薬を飲むべきですか?
  • • 薬の飲み忘れを防ぐには何かの方法がありますか?薬の服用をリマインドするツールはありますか?
  • • 今日服用した、服用していない、または服用するのを忘れた薬がありますか?
  • • どのくらいの期間薬を服用する必要があり、あと何錠を飲む必要がありますか?
  • • 薬の情報を後で調べて再利用したい場合、薬の情報を保存するツールはありますか?

以上の問題を解決したいから、EasyMedicine アプリを作成しました。

#2. AI はどのような問題を解決しますか?

以上の分析された問題に基づいて、時間通りに薬を飲むように監視およびリマインドするなど、服用を管理するのに役立つアプリケーションを完全に想像できましたでしょうか?

そして、すべての動作をできるだけ簡単かつ迅速に実行できるようにいくつかのステップを自動化する必要があります。それは、服用する薬のリストを作成し、それらを服用するリマインド時間を設定することです。

具体的には、ユーザーが処方箋の写真を撮ると、処方箋がスキャンされ、服用する薬のリスト (特定の投与量情報も含まれる) が生成されます。同時に、薬を服用するためのスケジュールも自動的に立てられます。

このように、1回の写真を撮る操作ですべてのことが完了しました。そのため、AI テクノロジーはそれを可能にするツールとなります。具体的には:

  • • Computer Vision: (コンピューター ビジョン)フレーム内のオブジェクトを抽出できるようにする AI テクノロジです。この場合は、ユーザーが撮影した画像から処方箋の生のテキストを抽出する必要があります。 Google Cloud Vision API は、これに使用されるツールです。
  • • Natural Language Processing: 人工知能の分野として、この技術は、コンピューターがテキスト コンテンツを考えて理解できるようにすることに重点を置いています。これは、多くの抽象的な (構造化されていない) データに関連するため、難しい作業です。 AI処理が必要な主な対象は処方箋だからです。そのため、選択した AI は医療データを使用して作成される必要があります。したがって、AWS Comprehend Medical はこの場合に適したサービスです。

#3. Google Cloud Vision APIの紹介

これはGoogle が提供する API です。その利点は、高い処理速度と精度、使いやすさがあり、膨大な量の画像データで作成されました。画像からテキストを抽出する機能については、タイプされたテキストと手書きのテキストの両方を処理でき、さまざまな言語でうまく使えます。

Google がこのサービスをホストする地域:

  • us: アメリカのみ
  • eu: 欧州連合

サービス メンテナンス コスト (Pricing – Cloud Vision API):

  • • Google は、処理された画像の数に基づいて月額費用を請求します。 1枚の画像を1枚としてカウントします。
  • • 単位数により費用が異なります。しかし、EasyMedicine アプリに対しては、5,000,000 単位未満で扱います。このぐらいでは、1000 単位あたり 1.5 USDの費用がかかります。
  • • たとえば、アプリケーションが毎月 10000 枚の画像を処理する場合、15 USDの費用がかかります。

1.5USD/1000単位の費用で、かなり高いと言えます。将来、より良い価格のサービスが見つかることを願っています。サービスが別の地域にあり、費用が安くなる可能性があります。

#4. AWS Comprehend Medicalの紹介

この API は、AWS (Amazon Web Service) NLP (自然言語処理) の AI サービスとして、テキストを入力して、抽出された医療関連情報を返します。大量の医療データを使用して作成されたため、非常に高い精度の結果を表示することができます。これはユーザーの健康に直接影響するため、高い精度の結果というのは非常に重要な要素ではないでしょうか。 これはAWS のサービスのため、サービスが配置されている地域は多数あります。したがって、応答速度も非常に最適です。

Amazon Comprehend Medical – Natural Language Processing for Healthcare Customers | AWS News Blog

この AI が特定できる情報は非常に多いですが、ユーザーの服用管理のみを行うため、次のような情報にのみ焦点を当てる必要があります。

  • • 医薬品情報:医薬品名、医薬品の投与量。
  • • 服用時間

サービスのメンテナンスコスト (Amazon Comprehend – Pricing):

  • • 100 文字ごと = 1 単位。さまざまな費用がありますが、EasyMedicine が使用する費用は 1,000 万単位です。
  • • 1,000 万単位の場合、単位あたりの費用は 0.0001 USDです。たとえば、毎月 10,000 件の処方箋を処理すれば、各処方箋の平均文字数が 500 文字になって、費用が 10000*5*0.0001 = 5 USDになります。

この値段はかなり最適だと言えます。

#5. システムの構成

以下はEasyMedicineのシステムの構成です:

以上の図をより理解するために、アプリケーションの処理のフローを考えてみましょう。まず、ユーザーが撮影/アップロードした処方箋の画像を入力すると、この画像がサーバーに送信されます。サーバーは、入力された画像の base64 エンコードを送信して、Google Vision API を呼び出します。 Google は、画像から抽出されたテキスト 内容の全体を処理してから返します。以下の処方箋を例としてあげましょう:

 

 

次に、サーバーは抽出したテキストを使用して AWS Comprehend Medical API を呼び出し、医療データの抽出をリクエストします。返された結果の一部は以下の通りです:

 

{
    “Entities”: [
        {
            “Id”: 1,
            “BeginOffset”: 0,
            “EndOffset”: 27,
            “Score”: 0.982366681098938,
            “Text”: “Erythromycin ethylsuccinate”,                     // 薬の名前
            “Category”: “MEDICATION”,
            “Type”: “GENERIC_NAME”,
            “Traits”: [],
            “Attributes”: [
                {
                    “Type”: “STRENGTH”,
                    “Score”: 0.8039610385894775,
                    “RelationshipScore”: 0.9956788420677185,
                    “RelationshipType”: “STRENGTH”,
                    “Id”: 2,
                    “BeginOffset”: 28,
                    “EndOffset”: 37,
                    “Text”: “400mg/5ml”,                                        // 薬の投与量
                    “Category”: “MEDICATION”,
                    “Traits”: []
                },
                {
                    “Type”: “FREQUENCY”,
                    “Score”: 0.2624519169330597,
                    “RelationshipScore”: 0.999884843826294,
                    “RelationshipType”: “FREQUENCY”,
                    “Id”: 3,
                    “BeginOffset”: 46,
                    “EndOffset”: 55,
                    “Text”: “tsp.q.i.d”,                                           // 服用頻度
                    “Category”: “MEDICATION”,
                    “Traits”: []
                }
            ]
        }
    ]
}

 

JSONからの結果 と元の入力画像を比較すると、AI がテキストの内容をどのように構成するかということがわかります。既に定義した構成に基づいて、この処方箋に応じる服用スケジュールを立てるために必要な情報を簡単に取得することができます。具体的には、次の属性の処理に焦点を当てます。

  • • タイプがBRAND_NAME、またはGENERIC_NAME“:これは抽出された薬の名前です
  • • タイプがDOSAGE、または STRENGTH:これは薬の投与量です
  • • タイプがFREQUENCY: 服用頻度(服用スケジュールを立てるために不可欠な情報です)

抽出された情報から、その情報を処理して、結果は薬一覧が含まれる特定の服用スケジュールが出ます。

薬の名前:この情報は抽象的ではないため、最も簡単に抽出できます。薬のデータベースのデータが AWS システムに存在する限りです。

薬の投与量:タイプが「DOSAGE」の属性が複数返されますので、薬の実際の全体な投与量と毎回の投与量を区別する必要があります。
• 薬の投与量は一般的にその薬の質量/体積の単位が付いています (100mgや400mlなど)。Regex (Regular Expression) を使用すると、薬の投与量の情報を簡単に抽出できます: /([0-9]+)( ?)(mg|ml)/
• 毎回の投与量
は質量(50mg)の単位でも、1 錠 や 1 ボットルな形でもあります。方法も上記と同じになります。

服用スケジュール:
• 薬を飲む時間は薬局コードで表します (Medical and pharmacy abbreviations)。上記の処方箋に書いてある「q.i.d」は「1日に4回」という意味になります。ということはアプリが午前 (7時)、午後 (1時)、午後 (6時)、午後 (9時) の 4 回に薬を服用するスケジュールを立てることになります。

• 薬を飲み時間は日の時点で表します。 アプリは、入力された時間と一致するように服用のスケジュールを立てる必要があります。この表し方はさまざまなケースがあります。例えば、朝食の前(毎朝の7時) 、もしくは 1日に2回(午前の7時、午後の1時)。 ある時点から特定な服用スケジュールに変更するにはRegexを使用して一致するかどうかを確認します。例えば:
/(every|each|after|before) (breakfast|lunch|dinner|meal)/

最後のステップは、服用リマインド時間を設定することです。作成されたリストに基づいて、システムはユーザーの解体電話にプッシュ通知を送信します。このように、時間通りに正しい量の薬を服用することができます。

#6. アプリのデモ

Home画面:

  • • この画面の主な機能は、時間通りに服薬を管理することです。
  • • ユーザーが服用しなければならない薬のリストを表示します。いつ、かつどのくらい飲むかということも表示します。薬は服用時点ごとに分けて、ユーザーはその時点でどの薬を飲めばいいかわかります。
  • • 薬のステータスが グレーになり、⚠️ がつけられる場合はユーザーが時間通りに薬を服用するのを忘れたという意味になります。その薬を時間通りに服用したことを確認するには、ユーザーがその薬をクリックする (または [Check all] をクリックする)べきです。その後、薬のステータスが緑色に変わり、✅がつかられます。

Medication画面:

  • • この画面は、薬のリストと薬の情報を表示します。
  • • ユーザーは、ポップアップの「Manual」部で服用する薬を手動で入力できます。
  • • または、処方箋の写真を撮って、アプリは、処方箋に記載されている情報に基づいて、服用する薬のリストとスケジュールを自動的に追加します。
  • • 写真の情報が正しくない場合、ユーザーは自分で編集または削除できます。

#7. 将来に開発したい機能

  • • より多くの言語をサポートすること:処方箋の写真を撮るとアプリが自動的に情報を処理しますが、この機能は処方箋が英語で書かれている場合のみに使えます。ベトナム語、日本語などの他の言語では、アプリはまだ対応できません。
  • • 処方箋の情報を保存して再利用すること:管理を簡単にするため、薬をグループ化で分けた方がいいです。それに、将来また病気になる可能性もあるので、その病気に関する処方箋がすでに保存されたら今度はどの薬を飲めばいいかを参考になるかもしれない.
  • • アプリで薬を買うこと:作成された処方箋と組み合わせることで、ユーザーは薬を買うために薬局に行く必要がなくなります。アプリから薬を注文するだけでよいです。利便性があるだけでなく、薬のオリジナルや品質、価格も保証できれば、ユーザーがアプリで注文した薬をいつでも安心して服用できます。
  • • 特定の薬を服用する合計の量、または合計の日数を抽出すること:ほとんどの処方箋にはこの情報が含まれています。たとえば、服用する錠剤の合計数は 10 錠です。または合計日数は 7 日間です。
  • • 自分なりの時間で設定すること:人によって薬を飲む時間が異なります。そのため、ユーザーが自分の習慣に合わせて自分の時間を設定できるようにします。

#8. 今度の欠点

アプリケーションの一番大きな欠点はユーザーの写真からデータを自動的に生成する機能の効率性です。具体的には、次のような点で欠点があります。

  • • 英語の処方箋のみ対応可能です。そのため、言語的には非常に限られています。
  • • AWS Comprehend Medical が必要な情報を完全に抽出できない場合があります。処方箋に書いてある薬の名前の製薬会社がAWS データベースに存在しないことは一つの例です。この場合は、薬の名前を取得できません。
  • • 服用スケジュールの情報は、すべての場合を把握することはできません。服用するスケジュールは処方箋の情報から判断して作成されるからです。

#9. 最後の言葉

EasyMedicine は、非常に実用的で日常生活に役立つアプリです。機能は AI 技術を利用しているため、操作は非常に簡単です。将来的には、このアプリケーションを展開して運用できるようになることを願っています。

#10. 参考元