手間のかかるカルテ記載を音声で行う①（Python＆ChatGPT）

こんにちは、皆さん。

東京都でクリニックを経営している医師の森　維久郎です。

今日はOpenAIのChatGPTとPythonを使って、音声入力を行い、テキスト化するプログラムを作りたいと思います。

特に医師の診察業務や入院時のカルテの記載など、医師の労働においてカルテを記載する時間はかなりの負担となっています。

これを軽減するために、音声入力をテキスト化するプログラムを作成することで、労働時間の削減や効率化を図ることができます。

今回の記事では、Qiitaに載せてよいのか迷うぐらいプログラミングの知識がほぼなくても簡単に作成できる範囲で設計します。

最終的には、今回の記事をベースにしてPCでデスクトップにアイコンを作ったりしてみようと思います。

ちなみにこの記事は全部chatGPTで書いたので誤字脱字は無視してください（笑）

## 手順

①Pythonで音声ファイルを読み込む
②OpenAIのAPIを使って音声をテキストに変換する
③ChatGPTを使ってテキストを整形する

こんだけです。

### ①Pythonで音声ファイルを読み込む
まず一つ目の作業として、Pythonを使用して音声入力を読み込む方法について取り組んでいきたいと思っています。

この作業は実際にはとても簡単で、Google ColaboratoryというPythonの実行環境を利用します。

具体的には、その環境にファイルをアップロードするだけです。

今回は、"audio.mp3"という名前のファイルを使って作業を進めてみようと思っています。なお、ファイル形式がmp3でなくても、MP4、MPEG、WAVなどのファイルも使用可能です。


### ②OpenAIの音声からテキストへのAPI

OpenAIは、音声をテキストに変換するためのwhisper APIを提供しています。今回はこれを使います。

https://platform.openai.com/docs/guides/speech-to-text

このAPIは、PythonのOpenAIライブラリを使用して簡単に利用することができます。以下に、音声ファイルをテキストに変換する基本的なコードを示します。

また、音声ファイルは25MBまでのサイズに制限されています。

具体的なコードを書いていきましょう。

まずOPEN AIをインストールしましょう。
```
pip install openai
```

```
import openai
openai.api_key = '' #ここにAPIを入れる
```
```
audio_file= open("audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
```
これで終了です。

実際のテキストデーターを以下のコードでみることができます。
```
print(transcript.text)
```
### ③ChatGPTを使ってテキストを整形する
テキストデーターを普通にchatGPTにぶちこんで以下のプロンプトをいれるだけで完成です。
```
#テキストデーター
～ここに貼り付ける～
#依頼
上記は音声からテキストデータを抽出したものです。
内容が不自然になっている箇所が多くあります。
内容を変更せずに、より自然な形に整形してください。
句読点なども適切に追加してください。
```
GPT3.5でもそこそこの精度だったので、Pythonでもできます。文字数のこともあるのでGPT3.5-turbo-16kでやる方が効率が良いと思います。

##結果

### 素材
今回素材はこちらのyoutube動画をmp3にして音声データー

https://www.youtube.com/watch?v=JsqoqflLIK8

### 結果

```
皆さん、こんにちは。神沢の学校の校長の森です。今日は腎臓の構造と尿の生成方法について話したいと思っています。腎臓の構造には少し専門的な話も含まれますが、一度抑えていただきたいと思います。不運ですね。そうなんです、不運ぐらいでいいのかなと思います。また、腎臓の働きに関しても重要な要素がありますので、その話も進めていきたいと思います。作り、働き、そして尿の生成方法についてお話しします。

腎臓の構造についてですが、まず腎臓は背中側にあります。大きさはおおよそ握り拳ほどの大きさです。尿を作る役割を担っています。この腎臓には尿管という管がついていて、その下には膀胱があります。尿は腎臓から尿管を通って膀胱に流れていくような形になります。皆さん、膀胱炎という言葉を聞いたことがあると思いますが、膀胱炎は膀胱の下の部分で起きている炎症を指し、腎臓で起きている炎症は腎盂炎と呼ばれます。感染の場所によって名前が変わるような仕組みです。また、尿管結石というのは尿管の部分で石が詰まってしまう状態を指し、腎臓が腫れ上がる原因になります。腎臓から尿管に水が流れているのですが、詰まってしまうと腎臓が腫れ上がるということです。この位置関係は重要ですので、このような形で進行しています。大きさはおおよそ握り拳ほどの縦が約10センチほどで、横は約5センチほどのラグビーボールのような形をしています。この大きさも評価する際に腎臓エコーという検査が行われます。例えば動脈硬化が進んで腎臓の機能が悪くなると、縦の長さが約9センチに縮小することがあります。逆に腎嚢胞の場合は腎臓が拡大することがあります。腎臓の超音波を見て、腎臓機能が悪くなる原因を調べるのです。右にも左にも腎臓があるという感じですね。

腎臓の中身を見てみると、細かい話になりますが、全身の血液の約20%が腎臓に集まってきます。それが腎動脈を通って腎臓に入り、不要なものと必要なものを取り分け、必要なものを腎上脈を通って心臓に戻していく仕組みです。この過程で妙観という部分があります。腎動脈から流れてきた血液を不要なものと必要なものに分けて、不要なものを排出し、妙観のところに送るというイメージです。このように3つの管を通っています。ここまで来ると分かりにくくなってしまうかもしれませんが、腎臓には皮質と髄質という部分があります。例えば腎盂腎炎という腎臓の細菌感染症の場合、腎盂という部分が感染しているわけですね。また、尿細管血栓という状態は尿細管の部分で石が詰まってしまうことで起こります。その結果、腎臓が腫れ上がると考えていただければ良いかと思います。この位置関係は重要です。

腎臓の構造を拡大してみると、非常に複雑な構造で物質の交換が行われています。後で詳しく説明しますが、腎臓には血液が流れ込み、約1日あたり150リットルもの尿を生成しますが、実際に体外に出るのは約1.5リットルほどです。つまり、尿を作る役割がある一方で、99%は再吸収されるために出てこないのです。1%の尿のみが体外に排出されますが、99%は必要な物質なので、必要なものを失わないようにとても緻密な構造をしているのです。
```
95％はしっかり読めていると思います！

カルテ記載の場合はまたフォーマットを作ってプロンプトに要素を入れるだけでそこそこいけました。

## 実際の運用について

現段階ではプライバシーの問題もあり患者さんと医師のやり取りをそのまま読ませるのは難しいと思います。

どちらかという入院サマリや紹介状を作成するときに個人情報を入れない範囲でゴリゴリ音声入力して効率化を進める運用が良さそうです。

次回はGoogleコラボではなくローカルに実行環境を作成して、デスクトップにアイコンを作成して、mp3のダウンロード・アップロードもせずに音声入力→テキスト出力までスムーズにできるようにしてみようと思います。