AWS Amplify Studioを使って手軽にWebサイトを構築してみた!

最近、AWS Amplify Studioという便利なツールが注目を集めています。AWS Amplify Studioは、ローコード開発のアプローチを取り入れており、誰でも簡単にWebサイトを作成できるクラウドベースのプラットフォームです。私も最近、AWS Amplify Studioを使って自分のWebサイトを作ってみました。この記事では、その手順と経験を共有したいと思います。

aws.amazon.com

AWS Amplify Studioとは?

AWS Amplify Studioは、AWSが提供するローコード開発環境です。これを使えば、プログラミングの知識がなくても、直感的なインターフェースを通じて簡単にWebサイトを構築できます。バックエンドの処理やインフラストラクチャのセットアップも自動化されており、開発者はビジネスロジックに集中できます。

ウェブサイト構築の手順

以下は、AWS Amplify Studioを使用してWebサイトを構築する基本的な手順です。

  1. プロジェクトの作成: AWS Amplifyコンソールにアクセスし、新しいプロジェクトを作成します。プロジェクトには名前と説明を付けてスタートします。

  2. テーブルデータ定義: アプリが使用するデータモデルを定義します。テーブル名とフィールドの一覧を設定します。これをデプロイすることにより、DynamoDB、AWS AppSyncに対してテーブル定義と、Webサイトからのアクセス用インタフェース(GraphQL)が自動生成されます。

  3. Webページデザインの追加①: Figmaで作成したモックページを取り込んで、Webページとすることができます。この画面の項目とデータベースのフィールドをバインドすることにより、簡単にページが作れます。

    Figmaの画面

    Amplify Studioの画面

  4. Webページデザインの追加②: Figmaのページとは別に、作成したテーブルに対するデータ追加・更新のページが、Amplify Studio内に自動で作成されてきます。入力項目の要素を選択したり、項目位置を変えたりはできますが、ページレイアウトのカスタマイズ性はそれほど高くなく、色などは変更できません。ただ、マスタ業務など、単純に入力するだけなら、都合は良いと思います。

  5. Webサイトをローカルでビルド: ローカル環境にreact.jsやvue.js等の開発環境を用意して、AWSのAmplify CLI機能を使って、デザインしたページとデータモデルを、ソースコードとして取得します。react.jsを指定した場合は、デザインした部品が「コンポーネント」として生成されるため、これをラップ(overrides)して、ビジネスロジックや、細かな定義を加えてページを完成させます。

  6. サイトのデプロイ: ページが完成したら、AWS Amplify Studioのデプロイ機能を使用してWebサイトを公開します。これにより、誰でもアクセス可能なWebサイトが完成します。

実際にやってみると、この5番の開発になかなかクセがあり、ドキュメントも十分にないこともあって苦戦しました。2021年からのGAなので、ネット情報もすくなく。。。

やってみた所感

今回、初めて触るreactの勉強も兼ねていたので、時間がかかりましたが約2週間ほどで、次のような内容を作ってみました。

github.com

実際に触っていた感じ、使いどころが限られる気がしました。

  • × 業務で使用するアプリケーションには不向き。よく見る「表」デザインの画面などは、Figmaからのコンポーネント起こしで作りづらい。

  • 〇 会社のブランディングページのような、シンプルな構成のページか、Todoアプリのように、単純にデータ登録を繰り返すだけなら、PCとスマホの両環境でできるのでよい。

  • 〇 初期の立ち上げは慣れれば非常に簡単。従来、API Gateway、Lambda、DynamoDBのストリームなどで構築していたバックエンドの構成が一発で出来上がる。

具体的な手順の説明は、後述のサイトに丸投げます^^

参考にさせていただいたサイト

LINEで応答するChatGPTを作ってみた

ChatGPTのAPIが公開されたことで、既成のサービスへの組み込みが簡単に行えるようになりました。

今回はこれをLINEからの呼び出しに対応させることで、高性能なLINE Botを作成します。

LINEのMessage APIとChatGPT APIへの連携にはいくつかの方法があります。

  • AWSPythonから、ライブラリopenaiを使用して実行する
  • HTTP連携サービスで、直接HTTPリクエストを実行する
  • ノーコードツールを使用する

今回は、最近話題のノーコードツール「Make(旧Integromat)を使ってみます。

システム構成

Lineからの登録内容を、LineのMessage APIを介してMakeに飛ばし、そこからChatGPTをコールします。ChatGPTからの応答内容を、そのままLineに通知することで、ChatBotを構成します。

