fc2ブログ

Base64について調べる(2)

 前回の続きです。Base64について詳しく理解するために、Bitmap画像をBase64フォーマットに変換する仕組みを調べました。

 まず、5(pixel)×8(pixel)の「1」のBitmap画像を準備しました。この画像は拡大図で、pixel情報を判別・検証するために、要所要所に色を付けました。1c_pixel_230827.pngこの元画像をバイナリエディタで確認すると以下の通りです。赤、青、緑で色付けしている箇所は後ほど説明します。1c_bin_230827.pngBitmap画像はネット情報から以下の表の構造を持ちます。bitmap_structure1_230827.pngbitmap_structure2_230827.pngこの表で赤、青、緑で色付けしている箇所が先ほどのバイナリエディタの16進数(バイト列)に対応しています。

 赤色箇所のHeaderと青色箇所のInfoHeaderの詳細は以下の通りです。
Header	14 bytes
 42 4D B6 00 00 00 00 00 00 00
 36 00 00 00

  Signature 2 bytes 0000h 'BM'
  42 4D(B M)

  FileSize 4 bytes 0002h File size in bytes -> 182 byte
  B6 00 00 00(00-00-00-B6:182)

  reserved 4 bytes 0006h unused (=0)
  00 00 00 00

  DataOffset 4 bytes 000Ah Offset from beginning of file to the beginning of the bitmap data
  36 00 00 00

InfoHeader 40 bytes Windows Structure: BITMAPINFOHEADER
 28 00 00 00 05 00 00 00 08 00
 00 00 01 00 18 00 00 00 00 00
 80 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00

  Size 4 bytes 000Eh Size of InfoHeader = 40
  28 00 00 00 (00-00-00-28; 40) Default

  Width 4 bytes 0012h Horizontal width of bitmap in pixels
  05 00 00 00 (5)

  Height 4 bytes 0016h Vertical height of bitmap in pixels
  08 00 00 00 (8)

  Planes 2 bytes 001Ah Number of Planes (=1)
  01 00 (1)

  Bits Per Pixel 2 bytes 001Ch Bits per Pixel used to store palette entry information. This also identifies in an indirect way the number of possible colors. Possible values are:
  1 = monochrome palette. NumColors = 1
  4 = 4bit palletized. NumColors = 16
  8 = 8bit palletized. NumColors = 256
  16 = 16bit RGB. NumColors = 65536
  24 = 24bit RGB. NumColors = 16M
  18 00 (00-18:24)

  Compression 4 bytes 001Eh Type of Compression
  0 = BI_RGB no compression
  1 = BI_RLE8 8bit RLE encoding
  2 = BI_RLE4 4bit RLE encoding
  00 00 00 00(0)

  ImageSize 4 bytes 0022h (compressed) Size of Image
  It is valid to set this =0 if Compression = 0
  80 00 00 00(00-00-00-80:128)

  XpixelsPerM 4 bytes 0026h horizontal resolution: Pixels/meter
  00 00 00 00

  YpixelsPerM 4 bytes 002Ah vertical resolution: Pixels/meter
  00 00 00 00

  Colors Used 4 bytes 002Eh Number of actually used colors. For a 8-bit / pixel bitmap this will be 100h or 256.
  00 00 00 00

  Important Colors 4 bytes 0032h Number of important colors 0 = all
  00 00 00 00
 BitsPerPixelは24なので、ColorTableはなく、バイナリエディタの緑で囲んだ部分(最後まで)は「Pixel Data」です。この時、PixelDataは3バイトで青、緑、赤の明るさ(強度)をそれぞれ表し、各行は、4バイトで割り切れるようにゼロパディングされます。このことを考慮してMapを作成すると以下の通りです。Pixel_Data_check_230827.pngPixel Dataは「1」の数字の左下から右上に向かう方向で記録されていることが分かりました。行を逆(降順)にすると元の画像が再現できました。

 最後に、本題のbmp画像からBase64フォーマットへの変換についてです。この5(pixel)×8(pixel)の「1」のBitmap画像をネット上でBase64フォーマットに変換すると、こんな感じでした。
