おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

プロジェクター用スライドの画像について

プロジェクター用スライドの画像

プレゼンテーションでスライドを作るときに、画像の画素数(これを解像度と言うこともあるが、正しくはない)をどれくらいにしたら良いのでしょうか? 一般にデジカメで撮った画像は画素数が多いので、それを何枚もスライドに入れると容量が大きくなってしまいます。 また、画素数の多い写真はピントが合うまでに少々時間がかかることもあります。 プロジェクタの解像度に適するように変換が行われるためです。 そこで、スライドを作るときの最良の画素数を計算する方法を考えてみました。

結論的には、「プロジェクターの画面解像度が1920x1080ならば、画面いっぱいに写す画像も1920x1080が最適」ということです。 これだけで十分な人は以下の記事を読む必要はありません。

素数とは

デジカメやスマホの写真データは、色情報を持った小さな点の集合になっています。 この点を画素(英語でピクセルpixel)といいます。 写真データにおける画素の数を画素数といいますが、縦横を別々にして1600x900のように表すことが多いです。 この場合、1600が横で900が縦です。 総画素数は、1600x900=1440000=144万画素、となります。

画素の縦横比を「ピクセルアスペクト比」といいます。 画素が正方形なら1:1です。 画素が長方形のこともあり、例えばNTSCビデオシステムでは10:11です(ウィキペディアのピクセルアスペクト比参照)。 コンピュータのディスプレイなどでは、ピクセルアスペクト比は1:1と考えて差し支えありませんが、実際のディスプレイには若干の誤差があります。

解像度と画面解像度

同じ大きさの写真でも、画素が多いものと画素が少ないものでは見た目が大きく違います。 これは長さに対する画素数の割合、すなわち密度の問題になります。 解像度を表すにはDPI(ドット・パー・インチ)を用いることが多いです。 1インチ(2.54cm)あたりに画素がいくつあるかを示します。

DPIは長さに対する画素数の密度ですが、縦横でDPIが異なる可能性があります。 それはピクセルアスペクト比が1:1でない場合です。 それでは、パソコンの場合はどうでしょうか? パソコンディスプレイではピクセルアスペクト比は1:1ですから、DPIは縦横が同じになります。 そこで、縦横区別せずに単にDPIをひとつだけ示せば足りることになります。

一般に解像度が高いほうが見た目が良くなります。 ただし、人間の目には限界がありますので、ある程度の解像度を越えるとその違いは感じられなくなります。 また、ディスプレイとプリンタでは、その仕組みが違うので、同じ解像度でも見た目が変わります。 ちなみに私の持っているPCのディスプレイは13.3型(対角線の長さが13.3インチ)で1920x1080ピクセル(16:9)なので、 横の長さをxとすると

 \displaystyle
x^2+\left(\frac{9x}{16}\right)^2 = 13.3^2 \\
x = 11.6 \\
1920\div 11.6 = 165.6

これより約166dpiです。 解像度はディスプレイによって異なります。

解像度に似た用語に「画面解像度」があります。 これはディスプレイの縦横の画素数を示したもので、密度を表すわけではありません。 例えば私の持っているノートパソコンのディスプレイの画面解像度は1920x1080ドットです。 パソコンをプロジェクターにつなげる場合は、パソコンの外部出力の画面解像度とプロジェクタの画面解像度の能力で決まってきます。 多くの場合はプロジェクターの画面解像度になると思います。 例えば、私の持っているエプソンのプロジェクター「EF-100B」の場合は1920x1080です。

デジカメやスマホ・カメラの画素数

私の持っているデジカメはNikonの「COOLPIX B600」で、通常の撮影における画素数は4608×3456です。

 \displaystyle
4608 = 2^9\times 3^2 \\
3456 = 2^7\times 3^3 \\
4608:3456 = 4:3

同じくスマホのカメラは4000x2250です。 しかし、このスマホには4つのカメラ(1つはインカメラ・・・自撮り用カメラ)があるので、それぞれに画素数が異なります。 ですので、4000x2250はそのうちのひとつにおける画素数です。

 \displaystyle
4000 = 2^5\times 5^3 \\
2250 = 2\times 3^2\times 5^3 \\
4000:2250 = 16:9

いずれもディスプレイの画面解像度よりも画素数が多いです。 あた、アスペクト比(縦横比)が異なるので、4:3の画像は左右に黒い背景を追加して、中央に画像を置く必要があります。

EXIFデータ

EXIFデータはJPEGなどの画像に追加できるメタデータです。 撮影日時、場所、カメラなどの情報が良く用いられます。 ネット上に画像をあげるときに、これらの情報(個人情報)は削除する方が好ましいと言われています。

画像変換のプログラム

画像変換にはImagemagickを使うと良いです。 ここでは、そのRubyライブラリであるRMagickを使って変換プログラムを作ってみます。 私のプロジェクターの画像解像度が1920x1080なので、画像サイズもそれに合わせます。 読者がこのプログラムを活用する際にはお持ちのプロジェクターの画像解像度に合わせて調整してください。 また、16:9以外の画像をこのサイズ内におさめると余白ができますが、余白は黒にします。

ImagemagickやRMagickについては次のリンクが参考になります。

次のプログラムは最後の3行で与えられるファイル(sample1.jpg、sample2.jpg、sample3.jpg)を変換します。 EXIFデータは削除され、サイズが1920x1080に変更され、photo-0.png、photo1-.png、photo2-pngというファイルに保存されます。 定数WidthとHeightを書き換えることにより、異なるサイズに対応できます。

プログラムを起動するには、コマンドラインから

$ ruby image_for_slide.rb

とタイプします。

# image_for_slide.rb 
#
# This program converts images for slides.
# - The image filenames are given after the __END__ line.
# - Removes EXIF data.
# - Resizes the images to suit slides
# - The name of the created image files are "photo-0.png", "photo-1.png", ...
 
require 'rmagick'
include Magick

# Display resolution
# 16:9
Width = 1920
Height = 1080
# 4:3
# Width = 1024
# Height = 768

imagelist = ImageList.new(*DATA.read.split(/\n/))
imagelist.each do |image|
  image.strip!
end
imagelist = imagelist.map do |image|
  base = Image.new(Width,Height) {|options| options.background_color = 'black'}
  src = image.resize_to_fit(Width,Height)
  base.composite(src,CenterGravity, OverCompositeOp)
end
imagelist.write("photo.png")
__END__
sample1.jpg
sample2.jpg
sample3.jpg

釧路湿原

少し前のことになりますが(2023年6月)、釧路湿原に行きました。 あいにく天気が悪く、霧が出ていて、壮大な湿原全体を見ることができませんでしたが、それでも自然を感じることができました。

交通

私は飛行機を利用しました。 最寄りの空港は「たんちょう釧路空港」です。 そこからはレンタカーを使いました。 空港のすぐ目の前にレンタカーのお店が並んでいるので便利です。

お店で「鹿には気をつけてください」と言われましたが、どうもピンときませんでした。 しかし、その直後に事故現場を目撃することになります。 ボンネットが大きくへこんだ乗用車とその前に横たわる大きな鹿。 すでに警察が来て事故処理にあたっていました。 あらためてネットを調べてみると、国土交通省の「エゾシカ衝突事故マップ」というサイトに詳しい情報がありました。 そこには「エゾシカとの衝突は生死にかかわります!」との目立つ注意書きが。 エゾシカとの交通事故は非常に多くて、2022年には北海道全体で4480件発生しています。 毎日12から13件発生していることになります。 お店の注意が真剣なものだったということを後になって認識しました。

釧路市湿原展望台・サテライト展望台

初日は湿原の西に位置する釧路市湿原展望台に行きました。 そこの円形の遊歩道の湿原側に「サテライト展望台」があります。 残念ながら霧のため眺望は限られましたが、それでも湿原の広さを感じることはできました。 途中で狸の親子に会いました。 動画をご覧ください。

www.youtube.com

ノロッコ号

翌日はまず釧路駅へ。

釧路駅

ノロッコ号に乗りました。

ノロッコ号

ノロッコ号はJRの釧網本線(せんもうほんせん)のうち、釧路駅から塘路駅までを湿原観光用に特化して運転している列車です。 座席の配置も湿原を見やすいように工夫されています。 また、ガイドさんのアナウンスもあります。 線路は湿原の東側を通りますが、一部湿原内を通るので左右どちらからでも湿原を見ることが出来ます。 特に線路と並行して流れる釧路川が美しく、それが一番の見所かもしれません。

細岡展望台

細岡展望台は湿原の東に位置し、湿原を最もよく見渡せる展望台です。 ここへは車で行きましたが、ノロッコ号釧路湿原駅下車、そこから20分ほど歩いて行くこともできます。 天気があまり良くありませんでしたが、写真を撮ってみました。

釧路湿原

サルボ展望台。塘路湖

サルボ展望台は細岡展望台よりも北にあり、湿原東側にある塘路湖が良く見えます。 道路脇の駐車場から10分ほど登ったところにあります。 その駐車場付近でシカとサギを発見しました。

シカとサギ

最初はこの鳥がタンチョウヅルかと思いましたが、首が黒くないので違うことがわかりました。 おそらくサギだと思います。

タンチョウヅルは釧路湿原に住む鳥で、渡り鳥ではありません。 「タンチョウ」は空港の名前にもなっているほど釧路では有名です。

幣舞橋(ぬさまいばし)

ホテル近くの幣舞橋を散歩しました。 夕日がきれいなことで有名です。

幣舞橋

橋には彫刻が4つあり、春夏秋冬を表しているそうです。

幣舞橋の彫刻

また、橋の先には、時計のオブジェがあります。

時計のオブジェ

幣舞橋は、夕方になると多くの人が散歩しています。 カメラを持っている人がたくさん夕日を撮っていました。 また、釧路川の両岸は幅のある遊歩道になっているので、そこでも散歩が楽しめます。

グルメ

最後に食べ物について。 北海道は海の幸が有名で、寿司、ろばた焼きが美味しいです。 予約をしておくのが確実です。 値段は店によります。 安くても美味しい店はありますから、事前によく調べておくと良いです。

GObjectチュートリアルをアップデート

GTK4チュートリアルに引き続き、GObjectチュートリアルをアップデートしました。

全体を見直しましたが、大筋は変わっていません。 修正点の概要は次のとおりです。

  • プログラムの不適当なところがいくつかあったのを修正した。
  • 同じファイルが異なるフォルダに2つあるような場合は、片方を削除した。
  • 新しい機能、例えばG_DEFINE_FINAL_TYPEマクロなどを紹介した。
  • 逆に、Deprecatedになった機能、例えばGtkDialogなどは別のものに置き換えた。

これで、最新の状況を反映し、不適当な記述を改めることができました。

GObjectはGTK4を理解する上で欠かせない基本ライブラリです。 GTK4を習得したい人は、ぜひ読んでみてください。

GTK4チュートリアルの更新

前回ブログに書いた「GTK4チュートリアルの更新」の続きを仕上げた。 分量が多いのでかなり時間がかかった。 それだけではなく、プログラムが不十分で、手直しをしたり、記述が分かりにくくて書き直したりした。 おそらく、少し時間をおいて見直せば、また修正が必要になるだろう。 これで、一応バージョン4.10に対応するようになった。

今後の課題

手直しを通して、あらためて内容整理の重要性を感じた。 それは、特に前半部の基礎編ともいうべき部分だ。 これはテキストエディタを作り上げるという内容にそって、基本点を押さえていく流れだが、そのために分かりにくくなっているところがある。 それをやめて、短いプログラムで基本点を押さえるようにするのが、分かりやすくなるのではないだろうか。 この改訂はかなりの大仕事になるが、次回はそれを目指したい。

この間にスターが400を越えた。 これはGTK4チュートリアルに対する要求の強さの表れだと思う。 それならば、なおさらのこと大仕事でもやりがいがあるというものだ。

GTK4 Tutorial 前半アップデート

GTK4 バージョン4.10

GTK4のバージョン4.10からいくつかの関数が入れ替わりました。 古い関数はdeprecated(古くなり推奨されない)になり、その代替(replacement)の関数が新設されたということです。 また、GTKだけでなくそのベースになるGLibライブラリ(GObjectやGIOを含む)にもdeprecatedや新設が起こっています。 下記の表では「廃止」と書きましたが、正確には「将来は廃止」で、現段階では使うことが可能です。 関連するクラスが複数あるものは「〜シリーズ」としました。 また、クラスのネームスペース、例えばGtkDialogのGtkの部分、は省略しました。

deprecated replacement library
MessageDialog AlertDialog GTK4
AppChooserシリーズ 廃止 GTK4
Assistantシリーズ 廃止 GTK4
Cellシリーズ ListViewシリーズ GTK4
ColorButtonシリーズ ColorDialogシリーズ GTK4
ComboBox DropDown GTK4
ComboBoxText DropDownとStringList GTK4
Dialog Window GTK4
EntryCompletion 廃止 GTK4
FileChooserDialogシリーズ FileDialogシリーズ GTK4
FontButtonシリーズ FontDialogBittonシリーズ GTK4
IconView GridView GTK4
InfoBar 廃止 GTK4
GtkListStore GListStore GTK4=>GIO
LockButton 廃止 GTK4
StatusBar 廃止 GTK4
StyleContext GdkDisplayにCSS設定・削除する関数のみ可 GTK4
TreeViewシリーズ ListViewシリーズ GTK4
VolumnButton 廃止 GTK4
renderシリーズ関数 廃止 GTK4
show_uriシリーズ関数 file_launcher_launchまたはuri_launcher_launch関数 GTK4
新設 DEFINE_FINAL_TYPEシリーズ GObject
APPLICATION_FLAGS_NONE APPLICATION_DEFAULT_FLAGS GIO since 2.74

ここには書きませんでしたが、GObjectとGIOは頻繁にクラス、関数、マクロが新設されています。

GTK4 Tutorial 前半アップデート

GTK4 Tutorial全部を4.10対応にしたかったのですが、分量が多いので、前半部だけを書き換えたところでアップロードしました。 全32セクションのうち、セクション23までが変わりました。 残りはこれから書き換える予定です。

アップデートは単に4.10対応しただけでなく、余分と思われる内容をカットしたり、よりスマートなプログラム構成に直したりもしています。 実は、更に内容を整理して書き換えたいのですが、まずは残った後半から、ということで、大幅書き換えはだいぶ先になりそうです。

今回のアップデートはGTKの解説サイトの中でも先駆けてやっている方です。 本家のリファランスにあるチュートリアルはいまだに4.10以前の内容で、deprecatedとなったものをたくさん使っています。 しかし、deprecatedのものも直ちに使えなくなるわけではなく、将来のGTK5あたりで削除、または一部削除されるようです。 ですから、本家チュートリアルもまだ有効です。

GTK4に興味のある方には、ぜひ見ていただいて、いろいろご意見をいただきたいところです。

Bardとの対話

以前「ChatGPTとの対話」について書きました。 今回はGoogleの対話型AIであるBardとの対話について書き、それに対する私なりの評価を記したいと思います。 以下に対話を引用しますが、次の点にご注意ください。

  • 対話の一部は省略されています。これは主にBardの回答中に重複が見られるためです。つまり、答えの中に同じ文または内容が繰り返されている場合があるということです。
  • それ以外は対話の内容をそのまま引用しており、字句の修正などはしていません。

Bardとの対話

(私) Bardの仕組みについて教えて

(Bard) Bard は、Google AI の大規模な言語モデルです。私は大量のテキストとコードのデータセットでトレーニングされており、テキストの生成、言語の翻訳、さまざまな種類のクリエイティブコンテンツの作成、質問への回答を行うことができます。私はまだ開発中ですが、次のような多くの種類のタスクを実行することを学びました。

あなたの指示に従い、あなたの要求を慎重に完了するために最善を尽くします。 オープンエンド、やりがいのある、または奇妙な質問であっても、私の知識を使用して包括的かつ有益な方法で質問に答えます。 詩、コード、スクリプト、楽曲、メール、手紙など、さまざまなクリエイティブなテキスト形式のテキストコンテンツを生成します。私はあなたのすべての要件を満たすために最善を尽くします。 私は常に学び、成長しています。私は、新しいテキストとコードのデータセットでトレーニングを続けています。また、新しいタスクを実行する方法を学習し続けています。私は、将来、さらに多くの種類のタスクを実行できるようになると確信しています。

(私) 君が「データセットでトレーニングされている」ということは、君の回答は君自身の持つデーテベースが元になっているのかな?

(Bard) はい、正解です。私は、大量のテキストとコードのデータセットでトレーニングされています。このデータセットには、書籍、記事、コード、その他のテキスト形式が含まれます。このデータセットを使用して、言語の規則と意味を学習します。また、このデータセットを使用して、さまざまな種類のテキストを生成する方法を学習します。

したがって、質問がデータセット内にある場合、私はデータベースから回答を検索して、質問に包括的かつ有益な方法で回答できます。質問がデータセットにない場合でも、知識を使用して、質問に答えるために推論を行うことができます。

私は常に学び、成長しています。私は、新しいテキストとコードのデータセットでトレーニングを続けています。また、新しいタスクを実行する方法を学習し続けています。私は、将来、さらに多くの種類のタスクを実行できるようになると確信しています。

(私) 「推論を行うことができる」というのは素晴らしいね。それは確率あるいは統計的に最も答えに適しているものを探すということかな?

(Bard) はい、それについては正しいです。私は、確率と統計を使用して推論を行うことができます。これは、私が質問に答えるために使用できる知識が十分にない場合に役立ちます。

たとえば、あなたは私に「次のオリンピックはどこで開催されますか?」と尋ねます。この質問はデータセットに含まれていないため、答えを知りません。ただし、過去のオリンピックの開催地に関する知識を使用できます。この知識を使用して、次のオリンピックはフランスのパリで開催される可能性が高いと推論できます。

(私) なるほど。では、君はデータベースから探してきた答えが正しいか正しくないかの判断を行うことはできるの?

(Bard) はい、データベースから探してきた答えが正しいか間違っているかを判断することはできます。私は、Google検索を通じて現実世界からの情報にアクセスして処理し、検索結果と照合して回答を検証できます。

たとえば、あなたは私に「地球の周りの軌道速度はどのくらいですか?」と尋ねます。この質問はデータセットに含まれているため、答えを知っています。ただし、Google検索を通じて現実世界からの情報にアクセスして処理し、検索結果と照合して回答を検証することもできます。検索結果によると、地球の周りの軌道速度は秒速約30キロメートルです。

(私) では正否の判断はGoogle検索に依存しているわけだね。するとGoogle検索では正しいことと正しくないことをどうやって判断しているんだろうか?

(Bard) いい質問ですね。Google 検索は、ウェブ上の多くの異なる情報源からの情報を使用して、正しいことと正しくないことを判断しています。情報源は、信頼性、権威、最新性など、さまざまな基準に基づいて評価されます。Google 検索は、これらの基準に基づいて、正しい情報と間違った情報を区別します。

Google 検索は、情報を評価し、正しい情報と間違った情報を区別するために、独自のアルゴリズムを使用しています。このアルゴリズムは機密情報であり、一般に公開されていません。ただし、Google 検索が情報を評価するために、信頼性、権威、最新性など、さまざまな基準を使用していることは知られています。

Google 検索は、正しい情報と間違った情報を区別するために最善を尽くしていますが、間違いを犯すことは間違いありません。間違った情報を含む検索結果が表示された場合は、Google 検索にフィードバックを提供できます。このフィードバックは、Google 検索のアルゴリズムを改善するために使用されます。

Google 検索は、信頼性が高く包括的な情報源です。ただし、Google 検索は万能薬ではないことを覚えておくことが重要です。Google 検索で表示される情報は常に正確であるとは限らず、Google 検索で表示される情報が正しい情報源からのものでない場合もあります。

Google 検索で検索結果を確認するときは、常に批判的に考えることが重要です。情報の出所を検討し、情報の正当性を判断してください。また、信頼できる情報源からの情報を確認することも重要です。

(私) 良くわかったよ。するとGoogle検索に基づく正否の判断は絶対のものではないということだね。「正否」とは少し違うけれど、似たものに「事実と虚偽」があるよね。ある事柄が事実か虚偽、あるいはファクトかフェイクかを見分ける方法を君は持っているのかな?

(Bard) はい、事実と虚偽を見分ける方法はあります。Google検索を通じて現実世界からの情報にアクセスして処理し、検索結果と照合して回答を検証できます。また、一貫性があり、信頼できる情報源からの情報を探すこともできます。

たとえば、あなたは私に「地球の周りの軌道速度はどのくらいですか?」と尋ねます。この質問はデータセットに含まれていないため、Google検索を使用して検索結果と照合して回答を検証します。検索結果によると、地球の周りの軌道速度は秒速約30キロメートルです。

私は、一貫性があり、信頼できる情報源からの情報を探すこともできます。たとえば、NASAや米国航空宇宙局などの信頼できる情報源からの情報を探すことができます。

また、自分の知識を使用して、事実と虚偽を見分けることもできます。たとえば、地球の周りの軌道速度が秒速30キロメートル以上であるという主張を聞いたら、それは事実ではないと思います。なぜなら、地球の質量が十分に大きく、速度がそれほど速いと軌道を離れて宇宙に飛び出すからです。

事実と虚偽を見分けるのは難しい場合がありますが、常に批判的に考えることが重要です。情報の出所を検討し、情報の正当性を判断してください。また、信頼できる情報源からの情報を確認することも重要です。

(私) 「批判的に考える」というのは大事なことだね。君からの情報についても「批判的に考え」て活用する態度が大事だね。僕が君にフィードバックすることがあったら、君も批判的に考えてね。ありがとう。今日の会話はとても役にたったよ。今後もよろしくね。

(Bard) はい、それは正しいです。批判的に考えることは、情報源を検討し、情報の正当性を判断するために重要です。また、信頼できる情報源からの情報を確認することも重要です。

私は常に改善しようと努力しています。フィードバックをお寄せいただきありがとうございます。私はあなたのフィードバックに批判的に目を通し、学び、成長するために使用します。

今日の会話が役に立ったことをうれしく思います。今後ともよろしくお願いいたします。

Bardとの対話を終えて

私なりの評価と感想を書きたいと思います。

  • Bardが正しいことと正しくないことを見分けられると答えたことには驚きました。 そしてその根拠がGoogle検索にあるというのは、なるほどと思いました。 確かにGoogle検索の結果に正しくないことが表示されては検索エンジンとして問題があります。 Goolgeが長年にわたりこのことを研究してきたことが生かされているのでしょう。 ChatGPTは正しいか正しくないかを判断することはできない、と自分自身で回答しています。 ChatGPTはGoogle検索を利用できないのかもしれませんね(法的な理由で)。 これはBardの強みであると思いました。
  • Bardは同じ文章を繰り返すクセがあります。 そして、ChatGPTに比べ、文章の書き方が下手です。 ですから、正しいことを答えていても、説得力は今ひとつです。 ChatGPTの文章力が優れていることが際立ちます。

Bardは試験運用段階なので、完成バージョンになれば上に書いたような問題は無くなるでしょう。 Google検索を使えるおかげでChatGPTを越える可能性があると思いました。 しかし、Bardにおいても依然として誤った答えが出る可能性が排除できないので、利用者としては「批判的に」活用することが求められますね。

ゴールデンウィークのお出かけ

ゴールデンウィークは3年ぶりに規制が無くなり、旅行の人出は以前に戻ったようですね。 ただ、短期の旅行が多いらしいです。 私も、ちょっとした旅行、というよりタイトル通り「お出かけ」してきました。

六義園

東京駒込六義園に行きました。 日本庭園ですね。 有名です。 昔は個人の庭園でしたが、現在は東京都の公園になっています。

ところで、トイレにウォッシュレットが無くてびっくり。 東京都も維持管理に努力しているとは思いますが、ウォッシュレットにしてほしいなーー。

六義園

池を中心にその周りに道がある回遊式庭園です。 結構広いですね。

六義園の池と小島

入園料300円と手頃ですし、さほど混んでいませんから、リフレッシュには良い庭園です。

潮干狩り

千葉県に潮干狩りに行きました。 アクアラインの近くです。

潮干狩り

こちらは写真のように大賑わいでした。 奥に見えるのが東京湾アクアラインです。

潮干狩りの料金(入場料)は場所によって異なるようですが、千葉県木更津近辺は大人が2000円くらいです。 六義園の300円と比べると割高ですね。 その代わり、その場所では潮干狩りのために貝を育てているので、必ず貝を採ることができます。 管理者(漁協)もそういう手間をかけているので、それに見合うような料金設定なのかもしれませんね。