Skip to main content

zai_rs/model/ocr/
response.rs

1use serde::{Deserialize, Serialize};
2use validator::Validate;
3
4/// OCR recognition response
5#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
6pub struct OcrResponse {
7    /// Task ID
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub task_id: Option<String>,
10
11    /// Message (e.g., success or error description)
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub message: Option<String>,
14
15    /// Status identifier
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub status: Option<String>,
18
19    /// Number of recognition results
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub words_result_num: Option<i32>,
22
23    /// Text recognition results
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub words_result: Option<Vec<WordsResultItem>>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
29pub struct WordsResultItem {
30    /// Location coordinates of the text line
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub location: Option<Location>,
33
34    /// Recognized text content
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub words: Option<String>,
37
38    /// Confidence information (only returned when probability=true)
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub probability: Option<Probability>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
44pub struct Location {
45    /// Left coordinate of the rectangle
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub left: Option<i32>,
48
49    /// Top coordinate of the rectangle
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub top: Option<i32>,
52
53    /// Width of the rectangle
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub width: Option<i32>,
56
57    /// Height of the rectangle
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub height: Option<i32>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
63pub struct Probability {
64    /// Average confidence
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub average: Option<f32>,
67
68    /// Variance of confidence
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub variance: Option<f32>,
71
72    /// Minimum confidence
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub min: Option<f32>,
75}