Qk22AAAAAAAAADYAAAAoAAAABQAAAAgAAAABABgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////AP///8xIPwAAAADy/////wD///////8AAAD///////8A////////AAAA////////AP///////wAAAP///////wD///////8AAAD///////8A////TLEiAAAA////////AP///////yQc7f///////wA=
ここで、Base64の文字テーブル表を用います。base64_character_table_230827.png先ほどのBitmapのバイト列の初めの方だけ照合すると以下の通りです。
Bitmap
4 2 4 D B 6 0 0
0100 0010 0100 1101 1011 0110 0000 0000
(4bitの塊を6bitの塊に変換)
010000 100100 110110 110110 000000 00
(Base64の対応表と照合)
Q k 2 2 A
規則に従って正しく変換されていることが分かりました。

 今回、Base64フォーマットについて、Bitmap画像を用いて詳細に調べました。そもそものきっかけは、生成AIへの質問の結果をBase64フォーマットを用いた画像出力でできるか否かということでした。結論から言うと、前回もお話しした通り、現時点で生成AIから求めている正しい画像を得るのは難しいと判断しました。技術の進歩も速いので、いずれ正しい画像が出力できるようになるかもしれませんが・・。
スポンサーサイト



Base64について調べる(1)

 BingAIやGoogle Bardの質問(プロンプト)に画像が入力できることは以前のブログでお話ししました。ただし、回答で画像出力ができるのは現時点で専用の画像生成AIから作成される画像に限定されており、一般的な質問にはテキストによる回答がほとんどです。
 その中で、すべてのデータをアルファベット(a~z, A~z)と数字(0~9)、一部の記号(+,/)の64文字で表すエンコード方式の「Base64」を画像出力の手段として使えないかと、ふと思いました。Base64はメールの添付ファイルを変換するときによく使われるエンコード方式ですね。

早速、Google Bardに問いかけてみました。Bard_google_logo_base64_1_230827.pngBard_google_logo_base64_2_230827.pngそれらしきBase64のデータとPythonのコードが出てきたので実行させてみました。結果、エラーなく実行はできましたが、出力された画像は求めているものではありませんでした。Base64のデータがデタラメなのでしょうか?Google_Logo_result_230827.png ちなみに、BingAIに問いかけた結果は以下の通りで、これも求めている画像でありませんでした。Bing_google_logo_base64_230827.pngChatGPT3.5の結果は初めからギブアップでした。ChatGPT_google_logo_base64_230827.png
 そもそも、出力されたBase64のデータが「正しいのか/間違っているのか」について、Base64の中身を良く理解した上で判断する必要があると考え、その詳細を調べることにしました。続きは次回へ。

Fitbitのデータを処理する(3)

 前回、自身の「ストレスの高低」が「睡眠の良し悪し」に依存していることが見えてきましたので、睡眠のデータを詳しく見ていこうと思います。

 データファイルを物色していると、sleep_score.csvという名前のファイルがあったので、内容を確認しました。変数の中身を調べると以下の通りでした。
・sleep_log_entry_id: 睡眠ログID
・timestamp: 起床日時

・overall_score: 全体スコア
 overall_score = composition_score + revitalization_score + duration_score
・composition_score: 深い睡眠とレム睡眠の構成スコア(25点満点)
・revitalization_score: 回復スコア(25点満点)
・duration_score: 睡眠スコア(50点満点)

・deep_sleep_in_minutes: 深い睡眠時間[分]
・resting_heart_rate: 前日の安静時の心拍数
・restlessness: 寝返りを繰り返す状態の割合

 今回もPandasAIを使って楽にデータファイルのデータを可視化しました。

検証したPythonプログラムは以下の通りです。
import pandas as pd
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI

# Instantiate a LLM
OPENAI_API_KEY = "..MY OPENAI-KEY.."
llm = OpenAI(api_token=OPENAI_API_KEY)
pandas_ai = PandasAI(llm)

df = pd.read_csv('sleep_score.csv')
column_names = df.columns.tolist()
print(column_names)

#0. 列名'overall_score', 'composition_score', 'revitalization_score', 'duration_score', 'deep_sleep_in_minutes', 'resting_heart_rate', 'restlessness'のそれぞれについてヒストグラムを作成してください。
pandas_ai(df, prompt='Create a histogram for each of the column names overall_score, composition_score, revitalization_score, duration_score, deep_sleep_in_minutes, resting_heart_rate, restlessness, respectively.')