出来上がりイメージ

作業の流れ

以下のような流れになります。

  1. ChatGPTのAPIKEYを取得する。
  2. LINE DeveloperでMessage APIを作成する。
  3. Makeで新規シナリオを作成し、Lineからの受信を作成する。
  4. LINE DeveloperのWeb Hookに上記のリンクを設定する。
  5. MakeにHTTPリクエスト処理を追加し、ChatGPTへの問い合わせを設定する
  6. MakeにChatGPTの応答文をLineへ通知する処理を追加する。

作業手順

1. ChatGPTのAPI KEYを取得する。

  • ChatGPTのアカウントを作成後、API KEYを生成して取得します。この流れは、以前公開したこちらをご確認ください。

camelrush.hatenablog.com

2. LINE DeveloperでMessage APIを作成する。

  • 以下のサイトでログインを行います。
    LINE Developers
  • サイドメニューの「プロバイダ」を選択し、新規にプロバイダを作成します(名前は任意)
  • 「新規チャネルを作成」を選び、「Messaging API」をクリックします。

  • チャネルの内容を登録していきます。ここに登録する内容はなんでも良いです。業種なども適当で大丈夫です。チャネル内容の登録ができたら、下部にある「作成」ボタンをクリックします。

  • 画面が切り替わったら、中段のメニューバーにある「Messging API設定」をクリックしてください。内容にQRコードが表示されますので、これをスマートフォンで読み込んで「友達追加」を行います。

  • スマートフォンに友達が追加されます。

  • このLineDevelopersのページは後ほど使いますので、ブラウザを閉じずにそのままにしておいてください。

3. Makeで新規シナリオを作成し、Lineからの受信を作成する。

Make(旧Integromat)について

> ChatGPTさん、「Make(Integromat)を1000文字程度で説明して」

Make (formerly Integromat)は、ノーコードで異なるWebサービスやアプリケーションを連携させ、
タスク自動化を行うツールです。このようなサービスはiPaaS (integration Platform as a Service)と
呼ばれています。Make (formerly Integromat)では、シナリオと呼ばれるフローを作成して、
トリガーとアクションを設定することで、様々なサービス間のデータのやり取りや処理を自動化
できます。例えば、以下のようなことが可能です。

・特定の送信者からのGmailの内容をGoogleスプレッドシートに記録する。
・ZOOMの録画情報をGoogleドライブに保存する。
・Shopifyからキャンセルされた注文をAirtableに記録する。
・TwitterとSlackを連携して、特定の文言のツイートが投稿されたらそのツイートをSlackの特定の
 チャンネルに流す。

Make (formerly Integromat)は、500以上のサービスに対応しており、カスタムAPIやWebhookも
利用できます。また、複雑な条件分岐やループ処理も可能であり、高度な自動化が実現できます。
Make (formerly Integromat)は無料プランから利用できますが、有料プランではより多くの
オペレーション数やデータ量に対応し、優先サポートも受けられます。
Make (formerly Integromat)は業務効率化やコスト削減に貢献するツールです。

さすがですねw

  • 以下が使用時の画面イメージとなります。設定されたノードに沿って、左から右に向けてデータが流れていきます。

設定方法

  • 以下のリンクをクリックし、Makeのサイトにアクセスします。
    https://www.make.com/en

  • 「Get started free」をクリックして、ページにサインアップを行います。
  • サインインが完了したら、左のサイドメニューから「Scenarios」を選択した後、右上にある「Create a New Scenario」をクリックします

  • 画面中央にある大きな「+」をクリックして、トリガーを追加します。最初に作る処理は、Lineからの通知の受付ます。大量に出るサービスから「LINE」を探し出します。

    • LINEの内容のうち「Watch Events」を選択します。
    • WebHook欄で「Add」ボタンをクリックしてください。「Create Web Hook」画面が表示されます。

      • 「WebHook Name」には任意の名前を入れてください。

      • 「Connection」でAddボタンをクリックします。「Create a Connection」画面が表示されます。

        • 「Connection Name」には任意の名前を入れます。

        • 「Channel Access Token」には、アクセス用のTokenを設定します。この内容は、Line Developers画面から取得します。「Line Developers」サイトで、手順1で作成したチャンネル情報を開き、「Messaging API設定」画面の下部にある「チャネルアクセストークン」で「発行」を押してください。表示されたトークンをコピーし、Makeの「Channel Access Token」に設定します。

      • Saveボタンをクリックします。
    • 「Create Web Hook」画面でSaveボタンをクリックします。

    • Makeの「LINE」画面に戻ると、作成したWebhookの下に、青字でURLリンクが表示されていますので、この内容をコピーします。

