ウェブトゥーン | TamLab 授業のおもちゃ箱 https://tamlab.fc2.page 情報系科目の講義資料とツールを公開 Sat, 30 Nov 2024 11:02:47 +0000 ja hourly 1 https://wordpress.org/?v=6.7.2 PythonアプリでSpeech SDKを使う https://tamlab.fc2.page/category-system/category-programing/2551/ https://tamlab.fc2.page/category-system/category-programing/2551/#respond Sat, 30 Nov 2024 11:02:46 +0000 https://tamlab.fc2.page/?p=2551 Pythonで作るアプリケーションソフトにMicrosoft AzureのSpeech SDKを組み込もうとしています。主な目的は,PPTXファイルにナレーションを組み込むアプリ(PowerpointNarrator)のテキスト入力の補助です。インストールの手順などの備忘録として残しておきます。

Azureについて

Azure(アジュール,Microsoft Azure)は,Microsoftのクラウドコンピューティングサービスです。様々なサービスの中にSpeech Serviceがあり,マイクロフォンから入力した音声データをテキスト化するSpeech to Textなどに使うことができます。

以下,参考にしたURLはその都度紹介します。

SDKのインストールの手順

Quickstart: Recognize and convert speech to text

クイック スタート: Speech SDK のインストール

を参考にしました。

準備

以下のような手順で進めました。

1)システム要件を確認

  • Windowsの場合,64bitターゲットアーキテクチャが必要(Windows10以降である必要)
  • プラットフォームに対応した Visual C++ 再頒布可能パッケージがインストールされていること
  • Python のバージョンは 3.8 以降

2)Azureアカウントを作成し音声サービスを使えるようにする

私はAzureのアカウントを持っていないので,次のような作業になりました。

  • Azureアカウントを作成する
  • サービス用のAzure サブスクリプションとSpeech resourceを作成
  • Speech resource key と regionコードを取得する

少し詳しく説明します。

・Azureアカウントを作成する
 https://azure.microsoft.com/ja-jp/free/ にアクセスしてアカウントを作成しました。
 Microsoft Accountを持っていることが必要です。Azureの無料アカウントは、新規Azureユーザーのみ1つだけ利用可能となっています。
 必要な情報を入力し,最後にクレジットカードによる認証を求められました。あくまでも認証のためで,入金が必要になった場合は別途要求する・・・とのことです。しかし,もしこのサイトがMicrosoftを騙るサイトだったらえらいことになっちゃいます。いったん作業をやめて考えてから,もう一度やり直しました。

支払いが発生しないアカウントはカード無しで作成するようにしてもよいのにと思います。ユーザ側もきちんとサービスが働いていることを確認できれば,偽サイトではないとわかるのですから。でも,始めのうちはサービスを提供するようにした巧妙な偽サイトを作られたら,どうしようもありませんが。

・Azure サブスクリプションを作成
 Azure のPortalサイトのホームで“サブスクリプション”と表示された鍵の形のアイコンをクリックし新規の無料サブスクリプションを作成しました。サブスクリプションの名前はサイト側で用意した“Azure subscription 1”をそのまま使いました。

・音声サービスのリソースを作成
 ホームから“音声サービス”のページに移動し,メニューにある“作成”をクリックするとSpeech Services の作成というタイトルのページに移動します。

次の図1のように,幾つか設定する項目があります。

図1 Speech Services の作成ページの表示

  • サブスクリプション
    使用するサブスクリプションを選びます。“Azure Subscription 1”しかないので,そのままにします。
  • リソースグループ
    既存のグループはないので,新規作成します。リソース名はSpeech2Textとしました。
  • リージョン
    アカウントを持つユーザの所属する地域です。Japan Eastを選択しました。(図1ではEast USとなっています。)
  • 名前
    適当に入力しました。ちゃんと考えて決めればよかった・・・。
  • 価格レベル
    Free F0を選択しました。

この後の操作で,「タグ名と値」の設定を要求されました。上の図には表示されていません(再現できなかった)。タグ名:Tag0,値:0として設定して,特に今のところ問題はないようです。

・Speech resource key と regionコードを取得
 音声サービスをPythonコードから利用する際にSpeech resource key とregionコードが必要になります。これらを取得するには,音声サービスリソースのページに移動します(ホームのリソース欄でリソース名をクリック)。“キーとエンドポイント”という項目を見ます。

図2 キーとエンドポイントなどの設定

Speech resource key:“キー1”の右端をクリップしてをコピーして取得しました。長い文字列です。このキーは共有しないようにすることが必要なので,作成したアプリを他のユーザに使ってもらう場合には注意が必要です。

