feat: improve OCR language detection
This commit is contained in:
1 parent
5ee697cadc
commit
6dc1e25f26
1 file changed
+34
-10
+34
-10
@@ -22,17 +22,9 @@ pub fn recognize_bytes(bytes: &[u8]) -> Result<String, String> {
|
|||||||
unsafe {
|
unsafe {
|
||||||
let data = NSData::with_bytes(bytes);
|
let data = NSData::with_bytes(bytes);
|
||||||
|
|
||||||
// 创建文字识别请求,accurate 级别 + 中英多语言
|
// 创建并配置多语言文字识别请求。
|
||||||
let request: Retained<VNRecognizeTextRequest> = VNRecognizeTextRequest::new();
|
let request: Retained<VNRecognizeTextRequest> = VNRecognizeTextRequest::new();
|
||||||
request.setRecognitionLevel(VNRequestTextRecognitionLevel::Accurate);
|
configure_request(&request);
|
||||||
request.setUsesLanguageCorrection(true);
|
|
||||||
let langs = NSArray::from_retained_slice(&[
|
|
||||||
NSString::from_str("zh-Hans"),
|
|
||||||
NSString::from_str("zh-Hant"),
|
|
||||||
NSString::from_str("en-US"),
|
|
||||||
NSString::from_str("ja-JP"),
|
|
||||||
]);
|
|
||||||
request.setRecognitionLanguages(&langs);
|
|
||||||
|
|
||||||
// 基于图像数据构建 handler 并同步执行
|
// 基于图像数据构建 handler 并同步执行
|
||||||
let handler = VNImageRequestHandler::initWithData_options(
|
let handler = VNImageRequestHandler::initWithData_options(
|
||||||
@@ -52,6 +44,23 @@ pub fn recognize_bytes(bytes: &[u8]) -> Result<String, String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn configure_request(request: &VNRecognizeTextRequest) {
|
||||||
|
request.setRecognitionLevel(VNRequestTextRecognitionLevel::Accurate);
|
||||||
|
request.setUsesLanguageCorrection(true);
|
||||||
|
|
||||||
|
if objc2::available!(macos = 13.0) {
|
||||||
|
request.setAutomaticallyDetectsLanguage(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
let langs = NSArray::from_retained_slice(&[
|
||||||
|
NSString::from_str("zh-Hans"),
|
||||||
|
NSString::from_str("zh-Hant"),
|
||||||
|
NSString::from_str("en-US"),
|
||||||
|
NSString::from_str("ja-JP"),
|
||||||
|
]);
|
||||||
|
request.setRecognitionLanguages(&langs);
|
||||||
|
}
|
||||||
|
|
||||||
/// 从请求结果收集识别文本。
|
/// 从请求结果收集识别文本。
|
||||||
unsafe fn collect_text(request: &VNRecognizeTextRequest) -> String {
|
unsafe fn collect_text(request: &VNRecognizeTextRequest) -> String {
|
||||||
let Some(observations) = request.results() else {
|
let Some(observations) = request.results() else {
|
||||||
@@ -66,3 +75,18 @@ unsafe fn collect_text(request: &VNRecognizeTextRequest) -> String {
|
|||||||
}
|
}
|
||||||
lines.join("\n")
|
lines.join("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn enables_automatic_language_detection_by_default_when_available() {
|
||||||
|
let request = VNRecognizeTextRequest::new();
|
||||||
|
configure_request(&request);
|
||||||
|
|
||||||
|
if objc2::available!(macos = 13.0) {
|
||||||
|
assert!(request.automaticallyDetectsLanguage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user