4. LINE DeveloperのWeb Hookに上記のリンクを設定する。

  • 「Line Developers」サイトで、「Messaging API設定」画面の中段にある「Webhook設定」を編集し、手順3 の最後に青字で表示されたURLを設定します。

  • これにより、LINEがこのチャットに書き込んだメッセージが、Makeに送られるようになります。

5. MakeにHTTPリクエスト処理を追加し、ChatGPTへの問い合わせを設定する

  • Makeのシナリオ画面に戻り、LINEの右にあるコネクタ(耳みたいな部分)をクリックして、HTTPアクションを追加します。

  • アクションの種類は、「Make a request」を選択してください。

  • このHTTPアクションには次の設定を行います。

    • URL:https://api.openai.com/v1/chat/completions
    • Method : POST
    • Headers
      • Item1 :
        • Name : Content-Type
        • Value : application/json
      • Item2 :
        • Name : Authorization
        • Value : Bearer [chatGPT APIKEY]
    • Body type : Raw
    • Content type : JSON (application/json)
    • Request content : { "model": "gpt-3.5-turbo", "messages":[{"role": "user" ,"content": "{{1.events[].message.text}}"}]}
    • Parse response : Yes
  • 下図のような設定内容となります。

  • 「OK」ボタンをクリックします。

  • このアクションによって、手順3のトリガーが受信したLINEのメッセージがをChatGPTに送信して、AIからコメントの回答を得ることができます。

6. MakeにChatGPTの応答文をLineへ通知する処理を追加する。

  • 手順5のHTTPアクションに引き続いて、LINEアクションを追加します。

  • アクションの種類は、「Send a Replay Message」を選択してください。

  • このLINEアクションには次の設定を行います。

    • Connection:(手順3で作成したConnectionを選択)
    • Reply Token : {{3.events.replyToken}}
    • Messages
      • Item1 :
        • Type : Text
        • Text : {{7.data.choices.message.content}}
  • もし、「Text : {{7.data.choices[].message.content}}」が設定できない場合は、一旦仮保存したうえで、後述の確認まで作業を進め、その後でこちらを再設定してください。LINEからのメッセージ受信をテストすることで、7.dataが選択できるようになる場合があります。

  • 下図のような設定内容となります。

  • 「OK」ボタンをクリックします。

  • このアクションによって、手順5でChatGPTから受信した内容をLINEに通知することができます。

設定内容の確認

  • これまでの流れで、Scenario画面は以下のとおりになっています。

  • 左から、以下の順で実行されます。みたまんまですねw
    • 【LINE】LINEメッセージから書き込みを受け取る
    • 【HTTP】ChatGPTと通信して、書き込みへの返答を得る
    • 【LINE】LINEにへ返答を送信する

保存

画面下にあるフロッピーディスクのアイコン(古いな)をクリックして、シナリオを保存します。

動作確認とサービス有効化

  • 画面左下にある、「Run Once」ボタンをクリックしてください。図の一番左にある「LINE」トリガーが待機状態となります。

  • スマートフォンのLINEから、友達登録したチャットボットにメッセージを送信すると、画面のトリガーアクションが実行されます。

  • 動作結果に問題がなければ、サービスを有効化します。シナリオ一覧の画面に戻り、シナリオ右側にあるスイッチをクリックして「ON」に切り替えます。

  • これで、LINE Botの完成です。

まとめ・課題

今回は、ChatGPTを使用したLINE Botを作成しました。Webサービスのノーコードツールは初めて使いましたが、非常に便利に感じました。ただ、Web操作ではJSONやリクエストヘッダ等の最低限の技術知識は必要となるため、「ノーコード」→「エンジニア以外も使える」というわけではないようですね。

また、今回のBotには大きな課題があります。それぞれの問い合わせを単発で処理しており、ChatGPTサイトに見られるような、連続的な質疑応答の形で答えてくれません。この原因ははっきりしています。本来、ChatGPT APIで連続の問答を行うためには、2回目の質問の送信データ(JSON)に、1回目の質問と回答を載せて送信する必要があるのですが、手順5でHTTP送信するリクエストには、LINEのメッセージだけを扱っているため、その質問単独への回答しか戻ってきません。この点は改善点ですね。