regionコードは,“場所/地域”の欄に書かれている“japaneast”という文字列です。

Speech SDK for Pythonのインストール

クイック スタート: Speech SDK のインストール というサイトの記述に従って作業をしました。

pip install azure-cognitiveservices-speech

でインストールしました。

動作確認

サンプルコードをダウンロード

動作確認するため,サンプルコードを探しました。以下の2つのファイルをダウンロードしました。

quickstart.py 参考にしたサイトのURL

speech_recognition.py 参考にしたサイトのURL

リスト1 quickstart.py

# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE.md file in the project root for full license information.

# <code>
import azure.cognitiveservices.speech as speechsdk

# Creates an instance of a speech config with specified subscription key and service region.
# Replace with your own subscription key and service region (e.g., "westus").
speech_key, service_region = "YourSubscriptionKey", "YourServiceRegion"
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)

# Creates a recognizer with the given settings
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

print("Say something...")


# Starts speech recognition, and returns after a single utterance is recognized. The end of a
# single utterance is determined by listening for silence at the end or until a maximum of about 30
# seconds of audio is processed.  The task returns the recognition text as result. 
# Note: Since recognize_once() returns only a single utterance, it is suitable only for single
# shot recognition like command or query. 
# For long-running multi-utterance recognition, use start_continuous_recognition() instead.
result = speech_recognizer.recognize_once()

# Checks result.
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))
# </code>

5行目に
import azure.cognitiveservices.speech as speechsdk
とあります。音声/テキスト変換のサービスをするために,このimport文が必要になります。

また,9行目の,
speech_key, service_region = “YourSubscriptionKey”, “YourServiceRegion”
とあります。式文の右辺にある文字列”YourSubscriptionKey”を取得したSpeech resource keyの長い文字列に,”YourServiceRegion”を”japaneast”に,それぞれ置き換えます。

リスト2 speech_recognition.py

import os
import azure.cognitiveservices.speech as speechsdk

def recognize_from_microphone():
    # This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION"
    speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), region=os.environ.get('SPEECH_REGION'))
    speech_config.speech_recognition_language="en-US"

    audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    print("Speak into your microphone.")
    speech_recognition_result = speech_recognizer.recognize_once_async().get()

    if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
        print("Recognized: {}".format(speech_recognition_result.text))
    elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
        print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
    elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
        cancellation_details = speech_recognition_result.cancellation_details
        print("Speech Recognition canceled: {}".format(cancellation_details.reason))
        if cancellation_details.reason == speechsdk.CancellationReason.Error:
            print("Error details: {}".format(cancellation_details.error_details))
            print("Did you set the speech resource key and region values?")

recognize_from_microphone()

動かしてみた

quickstart.pyを使って動作確認します。

マイクロフォンを接続して実行します。コンソールに何か喋るようにプロンプトが表示されるので,日本語でしゃべると,図3のようにテキストが表示されます。でも,英語アルファベットを使ったよくわからない文字列が表示されました。

図3 何の言語だろう?

変換の対象となる言語の設定が日本語設定になっていないためでしょう(デフォルトの言語が何なのかは,わかりません)。

もう1つのサンプル speech_recognition.pyを見ると,7行目に
speech_config.speech_recognition_language=”en-US”
とあります。ここで,言語をアメリカ英語に設定しているようです。Implement language identificationなどのサイトを見ると,この文字列を”ja-JP”に変換すれば日本語になりそうです。そこで,quickstart.pyの10行目の後ろに,

speech_config.speech_recognition_language=”ja-JP”

という行を追加して動かすと,マイクロフォンから入力した日本語の音声をテキストに変換できました。かな漢字変換もできています。

図4 ちゃんと日本語に変換された

他の言語の指定については,Speech SDKのドキュメントで確認するとよいでしょう。

以上で大体のことがわかりました。SDKのドキュメントを探して,それを参考にしながらアプリに組み込んでいく予定です。

]]>
https://tamlab.fc2.page/category-system/category-programing/2551/feed/ 0
縦スクロール漫画の制作の基礎がわかる本 https://tamlab.fc2.page/category-books/2488/ https://tamlab.fc2.page/category-books/2488/#respond Fri, 15 Nov 2024 10:19:00 +0000 https://tamlab.fc2.page/?p=2488 パク ヨンジョ/著,金 智恵/訳:縦スクロール漫画制作の基礎がわかる本,翔泳社(2024)

縦スクロール漫画のテクニックはPPT教材に使えるか?

ということを考えていたので,図書館の新刊コーナーで見つけて,思わず借りてしまいました。

