bce_ocr/v1/accurate_basic/
mod.rs

1//! [API document](https://cloud.baidu.com/doc/OCR/s/1k3h7y3db)
2use 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    /// base64, can be jpeg/png/bmp
49    ImageFile,
50    /// URI to the image file. remember do url encode
51    URL,
52    /// base64
53    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}