#1. 列名'overall_score', 'composition_score', 'revitalization_score', 'duration_score', 'deep_sleep_in_minutes', 'resting_heart_rate', 'restlessness'のデータの相関マトリックスを書いてください。
pandas_ai(df, prompt='Write a correlation matrix of the data for the column names overall_score, composition_score, revitalization_score, duration_score, deep_sleep_in_minutes, resting_heart_rate and restlessness.')

#2. 列名'overall_score', 'composition_score', 'revitalization_score', 'duration_score', 'deep_sleep_in_minutes', 'resting_heart_rate', 'restlessness'のデータの相関マトリックスグラフを書いてください。
pandas_ai(df, prompt='Write a correlation matrix graph of the data for the column names overall_score, composition_score, revitalization_score, duration_score, deep_sleep_in_minutes, resting_heart_rate and restlessness.')

#3. 列名duration_scoreに対し、列名overall_scoreをプロットしてください。
pandas_ai(df, prompt='Plot the column name overall_score against the column name duration_score.')

#4. 列名deep_sleep_in_minutesをX軸に、列名composition_scoreをY軸にプロットして、直線回帰分析してください。
pandas_ai(df, prompt='Plot the column name deep_sleep_in_minutes on the X-axis and the column name composition_score on the Y-axis, perform a linear regression analysis.')

#5. 列名resting_ heart_rateをX軸に、列名revitalization scoreをY軸にプロットして、直線回帰分析してください。
pandas_ai(df, prompt='Plot the column name resting_ heart_rate on the X-axis and the column name revitalization score on the Y-axis, perform a linear regression analysis.')

#6. 列名restlessnessをX軸に、列名revitalization_scoreをY軸にプロットして、直線回帰分析し、回帰式と相関係数をグラフの枠外に表示してください。
pandas_ai(df, prompt='Plot the column name restlessness on the X-axis and the column name revitalization_score on the Y-axis, perform a linear regression analysis.')

プログラムの実行結果は以下の通りです。
#0. ヒストグラム
hist1_230820.pngoverall_score(全体スコア)がcomposition_score(深い睡眠とレム睡眠の構成スコア)、revitalization_score(回復スコア)、duration_score(睡眠スコア)の3つの和であるという定義の元でデータを見ると、65から91の間に全体スコアが入っていますが、回復スコアと睡眠スコアが極端に悪い日もあることが分かりました。hist2_230820.pngdeep_sleep_in_minutes(深い睡眠時間)はデータの分布の形は良さげですが、深い眠りが0分に近いのは我ながら「まずい」のではないかと思いました。身に覚えがないので、何があったのでしょうか??また、resting_heart_rate(前日の安静時の心拍数)やrestlessness(寝返りを繰り返す状態の割合)が睡眠に及ぼす影響は何かあるのでしょうか?
 ヒストグラムを見る限り、分析ができないほど異常なものはなさそうなので、継続しました。

#1. 相関マトリックス
 相関マトリックスを書くようにPandasAIに指示すると(Write a correlation matrix)、グラフではなく値のみの表示でした。CorrelationMatrix_230820.png#2. 相関マトリックスグラフ
 改めて、相関マトリックスグラフを書くようにPandasAIに指示すると(Write a correlation matrix graph)、希望するグラフが出てきました。賢いです!CorrelationMatrixGraph_230820.png
#3. duration_scoreとoverall_scoreの関係
 #2のマトリックスの中で相関係数の0.92のduration_score(睡眠スコア)とoverall_score(全体スコア)の関係をプロットすると以下の通りで正の相関があります。OverallScore_vs_DurationScore_230820.png全体スコアは「深い睡眠とレム睡眠の構成スコア」と「睡眠スコア」と「回復スコア」の和で、かつ睡眠スコアは50点満点で他の2つのスコアが25点満点なので、全体スコアと睡眠スコアの相関が高いのも理解できます。

