@@ -14,10 +14,13 @@ mod types_session;
1414mod types_knowledge;
1515#[ path = "types_note.rs" ]
1616mod types_note;
17+ #[ path = "types_ocr.rs" ]
18+ mod types_ocr;
1719
1820pub use types_session:: * ;
1921pub use types_knowledge:: * ;
2022pub use types_note:: * ;
23+ pub use types_ocr:: * ;
2124
2225/// 单条 ASR 转写片段。
2326///
@@ -101,99 +104,6 @@ pub struct NoteDraft {
101104 pub markdown : String ,
102105}
103106
104- /// 会话 OCR 块(关键帧画面文字 / 字幕区文字)。
105- ///
106- /// @ai-context: region 取 subtitle | full(ADR-005:字幕区高频采样 vs 全帧低频采样)。
107- /// @ai-context: v0.5.0 M4(REQ-048):region_kind 为分区域 OCR 的版面类型标注
108- /// (text/table/formula/code/unknown;旧数据/整帧直跑为 None)。
109- /// @ai-context: v0.7.3(REQ-156,ADR-015):bbox/screen_id 为屏卡体系的落库列——
110- /// bbox 为检测框(帧坐标系,JSON {x,y,w,h}),screen_id 为采集时
111- /// 分配的屏号(NULL=旧数据无屏,视图层聚类兜底)。
112- #[ derive( Debug , Clone , Serialize , Deserialize , PartialEq ) ]
113- pub struct SessionOcrBlock {
114- pub id : i64 ,
115- pub session_id : i64 ,
116- /// 关键帧相对会话起点的毫秒时间戳
117- pub timestamp_ms : u64 ,
118- pub text : String ,
119- /// 识别置信度 0.0-1.0
120- pub score : f32 ,
121- /// subtitle | full
122- pub region : String ,
123- /// 来源版面区域类型(kebab-case;None=整帧直跑/旧数据)
124- pub region_kind : Option < String > ,
125- /// 检测框(帧坐标系;None=旧数据/无 bbox——下游必须容忍缺省)
126- #[ serde( default ) ]
127- pub bbox : Option < TextBox > ,
128- /// 屏号(采集时分配,会话内递增;None=旧数据无屏)
129- #[ serde( default ) ]
130- pub screen_id : Option < i64 > ,
131- }
132-
133- /// 新增会话 OCR 块入参。
134- #[ derive( Debug , Clone , Serialize , Deserialize , PartialEq ) ]
135- pub struct NewSessionOcrBlock {
136- pub session_id : i64 ,
137- pub timestamp_ms : u64 ,
138- pub text : String ,
139- pub score : f32 ,
140- pub region : String ,
141- /// 来源版面区域类型(kebab-case;None=整帧直跑)
142- pub region_kind : Option < String > ,
143- /// 检测框(帧坐标系;None=未知)
144- #[ serde( default ) ]
145- pub bbox : Option < TextBox > ,
146- /// 屏号(None=旧路径不分配)
147- #[ serde( default ) ]
148- pub screen_id : Option < i64 > ,
149- }
150-
151- /// 屏内结构块(表格/公式/代码区域,v0.7.3 REQ-159)。
152- ///
153- /// @ai-context: 结构块不参与行合并(版面角色独立);rendered 为精修产物
154- /// (表格 Markdown / 公式 LaTeX / 代码原样),None=未精修/失败降级。
155- #[ derive( Debug , Clone , Serialize , Deserialize , PartialEq ) ]
156- pub struct ScreenStructure {
157- /// table | formula | code
158- pub kind : String ,
159- /// 原始 OCR 文本(未精修)
160- pub text : String ,
161- /// 精修渲染产物(None=未精修/失败,徽标降级)
162- #[ serde( default ) ]
163- pub rendered : Option < String > ,
164- }
165-
166- /// 画面要点屏(v0.7.3 REQ-155/158/160,ADR-015)。
167- ///
168- /// @ai-context: 屏 = 老师翻一次页到下一个画面之间的静止画面——课堂记忆的天然单位。
169- /// first_seen/last_seen 为屏内块最早/最晚时间戳(派生自成员块,
170- /// 不建屏表,ADR-006 派生视图传统);image_ref 为 first_seen 时刻
171- /// 最近的归档 full 图(相对路径,asset:// 消费)。
172- #[ derive( Debug , Clone , Serialize , Deserialize , PartialEq ) ]
173- pub struct SessionScreen {
174- pub session_id : i64 ,
175- /// 屏号(None=旧数据聚类派生)
176- #[ serde( default ) ]
177- pub screen_id : Option < i64 > ,
178- pub first_seen_ms : u64 ,
179- pub last_seen_ms : u64 ,
180- /// 标题角色行(大字块;None=无 bbox 降级/无标题)
181- #[ serde( default ) ]
182- pub title : Option < String > ,
183- /// 正文行(行合并后,按阅读顺序)
184- #[ serde( default ) ]
185- pub body : Vec < String > ,
186- /// 图注/标签(短词,按位置排序)
187- #[ serde( default ) ]
188- pub labels : Vec < String > ,
189- /// 归档 full 图相对路径(None=无匹配图)
190- #[ serde( default ) ]
191- pub image_ref : Option < String > ,
192- /// 结构块(表格/公式/代码区域)
193- #[ serde( default ) ]
194- pub structure : Vec < ScreenStructure > ,
195- }
196-
197107/// 决策/应用记录(v0.13.3 REQ-208;一表两面,kind 区分)。
198108///
199109/// @ai-context: 对应 knowledge_decisions 表——decision=思辨面(决策),application=学习面
0 commit comments