fix(katana): index out of range
Also handle some error instead of unwrapping it
This commit is contained in:
parent
cde01d45d7
commit
4341695c74
@ -184,11 +184,13 @@ fn regexify_text(text: &String) -> String {
|
|||||||
} else if ['t'].contains(&c) {
|
} else if ['t'].contains(&c) {
|
||||||
ascii_text.push_str("[ti]");
|
ascii_text.push_str("[ti]");
|
||||||
} else if ['.'].contains(&c) {
|
} else if ['.'].contains(&c) {
|
||||||
|
if prev_chars.len() > 3 {
|
||||||
let prev_char = prev_chars[prev_chars.len() - 1];
|
let prev_char = prev_chars[prev_chars.len() - 1];
|
||||||
let prev_prev_char = prev_chars[prev_chars.len() - 2];
|
let prev_prev_char = prev_chars[prev_chars.len() - 2];
|
||||||
if prev_char.is_numeric() && prev_prev_char.is_whitespace() {
|
if prev_char.is_numeric() && prev_prev_char.is_whitespace() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if ['R'].contains(&c) {
|
} else if ['R'].contains(&c) {
|
||||||
ascii_text.push_str("[Rk]");
|
ascii_text.push_str("[Rk]");
|
||||||
} else if c.is_ascii_alphanumeric() {
|
} else if c.is_ascii_alphanumeric() {
|
||||||
@ -255,7 +257,10 @@ fn image_with_white_padding(im: DynamicImage) -> DynamicImage {
|
|||||||
new_im
|
new_im
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn analyze_card_libtesseract(card: image::DynamicImage, count: u32) -> DroppedCard {
|
pub async fn analyze_card_libtesseract(
|
||||||
|
card: image::DynamicImage,
|
||||||
|
count: u32,
|
||||||
|
) -> Result<DroppedCard, String> {
|
||||||
trace!("Spawning threads for analyzing card...");
|
trace!("Spawning threads for analyzing card...");
|
||||||
// Read the name and the series
|
// Read the name and the series
|
||||||
let card_clone = card.clone();
|
let card_clone = card.clone();
|
||||||
@ -314,9 +319,19 @@ pub async fn analyze_card_libtesseract(card: image::DynamicImage, count: u32) ->
|
|||||||
fix_tesseract_string(&mut series_str);
|
fix_tesseract_string(&mut series_str);
|
||||||
series_str
|
series_str
|
||||||
});
|
});
|
||||||
let name = name_thread.await.unwrap();
|
let name = match name_thread.await {
|
||||||
|
Ok(name) => name,
|
||||||
|
Err(why) => {
|
||||||
|
return Err(format!("Failed to read name: {:?}", why));
|
||||||
|
}
|
||||||
|
};
|
||||||
trace!("Name: {}", name);
|
trace!("Name: {}", name);
|
||||||
let series = series_thread.await.unwrap();
|
let series = match series_thread.await {
|
||||||
|
Ok(series) => series,
|
||||||
|
Err(why) => {
|
||||||
|
return Err(format!("Failed to read series: {:?}", why));
|
||||||
|
}
|
||||||
|
};
|
||||||
trace!("Series: {}", series);
|
trace!("Series: {}", series);
|
||||||
// TODO: Read the print number
|
// TODO: Read the print number
|
||||||
let mut character = Character {
|
let mut character = Character {
|
||||||
@ -342,14 +357,17 @@ pub async fn analyze_card_libtesseract(card: image::DynamicImage, count: u32) ->
|
|||||||
None => {}
|
None => {}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
DroppedCard {
|
Ok(DroppedCard {
|
||||||
character,
|
character,
|
||||||
print: 0,
|
print: 0,
|
||||||
edition: 0,
|
edition: 0,
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn analyze_card_subprocess(card: image::DynamicImage, count: u32) -> DroppedCard {
|
pub async fn analyze_card_subprocess(
|
||||||
|
card: image::DynamicImage,
|
||||||
|
count: u32,
|
||||||
|
) -> Result<DroppedCard, String> {
|
||||||
trace!("Spawning threads for analyzing card...");
|
trace!("Spawning threads for analyzing card...");
|
||||||
// Read the name and the series
|
// Read the name and the series
|
||||||
let card_clone = card.clone();
|
let card_clone = card.clone();
|
||||||
@ -386,10 +404,19 @@ pub async fn analyze_card_subprocess(card: image::DynamicImage, count: u32) -> D
|
|||||||
fix_tesseract_string(&mut series_str);
|
fix_tesseract_string(&mut series_str);
|
||||||
series_str
|
series_str
|
||||||
});
|
});
|
||||||
let name = name_thread.await.unwrap();
|
let name = match name_thread.await {
|
||||||
|
Ok(name) => name,
|
||||||
|
Err(why) => {
|
||||||
|
return Err(format!("Failed to read name: {:?}", why));
|
||||||
|
}
|
||||||
|
};
|
||||||
trace!("Name: {}", name);
|
trace!("Name: {}", name);
|
||||||
let series = series_thread.await.unwrap();
|
let series = match series_thread.await {
|
||||||
trace!("Series: {}", series);
|
Ok(series) => series,
|
||||||
|
Err(why) => {
|
||||||
|
return Err(format!("Failed to read series: {:?}", why));
|
||||||
|
}
|
||||||
|
};
|
||||||
// TODO: Read the print number
|
// TODO: Read the print number
|
||||||
let mut character = Character {
|
let mut character = Character {
|
||||||
wishlist: None,
|
wishlist: None,
|
||||||
@ -414,14 +441,14 @@ pub async fn analyze_card_subprocess(card: image::DynamicImage, count: u32) -> D
|
|||||||
None => {}
|
None => {}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
DroppedCard {
|
Ok(DroppedCard {
|
||||||
character,
|
character,
|
||||||
print: 0,
|
print: 0,
|
||||||
edition: 0,
|
edition: 0,
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn execute_analyze_drop(image: DynamicImage, count: u32) -> DroppedCard {
|
async fn execute_analyze_drop(image: DynamicImage, count: u32) -> Result<DroppedCard, String> {
|
||||||
let config = CONFIG.get().unwrap();
|
let config = CONFIG.get().unwrap();
|
||||||
match config.tesseract.backend.as_str() {
|
match config.tesseract.backend.as_str() {
|
||||||
"libtesseract" => analyze_card_libtesseract(image, count).await,
|
"libtesseract" => analyze_card_libtesseract(image, count).await,
|
||||||
|
Loading…
Reference in New Issue
Block a user