#4. deep_sleep_in_minutesとcomposition_scoreの回帰分析
 #3のプロンプトで「Aに対し(against)」のAがX軸側に来て欲しいのですが、PandasAIでY軸側に判断されたので、X、Y軸の変数を明確にしました。ついでに回帰分析も実行し、回帰直線も描画させました。深い睡眠時間が増加すれば「深い睡眠とレム睡眠の構成スコア」が増加するという結果です。相関係数は0.59でした。DeepSleepInMinutes_vs_CompositionScore_230820.png#5. resting_ heart_rateとrevitalization scoreの回帰分析
 resting_heart_rate(前日の安静時の心拍数)が高ければ、revitalization_score(回復スコア)も上がる結果です。相関係数は0.52でした。前日に活動的であれば、その日に寝て、翌日はその分、回復しているということなのでしょうね。RestingHeartRate_vs_RevitalizationScore_230820.png#6. restlessnessとrevitalization_scoreの回帰分析
 寝ている間のrestlessness(寝返りを繰り返す状態の割合)が大きいと回復スコアが下がるという結果です。相関係数は-0.44です。寝苦しいと疲れが取れないということなのでしょうね。Restlessness_vs_RevitalizationScore_230820.png
 今回は、睡眠のデータを詳しく見てきて、その質(スコア)が「前日の安静時の心拍数」や「寝ている時の寝返りを繰り返す割合」にも関係しているような知見が得られました。次回は睡眠に関する詳しいデータを眺めてみようと思います。

台風7号接近する

 今朝、6時頃から雨足が強くなってきました。台風7号が紀伊半島に上陸して北上中です。Typhoon7_230815.png自室の気圧データも下降中です。AtmosphericPressure_230815.png8/12のブログで台風接近で気圧が下がっているとグラフを出しましたが、これはフライングでした。その後、気圧が上がって行ったので・・。今回は本物です。

 JRが不通で会社に出勤できないので、本日(8/15)は在宅勤務です。都市部ではなく田舎なので、すぐにJRが運休になる・・。JR_West230815.png
 窓に打ちつける雨や、風のヒュゥという音、気持ちが落ち着かないですね。

 庭のダイダイの木に今年は20個以上の実がなりました。緑色の小さな実ですが、過去の台風で実がたくさん落ちてしまいましたので、今回は防風ネットを奥さんと協力して被せ、防御しました。Daidai1_230815.png無意識にダイダイの木を包んでみると「雌ライオン」のようになりました。横から見てもライオンでした(笑)。Daidai2_230815.png台風に持ちこたえて、冬に大きくなった実を回収できればと思います。

 ダイダイはともかく、何事もなく台風が過ぎて行って欲しいものです。

追伸(8/20)
 台風7号の被害は全く無く、ダイダイの実も落ちることなく無事でした。ホッ。

Fitbitのデータを処理する(2)

 前回、FitbitからデータをDownloadする所までお話ししましたので、今回は具体的にデータの中身の確認、分析を始めたいと思います。

 まず、ストレスと睡眠の関係を調べるために、データファイルを物色していると、Stress Score.csvという、いかにもの名前のファイルがあったので、内容を確認しました。dataset_230814.png変数の中身を調べると以下の通りでした(英文の翻訳です・・)。
Stress Score.csv: 計算された日毎のストレススコア
・date - ストレススコアが記録された日付
・updated_at - 前回スコアが作成された、または更新された時刻。
・stress_score - ストレススコアの値。(補足:高いほどストレスが少ない)
・sleep_points - 睡眠成分の点数。(補足:高いほどストレスが少ない)
・max_sleep_points - ユーザーが取得可能な睡眠成分の最大点数。
・responsiveness_points - 反応性コンポーネントからのポイント。(補足:高いほどストレスが少ない)
・max_responsiveness_points(最大反応性ポイント) - ユーザーが得られる反応性構成要素の最大ポイント。
・exertion_points - 労作コンポーネントからのポイント。(補足:高いほどストレスが少ない)
・max_exertion_points - ユーザーが獲得できる労力コンポーネントの最大ポイント。
・status - IN_PROGRESS(計算中)/ READY(ストレススコアが計算されました。)
・calculation_failed - ストレススコア計算が特定の日付で失敗したかどうか。

 このデータをPandasAIを使って可視化・分析しました。検証したPythonプログラムは以下の通りです。
import pandas as pd
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI

# Instantiate a LLM
OPENAI_API_KEY = "..MY OPENAI-KEY.."
llm = OpenAI(api_token=OPENAI_API_KEY)
pandas_ai = PandasAI(llm)

df = pd.read_csv('Stress Score.csv')
column_names = df.columns.tolist()
print(column_names)

