サンプル
Hylabel Discussion SDK
1"""
2Hylable Discussion のコース一覧を表示するサンプル
3(c) 2023 Hylable Inc.
4"""
5
6import argparse
7from hylable import HDClient
8
9
10if __name__ == "__main__":
11 parser = argparse.ArgumentParser()
12 parser.add_argument("--profile", default="default")
13 args = parser.parse_args()
14
15 # Hylable Discussion とコミュニケーションするクライアントを作成
16 client = HDClient(args.profile)
17
18 print("コースの IDと登録メンバー数、コース名を表示")
19 for course in client.get_courses():
20 print(f"[{course.id}] ({len(course.members) :-3d}人) {course.name}")
1"""
2ディスカッションの詳細を取得して表示するサンプル
3(c) 2023 Hylable Inc.
4"""
5
6import argparse
7import matplotlib.pyplot as plt
8
9from hylable import HDClient
10
11
12if __name__ == "__main__":
13 parser = argparse.ArgumentParser()
14 parser.add_argument("discussion_id", help="ディスカッションのID")
15 parser.add_argument("--profile", default="default")
16 args = parser.parse_args()
17
18 # Hylable Discussion とコミュニケーションするクライアントを作成
19 client = HDClient(args.profile)
20
21 # ディスカッションの情報を取得し、メンバー情報にメンバーのオブジェクトを追加
22 d = client.get_discussion(args.discussion_id)
23
24 # メンバーの名前などの情報を取得
25 for m in d.members:
26 try:
27 m['member'].sync_data(client)
28 except Exception:
29 m['member'].name = m['member'].id
30
31 # ディスカッションの詳細をテキストで
32 print(f"""
33 ID : {d.id}
34 トピック : {d.topic}
35 コメント : {d.comment}
36 録音時刻 : {d.recordedAt.strftime('%Y-%m-%d %H:%M:%S')}
37 継続時間 : {d.duration_sec}秒
38 グループ名: {d.group_name}
39 メンバー : {', '.join([f"{m['member'].name}({m['position']}度)" for m in d.members])}
40 """)
41
42 # 発話量の時間変化と総発話時間をグラフで表示
43 plt.subplot(2, 1, 1)
44 plt.imshow(d.frames['activity'].T, aspect="auto", interpolation="nearest", origin="lower")
45 plt.yticks(range(len(d.members)), [m['member'].name for m in d.members])
46 plt.title("発話量の時間変化")
47
48 plt.subplot(2, 1, 2)
49 plt.barh([m['member'].name for m in d.members], d.stats["tlot_ms"] / 1000)
50 plt.title("総発話時間[秒]")
51 plt.show()
1"""
2使用可能なレコーダーを一覧表示するサンプル
3(c) 2023 Hylable Inc.
4"""
5import argparse
6from hylable import HDClient
7
8
9if __name__ == "__main__":
10 parser = argparse.ArgumentParser()
11 parser.add_argument("--profile", default="default")
12 args = parser.parse_args()
13
14 # Hylable Discussion とコミュニケーションするクライアントを作成
15 client = HDClient(args.profile)
16
17 # レコーダーの名前、状態、バージョンを表示
18 for r in sorted(client.get_recorders(), key=lambda r: r.name):
19 print(f"{r.name:<15} [{r.status:<12}] {r.version}")
1"""
2指定したレコーダーで計測を行い、自動的に停止するサンプル
3(c) 2023 Hylable Inc.
4"""
5
6import argparse
7import time
8
9from hylable import HDClient
10
11
12if __name__ == "__main__":
13 parser = argparse.ArgumentParser()
14 parser.add_argument("--profile", default="default")
15 parser.add_argument("recorder", help="計測するレコーダーの名前")
16 parser.add_argument("duration", type=int, help="録音時間")
17 parser.add_argument("course_name", help="データを保存するコース名")
18 args = parser.parse_args()
19
20 # Hylable Discussion とコミュニケーションするクライアントを作成
21 client = HDClient(args.profile)
22
23 # 指定された名前と一致するレコーダーを探す
24 print("レコーダーを探しています...")
25 for recorder in client.get_recorders():
26 if recorder.name == args.recorder:
27 break
28 else:
29 raise ValueError(f"レコーダー {args.recorder} は見つかりませんでした。")
30
31 # 指定された名前と一致するコースを探す
32 print("保存先コースを探しています...")
33 for course in client.get_courses():
34 if course.name == args.course_name:
35 break
36 else:
37 raise ValueError(f"コース {args.course_name} は見つかりませんでした。")
38
39 # 計測開始の準備として、空のディスカッションを作成する
40 print("ディスカッションを作成しています...")
41 discussionobj = client.create_discussion(
42 course_id=course.id,
43 recorder=recorder
44 )
45
46 url = "https://discussion.hylable.com/#/course/%s/discussion/%s" % (
47 course.id, discussionobj.id
48 )
49 print("ディスカッションが作成されました。 URL はこちらです。")
50 print(url)
51
52 # 計測の開始
53 print("計測を開始します")
54 client.start_recording(discussionobj)
55
56 # 計測時間だけ待つ
57 print(f"{args.duration} 秒待機中...")
58 time.sleep(args.duration)
59
60 # 計測の停止
61 print("計測を停止します")
62 client.stop_recording([recorder])
1"""
2ディスカッションを更新するサンプル
3(c) 2023 Hylable Inc.
4"""
5
6import argparse
7
8from hylable import HDClient
9
10
11if __name__ == "__main__":
12 parser = argparse.ArgumentParser()
13 parser.add_argument("discussion_id", help="更新したいディスカッションのID")
14 parser.add_argument("--profile", default="default")
15 args = parser.parse_args()
16
17 # Hylable Discussion とコミュニケーションするクライアントを作成
18 client = HDClient(args.profile)
19
20 # 更新したいディスカッションのオブジェクトを取得
21 # この `discussion` オブジェクトに変更を加えて、最後にアップデートする。
22 print("現在のディスカッションの取得")
23 discussion = client.get_discussion(args.discussion_id)
24
25 print("ディスカッションの変更")
26 # トピックとコメントを変更
27 discussion.topic = "新しいトピック"
28 discussion.comment = "新しいコメント"
29
30 # Ben と George というメンバーの Member オブジェクトを取得
31 # (メンバー登録がされていなければエラーになります)
32 member_names = ["Ben", "George"]
33 members = [
34 m for m in client.get_members() if m.name in member_names
35 ]
36
37 # Ben を 0度、 George を 180度に座席設定
38 discussion.members = [
39 {"position": "0", "member": members[0]},
40 {"position": "180", "member": members[1]},
41 ]
42
43 # アノテーションを追加
44 discussion.annotations = [
45 {"begin": 0, "end": 1000, "label": "hello 1"},
46 {"begin": 1500, "end": 3000, "label": "hello 2"},
47 ]
48
49 # 更新したディスカッションの情報をアップロード
50 print("変更したディスカッションの反映")
51 client.update_discussion(discussion)