PPT教材に使えるのか,ということに関する結論からいうと

  • 縦スクロール漫画(ウェブトゥーン)はPPTのスライドショーと構造的に類似点が多い
  • しかし,ストーリーの提示を目的としている漫画のテクニックは,数学や工学のトピックの理解を目的としているスライドショーにはダイレクトに適用できないだろう

と感じました。そもそも目的がエンターテインメントと教材とでは異なっているので,当然といえば当然なのです。

エンターテインメント関連の技法書としては?

なかなか,いいのでは?

しかし,教材作製から離れて,エンターテインメント関連の技法書として読むと,以下に挙げる点でよくできていると感じました。

  • 漫画や映画さらにアニメなど「絵・動画とテキスト・音声で構成されるエンターテインメント向け媒体」を制作する上での,基本的な内容が解説されている
  • 解説はシステマチックで,図版も多い
  • 指示は具体的

本書で紹介されている技法や制作プロセスは,ウェブトゥーンだけに限定されいません。従来の漫画やアニメだけでなくテキストのみの小説などにも応用できる,基本的かつ一般化できる理論や技法がたくさん紹介されています。

説明の仕方はちょっと理屈っぽいと感じる人はいるかもしれません。しかし理屈だけではなく,どのようにすればよいかも具体的に説明されています。漫画の創作に関する本なので当然なのでしょうが,図版は多いです。ほとんどの項目の説明に図が添えられています。

以上のようなことから,この本自体が初心者向けの教材を作るときの「お手本」にもとなると感じました。

私は漫画制作に関する技法書を詳しく読んだことがありません。ですから本書が,これからウェブトゥーンや従来の二次元構成の漫画を描こうと考えている人に役に立つかどうかは,判断できません。でも,私にとっては,知らない,あるいは聞いたことはあるけれど意味のわからなかった用語が基本から解説されています。あまり期待しないで手に取った本なのですが,読んで得した気持ちになりました。

ウェブトゥーンとPPTスライドショーの比較は別稿に・・・

ウェブトゥーンとPPTスライドショーの違いについても書こうと考えていたのですが,まとめようとすると長くなりそうなので,別稿にすることにしました。その目的で描いた図のバリエーションの1つが下です。

図1 ウェブトゥーン(縦スクロール漫画)は「縦読みの絵巻物

この投稿では,本書「縦スクロール漫画の制作の基礎がわかる本」の簡単な紹介だけに留めておきます。

目次と筆者紹介

本書の目次と筆者紹介はAmazonのサイトでも閲覧できますが,以下に示しておきましょう。

PART 1 スマートフォンに適したコンテンツ、縦スクロール漫画
PART 2 縦スクロール漫画で作るストーリーテリング
PART 3 縦スクロール漫画の創作・制作プロセス
PART 4 縦スクロール漫画の演出技法
PART 5 心理描写とシーンの演出

ストーリー作りから始まって,創作・制作プロセスや演出技法について詳しく書かれています。PART 2~PART 4のタイトルを見ると“縦スクロール漫画”に限定しているように感じられるかもしれません。でも,内容は従来型の二次元配置漫画やテキストのみの文芸作品にも応用可能だと思います。

本書の「はじめに」と奥付の紹介によると,パクの経歴は以下のようなものです。

小さいころから漫画を描くことが好きだった。大学ではコンピュータを専攻しIT企業に就職した。30代半ばに漫画に挑戦したいと考えて大学院に進学し漫画とアニメーションを専攻し,芸術学の修士と博士号を取得している。しかし,大学院では研究が目的であるため,ストーリーの作成や作画は独学で学ぶしかなかった。

その後,IT企業で働きながらウェブトゥーン作家としてデビューした。しかし,連載を始めた5つの作品は全て3か月で終了することを余儀なくされ,ちゃんとした作品を創りだし続けることの難しさを味わった。そこでスタジオチームを結成することにし,その結果,ウェブトゥーンの本格的な連載ができるようになった。現在のパクは,ウェブトゥーン作家兼プロデューサーとして活動し,大学などでの教育にも従事している。

<詳しく読む>

技法書マニア
私の学校での図画工作や美術の成績は惨憺たるものでした。それなのに,ちょこちょこ落書きするのは好きでした。そして,ある程度お小遣いが自由に使えるようになると,美術関係の技法書や,ちょっとお高い「デザインの現場」などの雑誌も購入して読んでいました。自分ではちゃんとした絵は描けないのに,どういう道具を使うのかとか,こういうイラストはどういう手順で描くのか,というツールや作製プロセスには興味があったのです。

<閉じる>

本書の「はじめに」に,