なお、最後にMakeの無料利用枠について補足します。MakeはFreeプランとして、月あたり1,000回のOperationが無料となっています(詳細はこちら)。実験的に遊ぶには十分な回数となっていますので、これにとどまらず、他にもノーコード特性を生かしたサービス開発を試していこうと思います。

Creative Reality Studio 使ってみた!

Creative Reality Studioとは

Creative Reality Studioとは、AIを使って静止画から動画を作れるプラットフォームです。

studio.d-id.com

実際に作成してみた動画はこちらです(画像はStable Diffusionで作成)

youtu.be

サービスの概要

Creative Reality Studioでは、以下のようなことができます。

  • 写真やイラストに好きな文章を喋らせて動画化できます。
  • 自分好みのイラストをAIで作ることもできます。
  • 作った動画は保存して共有可能です。
  • 喋らせる文章は日本語にも対応しています。

簡単な使い方

Creative Reality Studioの使い方はとても簡単です。

  1. サイトにアクセスして、写真やイラストをアップロードします。
  2. 喋らせたい文章を入力します。または、音声ファイルをアップロードします。
  3. 動画が生成されるまで待ちます。
  4. 生成された動画を確認して、必要に応じて編集します。
  5. 動画をダウンロードして、SNSやブログなどに共有します。

以上で動画作成は完了です。簡単ですね!

サービスの利用料金

Creative Reality Studioは、無料で利用できる枠があります。

  • 1日に5回まで動画を生成できます。
  • 生成された動画は30秒以内に制限されます。
  • 動画にはD-IDのロゴが入ります。

有料プランにアップグレードすると、以下のようなメリットがあります。

  • 動画の生成回数や時間に制限がありません。
  • 動画にロゴを入れることができます。
  • 高品質な動画を作ることができます。

有料プランの料金は、月額$29.99から始まります。

主な活用事例

Creative Reality Studioは、様々なシーンで活用できるサービスです。以下は、主な活用事例の一部です。

  • SNSやブログで自分の写真やイラストを使ってオリジナルの動画コンテンツを作る
  • プレゼンテーションや教育資料に動くキャラクターを入れて視覚的に伝える
  • 歴史上の人物や有名人の写真に声を当ててインタビュー形式の動画を作る
  • アニメーションやゲームのキャラクターに自分の声を当てて遊ぶ

類似のサービス

Creative Reality Studioと類似したサービスもいくつかあります。以下は、その中でも代表的なものです。

  • MyHeritage: 歴史的な写真や家族写真に命を吹き込んで動かすことができるサービス
  • Wombo: 自分や他人の顔写真に音楽と口パクを合わせて面白い動画を作ることができるサービス
  • Deep Nostalgia: AI技術で昔撮った写真や絵画に表情や目線を付け加えてリアルさを増すことができるサービス

まとめ

Creative Reality Studioは、AI技術を使って静止画から動画を作れるプラットフォームです。

写真やイラストに好きな文章を喋らせて動画化したり、自分好みのイラストをAIで作ったりすることができます。

無料でも利用可能ですが、有料プランではより高品質な動画作成が可能です。

様々なシーンで活用できるサービスですし、類似したサービスもありますが、Creative Reality Studioはその中でも最先端かつユニークなサービスだと言えるでしょう。

ぜひ一度試してみてください!

chatGPT 3.5 turbo公開。chatGPTとwhisperのAPIを使ってみた

最近は、猫も杓子もChatGPTの話題で持ちきりですね

私も前回の記事以降使い続けていますが、非常に便利で困ってます^^
今後は、スクラッチシステム開発を覚えるより、これらのサービスを以下に早く活用できるかが重要になっていきますね。
とはいえ、スキルの転換先がシステム開発者からプロンプト(呪文)職人というのは、まだ流石に抵抗があります。

今回は、3月1日に、ChatGPTの新エンジンであるchatGPT3.5-turboの公開と、whisperAPIの無料公開の発表があったので早速使ってみることにしました。

codezine.jp

注意点

このAPIを使用した問いかけは、新Bingに搭載されているものとは異なります。あくまで従来のChatGPTと同じ2021年のデータモデルをベースにしているようです。例えば、次のような問いかけの答えは、それぞれ異なります。

Q. 日本の現在の首相を教えてください。
A.(ChatGPT)菅 義偉さんです。
A.(新Bing)岸田 文雄さんです

使い方

はじめに、chatGPTのサイトにアクセスし、Sign upしてください。

openai.com

chatGPTサイトからAPI KEYを取得

