2022年8月28日日曜日

Stable Diffusionのblack image(NSFW)を解消する方法

  •    
  •  Stable Diffusionで画像を生成した際、「Potential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed.」というエラーが出て生成できない場合があります。

    NSFWってなんだろう?と調べてみたところ、【Not Safe For Work】 職場閲覧注意の略だそうです。

    これを自己責任で外す方法です。

    前提:ローカル環境に「pip install diffusers」でインストールしていること

    手順:

    ① StableDiffusionのインストール先を探す

    「pip show diffusers」コマンドでインストール先を探します。

    実行結果の「Location:」に記載されています。

    その場所に「diffusers」フォルダがあります。

    ② ソースをコメントにする

                (1) エディターで開く
                    ①のLocationフォルダをエディターで開きます。例はVisualStudioCodeです。

                (2) safety_checker.pyを開きます。

                    \diffusers\pipelines\stable_diffusionフォルダの下にあります。

                (3) 該当箇所をコメント

    以下の部分をコメントにします。先頭に「#」をつければコメントです。




     

                   【変更後】

     

                     

     

     

    2022年8月18日木曜日

    今話題の「midjouney」用、呪文生成アプリを作った

     最近、AIに文章で指示をさせて絵を書かせる「midjourney」にはまっています。

    英語でしか指示できないので、毎回翻訳かけてコピペして・・が面倒なので簡単に呪文(prompt)を作成するアプリを作成しました。

    どんなアプリなのかちょっと紹介。(2022/8/18時点 ver0.5)

    ①翻訳機能

    DeepLを使って、日本語→英語に翻訳してくれます。

    ↓ 


     midjourneyへコピペできるように、「/imagine prompt:」もつけてくれます。

     アイコンをクリックして、クリップボードにコピーします。


    ② 呪文一覧

     よく使うワードをチェックボックスで選択できます。チェックをつければ、promptも自動生成されます。




    ③ OPTION設定

    画像の比率やサイズ、クオリティーなどを指定できます。

    とりあえず暇をみてバージョンアップしていこうと思います!

    ▼ツールのリンク
    https://meta-develop.net/mid/

    ▼開発環境
     サーバー:Oracle Cloud (無料枠)
     翻訳:DeepL(無料枠)
     言語:フロントエンド:  React + material ui
        バックエンド: node.js   
           ※node.jsは、nginxでリバースプロキシかけてます。



    2021年11月9日火曜日

    Unityで花札を作る ver03: 札を回転させてみる

    ※もはやVRは先になりそうなので、タイトルをちょっと変更 

    花札の札をめくる動作について考えてみます。
    プログラミングで回転させるのは、地味に面倒です。




    そこで、DOTWeenを使うと簡単に実現できます。

    参考)Unity DOTween 入門

    ▼ソースコード
    その場で回転ではなく、上に少し移動させながら回転させています。

    using DG.Tweening;  //DOTween
    using UnityEngine;

    public class Fuda : MonoBehaviour
    {
        void Start()
        {
            //移動(相対的にy軸へ0.5、0.5秒かけて移動)
            this.transform.DOMove(new Vector3(0f, 0.5f, 0f), 0.5f).SetRelative(true);
            //回転(90度、横回転)
            this.transform.DORotate(new Vector3(0f, 90f, 0f), 0.5f);
        }
    }



    実際には、回転が終わったら場に移動させたいです。
    その場合は、Sequenceを使うとよいのですが

    コルーチンとラムダ式を使う方が後々楽な気がします。
    具体的には以下のような感じです。
    using DG.Tweening;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class DebugCards : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            //コルーチンの呼び出し
            IEnumerator method = RotationFuda(this.transform, () => {
                Debug.Log("回転が終わった後にこの処理が実行される");

            });
            StartCoroutine(method);
        }

        //札を回転コルーチン
        //target: 回転対象のTransform
        //nextAction: 次に実行したい関数(ラムダ式で渡される)
        IEnumerator RotationFuda(Transform target, System.Action nextAction) {
            target.DOMove(new Vector3(0f, 1.0f, 0f), 1f).SetRelative(true);
            target.DORotate(new Vector3(0f, 90f, 360f), 1f);

            //1.5秒待機
            yield return new WaitForSeconds (1.5f);        

            //次の処理
            nextAction();        
        }

    }


    ラムダ式は無名関数と呼ばれており、関数だけど名前なしの使い捨て(その場限りの)関数っていう感じです。具体的には以下の処理です。
     () => {
          Debug.Log("回転が終わった後にこの処理が実行される");
      }

    これ自体を引数として関数へ渡し、パラメータとして受け取りますがその際に「System.Action」で受け取ります。←ポイント

    受け取った後は、そのまま関数として実行することができます。
      //次の処理
      nextAction();        

    ラムダ式が便利すぎて多用していますが、ちょっと間違えると修正が大変なのがデメリットですね・・・

    というわけで、札の動きがそれっぽくなりました。


    普通の花札だとつまらないので、エフェクトを大量に使っていこうと思います。

    2021年11月6日土曜日

    Unity2020でUnity Physicsを使う(設定)

    Unityの新しい物理演算の方式としてUnity Physicsというのがあります。
    どうやら従来型よりも高速に動くということなので試してみよう!!
    と思ったら、そもそも使うための設定がわからなかったのでメモです。

    1. プロジェクト設定から、Package ManagerのPreview版を使用するにチェックします


    2. Package Managerを開きます

    3. パッケージ種類をUnity Registryに変更します

    4. Package Manager の左上の+ボタンから Add package from git URL を選択します

    5. パッケージ名に「com.unity.physics」を入れ、Addをクリックします

    6. インストールが始まり、成功すれば追加されます


    Hybrid Rendererも必要になりそうなので、同様の手順で「com.unity.rendering.hybrid」を追加しておきます。

    手順の詳細は、Unityの公式ページに書いてありました。
    2020から面倒になったようですね。

    VRで花札を作ろう part02:ひとまず場に札を表示させてみる

    VRで花札を作ろう part02 : ひとまず場に札を表示させてみる

    花札の見た目だけでも先に作ろうと思い、花札を場に配るところまでを作成。3Dにしているだけでなんだかリアルに見えますね。スマホをイメージして縦長の画面にしました。



    札はアセットを買ってしまおうか悩んだ末、フリーで配布していただいている素材をBlenderで3Dモデル化して使いました。48枚あるので地味に時間はかかりましたが・・・

    ▼【素材】花札 48枚+4枚セット
    https://www.pixiv.net/artworks/47260765

    そういえば、いつの間にかUnityのResourcesフォルダは非推奨になっていたのですね。
    https://learn.unity.com/tutorial/assets-resources-and-assetbundles#5c7f8528edbc2a002053b5a7
    花札は札が48枚あるので、プログラムで一気に読み込もうと思っていましたが非推奨と言われると微妙ですね。
    良い方法が思いつかなかったので、全部Prefab化しておいて、プログラムに渡す方法にしてみましたがどうなんでしょうか・・・


    2021年11月5日金曜日

    [OculusQest] Tello x VR その2

    2020年の2月ごろにやろうと計画しておきながらずっと放置していましたが、今年の三月に、とあるイベント向けに作り上げてみました。

    その時の資料の抜粋です。
    一番悩んでいたことは、どうやって操作しよう?っていう感じでしたが、 ちょうどハンドトラッキングがサポートされたので、ピンチング(指でわっかを作る)で操作することにしました。 
     結果、理想通りのものができましたが、操作は激ムズです笑

    プログラミング部分については、「その1」で使ったライブラリをちょっとカスタマイズして動かしました。その辺は、またの機会に説明しようと思います。

    VRで花札を作ろう part01

     長らく更新をしていませんでしたが、そろそろ新しいことをやろうと思いVRで花札を作ってみようかなと思っています。

    まずは実験的に、Unity + WebGLで動く花札を作ってみます。

    初めてWebGLでBuildしてみましたが、意外といい感じに動きますね。

    ▼実行時のイメージ










    ▼実際の実行(WebGL版)

     
     単純に花札を上から降らせてみただけです・・・