banner
sanford

sanford

Have you seen the characters flashing in the neural circuit?
github
twitter

自動AI小説ツイートの実現について

PS: 市場にはすでに多くの有料ソフトウェアツールが登場しており、極虎漫剪や速推のようなパッケージ化されたツールがありますが、そのコア機能の実現は同じで、最終的には GPT の効果が試されることになります。今年登場した Sora は、この分野の進化版であり、今後は映画制作分野(UE4)に影響を与える可能性があります。

機能設計#

1、シーンの分割抽出:小説テキストの文分割、SD による画像生成、TTS テキストから音声への変換

2、小説内容 > 推論プロンプト(SD 描画)

3、画像と音声を統合した動画

モデル:
TTS (edge)、SD 描画モデル(ここではを使用)、GPT(ここでは Gemini を使用)

プロジェクトアドレス:story-vision

コアコード#

小説の分割抽出 GPT#

prompt = """私は小説の内容を分割し、原文の記述に基づいてシーンを推論してほしい;欠落または暗示された情報を推論し補完すること(人物の服装、髪型、髪色、顔色、顔の特徴、体型、感情、身体の動作などを含むがこれに限らない)、スタイルの記述(年代、空間、時間帯、地理環境、天候の記述を含むがこれに限らない)、物品の記述(動物、植物、食べ物、果物、おもちゃを含むがこれに限らない)、画面の視点(人物の比率、カメラの深度、観察角度の記述を含むがこれに限らない)を過度に行わないでほしい。カメラの言語を通じて、より豊かな人物の感情や感情状態を描写し、理解した後に文を生成して新しい記述内容を作成してください。出力形式を次のように変更してください:イラスト1:原文の記述:対応する原文の全ての文;画面の記述:対応する画面のストーリー内容;画面のキャラクター:画面に登場するキャラクター名;服装:主役はカジュアルな服装;位置:バーカウンターの前に座っている;表情:顔の線は穏やかで、表情は心地よい;行動:手に持っている酒杯を軽く揺らしている。環境:バーカウンターの背景は暗いトーンで、キャンドルの光が背景で揺らめき、ぼんやりとした感覚を与える。これらの5つの要求を理解した場合は、これらの5つの要求を確認し、結果はこの5つの内容だけを返してください。小説の内容は以下の通りです:"""

def split_text_into_chunks(text, max_length=ai_max_length):
    """
    テキストを最大長でチャンクに分割し、行の区切りでのみ分割が行われるようにします。
    """
    lines = text.splitlines()
    chunks = []
    current_chunk = ''
    for line in lines:
        if len(current_chunk + ' ' + line) <= max_length:
            current_chunk += ' ' + line
        else:
            chunks.append(current_chunk)
            current_chunk = line
    chunks.append(current_chunk)
    return chunks

def rewrite_text_with_genai(text, prompt="このテキストを書き直してください:"):
    chunks = split_text_into_chunks(text)
    rewritten_text = ''
    # pbar = tqdm(total=len(chunks), ncols=150)
    genai.configure(api_key=cfg['genai_api_key'])
    model = genai.GenerativeModel('gemini-pro')
    for chunk in chunks:
        _prompt=f"{prompt}\n{chunk}",
        response = model.generate_content(
            contents=_prompt, 
            generation_config=genai.GenerationConfig(
                temperature=0.1,
            ),
            stream=True,
            safety_settings = [
                {
                    "category": "HARM_CATEGORY_DANGEROUS",
                    "threshold": "BLOCK_NONE",
                },
                {
                    "category": "HARM_CATEGORY_HARASSMENT",
                    "threshold": "BLOCK_NONE",
                },
                {
                    "category": "HARM_CATEGORY_HATE_SPEECH",
                    "threshold": "BLOCK_NONE",
                },
                {
                    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                    "threshold": "BLOCK_NONE",
                },
                {
                    "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                    "threshold": "BLOCK_NONE",
                },
            ]
        )
        for _chunk in response:
            if _chunk.text is not None:
                rewritten_text += _chunk.text.strip()
    #     pbar.update(1)
    # pbar.close()
    return rewritten_text

分割出力
画像の説明を追加してください

SD 文生図#

SD のプロンプトは上記の出力された分割テキストを基に GPT が作成したものです。

from diffusers import StableDiffusionPipeline
from diffusers.utils import load_image
import torch



model_path = "./models/cetusMix_Whalefall2.safetensors"
pipeline = StableDiffusionPipeline.from_single_file(
    model_path,
    torch_dtype=torch.float16,
    variant="fp16"
    ).to("mps")
generator = torch.Generator("mps").manual_seed(31)

def sd_cetus(save_name, prompt):
    prompt = prompt
    image = pipeline(prompt).images[0]
    image.save('data/img/'+ save_name +'.jpg')

画像効果
画像の説明を追加してください

TTS 音声生成#

オンラインには多くの TTS に関する情報がありますが、ここでは edge が提供するものを使用しました。

import edge_tts
import asyncio



voice = 'zh-CN-YunxiNeural'
output = 'data/voice/'
rate = '-4%'
volume = '+0%'

async def tts_function(text, save_name):
    tts = edge_tts.Communicate(
        text,
        voice=voice,
        rate=rate,
        volume=volume
        )
    await tts.save(output + save_name + '.wav')

動画効果#

[video(video-7erojzmT-1713340240300)(type-csdn)(url-https://live.csdn.net/v/embed/379613)(image-https://video-community.csdnimg.cn/vod-84deb4/00b03862fc8b71eebfc44531859c0102/snapshots/0bc4b0ed08a54fc2a412ee3ad1f3fdf2-00005.jpg?auth_key=4866938633-0-0-f335ae8248a7095d7f5d885a25aba80e)(title - 第 1 章 進局子了_out)]

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。