#0. 列名’STRESS_SCORE', 'SLEEP_POINTS', 'MAX_SLEEP_POINTS', 'RESPONSIVENESS_POINTS', 'MAX_RESPONSIVENESS_POINTS', 'EXERTION_POINTS', 'MAX_EXERTION_POINTS'のそれぞれについてヒストグラムを作成してください。
pandas_ai(df, prompt='Create a histogram for each of the column names STRESS_SCORE, SLEEP_POINTS, MAX_SLEEP_POINTS, RESPONSIVENESS_POINTS, MAX_RESPONSIVENESS_POINTS, EXERTION_ POINTS, and MAX_EXERTION_POINTS, respectively.')

#1. 列名DATEに対し、列名STRESS_SCOREをプロットしてください。
pandas_ai(df, prompt='Plot the column name STRESS_SCORE against the column name DATE.')

#2. 列名STRESS_SCOREの値について、大きい値から3点(Max1、Max2、Max3)、小さい値から3点(Min1、Min2、Min3)抽出し、その値が得られたDATEも抽出してください。その結果を順に|STRESS_SCORE|DATE|の形式で出力してください。
pandas_ai(df, prompt='For the column name STRESS_SCORE, extract the three largest values (Max1, Max2, Max3) and the three smallest values (Min1, Min2, Min3), and also extract the DATE at which the values were obtained. Output the results in order in the format|STRESS_SCORE|DATE|.')

#3. 列名DATEに対し、列名SLEEP_POINTSをプロットしてください。
pandas_ai(df, prompt='Plot the column name SLEEP_POINTS against the column name DATE.')

#4. 列名SLEEP_POINTSに対し、列名STRESS_SCOREをプロットしてください。
pandas_ai(df, prompt='Plot the column name STRESS_SCORE against the column name SLEEP_POINTS.')

#5. 列名STRESS_SCOREを目的変数とし、SLEEP_POINTS、RESPONSIVENESS_POINTS、EXERTION_POINTSの3変数を説明変数とした回帰分析を行い、結果を表示してください。
pandas_ai(df, prompt='Please perform a regression analysis with the column name STRESS_SCORE as the objective variable and the three variables SLEEP_POINTS, RESPONSIVENESS_POINTS, and EXERTION_POINTS as explanatory variables and display the results.')

プログラムの実行結果は以下の通りです。
#0. ヒストグラム
 データが数値で可視化できそうな変数を7つ選んで、ヒストグラムを書かせました。PandasAIはすぐに結果を出してくれました。便利、便利。STRESS_SCOREはきれいなひとつ山の分布を持っているようですね。hist_STRESS_SCORE_230814.png 残りの変数のヒストグラムからSLEEP_POINTS、RESPONSIVENESS_POINTS, EXERTION_POINTSの3変数は何かしらの分布を持っているので、分析に使えるかもしれません。MAX_SLEEP_POINTS、MAX_RESPONSIVENESS_POINTS、MAX_EXERTION_POINTSは、先の3変数の最大値を表しているので値も同じで、分析には使えないですね。hist_explaination_230814.png
 ちなみに、PandasAIの内部のログファイルを確認すると、以下のやり取りが水面下で行われていました。そのまま動くコードなので、データサイエンス初学者の可視化のお供には良いかもしれません。
