bce_ocr/v1/accurate_basic/
mod.rs1use serde::{Deserialize, Serialize};
3use serde_repr::Deserialize_repr;
4
5impl Request {
6 pub fn new(image: Image) -> Self {
7 match image.image_type {
8 ImageType::ImageFile => Request {
9 image: Some(image.image_data),
10 ..Default::default()
11 },
12 ImageType::URL => Request {
13 url: Some(image.image_data),
14 ..Default::default()
15 },
16 ImageType::PDF => Request {
17 pdf_file: Some(image.image_data),
18 ..Default::default()
19 },
20 }
21 }
22
23 pub fn probability(mut self, probility: bool) -> Self {
24 self.probability = Some(probility);
25 self
26 }
27
28 pub fn post(
29 self,
30 access_token: impl Into<String>,
31 ) -> Result<Response, Box<dyn std::error::Error>> {
32 let access_token: String = access_token.into();
33 let data = serde_url_params::to_string(&self)?;
34
35 let response = ureq::post("https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic")
36 .set("Content-Type", "application/x-www-form-urlencoded")
37 .query("access_token", &access_token)
38 .send_string(&data)?
39 .into_string()?;
40
41 let response = serde_json::from_str(&response)?;
42
43 Ok(response)
44 }
45}
46
47pub enum ImageType {
48 ImageFile,
50 URL,
52 PDF,
54}
55
56pub struct Image {
57 pub image_data: String,
58 pub image_type: ImageType,
59}
60
61#[derive(Serialize, Default, Debug)]
62pub struct Request {
63 image: Option<String>,
64 url: Option<String>,
65 pdf_file: Option<String>,
66 pub language_type: Option<Lang>,
67 pub pdf_file_num: Option<String>,
68 pub detect_direction: Option<bool>,
69 pub paragraph: Option<bool>,
70 pub probability: Option<bool>,
71}
72
73#[derive(Deserialize, Debug)]
74pub struct Response {
75 pub log_id: u64,
76 pub direction: Option<Direction>,
77 pub words_result: Vec<Sentence>,
78 pub pdf_file_size: Option<String>,
79 pub paragraphs_result: Option<Vec<SentenceIdx>>
80}
81
82#[derive(Deserialize, Debug)]
83pub struct SentenceIdx {
84 words_result_idx: Vec<u32>,
85}
86
87#[derive(Deserialize, Debug)]
88pub struct Sentence {
89 words: String,
90 probability: Option<Probability>,
91}
92
93#[derive(Deserialize, Debug)]
94pub struct Probability {
95 average: f64,
96 min: f64,
97 variance: f64,
98}
99
100#[derive(Deserialize_repr, Debug)]
101#[repr(i32)]
102pub enum Direction {
103 Unknown = -1,
104 Normal,
105 Counterclockwise90,
106 Counterclockwise180,
107 Counterclockwise270,
108}
109
110#[derive(Serialize, Debug)]
111pub enum Lang {
112 #[serde(rename = "auto_detect")]
113 AutoDetect,
114 #[serde(rename = "CHN_ENG")]
115 ChineseEnglish,
116 #[serde(rename = "ENG")]
117 English,
118 #[serde(rename = "JAP")]
119 Japanese,
120 #[serde(rename = "KOR")]
121 Korean,
122 #[serde(rename = "FRE")]
123 French,
124 #[serde(rename = "SPA")]
125 Spanish,
126 #[serde(rename = "POR")]
127 Portuguese,
128 #[serde(rename = "GER")]
129 German,
130 #[serde(rename = "ITA")]
131 Italian,
132 #[serde(rename = "RUS")]
133 Russian,
134 #[serde(rename = "DAN")]
135 Danish,
136 #[serde(rename = "DUT")]
137 Nederlands,
138 #[serde(rename = "MAL")]
139 Malaysian,
140 #[serde(rename = "SWE")]
141 Svenska,
142 #[serde(rename = "IND")]
143 Indonesia,
144 #[serde(rename = "POL")]
145 Polska,
146 #[serde(rename = "ROM")]
147 Romana,
148 #[serde(rename = "TUR")]
149 Turkish,
150 #[serde(rename = "GRE")]
151 Ellinika,
152 #[serde(rename = "HUN")]
153 Magyar,
154 #[serde(rename = "THA")]
155 Thai,
156 #[serde(rename = "VIE")]
157 Viet,
158 #[serde(rename = "ARA")]
159 Arabi,
160 #[serde(rename = "HIN")]
161 Hindi,
162}