OpenAI APIのサイトにアクセスし、メニューのAPI Keysを選択します。 画面で「Create new secret Key」をクリックします(新規でKeyを作る場合、ボタンが少し違うかも)

API Keyが表示されますので、内容をコピーし、メモ帳等に控えておきます。

実行

chatGPTでチャットする

  • ターミナルを開いて、以下のコマンドを実行します。
  • [chatGPTのAPI Key]には、上記で取得したAPI Keyを設定してください。
  • Qには、chatGPTに問い合わせる内容を設定してください。
# API KEYを設定する
API_KEY=[chatGPTのAPI Key]

# 問い合わせる文字列を設定する
Q="とても楽しそうな歌を作成してもらえますか?"

# WebAPIを実行する
QUERY_JSON='{"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"'${Q}'"}]}'
curl https://api.openai.com/v1/chat/completions \
  -X POST \
  -H 'Authorization: Bearer '${API_KEY} \
  -H 'Content-Type: application/json' \
  -d ${QUERY_JSON}

次のような結果が返ってきました。
jsonのうち、choices.message.contentに回答が表示されます。実際にはJSONに埋め込まれてくるのですが、読みづらいので、後半で折り返して表示しています。

{
    "id": "chatcmpl-6qGnz2S76gswCK0FPYwrLJvN0FKkP",
    "object": "chat.completion",
    "created": 1677915675,
    "model": "gpt-3.5-turbo-0301",
    "usage": {
        "prompt_tokens": 28,
        "completion_tokens": 467,
        "total_tokens": 495
    },
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "(回答※)"
            },
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

---
※回答
もちろんです!以下は、とても楽しそうな歌の歌詞です。

(イントロ)
ラララ ラララ ラララ ラララ

(ヴァース1)
今日も眠りから覚めて
太陽が見えると世界が動き始める
街には人の笑い声が響き渡る
ああ、何とも楽しそうな朝だ

(コーラス)
ラララ ラララ ラララ ラララ
楽しい気分になって
ラララ ラララ ラララ ラララ
誰もが幸せになる

(ヴァース2)
今日は友達とお出かけ
楽しい思い出を作ろうと計画して
どこへ行こうか迷うけれど
ああ、何とも楽しそうな時間だ

(コーラス)
ラララ ラララ ラララ ラララ
楽しい気分になって
ラララ ラララ ラララ ラララ
誰もが幸せになる

(ブリッジ)
時には雨が降る日もあるけど
それでも楽しい時間は止まらない
なんでもOK!そんな心で
ああ、楽しい時間を過ごしましょう

(コーラス)
ラララ ラララ ラララ ラララ
楽しい気分になって
ラララ ラララ ラララ ラララ
誰もが幸せになる

(アウトロ)
ラララ ラララ ラララ ラララ
何とも楽しそうな歌だ!

whisper APIで文字起こしする

  • ターミナルを開いて、以下のコマンドを実行します。
  • [chatGPTのAPI Key]には、上記で取得したAPI Keyを設定してください。
  • SOUNDFILEには、文字起こしするための音声ファイルを設定してください。
# API KEYを設定する
API_KEY=[chatGPTのAPI Key]

# 問い合わせる文字列を設定する
SOUNDFILE=./assets/sound/narita.mp3

# WebAPIを実行する
curl https://api.openai.com/v1/audio/transcriptions \
  -X POST \
  -H 'Authorization: Bearer '${API_KEY} \
  -H 'Content-Type: multipart/form-data' \
  -F file=@${SOUNDFILE} \
  -F model=whisper-1

今回は、次の動画を音声としてWAVに保存したものを読み込ませています。

youtube.com

Youtube動画から音声を取り出すには、Webサービスの「dirpy」を使用しました。

dirpy.com

次のような結果が返ってきました。

{"text":"世界中どこに行っても働けたり稼げたり戦えたりする人材になろうとするか 別にそれはどうでもいいって考えるか 前者だったら当然できるだけ早く外に投げ出した方がいいと思うんですけど それはどうでもいいって考え方もあるにはあるんじゃないかなと思うんですよ 日本を衰えてるって言われていて それでも世界で3番目に大きい経済保っていて こんなに大きな経済を日本人で日本語が喋れる人だけで牛耳っているわけじゃないですか たまたま日本に生まれ育ったというだけで ある意味の既得権益を世界全体から見ると思ってると思うんですよね それを普通に活かしていくっていう生き方もありなのかなという気はしますよね"}%

話し方によって聞き取りの精度は異なると思いますが、今回はほぼ完璧に文字変換がされました。

