diff --git a/bayes3d/genjax/model.py b/bayes3d/genjax/model.py index d49b7d3f..6f667197 100644 --- a/bayes3d/genjax/model.py +++ b/bayes3d/genjax/model.py @@ -7,7 +7,6 @@ from genjax.incremental import Diff, NoChange, UnknownChange import bayes3d as b -import bayes3d.scene_graph from .genjax_distributions import ( contact_params_uniform, @@ -128,14 +127,14 @@ def get_far_plane(trace): def add_object(trace, key, obj_id, parent, face_parent, face_child): - N = get_indices(trace).shape[0] + 1 + N = b.get_indices(trace).shape[0] + 1 choices = trace.get_choices() choices[f"parent_{N-1}"] = parent choices[f"id_{N-1}"] = obj_id choices[f"face_parent_{N-1}"] = face_parent choices[f"face_child_{N-1}"] = face_child choices[f"contact_params_{N-1}"] = jnp.zeros(3) - return model.importance(key, choices, (jnp.arange(N), *trace.get_args()[1:]))[0] + return model.importance(key, choices, (jnp.arange(N), *trace.get_args()[1:]))[1] add_object_jit = jax.jit(add_object) @@ -152,7 +151,7 @@ def print_trace(trace): def viz_trace_meshcat(trace, colors=None): - b.clear_visualizer() + b.clear() b.show_cloud( "1", b.apply_transform_jit(trace["image"].reshape(-1, 3), trace["camera_pose"]) ) @@ -224,14 +223,14 @@ def enumerator(trace, key, *args): key, chm_builder(addresses, args, chm_args), argdiff_f(trace), - )[0] + )[2] def enumerator_with_weight(trace, key, *args): return trace.update( key, chm_builder(addresses, args, chm_args), argdiff_f(trace), - )[0:2] + )[1:3] def enumerator_score(trace, key, *args): return enumerator(trace, key, *args).get_score() @@ -302,4 +301,4 @@ def update_address(trace, key, address, value): key, genjax.choice_map({address: value}), tuple(map(lambda v: Diff(v, UnknownChange), trace.args)), - )[0] \ No newline at end of file + )[2] diff --git a/bayes3d/viser.py b/bayes3d/viser.py deleted file mode 100644 index ca9e8a33..00000000 --- a/bayes3d/viser.py +++ /dev/null @@ -1,58 +0,0 @@ -import viser -import random -import time - -import imageio.v3 as iio -import numpy as onp - -server.add_frame( - "/tree", - wxyz=(1.0, 0.0, 0.0, 0.0), - position=(random.random() * 2.0, 2.0, 0.2), -) -server.add_frame( - "/tree/branch", - wxyz=(1.0, 0.0, 0.0, 0.0), - position=(random.random() * 2.0, 2.0, 0.2), -) - -client_handle = list(server.get_clients().values())[0] - -p,q = client_handle.camera.position, client_handle.camera.wxyz - -client_handle.camera.position = p -client_handle.camera.wxyz = q - -img = client_handle.camera.get_render(100,100) - - - -server = viser.ViserServer() - -import os -import trimesh -i = 9 -model_dir = os.path.join(b.utils.get_assets_dir(), "ycb_video_models/models") -mesh_path = os.path.join(model_dir, b.utils.ycb_loader.MODEL_NAMES[i],"textured.obj") -mesh = trimesh.load(mesh_path) - -server.add_mesh_trimesh( - name="/trimesh", - mesh=mesh, -) - -server.reset_scene() - - -server.add_mesh( - name="/trimesh", - vertices=mesh.vertices, - faces=mesh.faces, -) - -sphere = trimesh.creation.uv_sphere(0.1, (10,10,)) -server.add_mesh( - name="/trimesh2", - vertices=sphere.vertices * np.array([1.0, 2.0, 3.0]), - faces=sphere.faces, -) \ No newline at end of file diff --git a/demo_c2f.ipynb b/demo_c2f.ipynb deleted file mode 100644 index 22b06f30..00000000 --- a/demo_c2f.ipynb +++ /dev/null @@ -1,373 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "5300d4b8-7b89-492c-950f-3e56fa9d46f2", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import jax.numpy as jnp\n", - "import jax\n", - "import bayes3d as b\n", - "import time\n", - "from PIL import Image\n", - "from scipy.spatial.transform import Rotation as R\n", - "import matplotlib.pyplot as plt\n", - "import cv2\n", - "import trimesh\n", - "import os\n", - "import glob\n", - "import bayes3d.neural\n", - "import pickle\n", - "# Can be helpful for debugging:\n", - "# jax.config.update('jax_enable_checks', True) \n", - "# from bayes3d.neural.segmentation import carvekit_get_foreground_mask\n", - "import genjax\n", - "import bayes3d.genjax" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "2448882a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
╭─────────────── viser ───────────────╮\n",
-       "│             ╷                       │\n",
-       "│   HTTP      │ http://0.0.0.0:8081   │\n",
-       "│   Websocket │ ws://0.0.0.0:8081     │\n",
-       "│             ╵                       │\n",
-       "╰─────────────────────────────────────╯\n",
-       "
\n" - ], - "text/plain": [ - "╭─────────────── \u001b[1mviser\u001b[0m ───────────────╮\n", - "│ ╷ │\n", - "│ HTTP │ http://0.0.0.0:8081 │\n", - "│ Websocket │ ws://0.0.0.0:8081 │\n", - "│ ╵ │\n", - "╰─────────────────────────────────────╯\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import viser\n", - "server = viser.ViserServer()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "57e1fa42-9f39-437f-b408-7c9760a86413", - "metadata": {}, - "outputs": [], - "source": [ - "importance_jit = jax.jit(b.genjax.model.importance)\n", - "key = jax.random.PRNGKey(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "ed42e5c3-be5d-420b-9a21-759247e5d7b7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dict_keys(['rgbPixels', 'depthPixels', 'segmentationMaskBuffer', 'camera_pose', 'camera_matrix'])\n" - ] - }, - { - "data": { - "image/jpeg": "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", - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "file = os.path.join(b.utils.get_assets_dir(),\"tutorial_mug_image.pkl\")\n", - "all_data = pickle.load(open(file, \"rb\"))\n", - "IDX = 0\n", - "data = all_data[IDX]\n", - "print(data[\"camera_image\"].keys())\n", - "K = data[\"camera_image\"]['camera_matrix'][0]\n", - "rgb = data[\"camera_image\"]['rgbPixels']\n", - "depth = data[\"camera_image\"]['depthPixels']\n", - "camera_pose = data[\"camera_image\"]['camera_pose']\n", - "camera_pose = b.t3d.pybullet_pose_to_transform(camera_pose)\n", - "fx, fy, cx, cy = K[0,0],K[1,1],K[0,2],K[1,2]\n", - "h,w = depth.shape\n", - "near = 0.001\n", - "rgbd_original = b.RGBD(rgb, depth, camera_pose, b.Intrinsics(h,w,fx,fy,cx,cy,0.001,10.0))\n", - "scaling_factor = 0.2\n", - "rgbd_scaled_down = b.RGBD.scale_rgbd(rgbd_original, scaling_factor)\n", - "b.hstack_images([b.get_rgb_image(rgbd_scaled_down.rgb), b.get_depth_image(rgbd_scaled_down.depth,max_val=2.5)])" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "432c5da8-eb91-408f-b2e4-501eef3cc221", - "metadata": {}, - "outputs": [], - "source": [ - "table_pose, plane_dims = b.utils.infer_table_plane(\n", - " b.unproject_depth(rgbd_scaled_down.depth, rgbd_scaled_down.intrinsics),\n", - " jnp.eye(4), rgbd_scaled_down.intrinsics, \n", - " ransac_threshold=0.001, inlier_threshold=0.005, segmentation_threshold=0.2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "52b57c87", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "FrameHandle(_impl=_SceneNodeHandleState(name='/table', api=, wxyz=array([-0.3109156 , -0.40532318, 0.71136296, -0.48178506], dtype=float32), position=array([0.13536738, 0.06300807, 0.7492305 ], dtype=float32), visible=True, click_cb=None))" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "server.add_point_cloud(\n", - " \"/cloud\",\n", - " points=np.array(b.unproject_depth(rgbd_scaled_down.depth, rgbd_scaled_down.intrinsics).reshape(-1,3)),\n", - " colors=np.array(rgbd_scaled_down.rgb.reshape(-1,3)),\n", - " point_size=0.01\n", - ")\n", - "server.add_frame(\n", - " \"/table\",\n", - " position=np.array(table_pose[:3,3]),\n", - " wxyz=b.rotation_matrix_to_quaternion(table_pose[:3,:3]),\n", - " axes_length=0.2,\n", - " axes_radius=0.005\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "89d55282-eb41-4c8e-97fe-1b9528f52481", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Increasing frame buffer size to (width, height, depth) = (192, 96, 1024)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[E rasterize_gl.cpp:121] OpenGL version reported as 4.6\n" - ] - } - ], - "source": [ - "b.setup_renderer(rgbd_scaled_down.intrinsics)\n", - "model_dir = os.path.join(b.utils.get_assets_dir(),\"bop/ycbv/models\")\n", - "mesh_path = os.path.join(model_dir,\"obj_\" + \"{}\".format(13+1).rjust(6, '0') + \".ply\")\n", - "b.RENDERER.add_mesh_from_file(mesh_path, scaling_factor=1.0/1000.0)\n", - "b.RENDERER.add_mesh_from_file(os.path.join(b.utils.get_assets_dir(), \"sample_objs/cube.obj\"), scaling_factor=jnp.array([0.5,0.5,0.001]))" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "width = 0.03\n", - "ang = jnp.pi\n", - "num_position_grids = 51\n", - "num_angle_grids = 51\n", - "contact_param_deltas = b.utils.make_translation_grid_enumeration_3d(\n", - " -width, -width, -ang,\n", - " width, width, ang,\n", - " num_position_grids,num_position_grids,num_angle_grids\n", - ")\n", - "\n", - "grid_params = [\n", - " (0.5, jnp.pi, (15,15,15)), (0.2, jnp.pi, (15,15,15)), (0.1, jnp.pi, (15,15,15)),\n", - " (0.05, jnp.pi/3, (15,15,15)),\n", - " (0.02, jnp.pi, (9,9,51))\n", - " , (0.01, jnp.pi/5, (15,15,15)),\n", - " (0.01, 0.0, (31,31,1)),(0.05, 0.0, (31,31,1))\n", - "]\n", - "contact_param_gridding_schedule = [\n", - " b.utils.make_translation_grid_enumeration_3d(\n", - " -x, -x, -ang,\n", - " x, x, ang,\n", - " *nums\n", - " )\n", - " for (x,ang,nums) in grid_params\n", - "]\n", - "\n", - "OBJECT_NUMBER = 1\n", - "address = f\"contact_params_{OBJECT_NUMBER}\"\n", - "enumerators = b.genjax.make_enumerator([address])\n", - "\n", - "def c2f_(potential_trace, contact_param_gridding_schedule):\n", - " cp = potential_trace[address]\n", - " for cp_grid in contact_param_gridding_schedule:\n", - " cps = cp + cp_grid\n", - " scores = enumerators.enumerate_choices_get_scores(potential_trace, key, cps)\n", - " cp = cps[scores.argmax()]\n", - " potential_trace = enumerators.update_choices(potential_trace, key, cp)\n", - " return potential_trace, scores.argmax()\n", - "c2f = jax.jit(c2f_)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "5a628704", - "metadata": {}, - "outputs": [], - "source": [ - "def viz_trace_viser(server, trace, colors=None):\n", - " indices = b.genjax.get_indices(trace)\n", - " poses = b.genjax.get_poses(trace)\n", - " for i in range(len(poses)):\n", - " mesh = b.RENDERER.meshes[indices[i]]\n", - " server.add_mesh_trimesh(\n", - " name=f\"/trimesh/{i}\",\n", - " mesh=trimesh.Trimesh(mesh.vertices, mesh.faces),\n", - " position=np.array(poses[i][:3,3]),\n", - " wxyz=b.rotation_matrix_to_quaternion(poses[i][:3,:3]),\n", - " )\n", - " server.add_point_cloud(\n", - " \"/observed_cloud\",\n", - " points=np.array(trace[\"image\"].reshape(-1,3)),\n", - " colors=np.array([0.0, 0.0, 0.0]),\n", - " point_size=0.005\n", - " )\n", - " server.add_point_cloud(\n", - " \"/rendered_cloud\",\n", - " points=np.array(b.genjax.get_rendered_image(trace).reshape(-1,3)),\n", - " colors=np.array([1.0, 0.0, 0.0]),\n", - " point_size=0.005\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-54.53688\n" - ] - } - ], - "source": [ - "key = jax.random.split(key)[0]\n", - "obs_img = b.unproject_depth_jit(rgbd_scaled_down.depth, rgbd_scaled_down.intrinsics)\n", - "trace, weight = importance_jit(key, genjax.choice_map({\n", - " \"parent_0\": -1,\n", - " \"parent_1\": 0,\n", - " \"id_0\": jnp.int32(1),\n", - " \"id_1\": jnp.int32(0),\n", - " \"camera_pose\": jnp.eye(4),\n", - " \"root_pose_0\": table_pose,\n", - " \"face_parent_1\": 2,\n", - " \"face_child_1\": 3,\n", - " \"image\": obs_img,\n", - " \"variance\": 0.03,\n", - " \"outlier_prob\": 0.0001,\n", - "}), (\n", - " jnp.arange(2),\n", - " jnp.arange(22),\n", - " jnp.array([-jnp.ones(3)*100.0, jnp.ones(3)*100.0]),\n", - " jnp.array([jnp.array([-0.3, -0.3, -22*jnp.pi]), jnp.array([0.3, 0.3, 22*jnp.pi])]),\n", - " b.RENDERER.model_box_dims)\n", - ")\n", - "print(trace.get_score())\n", - "viz_trace_viser(server, trace)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "9170b633", - "metadata": {}, - "outputs": [], - "source": [ - "potential_trace = trace\n", - "import time\n", - "cp = potential_trace[address]\n", - "for cp_grid in contact_param_gridding_schedule:\n", - " cps = cp + cp_grid\n", - " scores = enumerators.enumerate_choices_get_scores(potential_trace, key, cps)\n", - " cp = cps[scores.argmax()]\n", - " potential_trace = enumerators.update_choices(potential_trace, key, cp)\n", - "viz_trace_viser(server, potential_trace)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1dd46342", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8c4398d2", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/scripts/experiments/slam/slam_with_room_obj.ipynb b/scripts/experiments/slam/slam_with_room_obj.ipynb index ed10b320..5f1e5ce2 100644 --- a/scripts/experiments/slam/slam_with_room_obj.ipynb +++ b/scripts/experiments/slam/slam_with_room_obj.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -25,7 +25,7 @@ "output_type": "stream", "text": [ "You can open the visualizer by visiting the following URL:\n", - "http://127.0.0.1:7001/static/\n" + "http://127.0.0.1:7050/static/\n" ] } ], @@ -35,17 +35,7 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import viser\n", - "server = viser.ViserServer()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, + "execution_count": 63, "metadata": {}, "outputs": [], "source": [ @@ -63,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 64, "metadata": {}, "outputs": [ { @@ -108,30 +98,7 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "GlbHandle(_impl=_SceneNodeHandleState(name='/trimesh', api=, wxyz=array([1., 0., 0., 0.]), position=array([0., 0., 0.]), visible=True, click_cb=None))" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "server.add_mesh_trimesh(\n", - " name=\"/trimesh\",\n", - " mesh=mesh,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ @@ -155,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ @@ -167,7 +134,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -190,11 +157,11 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ - "b.clear_visualizer()\n", + "b.clear()\n", "b.show_pose(\"actual\", camera_poses[1])\n", "tr,q = b.pose_matrix_to_translation_and_quaternion(camera_poses[0])\n", "b.show_pose(\"inferred\", b.translation_and_quaternion_to_pose_matrix(tr,q), size=0.1)" @@ -202,21 +169,21 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "start (Array(0.48633558, dtype=float32), (Array([-0.01954 , 0.06823303, -0.45479128], dtype=float32), Array([ 0. , 1.025517 , -0.06746437, -0.06139864], dtype=float32)))\n" + "start (Array(0.48633558, dtype=float32), (Array([-0.01954 , 0.06823298, -0.4547913 ], dtype=float32), Array([ 0. , 1.0255171 , -0.06746437, -0.06139849], dtype=float32)))\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "0.11390623450279236: 100%|██████████| 200/200 [00:00<00:00, 366.14it/s] \n" + "0.6546157002449036: 100%|██████████| 200/200 [00:00<00:00, 387.57it/s] \n" ] } ], @@ -243,79 +210,72 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/53 [00:00" ] }, - "execution_count": 15, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } @@ -397,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -422,9 +382,9 @@ "Stream mapping:\n", " Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))\n", "Press [q] to stop, [?] for help\n", - "[libx264 @ 0x564a196c9700] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512\n", - "[libx264 @ 0x564a196c9700] profile High 4:4:4 Predictive, level 3.2, 4:4:4, 8-bit\n", - "[libx264 @ 0x564a196c9700] 264 - core 160 r3011 cde9a93 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=3 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\n", + "[libx264 @ 0x555a26780740] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512\n", + "[libx264 @ 0x555a26780740] profile High 4:4:4 Predictive, level 3.2, 4:4:4, 8-bit\n", + "[libx264 @ 0x555a26780740] 264 - core 160 r3011 cde9a93 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=3 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\n", "Output #0, mp4, to 'localization_with_gradients.mp4':\n", " Metadata:\n", " encoder : Lavf58.45.100\n", @@ -433,24 +393,24 @@ " encoder : Lavc58.91.100 libx264\n", " Side data:\n", " cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A\n", - "frame= 53 fps=0.0 q=-1.0 Lsize= 259kB time=00:00:16.66 bitrate= 127.1kbits/s speed=19.6x \n", - "video:257kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.484197%\n", - "[libx264 @ 0x564a196c9700] frame I:1 Avg QP:12.64 size: 42550\n", - "[libx264 @ 0x564a196c9700] frame P:38 Avg QP:12.79 size: 3663\n", - "[libx264 @ 0x564a196c9700] frame B:14 Avg QP:16.70 size: 5792\n", - "[libx264 @ 0x564a196c9700] consecutive B-frames: 54.7% 22.6% 22.6% 0.0%\n", - "[libx264 @ 0x564a196c9700] mb I I16..4: 34.1% 43.3% 22.6%\n", - "[libx264 @ 0x564a196c9700] mb P I16..4: 11.2% 5.6% 1.1% P16..4: 2.0% 1.3% 0.4% 0.0% 0.0% skip:78.4%\n", - "[libx264 @ 0x564a196c9700] mb B I16..4: 4.0% 2.0% 1.2% B16..8: 4.1% 1.8% 0.9% direct: 3.7% skip:82.3% L0:53.3% L1:34.9% BI:11.8%\n", - "[libx264 @ 0x564a196c9700] 8x8 transform intra:32.2% inter:69.4%\n", - "[libx264 @ 0x564a196c9700] coded y,u,v intra: 6.7% 6.6% 6.5% inter: 1.2% 1.9% 2.4%\n", - "[libx264 @ 0x564a196c9700] i16 v,h,dc,p: 85% 13% 1% 1%\n", - "[libx264 @ 0x564a196c9700] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 65% 10% 22% 0% 0% 0% 0% 0% 0%\n", - "[libx264 @ 0x564a196c9700] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 48% 26% 16% 2% 2% 2% 2% 1% 1%\n", - "[libx264 @ 0x564a196c9700] Weighted P-Frames: Y:0.0% UV:0.0%\n", - "[libx264 @ 0x564a196c9700] ref P L0: 64.9% 6.9% 17.6% 10.6%\n", - "[libx264 @ 0x564a196c9700] ref B L0: 77.7% 19.2% 3.2%\n", - "[libx264 @ 0x564a196c9700] kb/s:119.02\n" + "frame= 53 fps=0.0 q=-1.0 Lsize= 258kB time=00:00:16.66 bitrate= 126.7kbits/s speed=19.3x \n", + "video:257kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.479635%\n", + "[libx264 @ 0x555a26780740] frame I:1 Avg QP:12.62 size: 42569\n", + "[libx264 @ 0x555a26780740] frame P:40 Avg QP:12.86 size: 3571\n", + "[libx264 @ 0x555a26780740] frame B:12 Avg QP:15.89 size: 6382\n", + "[libx264 @ 0x555a26780740] consecutive B-frames: 60.4% 22.6% 17.0% 0.0%\n", + "[libx264 @ 0x555a26780740] mb I I16..4: 34.1% 43.3% 22.6%\n", + "[libx264 @ 0x555a26780740] mb P I16..4: 11.2% 5.2% 1.1% P16..4: 2.0% 1.4% 0.4% 0.0% 0.0% skip:78.7%\n", + "[libx264 @ 0x555a26780740] mb B I16..4: 3.8% 1.8% 1.4% B16..8: 4.0% 1.8% 1.1% direct: 4.2% skip:81.9% L0:52.4% L1:34.6% BI:13.0%\n", + "[libx264 @ 0x555a26780740] 8x8 transform intra:31.0% inter:68.5%\n", + "[libx264 @ 0x555a26780740] coded y,u,v intra: 6.6% 6.5% 6.3% inter: 1.3% 1.9% 2.3%\n", + "[libx264 @ 0x555a26780740] i16 v,h,dc,p: 85% 13% 1% 1%\n", + "[libx264 @ 0x555a26780740] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 64% 11% 23% 0% 0% 0% 0% 0% 0%\n", + "[libx264 @ 0x555a26780740] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 49% 26% 16% 2% 2% 2% 2% 1% 1%\n", + "[libx264 @ 0x555a26780740] Weighted P-Frames: Y:0.0% UV:0.0%\n", + "[libx264 @ 0x555a26780740] ref P L0: 64.5% 6.9% 18.1% 10.5%\n", + "[libx264 @ 0x555a26780740] ref B L0: 78.6% 19.1% 2.3%\n", + "[libx264 @ 0x555a26780740] kb/s:118.65\n" ] }, { @@ -459,7 +419,7 @@ "0" ] }, - "execution_count": 16, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } @@ -475,55 +435,11 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
╭─────────────── viser ───────────────╮\n",
-       "│             ╷                       │\n",
-       "│   HTTP      │ http://0.0.0.0:8081   │\n",
-       "│   Websocket │ ws://0.0.0.0:8081     │\n",
-       "│             ╵                       │\n",
-       "╰─────────────────────────────────────╯\n",
-       "
\n" - ], - "text/plain": [ - "╭─────────────── \u001b[1mviser\u001b[0m ───────────────╮\n", - "│ ╷ │\n", - "│ HTTP │ http://0.0.0.0:8081 │\n", - "│ Websocket │ ws://0.0.0.0:8081 │\n", - "│ ╵ │\n", - "╰─────────────────────────────────────╯\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
(viser) Connection opened (0, 1 total), 3 persistent messages\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[1m(\u001b[0m\u001b[1mviser\u001b[0m\u001b[1m)\u001b[0m Connection opened \u001b[1m(\u001b[0m\u001b[1;36m0\u001b[0m, \u001b[1;36m1\u001b[0m total\u001b[1m)\u001b[0m, \u001b[1;36m3\u001b[0m persistent messages\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 94, "metadata": {}, "outputs": [], "source": [ - "server.add_tr" + "VISUALIZER = b.get_visualizer()" ] }, { @@ -552,9 +468,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - " " - ] + "source": [] } ], "metadata": { @@ -573,7 +487,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.7" + "version": "3.9.18" } }, "nbformat": 4,