1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#![feature(plugin)] #![feature(custom_derive)] #![plugin(rocket_codegen)] #[macro_use] extern crate ndarray; extern crate rocket; extern crate rocket_contrib; extern crate image; extern crate string_error; #[macro_use] extern crate serde_derive; extern crate serde; extern crate serde_json; use std::io; use std::io::{Read, Cursor}; use rocket_contrib::{Json, Value}; use rocket::response::NamedFile; mod filter; mod utils; #[derive(FromForm)] struct Options { blocksize: Option<usize>, char_detect_thresh: Option<u32>, line_detect_thresh: Option<u32> } #[derive(Serialize)] struct Res { aa: String } #[get("/")] fn index() -> io::Result<NamedFile> { NamedFile::open("static/index.html") } #[post("/image", data = "<image_binary>")] fn image_without_options(image_binary: rocket::Data) -> Json<Res> { let options = Options { blocksize: None, char_detect_thresh: None, line_detect_thresh: None }; image(options, image_binary) } #[post("/image?<options>", data = "<image_binary>")] fn image(options: Options, image_binary: rocket::Data) -> Json<Res> { let mut hough_filter = filter::block_hough::default(); if let Some(block_size) = options.blocksize { hough_filter.block_size = block_size; } if let Some(slope_count_thresh) = options.char_detect_thresh { hough_filter.slope_count_thresh = slope_count_thresh; } let mut binary_filter = filter::binary::default(); if let Some(thresh) = options.line_detect_thresh { binary_filter.thresh = thresh; } let image_array = utils::read_png(Box::new(image_binary.open())).map_err(|e| println!("{}", e)).unwrap(); let grayscale_array = filter::grayscale::default().run(image_array); let gradient_array = filter::line::default().run(grayscale_array.clone()); let line_array = binary_filter.run(gradient_array).mapv(|e| e as f32) * 250.; let hough_array = hough_filter.run(line_array); let aa = filter::ascii_art::default().run(hough_array); Json(Res { aa: aa }) } fn main() { rocket::ignite().mount("/", routes![index, image, image_without_options]).launch(); }