利用状況と利用料

利用状況は、前述のAPIKEY画面のサイドバーから、「Usage」を選択することで確認できます。

<上部:日あたりの使用量>

<下部:日毎の内訳(Token数)>

利用料はToken数を元に算出されます。Tokenは「Prompt(問い合わせの単語数)」+「completion(回答の単語数)」から算出されます。あくまで単語数なので文字数とは異なります。この辺りの数え方は公式マニュアルを参照してください。

platform.openai.com

このTokenを下に、提示された料金は次のとおりです。

おおよそ、4,000Token≒1円(1$=130円計算)となります。

無料利用枠

前述の、上部の写真にあるとおり、無料利用枠として$18.00が付与されているため、9,000,000Tokenまではタダで使える計算になりますね。

まとめ

今回は、3月1日に公開されたChatGPTとWhisperのAPIを実行する方法をまとめてみました。このほかにも、Python言語でopenaiライブラリを使って呼びかけることなど、活用方法はいろいろあります。

次回は、このAPIインターフェイスをLINEから呼び出すことで、LINEとの連携を進めてみたいと思います。

なんでも答えてくれる、高度AI「ChatGPT」を試してみた

ChatGPTについて

皆さんは「ChatGPT」をご存知でしょうか。

「ChatGPT」は、イーロンマスクが設立した非営利団体のOpenAIが、アメリカ現地時間12月1日に発表した自然言語生成モデルのWebサービスです。

ChatGPT https://chat.openai.com/chat

簡単に言うと、超高度なチャットボット、というイメージで良いと思いますが、こちらで問いかけすることに対して本当に柔軟に、なんでも答えてくれるサービスです。

従来のスマートスピーカー(Alexa、Google Home)とは、次のような点が異なっています。

  1. 問いかけに対し、データモデルを元にした的確な回答事例をあげられること
  2. 複数回答の対話に対して前段の内容から、質問の趣旨を理解できること
  3. こちらの問いかけが口語的(しかも日本語で)であっても、文章として理解できること
  4. 回答文脈の構成が、非常にわかりやすいこと
  5. オリジナルな情報の創作(歌詞、小説など)も行えること

今回は、このChatGPTの使用感をサンプルに合わせて解説し、実際に使用してみた結果をいくつか上げていこうと思います。

1. 問いかけに対し、データモデルを元にした的確な回答事例をあげられること

最初に次のような問いかけをしてみました。

上記のように、いくつかの事例をあげてくれます。

なお、質問の回答は最新のものではなく、2021年時点でFIXしたものだそうです。 彼自身が答えてくれました。

2. 複数回答の対話に対して前段の内容から、質問の趣旨を理解できること

上の質問に対し、続けて次の質問を挙げてみました。

2回目の質問では、「顔画像認識」の議題には触れていませんが、前段の話から話題の趣旨を汲み取って回答していることがわかります。また、それぞれの列挙内容も、性能面を意識した回答になっていることがわかります。

回答が少し機械的なので、次に、少し苛めてみることにしました。

こちらの不満に対して、ただ謝罪、ゼロ回答を述べるだけではなく、モジュール組み合わせを使用した打開策も出してくれました。回答内容も、適当であることがわかります。

3. こちらの問いかけが口語的(しかも日本語で)であっても、文章として理解できること

驚くべきことに、北海道の地方方言もわかっていそうな気配があります。まぁ、「なまら」(とても)は形容詞なので、無視されている可能性もありますが・・・。

4. 回答文脈の構成が、非常にわかりやすいこと

これまでの回答でも分かる通り、読み手にわかりやすい文章が返されてきます。

上記のようにプログラムのサンプルを提示することに対しても、ただ回答を述べるだけではなく、内容の解説もつけてくれます。

5. オリジナルな情報の創作(歌詞、小説など)も行えること

その他

他に、次のページで使い方の事例を書いている方がいらっしゃったので、紹介します。

qiita.com

苦手なこと

1でも触れましたが、データが2021年時点で固着していることもあり、直近の状況に関する話は苦手なようです。

用途

今回のChatGPTの発表に対し、世界中で話題が広がっていますが、データサイエンティストからは懐疑的な見方もあるようです。曰く「それっぽい」回答を返すだけで正確な解答ではない、答えを信じすぎる人増えると困る、とか。

www.businessinsider.jp

個人的には、何の気なしの相談とか、技術の手慣れの段階でサンプルコードを引き出すために「ググって」Qiita記事を探すより、こちらの方が楽なので、そういった用途で使えそうと感じています。