最初に私が経験した困難を振り返り,縦スクロール漫画制作の入口だと思われるネーム(絵コンテ)の演出を基本に,作品創作初期に難しさを感じている作家志望者の方々や,縦スクロール漫画作品を初めて制作する作家の皆さんのために構想に至った本書が,縦スクロール漫画の制作に少しでもお役に立てればと願っています。(p.004)

と書かれていることから,作家志望者など初心者を対象とする入門的な内容であることがわかります。

感想

印象に残ったところを挙げていきます。

ストーリーテリング

本書のPART 1でウェブトゥーン(本書内では“縦スクロール漫画”と呼んでいる)の特徴が紹介されていて,PART 2からが本格的な内容になります。その始まりのPART 2で述べられているのがストーリーテリングなので,これが,まず押さえておくべき大事なポイントであることがわかります。PART 2の冒頭で,

ストーリーは,時間の流れの通りに羅列された物語のこと。

ストーリーテリングは,物語を構成し効果的にテーマを伝える方法のこと。(p.030)

のように,ストーリーテリングの定義を与えて,それに続いて,ストーリーテリング化に必要な要素や劇的な構造の創り方について説明があります。私は,この部分がとても面白いと思いました。このような分野の知識がほとんど無いこともありますし,講義や研究発表の資料を作るときは,いつも「この内容をどういうストーリーで伝えようか」と考えていたからです。

演出技法

PART 4,PART 5では様々な演出技法について説明されています。紹介されているものの多くは,映画の演出技法を基にしているようです。コマが二次元に配置された従来の漫画でも,映画の演出技法の影響を受けている(と何かで読んだ覚えが・・・)ようです。

コマの配置が上下の一次元配置であるウェブトゥーンは,従来の漫画と異なり視線の左右・上下の移動というリテラシー(読みのスキル)は不要になります。その分,視線の移動がさほど要求されない映画で使われている演出技法との馴染みが,より強いのだと思います。

気になったところ

気になったところもあります。本書の記述は「システマチック(体系的)だ」と書きました。筆者のパクがIT技術者を経て大学院で博士号まで取った研究者だったということが関係しているのだろうと思います。理屈っぽい印象を受けるのもそのためでしょう。(研究者・学者は,名前を付けたり分類したり一般化したり法則を見つけたり,理屈をつけようとするのが習い性なので仕方ないのです。)

しかし,その理屈の基になる根拠が示されていないことが多いのです。例えば,PART 4の「左右・上下の視線の流れで作る感情表現」の項で,左から右への視線の流れや右側の空間は未来を意味する,逆に右から左への視線の流れや左側の空間は過去を連想させる,と述べられています。しかし,その根拠は示されていません。

左→右の方向が未来を意味するというのは,横書きで左から文字を並べていく欧米の習慣に基づいていると考えられます。時間変動を表すグラフなどでも,時間の進む方向は左→右の向きです。「右肩上がり」などという表現は,これを前提としています。

しかし,伝統的な日本や中国の書物では,縦書きで,行は右から並べていくので,時間の流れは右から左へとなっています。図1に示した絵巻物なんかもそうです。したがって,本書で述べられている“時間軸は左から右へ”に基づく技法が人間に元々備わっている性質に由来し全世界の人に通用できるかどうかは疑問,です。

同様のことは他にもあると思います。でも,本書は初心者向けのものです。一々,根拠や出典を示していたら,とても読めない本になってしまいます。それに,読んでいて「あれ? ここはどうしてだろう・・・。」と疑問に感じさせたり考えさせたりる部分が含まれていることも,教材として大事な点だと思います。

本書は,索引がついていて,そこも教材として高く評価できる点です。例えば「あ行」を見ると,「アイリスショット」,「アイレベルショット」,「憧れ」,「アポカリプス」,「歩く死骸症候群」・・・と続いています。全く知らない,あるいは何となく意味はわかるけれど説明できない言葉が結構含まれています。(あ行に挙げられている15個の用語だと,全く知らないが7個,何となくわかるが説明できないが2個でした。) 

このような,知らなかったことについて,わかりやすく(正しいかどうかは別にして)書いてあるので,読んで知識欲を満たせる本でした。もちろん,本当に役に立てるためには,手元に置いて何度も読み返す必要があると思います。

私の知識欲が満たされたからといって,ウェブトゥーン作家を目指す人の役に立つかどうかはわかりません。この本を繰り返し読んで,理屈を理解し一般法則を見出し,それを適用したとします。作成プロセスでの苦労は減るかもしれません。でも,面白い作品ができることが保証されるわけではないことも確かでしょうね。

]]>
https://tamlab.fc2.page/category-books/2488/feed/ 0