use std::error::Error;
use tesseract_rs::TesseractAPI;
fn main() -> Result<(), Box<dyn Error>> {
println!("Tesseract-rs Embedded Tessdata Example");
println!("======================================");
let api = TesseractAPI::new();
let languages = api.embedded_languages();
println!("Available embedded languages: {:?}", languages);
println!("\nInitializing with embedded English tessdata...");
api.init_embedded("eng")?;
println!("✓ Successfully initialized with embedded tessdata!");
let width = 200;
let height = 50;
let mut image_data = vec![255u8; width * height];
draw_hello(&mut image_data, width, height);
api.set_image(
&image_data,
width as i32,
height as i32,
1, width as i32, )?;
api.set_variable("tessedit_pageseg_mode", "8")?;
println!("\nPerforming OCR on test image...");
let text = api.get_utf8_text()?;
println!("Recognized text: '{}'", text.trim());
if languages.contains(&"tur") {
println!("\nTesting Turkish tessdata...");
let api_tur = TesseractAPI::new();
api_tur.init_embedded("tur")?;
println!("✓ Successfully initialized with embedded Turkish tessdata!");
}
println!("\n🎉 Embedded tessdata example completed successfully!");
println!("This binary contains all necessary tessdata files embedded within it.");
Ok(())
}
fn draw_hello(image_data: &mut [u8], width: usize, height: usize) {
let patterns = [
vec![
"## ##", "## ##", "## ##", "########", "## ##", "## ##", "## ##",
],
vec![
"########", "## ", "## ", "###### ", "## ", "## ", "########",
],
vec![
"## ", "## ", "## ", "## ", "## ", "## ", "########",
],
vec![
"## ", "## ", "## ", "## ", "## ", "## ", "########",
],
vec![
" ###### ", "## ##", "## ##", "## ##", "## ##", "## ##", " ###### ",
],
];
let start_x = 20;
let start_y = 15;
let letter_width = 10;
let letter_spacing = 12;
for (letter_idx, pattern) in patterns.iter().enumerate() {
let letter_x = start_x + letter_idx * letter_spacing;
for (row_idx, row) in pattern.iter().enumerate() {
let y = start_y + row_idx;
if y >= height {
break;
}
for (col_idx, ch) in row.chars().enumerate() {
let x = letter_x + col_idx;
if x >= width {
break;
}
if ch == '#' {
image_data[y * width + x] = 0; }
}
}
}
}