2023-08-13 15:22:00 [INFO] Running PandasAI with openai LLM...
2023-08-13 15:22:00 [INFO] Prompt ID: bd39612d-1285-490c-90ea-ff2df90b4d7a
2023-08-13 15:22:11 [INFO]
Code generated:
```
import matplotlib.pyplot as plt

# Create a histogram for STRESS_SCORE
plt.hist(df['STRESS_SCORE'])
plt.xlabel('STRESS_SCORE')
plt.ylabel('Frequency')
plt.title('Histogram of STRESS_SCORE')
plt.show()

# Create a histogram for SLEEP_POINTS
plt.hist(df['SLEEP_POINTS'])
plt.xlabel('SLEEP_POINTS')
plt.ylabel('Frequency')
plt.title('Histogram of SLEEP_POINTS')
plt.show()

# Create a histogram for MAX_SLEEP_POINTS
plt.hist(df['MAX_SLEEP_POINTS'])
plt.xlabel('MAX_SLEEP_POINTS')
plt.ylabel('Frequency')
plt.title('Histogram of MAX_SLEEP_POINTS')
plt.show()

# Create a histogram for RESPONSIVENESS_POINTS
plt.hist(df['RESPONSIVENESS_POINTS'])
plt.xlabel('RESPONSIVENESS_POINTS')
plt.ylabel('Frequency')
plt.title('Histogram of RESPONSIVENESS_POINTS')
plt.show()

# Create a histogram for MAX_RESPONSIVENESS_POINTS
plt.hist(df['MAX_RESPONSIVENESS_POINTS'])
plt.xlabel('MAX_RESPONSIVENESS_POINTS')
plt.ylabel('Frequency')
plt.title('Histogram of MAX_RESPONSIVENESS_POINTS')
plt.show()

# Create a histogram for EXERTION_POINTS
plt.hist(df['EXERTION_POINTS'])
plt.xlabel('EXERTION_POINTS')
plt.ylabel('Frequency')
plt.title('Histogram of EXERTION_POINTS')
plt.show()

# Create a histogram for MAX_EXERTION_POINTS
plt.hist(df['MAX_EXERTION_POINTS'])
plt.xlabel('MAX_EXERTION_POINTS')
plt.ylabel('Frequency')
plt.title('Histogram of MAX_EXERTION_POINTS')
plt.show()
```

#1. Stress Scoreの時系列トレンド
 日々、ストレスが乱高下していることが分かりました。StressScore_vs_Date_230814.png
#2. STRESS_SCOREのベスト3とワースト3
 PandasAIで正しく抽出できていました。StressScoreSort_230814.png生データを抽出して比較すると以下の通り。STRESS_SCORE_analysis_230814.pngこのSTRESS_SCOREと他の3つの変数は値が大きいほどストレスが小さい(ストレスに対する耐性がある)指標です。この表を見ると、ストレスの高低が睡眠の良し悪しに依存していることが見えてきました。

#3. Sleep Pointsの時系列トレンド
 日々、睡眠の良し悪しも乱高下していることが分かりました。SleepPoint_vs_Date_230814.png
#4. SLEEP_POINTSとSTRESS_SCOREの関係
 両者に予測通り、正の相関が見えます。STRESS_SCORE_vs_SLEEP_POINT_230814.png
#5. 回帰分析
 PandasAIで回帰分析ができるか否か試してみました。1回目の実行でstatsmodelsのライブラリがないとエラーを吐きましたが、ライブラリをインストールすると、結果を表示してくれました。RegressionResult_230814.pngPandasAIは、PandasのみのChatGPT対応ではなく、Pythonで実行する機械学習関係もサポートしているのかもしれません。要調査。
 回帰分析の結果は、相関係数が1で各説明変数の係数も1という結果で、一瞬驚きましたが、生データを確認すると、以下の関係式が(いまさらながら)あることに気づきました。
 STRESS_SCORE = SLEEP_POINTS + RESPONSIVENESS_POINTS + EXERTION_POINTS

 ストレスと睡眠の関係が、3か月の自分の体のデータでも見えてきました。今後は他のデータを詳しく見ていこうと思います。最終目標は自分の生活習慣を含めた健康管理ですね。

Fitbitのデータを処理する(1)

 5月中旬にスマートウォッチのFitbit Versa4を買い、3か月近く利用しています。購入したのは健康、特に睡眠に関係した情報を収集したかったからです。最近もそうですが、いろいろ公私共に忙しく、気持ちが休まることが少ないためか、睡眠も乱れています(スマートウォッチの睡眠スコアに露骨に表れますね・・)。

 今回、3か月収集した自分の体のデータを使って分析をしてみようと思い立ちました。その前に、データをエクスポートすることから始めたいと思います。
 まず、FitbitのWebページにアクセスします。製品購入時にGoogleアカウントでマイページを作成しているので、そのページに行き、ダッシュボードをクリックしました。FitBit_DataExport1_230813.png次に「歯車マーク - 設定」を選択しました。FitBit_DataExport2_230813.png個人設定画面が表示されますので「データのエクスポート」をクリック。FitBit_DataExport3_230813.pngGoogle Takeout画面が表示されますので、CREATE A NEW EXPORTの①Select data to includeで「Next Step」を選択。FitBit_DataExport4_230813.png②Choose file type, frequency & destinationで「Send download link via email」を選択し、「Create export」をクリックすると、Gmailにダウンロードに関する情報が発信されます。FitBit_DataExport5_230813.pngGmailを確認すると、Google Takeoutからメールが来ていたので、FitBit_DataExport6_230813.png開封して「Download your files」をクリックすると、FitBit_DataExport7_230813.pngDownloadページに飛びますので、そこでDownloadしました。FitBit_DataExport8_230813.pngDownloadしたZipファイルを解凍すると、以下のフォルダ構成でデータが保存されていました。FitBit_DataExport9_230813.png 今回はFitbitからデータをDownloadする所までお話ししました。具体的なデータの中身の確認は次回にしたいと思います。

