Image Playgroundで使えない「コンセプト」

に公開

以前Image Playgroundの簡単な使い方を書きました。
触ってみたい方はこちらを参照してください。
https://zenn.dev/articles/a2bada6d08f6c5/edit

使えない「コンセプト」

アプリからImage Playgroundを呼び出す際、作成に利用するコンセプトを提供できます。
コンセプトでは使えないものがあるので紹介します。

国名

「Japan」「Canada」「India」のような国名は使えない一方で、「Japanese」「Canadian」「Indian」のような国に関連することを指す単語は利用できます。
例えば「Mountain」は生成できても、「Mountain」「Japan」は生成できません。
一方で「Japanese Mountain」や「Japanese」「Mountain」は生成できます
Image Playgroundの3枚スクリーンショット。Mountainで生成した結果。Japan Mountainで生成した結果。Japanese Mountainで生成した結果

企業名・商品名

企業名は同音異義語で単語として存在するもの以外は生成できません。「Apple Watch」などの商品名も生成できません。
例えば「Apple」「computer」や一般的な言葉として利用される「powerpoint」は生成できます。
生成された正方形の画像が3枚横並び。左からプレゼンテーションの前に立つキツネのような動物。2つのデスクトップパソコンの前にりんご。机の上に置かれたパソコン上にりんごの画像。
powerpoint、apple・computer、apple computerの生成例

使えないコンセプトの回避方法の例

企業名

企業の名前はSwiftの自然言語処理(Natural Language)で回避することができます。
ここではNLTagorganizationNameを活用すると企業名を見つけることができます。
以下は企業名を置き換える処理の例です。

import NaturalLanguage

func replaceOrganizationNames(with replacement: String = "company", in text: String) -> String {
    let tagger = NLTagger(tagSchemes: [.nameType])
    tagger.string = text
    let textRange = text.startIndex..<text.endIndex
    var modifiedText = text
    
    tagger.enumerateTags(in: textRange, unit: .word, scheme: .nameType, options: [.omitWhitespace, .omitPunctuation]) { (tag, range) -> Bool in
        if let tag = tag, tag == .organizationName {
            let detectedOrganization = String(modifiedText[range])
            modifiedText = modifiedText.replacingOccurrences(of: detectedOrganization, with: replacement)
        }
        return true
    }
    
    return modifiedText
}

回避する単語リストを作成

特定の分野・語群でのみアプリからコンセプトを与える場合、ある程度想定できるので配列などでリストを用意した上で置き換え・除去することもできます。この際前述のNLTagwordに変更することで各単語の比較ができます。

Discussion