一方で、今回のChatGPTの発表を受け、海外では、早くも次のような動きも出始めているそうです。

  • 学校の宿題でChatGPTの利用を禁止
  • 明示された以外で論文への仕様を禁止

こういった動きが出るのは、AI時事ネタの個性かもしれませんね。

Jetson Nano のセットアップ〜迷走中〜

セットアップ環境の準備

前回、Jetpackをインストールしたが、Demoアプリは動かせるものの、自分の開発環境として使用するには環境が古い。具体的には、Pythonが3.6だったり、dlibのインストールでバージョンが一致しなかったり。なんとか動作環境を作ったつもりでも、face_recognitionを使用してみると、CUDAを認識しなかったりして・・・。

この調べにOSを入れ直すこと6回目。3日ぐらいかかってます…。

まだ迷走しており完成できてませんが、2022年も開けるので一回公開しようと思います…(´;ω;`)

よいお年を〜

  • Python3.6 -> Python3.9
  • OpenCV 4.6
  • CUDA Toolkit
  • cuDNN
  • dlib
  • face_recognition

OS・インストールアプリを最新化

最初に、以下のコマンドを実行して、OS環境を最新化します。

# ローカルパッケージインデックスの更新
sudo apt update 

# ポイントリリースの適用(アップデート)
sudo apt upgrade -y

スワップ領域を作成する

Jetson Nanoは基本的にRAMが少ないです。そのため、後述のソフトのビルド・インストール中にOSがハングアップしたり、応答しなくなることがよくあるそうです。この事象の回避のため、スワップ領域を作成しておきます(これにより、SDカード容量中、6GB消費します)

# SWAP領域用のファイルを作成
sudo /bin/dd if=/dev/zero of=~/swap.1 bs=1M count=6144
sudo chmod 600 ~/swap.1

# SWAP領域作成
sudo mkswap ~/swap.1

# SWAP領域有効化
sudo swapon ~/swap.1

作業用アプリをインストール

作業に必要となる最低限のアプリをインストールします。

# テキストエディタnanoをセットアップ
sudo apt-get install nano 

# curlをセットアップ
sudo apt-get install curl

xrdpをセットアップ(リモートデスクトップ接続環境を構築)

Jetsonは、GPU性能以外は標準のPCよりスペックが低いので、普段は直接操作するよりも、WindowsMacからリモートで操作した方が使い勝手がよいでしょう。

こちらの手順に従い、xrdpサービスをセットアップして、リモートデスクトップで接続できるようにします。

なお、リモートデスクトップから接続できない(パスワード入力後、すぐ切れてしまう)場合、Jetson Nano側を一度「Log Out」してから接続してみてください。

GPU AI構築を構築する。

OpenCV > Python > jetson-stats > CUDA > cuDNN > dlib > face_recognition の順で、深層学習の環境をインストールしていきます。

CUDA Toolkitをインストール

以下のサイトにアクセスし、環境に一致するCUDAを選択します。

developer.nvidia.com

Ubuntu18.04では、11.6.2が最後のようで、11.7からはUbuntu20.04にしか対応していないようです。アクセス先で、以下の「濃い緑」の選択をしていくと、インストールのためのコマンドが表示されます。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/sbsa/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda-repo-ubuntu1804-11-6-local_11.6.2-510.47.03-1_arm64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-6-local_11.6.2-510.47.03-1_arm64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

OpenCVをセットアップ(併せて、Python3.8も入れる)

https://i7y.org/opencv-build-on-jetson-nano/

jetson-statsをセットアップ

sudo -H pip install jetson-stats
sudo jtop

Python3.8をデフォルトに設定

初期設定では、Pythonは2.7がデフォルトとなっており、Python3も3.6がインストールされている。alternvativesを使用して、Pythonのデフォルト環境を3.8に設定しておきます。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 3

python、pipでバージョンを確認して、3.8となっていればOK。

# pythonのバージョン確認
python --version
>Python 3.8.0

# pipのバージョン確認
pip --version
>pip 22.3.1 from /usr/local/lib/python3.8/dist-packages/pip (python 3.8)

dlibをインストール

以下のサイトの手順を参考に。

qiita.com

なお、cudaとcuDNNはあらかじめJetpackに入っているので入れる必要はない。これらに対してパスを通す必要がある。

sudo nano ~/.bashrc

以下の内容を、上の.bashrcの最後に追記する。

export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda

.bashrcの内容を即時反映させる。

source ~/.bashrc

dlibセットアップ後、pythonから以下の内容をインポート出力してみて、Trueが帰ればセットアップ終了。

import dlib
dlib.DLIB_USE_CUDA
> True

Python3 設定

python3を実行する前に環境変数OPENBLAS_CORETYPEにARMV8だよって設定をしとけばよい。

sudo nano ~/.bashrc

以下の内容を、上の.bashrcの最後に追記する。

export OPENBLAS_CORETYPE=ARMV8

.bashrcの内容を即時反映させる。

source ~/.bashrc

webdriverをインストール

sudo apt-get install chromium-chromedriver

VsCodeMicrosoft VisualStudio Code)をセットアップ

VsCodeのダウンロードページへアクセスして、以下の赤枠のリンクをクリックします。

ダウンロードしたdebファイルをクリックします。 認証情報を入力するとインストールが行われ、VsCodeがセットアップされます。

Jetson Nano購入!開封の儀とセットアップ編

先日、pythonで顔画像認識の機能を作りました。動かしてみてわかったのですが、自分のPCではGPUが活かせず動画にするとカクつくようでした。

camelrush.hatenablog.com

Mac Book M1で開発していた時はそれほど感じなかったのですが、自宅のPCにもっていくと非常に遅い。ちなみに搭載しているグラボは以前購入したRadeon製の「RX570 8G OG」。 そこそこいけるだろうと踏んでたんですが、まぁ遅い。カメラを回しながらリアルタイムでCNN解析をかけると、動画が完全にコマ送り状態になりました。

これはやっぱりNVIDIAGeforceを買わなきゃダメかしらとも思ったのですが、正直、どこまでの性能のものを買えばいいかわからず困りました。変に妥協して失敗してもイヤだし、かといって10数万も出す余裕はないし。

Jetsonを思い出す

そこで、ふと思ったのは以前から気になっていた「Jetson Nano」。どうせ機械学習目的でGPUを買うならAI特化にしてしまおうと思いつきました。RaspberryPiでハマった、エッジデバイス好きの自分にはぴったりと感じました。

メルカリでポチる

メルカリで中古品を探すと4GB版が25,000円で売られていたので迷わず購入。ボーナスも入ったし、使ってみてダメならまた売ればいいや、という試乗車精神で購入しました。

あとでKeepaで調べると、値段の変動がすさまじかった。

  • 3年前は15,000円
  • 1年前から徐々に値段が跳ね上がり、
  • 4月頃には65,000円まで高騰して市場から消失。
  • 10月頃に出回ると100,000円の高値
  • 12月になぜか急落して25,000円

12月に値段が急落したのは、来年に新モデルのJetson Orin Nanoが控えているからかな、と思いましたがよくわかってません。情報求む。

到着、そして開封

到着しました。なんだか外観も緑でかっこいいですね。

意気揚々と開封

ところが、開けてみてびっくり、ボード以外は何も入ってない。SDカードはもちろん、電源アダプタまでない。これじゃうごかせないじゃん!って、はじめは中古でだまされたのかと思いきや、基本的にそういうものらしく、付属品の類は(アダプタも)自分で購入する必要があるらしかった。

まずは電気屋さんでMicroSDカードを購入。KIOXIA社の32GB。MicroSDカードは UHS-I インターフェイスに対応したものが必要らしく、さらにクラスU3とU1を選択する必要あり。U3の方が性能がいいそうなので、奮発してU3(といっても、1,800円程度)を購入。

次に電源アダプタ。5V、4AのACアダプタが必要とのことなのですが、電器屋さんではACアダプタ単体での販売がなかなかなく、Amazonで取り寄せ購入しました。

セットアップ

OSインストール

公式サイトでは、OSとして「Jetpack」という、UbuntuにJetsonを活かせる各種ライブラリを初期搭載したディストリビューションが提供されています。

developer.nvidia.com

ここからイメージをダウンロード(6GB程度)後に、SDCard Writerの「balenaEtcher」を使用してSDCardにイメージのコピーを行います。

おおよそ30分程度かかり、ようやく終了。

起動

ACアダプタとHDMIケーブルを刺して起動すると、Ubuntuの初期セットアップ画面が表示されます。ユーザ、パスワード、Location等を設定すると、再起動後に下のようなデスクトップ画面が表示されました。

かっけーw

今日のところはここまでですかね。

年明けまでに時間があれば、前回やった顔画像認識を動かしてみてRadeonGPUと、CUDAエンジンの速度の違いを比較してみたいと思います。