カテゴリー
ネットのサービス

GPTravel Advisor – OpenAIのAPIを使った旅行日程提案サービス

GPTravel Advisorは、OpenAI の GPT3 API を使った旅行計画生成サービスです。

GPTravel Advisor で高岡3日旅行の日程を尋ねてみた

入力は「行きたい都市の名前」と「旅行する日数」の2つだけ。20-30秒ほど待つと、何日目にどこに観光に行けばよい、という形で日程表が出てきます。

「東京の3日間旅行」を作らせてみると、

  1. 朝は東京タワーの展望台から景色を見て、午後は皇居、夜は伝統料理を楽しむ
  2. 朝は明治神宮と代々木公園、午後は原宿でショッピング、夜は歌舞伎
  3. 朝は(豊洲ではなく)築地市場、午後はスカイツリー、夜は新宿で飲み食い

生成された旅行日程は、それなりに見えます。3日で二つのタワーなの、とか突っ込むことはできますが、移動にも無理はないし、こういう観光ツアーもあるかも。

東京だと元々の言語モデルにたくさんのデータがあってのことかもしれないですね。

ただ、自分がよく知っているマイナーな所(高岡とかね)を入れてみると、妙な日程表にも気づけました。存在しない観光地も出てくるし、無茶な移動(Aに行ったあと遠いBへ行って、なぜかAの施設内にある別のA’に行け、とか)もありました。これも、もっともらしい続きを出力しているだけというAIらしい結果です。

最終的な旅程をこれでいきなり組むことは問題ですが、おおざっぱな叩き台として2,30秒でこれが手に入るのはいいかもしれませんね。

TypeScript のソースコードもGitHub に公開されています。

コード中では Open API の text-davinci-003 モデルに対してユーザーが入力した地名と日数を入れて「理想の旅行日程は?」と尋ね、帰ってきた文章から今度は観光名所を取り出し、それぞれに Google Maps へのリンクをつける、という処理をしているようです。簡単なwebサービスのラッパーであり、ChatGPT の対話インタフェースで自分で訊いても似たような結果は出るのでしょうけど、うまく答えが出る訊ね方を内蔵して迷わないインタフェースにしてるとも言えますね。

サービスが当たれば API の呼び出し上限に達して続けられなかったり、追加料金が必要になったり、ということはありますが、ちょっとしたアイデアでこれまで作れなかったサービスが簡単に作れてしまうところは面白いと感じます。

via Twitter

カテゴリー
Uncategorized

Web API情報サービスのProrammableWebが今月で閉鎖

ProgrammableWeb is Being Retired(ProgrammableWeb 閉鎖のお知らせ)ということです。閉鎖は今月末、 2022-10-31 。

様々な Web API の情報を集積した Web API のオンライン・データベースと呼べるウェブサイトでした。何かの情報をウェブから得てプログラムで利用したいなと思った時に、ここで検索するとたくさん出てきたものです。

17年間の運営ということは、2005年からですね。PHPから各種有名Web APIを呼び出す方法を書いた拙著「PHP×WebサービスAPIコネクションズ」の発売は2006年。Web API が熱い時代でした。

# 技術書の常ですが、この大昔の本を今読んでもほとんどのコードは動かないでしょう

2013年に ProgrammableWeb はMuleSoftという企業に買収されていたんですね。最終的に記録分類された Web API の数は 2万4000個。API に関する記事は800件に及んだということ。一部の人気記事は Mulesoft 社のブログに移されるそうですが、API 情報や一般の記事は今月いっぱいで失われてしまうようです。

ひさしぶりに ProgrammableWeb の API データベースで検索してみたのですが、検索機能がメンテナンスとかで止まっていました。終わるから止まっているのか、止まっているから終わるのか、寂しい状態です。

カテゴリー
データ可視化

バスケットボール中継のハイライト動画をPythonで作る

Python で NBAハイライト動画を自動生成するという記事が面白かったのでご紹介。

ゲームをまるごと観戦する暇がない時、ハイライト動画を見て済ますスポーツファンは多いでしょう。ハイライト動画は球団やテレビ局などが編集して出してきますが、必ず見られるわけでも、自分が見たい粒度のハイライト動画が必ずあるわけでもないかもしれません。

ノーム・エフラットさん(Noam Ephrat)が自分だけのハイライト動画を自動で作るために使ったのは、Python、NBA公式のAPI、録画したゲーム動画、OCRライブラリ。

NBAのAPI(参考) では何分何秒にどちらのチームの誰がどういうプレイをして、シュートが入ったとか外れたとかいうプレイバイプレイ(play-by-play, PBP)の情報が公開されています。日付、ゲームID、ピリオド(クオーター)を指定するとJSONが返ってきます。これが一つ目の要素。

https://data.nba.net/data/10s/prod/v1/20220201/0022100784_pbp_1.json

そして、録画した動画をフレームごとに切り出して、中継中に表示されたゲーム時計の部分を OCR ライブラリの Tesseract でピリオドやゲーム時間を抽出します。これが二つ目の要素

あとは、プレイバイプレイの重要シーンの発生した時刻に合わせて、動画のフレームを切り出し、切り出したところをつなげていくと、ゲームが動いたところだけがまとまったハイライト動画を作ることができたということ。

ざっと見てみて、プレイバイプレイのデータにあるところだけだと、どうしても点が増えたシュート成功の場面が多くなるのかな、とも思いましたが、人間が編集したハイライト動画でも成功シーンが多いので気のせいかもしれません。

作ったハイライト動画を公開するのは著作権的にだめだと思いますが、個人でハイライトを作って観るのは問題なさそうでは。

自分の基準で抜き出すところを選べるからには、

  • ひいきチームの得点シーンばかりを集めたり
  • 応援する特定の選手の絡むシーンだけを集めたり
  • 点差や時間を考えて、より劇的にゲームが動いたシーンだけを集めたり(これは人が編集する時と似た結果になるかも)
  • 自分の使える時間に応じてハイライト動画の長さを指定して変えたり

など、よりパーソナライズされたハイライト動画を作れる可能性もありますね。

バスケットボールという競技が特に時計が重要で、常時正確な時刻が中継に表示されていることや、APIで提供されるゲームログにも時刻情報がふんだんに含まれているという点も、うまく自動生成にマッチしているというのもありそうですね。