Skip to main content

05_live_text_interaction/
05_live_text_interaction.rs

1use std::path::PathBuf;
2
3use visionkit::prelude::*;
4
5fn asset_path() -> PathBuf {
6    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
7        .join("examples")
8        .join("assets")
9        .join("live_text.png")
10}
11
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13    if !ImageAnalyzer::is_supported() {
14        println!("ImageAnalyzer is not supported on this Mac");
15        return Ok(());
16    }
17
18    let asset_path = asset_path();
19    let analyzer = ImageAnalyzer::new()?;
20    let analysis = analyzer.analyze_image_at_path(
21        &asset_path,
22        ImageOrientation::Up,
23        &ImageAnalyzerConfiguration::new(ImageAnalysisTypes::TEXT),
24    )?;
25
26    let interaction = LiveTextInteraction::new()?;
27    interaction.track_image_at_path(&asset_path)?;
28    interaction.set_analysis(&analysis)?;
29    interaction.set_preferred_interaction_types(LiveTextInteractionTypes::AUTOMATIC_TEXT_ONLY)?;
30    interaction.set_selectable_items_highlighted(true)?;
31    let rect = interaction.contents_rect()?;
32    println!("contents rect: {rect:?}");
33    let overlay_text = interaction.text();
34    println!("overlay text: {overlay_text:?}");
35    println!(
36        "live text button visible: {}",
37        interaction.live_text_button_visible()?
38    );
39    println!(
40        "supplementary hidden: {}",
41        interaction.is_supplementary_interface_hidden()?
42    );
43    Ok(())
44}