stylesheet

ラベル ai の投稿を表示しています。 すべての投稿を表示
ラベル ai の投稿を表示しています。 すべての投稿を表示

2023-05-28

diffusers の使い方を調べてGoogle Colab ノートブックファイルを作った

概要: この記事では、Google Colabのフリー版におけるAUTOMATIC1111版WebUIの制限について取り上げ、その代替手段としてHugging Faceのdiffusersを使用する方法について調査します。

最近、Google Colabのフリー版での利用制限が行われ、AUTOMATIC1111版WebUIの使用が禁止されました。さらに悪いことに、この制限はRemoteUI全体に広がっているようです。
この制限によって、以前は簡単にアクセスできていたWebユーザーインターフェース(WebUI)を使用することができなくなりました。AUTOMATIC1111版WebUIは、使いやすく便利なユーザーインターフェースでしたが、これからは別の方法を探さなければなりませんでした。

代替の手段を模索する必要がありました。
その結果、UIを持たないHugging Faceのdiffusersを利用することに決めました。diffusersは、モデルの推論や処理を行うためのPythonライブラリであり、UIを必要としないため、制限を受けずに利用することができます。これは私たちのニーズに合致していると考え、積極的に取り入れることにしました。

diffusersの使い方について詳しく調査しました。Hugging Faceの公式ドキュメンテーションやコミュニティのフォーラムなど、さまざまな情報源を活用しました。

2023-05-12

今はプログラマーにBardは必要ないかも

GoogleのChatGPT対抗AIBardが日本語対応とのことなので、プログラム生成を試してみた。 仕様書は、前回ChatGPTに生成させたドキュメントを使用する。

プログラムの実装

N.Y.

次のようなpythonプログラムを実装してください。

【タイトル】
マルチディスプレイ用の画像分割プログラム

【概要】
本プログラムは、1枚の画像をマルチディスプレイで使用するために複数の画像に分割するためのプログラムです。 分割数やディスプレイの縦横比を指定することができます。

【前提条件】

  • Python 3.6以上がインストールされていること。
  • 必要な外部ライブラリ(pillow)がインストールされていること。

【機能】

  • 画像の分割: 入力画像を指定された分割数に応じて複数の画像に分割します。
  • 出力: 分割された画像は指定された出力ディレクトリに保存されます。
  • ディスプレイの縦横比指定: マルチディスプレイの縦横比を指定することができます。デフォルト値は16:9です。

【入力】

  • input: 入力ファイルのglobパターンを指定します。1つまたは複数のファイルを指定することができます。
  • output: 分割された画像が保存されるディレクトリを指定します。デフォルト値は"output"です。
  • split: 入力画像を分割する数を指定します。デフォルト値は2です。
  • aspect: マルチディスプレイの縦横比を指定します。指定しない場合、デフォルト値は16:9です。

【出力】

  • 分割された画像が指定された出力ディレクトリに保存されます。

【エラー処理】

  • ファイルが存在しない場合、エラーが発生します。
  • ファイルが画像ファイルでない場合、エラーが発生します。
  • ファイルが開けない場合、エラーが発生します。
  • ディレクトリが存在しない場合、自動的に作成されます。

【ログ出力】

  • ログは標準出力に出力されます。ログレベルはINFOです。

【実行例】 次のように実行することができます。

