ocr 0.1.2

A pure Rust CLI OCR tool for printed text extraction
Documentation
mod cli;

use anyhow::Result;
use cli::{commands::*, parse, Commands};

#[tokio::main]
async fn main() -> Result<()> {
    tracing_subscriber::fmt()
        .with_env_filter(
            tracing_subscriber::EnvFilter::try_from_default_env()
                .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
        )
        .init();

    let cli = parse();

    match cli.command {
        Commands::Extract {
            image_path,
            output,
            lang,
            preprocess,
            format,
            psm,
            confidence,
            engine,
            dict_correct,
            device,
            osd,
        } => {
            handle_extract(
                image_path,
                output,
                &lang,
                preprocess,
                &format,
                psm,
                confidence,
                &engine,
                dict_correct,
                &device,
                osd,
            )
            .await?;
        }
        Commands::Batch {
            input_dir,
            output_dir,
            lang,
            confidence,
            max_concurrent,
            engine,
            dict_correct,
            device,
        } => {
            handle_batch(
                input_dir,
                output_dir,
                &lang,
                confidence,
                max_concurrent,
                &engine,
                dict_correct,
                device.as_str(),
            )
            .await?;
        }
        Commands::Layout { image_path, output } => {
            handle_layout(image_path, output).await?;
        }
        Commands::ListLanguages => {
            handle_list_languages().await?;
        }
        Commands::Check => {
            handle_check().await?;
        }
        Commands::Info => {
            handle_info().await?;
        }
        Commands::Validate { config_file } => {
            handle_validate(config_file).await?;
        }
        Commands::Train {
            epochs,
            batch_size,
            learning_rate,
            engine,
            checkpoint_dir,
            distortion,
        } => {
            handle_train(epochs, batch_size, learning_rate, engine, checkpoint_dir, distortion)
                .await?;
        }
        Commands::Benchmark { samples, distortion } => {
            handle_benchmark(samples, distortion).await?;
        }
        Commands::Makebox {
            image_path,
            output,
            lang,
            engine,
            preprocess,
        } => {
            handle_makebox(image_path, output, &lang, &engine, preprocess).await?;
        }
        #[cfg(feature = "web-api")]
        Commands::Serve {
            host,
            port,
            max_upload_size,
        } => {
            use ocr::server::{run_server, ServerConfig};
            let config = ServerConfig {
                host,
                port,
                max_upload_size_mb: max_upload_size,
            };
            run_server(config).await?;
        }
    }

    Ok(())
}