サンプル

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)