rr: migrate to 0.9.0

develop
Kinch 2023-10-09 17:55:47 +02:00
parent 09990e545e
commit e00703d24d
2 changed files with 38 additions and 38 deletions

View File

@ -2,12 +2,7 @@ local rr = require("rerun_lua")
function bbox(ms_ocr_bbox)
return rr.rect_xyxy {
ms_ocr_bbox[1],
ms_ocr_bbox[2],
ms_ocr_bbox[5],
ms_ocr_bbox[6],
}
return rr.text_object(ms_ocr_bbox)
end
function paragraphs(ms_form_result)
@ -16,8 +11,7 @@ function paragraphs(ms_form_result)
for _, region in ipairs(paragraph.boundingRegions) do
table.insert(result, {
text = paragraph.content,
page = region.pageNumber,
bbox = bbox(region.polygon)
bbox = region.polygon
})
end
end
@ -30,8 +24,7 @@ function lines(ms_form_result)
for _, line in ipairs(page.lines) do
table.insert(result, {
text = line.content,
page = page.pageNumber,
bbox = bbox(line.polygon)
bbox = line.polygon
})
end
end
@ -46,8 +39,7 @@ function words(ms_form_result)
for _, word in ipairs(page.words) do
table.insert(result, {
text = word.content,
page = page.pageNumber,
bbox = bbox(word.polygon)
bbox = word.polygon
})
end
end
@ -58,7 +50,7 @@ end
local ms_form = rr.json("/Users/tbr/Desktop/ms_form.json")
local record = rr.recording("example-2")
record:image("54-1", "/Users/tbr/Desktop/00054-1.png")
--record:image("54-1", "/Users/tbr/Desktop/00054-1.png")
record:image("54-0", "/Users/tbr/Desktop/00054-0.png")
record:text_objects("54-0/ms-forms/paragraphs",paragraphs(ms_form))
record:text_objects("54-0/ms-forms/lines",lines(ms_form))

View File

@ -4,16 +4,18 @@ use std::path::PathBuf;
use mlua::{AnyUserData, MetaMethod, UserData, UserDataRef};
use mlua::prelude::*;
use rerun::{Boxes2D, Image, MaybeOwnedComponentBatch, RecordingStream, RecordingStreamBuilder};
use rerun::components::{Text};
use rerun::datatypes::{TensorData, Vec4D};
use rerun::{Boxes2D, Image, RecordingStream, RecordingStreamBuilder};
use rerun::datatypes::{TensorData, Vec2D, Vec4D};
type TextBox = [f32;8];
#[derive(Debug)]
pub struct TextObject {
pub text: String,
pub bbox: Boxes2D,
pub bbox: TextBox,
}
impl UserData for TextObject {
fn add_methods<'lua, M: LuaUserDataMethods<'lua, Self>>(methods: &mut M) {
methods.add_meta_method(MetaMethod::ToString, |_lua, this, _:()| {
@ -25,7 +27,7 @@ impl UserData for TextObject {
impl<'lua> FromLua<'lua> for TextObject {
fn from_lua(value: LuaValue<'lua>, lua: &'lua Lua) -> LuaResult<Self> {
let table = value.as_table().ok_or(LuaError::RuntimeError("invalid args for text_object".to_string()))?;
let rect = table.get::<_, UserDataRef<Boxes2D>>("bbox")?.clone();
let rect = table.get::<_, TextBox>("bbox")?;
Ok(TextObject {
text: table.get("text")?,
bbox: rect
@ -48,13 +50,11 @@ fn recording(lua: &Lua, name: String) -> LuaResult<AnyUserData> {
lua.create_any_userdata(stream)
}
fn rect_xyxy(lua: &Lua, points: [f32;4]) -> LuaResult<AnyUserData> {
let mut box2d = Boxes2D::from_mins_and_sizes(
[(points[0], points[1])],
[(points[2] - points[0], points[3] - points[1])],
);
box2d.labels = Some(vec![Text::from("A Label")]);
lua.create_any_userdata(box2d)
fn text_object(lua: &Lua, points: TextBox) -> LuaResult<TextObject> {
Ok(TextObject {
text: "".to_string(),
bbox: points,
})
}
fn register_bindings(lua: &Lua) -> LuaResult<()> {
@ -75,17 +75,25 @@ fn register_bindings(lua: &Lua) -> LuaResult<()> {
});
reg.add_method("text_objects", |lua, this, (entity_path, objects): (String, Vec<TextObject>)| {
// let rects: Vec<Boxes2D> = objects.into_iter()
// .map(|t| t.bbox)
// .collect();
for text_object in objects {
this.log_timeless(
entity_path.clone(),
&text_object.bbox
).map_err(|error| LuaError::RuntimeError(format!("Could not send message {error}")))?;
}
let mins: Vec<Vec2D> = objects
.iter()
.map(|text_object| &text_object.bbox)
.map(|bbox| Vec2D([bbox[0], bbox[1]]) )
.collect();
let sizes: Vec<Vec2D> = objects
.iter()
.map(|text_object| &text_object.bbox)
.map(|bbox| Vec2D([bbox[2] - bbox[0], bbox[7] - bbox[1]]) )
.collect();
let labels: Vec<String> = objects
.iter()
.map(|text_object| text_object.text.clone())
.collect();
let boxes2d = Boxes2D::from_mins_and_sizes(mins, sizes)
.with_labels(labels)
;
this.log_timeless(entity_path, &boxes2d)
.map_err(|error| LuaError::RuntimeError(format!("Could not send message {error}")))?;
Ok(())
})
})?;
@ -98,6 +106,6 @@ fn rerun_lua(lua: &Lua) -> LuaResult<LuaTable> {
let exports = lua.create_table()?;
exports.set("recording", lua.create_function(recording)?)?;
exports.set("json", lua.create_function(json)?)?;
exports.set("rect_xyxy", lua.create_function(rect_xyxy)?)?;
exports.set("text_object", lua.create_function(text_object)?)?;
Ok(exports)
}