2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Elixirで画像解析して数値をCSV形式で取り込む 〜血圧計の写真をデータ化する 〜

Last updated at Posted at 2025-11-30

このコラムの目標は血圧計の写真を読み込み

  • 最高血圧
  • 最低血圧
  • 脈拍

を取得して出力はCSV形式にする

なぜ作ろうと思ったか?

  • 僕自信が高血圧で、記録をつけないとまずい(医師にいわれている)
  • 高血圧をほっておくと、またくも膜下出血で倒れるリスクがある
  • 手書きがほぼできない(字がまともにかけない)
  • 記録をスマホ連携する血圧計が高い
  • サ終になると嫌だからあえて自分で作る

コアになる画像解析をつくれないかと思って検証してみました

実行イメージ

image.png

実行環境

  • OS Ubuntu 24.04
  • GPU RTX4090
  • Elixir 1.17.1-otp-27
  • Erlang 27.2.1
  • Olama 0.13.0
  • モデル gemma3:27b

前提知識

ElixirでのOllamaの使い方はこのコラムを参考にしてください

プログラムを書く

lib/llm_image.ex
defmodule LlmImage do
  @moduledoc """
  Documentation for `LlmImage`.
  """
  def run(file) do
    client = Ollama.init()

    {:ok, ret} =
      Ollama.completion(client,
        model: "gemma3:27b",
        prompt: prompt(),
        images: [get_base64_image(file)]
      )

    ret
    |> Map.get("response")
    |> IO.inspect()
  end

  defp get_base64_image(file) do
    image_file_path = "#{System.user_home()}/local/tmp/#{file}"

    {:ok, binary} = File.read(image_file_path)
    Base.encode64(binary)
  end

  defp prompt() do
    """
    次の数値のみ取得してください
    - 最高血圧
    - 最低血圧
    - 脈拍

    出力はCSV形式で
    フォーマット例
    120,70,80
    """
  end
end

たったこれだけです

プログラム解説

prompt()で指示を書きます

    次の数値のみ取得してください
    - 最高血圧
    - 最低血圧
    - 脈拍

    出力はCSV形式で
    フォーマット例
    120,70,80

ポイント

  • どの情報が必要
  • 出力形式

これを指定することで毎回決まって形式で取得できます

get_base64_image(file)で画像ファイルを取得

  • File.readでバイナリ形式で取得
  • Base64に変換

ポイント

  • Base64にすることでOllamaに画像を渡すことができます

Ollama.completionで実行

  • モデルの指定 gemma3:27b
  • プロンプトの指定 prompt()
  • 画像の指定 get_base64_image関数の結果

ポイント

  • images:で画像を渡すことができます
    • Base64形式にします

カラー画像とグレースケール画像では精度が違った

グレースケール画像の方が精度が良かったです

ollamaコマンドであらかじめ検証しました

image.png

image.png

別の数値
image.png

image.png

今後の課題

  • カラー画像をグレースケール画像変更
  • LiveView化
  • グラフ描画

今は技術検証をして最終的にはWebアプリにしたいと考えています

ソース

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?