$ python image_spliter.py input/*.jpg -o output -s 3 -a 4:3

【参考】

ChatGPT

マルチディスプレイ用の画像分割プログラムのPythonプログラムは次のとおりです。

import argparse
import os
from PIL import Image


def main():
    parser = argparse.ArgumentParser(description="Image splitter for multi-displays")
    parser.add_argument("input", type=str, help="Input image glob pattern")
    parser.add_argument("-o", "--output", type=str, default="output", help="Output directory")
    parser.add_argument("-s", "--split", type=int, default=2, help="Number of splits")
    parser.add_argument("-a", "--aspect", type=str, default="16:9", help="Display aspect ratio")
    args = parser.parse_args()

    if not os.path.exists(args.output):
        os.makedirs(args.output)

    for image_file in glob.glob(args.input):
        image = Image.open(image_file)
        width, height = image.size
        aspect_ratio = width / height

        if aspect_ratio != float(args.aspect):
            print("Warning: Image aspect ratio ({}) does not match display aspect ratio ({})".format(aspect_ratio, args.aspect))

        split_width = width // args.split
        split_height = height // args.split

        for i in range(args.split):
            for j in range(args.split):
                box = (i * split_width, j * split_height, (i + 1) * split_width, (j + 1) * split_height)
                image.crop(box).save(os.path.join(args.output, "{}-{}.png".format(i, j)))


if __name__ == "__main__":
    main()
コードは慎重に使用してください。詳細

このプログラムは、globを使用して入力画像を取得し、Pillowを使用して画像を分割します。分割された画像は指定された出力ディレクトリに保存されます。

2023-04-12

プログラマーには ChatGPT が必要だ

ChatGPT捗る。
これだけできると、非公開のプログラムコードも喰わせたくなる。
禁止されるのもわからないでもないな。

コードレビューの依頼

N.Y.

コードレビューをお願い

ChatGPT

もちろんです!コードを共有していただければ、レビューさせていただきます。

N.Y.
"""
マルチディスプレイ用の画像分割

python image_spliter.py -h

[requirements]
pillow
"""

import os
import glob
import argparse
import re
import logging
from PIL import Image, ImageFilter

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def split_image(name:str, output:str, split:int, aspect:str):
    img = Image.open(name)
    ax, ay = map(lambda x: int(x), aspect.split(':'))
    aspect_ratio  = ay / ax

    out_w = int(img.width / split)
    out_h = int(out_w * aspect_ratio)
    if out_h > img.height:
        out_w = int(out_h * aspect_ratio)
    
    x = int(img.width / 2 - out_w * split / 2)
    y = int(img.height / 2 - out_h / 2)
    folder, file_name = os.path.split(name)
    base_name, ext = os.path.splitext(file_name)

    logger.info(f'processing... {name}, {img.width}x{img.height} -> {out_w}x{out_h}')

    for n in range(split):
        p = os.path.join(output, f'{base_name}_{n}{ext}')
        cropped = img.crop((x, y, x + out_w, y + out_h))
        cropped.save(p, quality=95)
        logger.info(f'cropped: {p}')
        x += out_w


def aspect_type(value:str) -> str:
    if not re.match(r'^\d+:\d+$', value):
        raise argparse.ArgumentError('invalid value')
    return value


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='マルチディスプレイ用の画像分割')
    parser.add_argument('input', help='入力ファイル globパターン')
    parser.add_argument('-o', '--output', default='output', help='出力ディレクトリ')
    parser.add_argument('-s', '--split', type=int, default=2, help='分割数')
    parser.add_argument('-a', '--aspect', default='16:9', help='ディスプレイの縦横比', type=aspect_type)
    args = parser.parse_args()

    os.makedirs(args.output, exist_ok=True)
    for s in glob.glob(args.input):
        split_image(s, args.output, args.split, args.aspect)

    logger.info('done')

ChatGPT

このコードは、指定された入力画像を複数の画像に分割し、それらを出力する Python スクリプトのようです。以下は、いくつかのコメントです。

  • コード全体の構造は良く整理されており、コードが読みやすくなっています。
  • それぞれの機能は、独自の関数に分割されており、単一の機能にフォーカスされています。
  • パラメータの解析には、Python の標準ライブラリである argparse が使用されています。
  • コマンドラインオプションのヘルプは、"-h" オプションで表示されます。
  • エラーの検査には、正規表現が使用されています。

最後に、いくつかの改善の提案です。

2023-04-11

「卵高騰 卵かけご飯に 涙こぼす」 by ちゃっとじぷと

Q:卵が値上がりしていることを、川柳で。
A:卵高騰 卵かけご飯に 涙こぼす
Q:その心は?
A:普段当たり前に食べていた卵が高騰し、手が届かなくなってしまったという悲しみや無念さを表現しています。食糧価格の高騰は、日々の暮らしに大きな影響を与えるため、胸が痛くなる思いがします。
Q:手が届かなくなってしまったなら、白ごはんのほうが良いのでは?
A:確かに、卵かけご飯が手が届かなくなってしまった場合は、白ごはんだけでもお腹を満たすことができますね。身近な食材であっても、ありがたさを感じることが大切です。また、栄養バランスを考えて、他の食材で補うことも大切です。
Q:川柳つくりなおして。
A:卵が手が届かなくなってしまったとき、身近な白ごはんに目を向け、感謝の気持ちを持つことが大切だという心情を表現しています。日常の中で当たり前に食べているものでも、高騰したり手に入らなくなると不便や悲しさを感じますが、そんなときこそ自分がもっているものに感謝し、謙虚な気持ちを持つことが大切だということを表しています。
Q:ありがとう。もう寝ます。
A:おやすみなさい。良い夢を見てくださいね。

ChatGPT、おっさんの話相手に最高やな。老害が捗るわ。
なんか、かわいそう。

(ChatGPT Mar 23 Version)