@@ -8,7 +8,8 @@ use std::ptr;
8
8
use std:: str;
9
9
use tesseract_sys:: {
10
10
TessBaseAPI , TessBaseAPICreate , TessBaseAPIDelete , TessBaseAPIGetUTF8Text , TessBaseAPIInit3 ,
11
- TessBaseAPIRecognize , TessBaseAPISetImage2 , TessBaseAPISetVariable , TessDeleteText ,
11
+ TessBaseAPIRecognize , TessBaseAPISetImage , TessBaseAPISetImage2 , TessBaseAPISetVariable ,
12
+ TessDeleteText ,
12
13
} ;
13
14
14
15
pub struct Tesseract {
@@ -50,6 +51,25 @@ impl Tesseract {
50
51
pixFreeData ( img) ;
51
52
}
52
53
}
54
+ pub fn set_frame (
55
+ & mut self ,
56
+ frame_data : & [ u8 ] ,
57
+ width : i32 ,
58
+ height : i32 ,
59
+ bytes_per_pixel : i32 ,
60
+ bytes_per_line : i32 ,
61
+ ) {
62
+ unsafe {
63
+ TessBaseAPISetImage (
64
+ self . raw ,
65
+ frame_data. as_ptr ( ) ,
66
+ width,
67
+ height,
68
+ bytes_per_pixel,
69
+ bytes_per_line,
70
+ ) ;
71
+ }
72
+ }
53
73
pub fn set_variable ( & mut self , name : & str , value : & str ) -> i32 {
54
74
let cs_name = cs ( name) ;
55
75
let cs_value = cs ( value) ;
@@ -76,6 +96,21 @@ pub fn ocr(filename: &str, language: &str) -> String {
76
96
cube. get_text ( )
77
97
}
78
98
99
+ pub fn ocr_from_frame (
100
+ frame_data : & [ u8 ] ,
101
+ width : i32 ,
102
+ height : i32 ,
103
+ bytes_per_pixel : i32 ,
104
+ bytes_per_line : i32 ,
105
+ language : & str ,
106
+ ) -> String {
107
+ let mut cube = Tesseract :: new ( ) ;
108
+ cube. set_lang ( language) ;
109
+ cube. set_frame ( frame_data, width, height, bytes_per_pixel, bytes_per_line) ;
110
+ cube. recognize ( ) ;
111
+ cube. get_text ( )
112
+ }
113
+
79
114
#[ test]
80
115
fn ocr_test ( ) {
81
116
assert_eq ! (
@@ -84,6 +119,21 @@ fn ocr_test() {
84
119
) ;
85
120
}
86
121
122
+ #[ test]
123
+ fn ocr_from_frame_test ( ) {
124
+ use std:: fs:: File ;
125
+ use std:: io:: Read ;
126
+
127
+ let mut img = File :: open ( "img.tiff" ) . unwrap ( ) ;
128
+ let mut buffer = Vec :: new ( ) ;
129
+ let _read_data = img. read_to_end ( & mut buffer) . unwrap ( ) ;
130
+
131
+ assert_eq ! (
132
+ ocr_from_frame( & buffer, 2256 , 324 , 3 , 2256 * 3 , "eng" ) ,
133
+ include_str!( "../img.txt" ) . to_string( )
134
+ ) ;
135
+ }
136
+
87
137
#[ test]
88
138
fn expanded_test ( ) {
89
139
let mut cube = Tesseract :: new ( ) ;
0 commit comments