BingとBardの画像認識を比較する(1)

 お盆休みに入りましたが、台風7号が接近していますね。自宅の自室に設置している気圧センサの値も急降下中です。現在(8/12 15時)、990hPa辺りですね。AtmospherePressure_230812.png当初はお盆に帰省予定でしたが、父親の健康状態が心配だったことや実家の庭の手入れがあり、先月に実家に里帰りしました。今考えると、1か月前で良かったです・・。

 昨日(8/11)、今日(8/12)と猛暑日で外出するのも億劫なので、のんびりと日頃できなかったことをしています。

 生成AIのBing-AIBardの話をブログで何度かしていますが、今回は画像入力した画像について、以下の2点を調べ、比較しました。
 ① 画像処理をして出力できるか?
 ② 画像を正しく認識できるか?

 結論から言うと以下の通りでした(8/12現在の実力です・・)。Result_230812.pngGoogle Bardの画像認識力には驚きました。後ほど詳細をお話しします。

 結論を先に話してしまいましたが、Bing-AIで試した結果です。カラー画像を入力し、モノクロ画像を出力してくださいというものです。image_proc_ptn3_bing_230812.png質問に対する答えは「できない」ということでした。
 そういえば、画像出力ができるのは回答のスタイルの「創造性」「バランス」「厳密」の中の「創造性」のみだったことを思い出しました。この「できない」結果を出力したのは「厳密」スタイルでした。ansmode_230812.png
「創造性」スタイルにして、同じ質問をすると、回答は以下の通りでした。image_proc_ptn1_bing_230812.pngモノクロ画像が出力されていますが、入力画像のモノクロ画像でありません。ただ、そもそも生成AIは「未知」の画像を生成するもの?なので、結果は当たり前なのかもしれませんね・・。ちなみに、「バランス」スタイルで実行した結果は的外れです。質問の仕方が悪いのでしょうね。image_proc_ptn2_bing_230812.png
 次に、画像の説明をしてもらいました。以下は「創造性」スタイルの回答です。image_explaination1_bing_230812.png記載内容の中に、他の花がある?、白いチューリップが9輪?という誤った情報を出力しました。「厳密」スタイルでも白いチューリップの数については分からないという回答でした。image_explaination2_bing_230812.png
 Google Bardの方も気になったので、同じ質問をしました。現時点で画像入力を利用する際の質問はEnglish ONLYです。image_proc_bard_230812.png画像処理はできないと言う回答でBing-AIと同じです。画像の説明をお願いすると以下の長文の回答でした。image_explaination_bard_230812.png翻訳すると以下の通り。
「画像は色とりどりのチューリップ畑で、真ん中に黒いチューリップが描かれている。画像には3本の白いチューリップがあり、前列に2本、後列に1本ある。白いチューリップは、淡いアイボリーから濃いクリーム色まで、すべて異なる色合いだ。どれも花びらを大きく広げて咲いている。黒いチューリップも満開だが、花びらは固く閉じている。画像の中で最も背の高いチューリップで、周りの色とりどりのチューリップの中で際立っている。
 この画像はチューリップの多様性を美しく表現している。チューリップには実にさまざまな色や形があり、それぞれが個性的だ。黒いチューリップは特に印象的な花で、イメージに神秘的な雰囲気を添えています。
 質問の答えになっていれば幸いです!」


 紫色のチューリップを黒色と言っている点は違和感がありましたが、白いチューリップの本数や位置関係を述べている点は、正しく認識していると思われました。

 大変興味深い結果だったので、今後、追加でいろいろ調べてみようと思います。


ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: