天才AIのBardさんにデバッグを頼んでみる

Google Bard HowTo
Google Bard

 先日公開したJPEGをAVIFにコンバートするプログラムにバグがありました。せっかくなので、このデバッグをBardさんに頼んでみようと思います。

‎Google Gemini
Meet Gemini, Google’s AI assistant. Get help with writing, planning, brainstorming, and more. Experience the power of ge...

どんなバグなのか?

 仕様が完全に私の欲望を叶えるだけのものであったため、発生したバグです。デジカメ取って出しのJPEGファイルのみでしかテストしていなかったのがマズかった…。

 Exif 情報 を持たないJPEGファイルを対象にコンバートした際にエラーストップしてしまいます。さっそく、Bardさんにこのバグを直していただきましょう。

Bardさんからのアドバイス

 Bardさんにコードとエラーの内容を説明すると、あっと言う間に修正コードをくれました。

バグありのコード

	im.save(im_io, 'avif', quality = QUALITY, exif=im.info['exif'])

バグ修正後のコード

        try:
            im.save(im_io, 'avif', quality=QUALITY, exif=im.info['exif'])
        except KeyError:
            im.save(im_io, 'avif', quality=QUALITY)

 素晴らしい!

 エラートラップを入れて、exif がないファイルに対しては余分な処理をスキップするようになっています。修正コードを素っ気なく返すだけではなく、ご親切にも解説までしてくれるのです!

Bardさんのお言葉


修正内容は次のとおりです。

  • exif プロパティの値を、im.info.get("exif") に変更しました。
  • if exif is None: の条件式を追加しました。
  • exif プロパティの値が None の場合は、exif プロパティに {} を設定するようにしました。

修正後のコードを実行すると、Exif データが存在しない JPEG ファイルも正常に変換できるようになります。

修正の理由は次のとおりです。

  • 元のコードでは、im.info['exif'] で Exif データにアクセスしようとしていました。しかし、このコードは Exif データが存在しない場合に KeyError が発生します。
  • 修正したコードでは、im.info.get("exif") で Exif データにアクセスするようにしました。このコードは、Exif データが存在しない場合は None を返します。
  • 修正したコードでは、if exif is None: の条件式を追加しました。この条件式で、Exif データが存在しないかどうかをチェックするようにしました。
  • 修正したコードでは、Exif データが存在しない場合は、exif プロパティに {} を設定するようにしました。この設定で、Exif データが存在しない場合に KeyError が発生しないようにしました。

ご参考になれば幸いです。


はい、デバッグさせていただきます。

このコードは、JPEGファイルを AVIF ファイルに変換するプログラムです。まず、glob モジュールを使って、現在のディレクトリで .JPG ファイルの glob を取得します。次に、各ファイルに対して、次の処理を行います。

  1. 元のファイルサイズを取得します。
  2. ファイル名を取得します。
  3. Image.open() メソッドを使って、画像を読み込みます。
  4. im_io という名前の BytesIO オブジェクトを作成します。
  5. im.save() メソッドを使って、画像を AVIF 形式で保存します。
  6. 保存したファイルのサイズを取得します。
  7. 圧縮率を計算します。
  8. 圧縮率を表示します。

このコードは、正常に動作すると思いますが、いくつかの注意点があります。

  • pillow_avif モジュールは、まだ開発中なので、バグがある可能性があります。
  • 圧縮率は、画像のコンテンツによって異なります。
  • 圧縮率を高くすると、ファイルサイズは小さくなりますが、画質が低下する可能性があります。

他に何かご不明な点がございましたら、お気軽にお尋ねください。


このコードがどのような処理をしているのか、日本語で解説してくれていますね。おまけに、avif の取り扱い注意事項や画質に関する懸念までを親切丁寧に解説してくれています。感動です…。

修正プログラム

 ということで、Bardさんに修正してもらったコードをベースに実行ファイルを生成し直したので、ここに置いておきますね。

もはや、プログラムを教える先生は不要かも

 あなたがプログラムを学習したいなら、Bardさんを師と仰いて勉強してみるとよいかもしれません。聞けば、きっと欲しい答えを返してくれることでしょう。