Giá trị và ý nghĩa của SANE_ACTION

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu công nghệ số hóa và tạo lập chỉ số trong hệ quản trị nội dung 002 (Trang 29 - 41)

Ký hiệu Mô tả

SANE_ACTION_GET_VALUE SANE_ACTION_SET_VALUE

SANE_ACTION_SET_AUTO

Lấy giá trị thuộc tính hiện tại

Thiết lập giá trị thuộc tính. Giá trị thuộc tính được truyền qua đối số v có thể được thay đổi bởi backend nếu giá trị không thể thiết lập một cách chính xác.

Bật chế độ tự động. Backend hoặc thiết bị sẽ tự động lựa chọn một giá trị phù hợp.

Sau khi thiết lập giá trị với giá trị action value là SANE_ACTION_SET_VALUE, các thông tin thêm về mức độ thành công của yêu cầu thiết lập được trả về trong đối số *i (Nếu i không phải là con trỏ NULL).

Nếu việc gọi hàm thất bại, một trong các giá trị sau sẽ được trả về. SANE_STATUS_UNSUPPORTED: Hành động không được hỗ trợ. SANE_STATUS_INVAL: Giá trị thuộc tính không hợp lệ

SANE_STATUS_IO_ERROR: Có lỗi trong quá trình giao tiếp với thiết bị. SANE_STATUS_NO_MEM: Không đủ bộ nhớ cần thiết.

SANE_STATUS_ACCESS_DENIED: Truy cập tới thuộc tính bị từ chối bởi vì sự xác thực không hợp lệ.

sane_get_parameters

Hàm này được dùng để lấy các thông số quét hiện tại. Các đối số cần truyền cho hàm là handle h của thiết bị và con trỏ trỏ tới cấu trúc dữ liệu “thông số” (parameter structure). Cấu trúc dữ liệu thông số được mô tả chi tiết hơn phía dưới.

SANE_Status sane_get_parameters (SANE_Handle h, SANE_Parameters * p);

SANE_Parameter. Mô tả C cho cấu trúc như sau: typedef struct { SANE_Frame format; SANE_Bool last_frame; SANE_Int bytes_per_line; SANE_Int pixels_per_line; SANE_Int lines; SANE_Int depth; } SANE_Parameters;

Trường dữ liệu “format” chỉ rõ định dạng của khung tiếp theo được trả về. Trường dữ liệu “last_frame” được đặt bằng SANE_TRUE nếu và chỉ nếu khung ( mà đang được thu thập (hoặc khung sẽ được thu thập tiếp theo nếu hiện tại không có khung nào) ) là khung cưới cùng của một ảnh đa khung (multi frame image). (ví dụ, khung hiện tại là thành phần khung blue của một ảnh red, green, blue)

Trường “lines” chỉ rõ khung có bao nhiêu dòng quét. Nếu giá trị này là -1 thì nghĩa là không lấy được số dòng quét, frontend nên gọi hàm sane_read() tới khi nó trả về giá trị SANE_STATUS_EOF.

Trường bytes_per_line: chỉ rõ số byte cho một dòng quét Trường depth: chỉ rõ số bit của một mẫu

Trường pixels_per_line: chỉ rõ số điểm ảnh cho một dòng quét.

Giả sử B là số kênh trong một khung, khi đó số byte trên dòng (được cho trong trường bytes_per_line) được tính theo độ sâu bit d (được cho trong trường depth) và số điểm ảnh trên dòng thứ n (được cho trong trường pixels_per_line) như sau:

Chú ý rằng, số byte trên một dòng có thể lớn hơn giá trị nhỏ nhất được tính bởi vế phải của biểu thức.

sane_start

Hàm này khởi tạo quá trình nhận ảnh từ một thiết bị đại diện bởi handle h.

SANE_Status sane_start (SANE_Handle h);

Hàm này có thể thực thi thất bại với các mã trả về sau:

SANE_STATUS_CANCELLED: Hành động bị huỷ bỏ bởi một lời gọi hàm sane_cancel()

SANE_STATUS_DEVICE_BUSY: Thiết bị đang bận. Hành động nên được thử lại sau

SANE_STATUS_JAMMED: Khay nạp giấy bị kẹt. SANE_STATUS_NO_DOCS: Khay nạp hết giấy.

SANE_STATUS_COVER_OPEN: Nắp của máy quét đang mở. SANE_STATUS_IO_ERROR: Lỗi khi giao tiếp với thiết bị. SANE_STATUS_NO_MEM: Không đủ bộ nhớ cần thiết.

SANE STATUS_INVAL: Việc quét không thể bắt đầu với các thuộc tính hiện tại. Frontend nên nạp lại các mô tả thuộc tính nếu giá trị SANE_INFO_RELOAD_OPTIONS được trả về từ lời gọi hàm sane_control_option().

sane_read

Hàm này được gọi để đọc dữ liệu ảnh từ thiết bị được đại diện bởi handle h. Đối số buf là một con trỏ trỏ tới một vùng nhớ có kích thước ít nhất bằng maxlen byte. Số byte trả về được chứa trong *len. Backend sẽ đặt đối số này bằng 0 khi giá trị trả về không phải là SANE_STATUS_GOOD. Khi lời gọi hàm thành công, số byte trả về có thể là số bất kỳ từ 0 tới maxlen.

SANE_Status sane_read (SANE_Handle h, SANE_Byte * buf, SANE_Int maxlen, SANE_Int * len);

Nếu hàm được gọi khi không có dữ liệu, một trong hai trường hợp sẽ xảy ra tùy thuộc vào chế độ I/O của handle:

1. Nếu thiết bị đang trong chế độ blocking I/O (chế độ mặc định), hàm sẽ bị dừng lại tới khi ít nhất có một byte dữ liệu (hoặc tới khi có lỗi xảy ra).

2. Nếu thiết bị đang trong chế độ non-blocking, hàm sẽ trả về ngay lập tức với giá trị SANE_STATUS_GOOD và *len được đặt bằng 0.

I/O mode của handle h có thể được thiết lập qua hàm sane_set_io_mode() Nếu việc gọi hàm thất bại, hàm sẽ trả về một trong các giá trị sau:

SANE_STATUS_CANCELLED: Hành động bị huỷ bỏ bởi một lời gọi hàm sane_cancel()

SANE_STATUS_EOF: Không còn dữ liệu cho khung hiện tại. SANE_STATUS_JAMMED: Khay nạp giấy bị kẹt.

SANE_STATUS_NO_DOCS: Khay nạp hết giấy

SANE_STATUS_COVER_OPEN: Nắp của máy quét đang mở. SANE_STATUS_IO_ERROR: Lỗi khi giao tiếp với thiết bị.

SANE_STATUS_NO_MEM: Không đủ bộ nhớ cần thiết.

SANE_STATUS_ACCESS_DENIED: Truy cập tới thuộc tính bị từ chối bởi vì sự xác thực không hợp lệ.

sane_cancel

Hàm này được dùng để kết thúc ngay lập tức hoặc nhanh nhất có thể các hoạt động hiện tại của thiết bị đại diện bởi handle h.

void sane_cancel (SANE_Handle h);

Hàm này có thể được gọi bất kỳ lúc nào (khi mà handle h vẫn là một handle hợp lệ) nhưng chỉ thường được dùng cho các hoạt động dài (ví dụ như quá trình nhận ảnh). Hàm có thể gọi bất đồng bộ một cách an toàn (gọi bên trong một hàm sự kiện). Cũng cần chú ý rằng, việc gọi hàm thành công không có nghĩa rằng hoạt động hiện tại của thiết bị được đảm bảo hủy bỏ hoàn toàn. Nó chỉ đảm bảo rằng việc hủy bỏ sẽ được khởi tạo. Việc hủy bỏ chỉ hoàn toàn khi hàm được trả về (thường với giá trị SANE_STATUS_CANCELLED). Điều này có nghĩa là frontend không được gọi bất kỳ hàm nào khác cho tới khi hành động hủy bỏ được trả về.

sane set io mode

Hàm này được dùng để thiết lập I/O mode cho handle h. I/O mode có thể là blocking (khóa) hoặc non-blocking (không khóa). Nếu đối số m là SANE_TRUE, chế độ sẽ là non-blocking, ngược lại nó sẽ là blocking. Hàm này chỉ được gọi sau khi hàm sane_start() được thực hiện.

SANE_Status sane_set_io_mode (SANE_Handle h, SANE_Bool m);

Một handle được mở mới sẽ mặc định hoạt động ở chế độ blocking. Backend có thể sẽ không hỗ trợ chế độ non-blocking I/O mode, trong trường hợp này giá trị SANE_STATUS_UNSUPPORTED được trả về. Blocking I/O được hỗ trợ bởi tất cả các backend.

Nếu thất bại, hàm sẽ trả về một trong các giá trị sau đây:

SANE_STATUS_INVAL: Không có quá trình nhận ảnh nào đang thực hiện. SANE_STATUS_UNSUPPORTED: Backend không hỗ trợ chế độ I/O được yêu cầu.

sane_get_select_fd

Hàm được dùng để truy vấn file-descriptor (mô tả file) cho handle h và chỉ đọc được nếu có dữ liệu ảnh (nghĩa là lời gọi hàm sane_read() phải trả lại ít nhất một byte dữ liệu). Nếu lời gọi thành công, file-descriptor được trả về trong *fd

SANE_Status sane_get_select_fd (SANE_Handle h, SANE_Int *fd);

descriptor trả về được duy trì trong suốt quá trình thu nhận ảnh (nghĩa là cho tới khi sane_cancel() hoặc sane_start() được gọi lại hoặc sane_read() trả về giá trị SANE_STATUS_EOF). Thực tế, backend phải đảm nhận việc đóng file-descriptor được trả về tại thời điểm khi lời gọi hàm sane_read() tiếp theo có thể trả về giá trị SANE_STATUS_EOF. Điều này là cần thiết để đảm bảo rằng ứng dụng có thể nhận biết được mà không cần phải gọi hàm sane_read()

Backend có thể không hỗ trợ hàm này, trong trường hợp này, hàm sẽ trả lại giá trị SANE_STATUS_UNSUPPORTED.

Nếu thất bại, hàm sẽ trả về một trong các giá trị sau:

SANE_STATUS_INVAL: Không có quá trình nhận ảnh nào đang thực hiện. SANE_STATUS_UNSUPPORTED: Backend không hỗ trợ chế độ I/O được yêu cầu.

san_strstatus

Hàm này được dùng để dịch một mã SANE_status sang dạng một xâu ký tự có thể in được. Hàm không bao giờ trả về giá trị NULL. Con trỏ trả về vẫn hợp lệ ít nhất cho đến khi lời gọi hàm tiếp theo được gọi.

const SANE_String_Const sane_strstatus (SANE_Status status);

1.2.2.4. Khung chương trình - Code Flow

Khung chương trình sử dụng SANE_API được mô tả trong hình 1.7. Hàm sane_init() và sane_exit() lần lượt được dùng để khởi tạo và kết thúc backend. Tất cả các hàm khác phải được thực hiện sau khi khởi tạo và trước khi kết thúc backend.

Hàm sane_get_devices() có thể được gọi bất kỳ sau hàm sane_init() được gọi. Nó trả về danh sách các thiết bị tồn tại tại thời điểm hàm được gọi. Danh sách này có thể thay đổi khi các thiết bị được bật/tắt giữa các lần gọi hàm. Cũng cần chú ý rằng, việc gọi hàm có thể bị trễ bởi nó phải lấy tất các các cấu hình của thiết bị (một số thiết bị có thể trên máy ở xa). Vì vậy, các frontend nên cung cấp khả năng trực tiếp chọn thiết bị cho người dùng để không phải gọi đến hàm này.

Khi một thiết bị được chọn, nó sẽ đươc mở bằng cách gọi hàm sane_open. Nhiều thiết bị có thể được mở tại một thời điểm. SANE_backend thường không hạn chế số thiết bị được mở tại một thời điểm.

Một thiết bị sau khi được mở có thể được thiết lập thông qua handle thiết bị của nó bằng cách sử dụng các hàm sane_get_option_descriptor() và sane_control_option(). Trong quá trình thiết lập cấu hình cho thiết bị, việc truy xuất các mô tả thuộc tính, thiết lập và đọc các giá trị thuộc tính có thể được thực hiện tùy ý. Thông thường, frontend đọc tất cả các thuộc tính ngay lúc đầu và sau đó xây dựng một giao diện (ở dạng đồ họa hoặc dưới dạng dòng lệnh) để điều khiển các thuộc tính này. Cũng cần chú ý rằng,

số lượng các thuộc tính là cố định đối với mỗi handle thiết bị. Tuy nhiên, khi một thuộc tính được thiết lập có thể làm thuộc tính khác được kích hoạt hoặc vô hiệu hóa. Vì thể, sau khi thiết lập một thuộc tính, cần phải đọc lại một số hoặc tất cả các mô tả thuộc tính. Trong quá tình thiết lập cấu hình thiết bị cũng cho phép gọi hàm sane_get_parameters() để có được một đánh giá ước lượng về các thông số của ảnh trước khi quá trình nhận ảnh thực sự bắt đầu.

Hình 1.7: Khung chương trình

Handle của thiết bị có thể được thiết lập ở chế độ blocking hoặc non-blocking bằng cách gọi hàm set_io_mode(). Tất cả các thiết bị đều hỗ trợ chế độ blocking (là chế độ mặc định), nhưng việc hỗ trợ chế độ non-blocking I/O chỉ được khuyến khích trên các hệ điều hành như UNIX.

Sau khi thiết bị được thiết lập cấu hình một cách đúng đắn, quá trình nhận ảnh có thể được bắt đầu bằng cách gọi hàm sane_start(). Backend sẽ tính toán một cách chính xác các thông số của ảnh tại thời điểm này. Vì vậy, các lời gọi hàm sane_get_parameter() sau thời điểm này sẽ trả về các giá trị chính xác chứ không phải là giá trị ước lượng.

Các dữ liệu hình ảnh được thu thập bằng cách gọi lặp lại hàm sane_read(). Hàm này sẽ trả về giá trị kết thúc (SANE_STATUS_EOF) để đánh dấu khung hiện tại đã kết thúc. Nếu frontend muốn nhận thêm các khung tiếp theo (ví dụ các kênh riêng biệt trong ảnh red/green/blue hoặc các nhiều ảnh), nó có thể gọi lại hàm sane_start(). Khi tất các các khung mong muốn đã được nhận, hàm sane_cancel() phải được gọi. Hàm này cũng có thể được gọi bất kỳ thời điểm nào để hủy bỏ hành động đang được thực hiện. Chú ý rằng, sane_cancel() phải luôn luôn được gọi ngay cả khi hàm sane_read() trả về giá trị SANE_STATUS_EOF.

Khi kết thúc việc sử dụng thiết bị, handle phải được đóng bằng cách gọi hàm sane_close(). Cuối cùng, trước khi thoát khỏi ứng dụng, hàm sane_exit() phải được gọi.

1.2.2.5. Các thuộc tính thông dụng [13]

Thuộc tính Number Count:

Thuộc tính số 0 này có tên là một xâu rỗng và giá trị của nó có kiểu là một số nguyên (SANE_TYPE_INT) và chứa số lượng các thuộc tính của thiết bị (tính cả thuộc tính số 0). Như vậy, có 2 cách để tính số lượng các thuộc tính. Cách thứ nhất là frontend phải duyệt qua tất các các thuộc tính bắt đầu từ 1 cho tới khi hàm sane_get_option_descriptor() trả về giá trị NULL. Cách thứ 2 là frontend chỉ cần đọc giá trị của thuộc tính này (thuộc tính số 0).

Thuộc tính độ phân giải (Scan Resolution)

Thuộc tính độ phân giải (resolution) được dùng để thiết lập độ phân giải cho quá trình nhận ảnh. Kiểu dữ liệu của thuộc tính này có thể là SANE_TYPE_INT hoặc SANE_TYPE_FIXED. Đơn vị của thuộc tính là SANE_UNIT_DPI ( điểm/inch - dots/inch).

Thuộc tính này là không bắt buộc, tuy nhiên nếu backend hỗ trợ thuộc tính này, nó phải được thiết lập phù hợp với định nghĩa nêu trên.

Thuộc tính chế đọ xem thử (Preview Mode)

Thuộc tính logic “xem thử” (preview) được dùng bởi frontend để thông báo cho backend biết rằng quá trình nhận ảnh nên được tối ưu về tốc độ hơn là chất lượng (chế độ xem thử). Khi được thiết lập thành SANE_TRUE, “chế độ xem thử” được kích hoạt, còn khi được thiết lập thành SANE_FALSE, quá trình nhận ảnh sẽ được thực hiện trong chế độ bình thường (chế độ ưu tiên về chất lượng). Việc thiết lập thuộc tính này không ảnh hưởng đến bất kỳ thuộc tính nào khác. Vì thế, frontend phải đảm nhận việc thiết lập độ phân giải cho “chế độ xem thử” (thông qua thuộc tính resolution).

Thuộc tính này là không bắt buộc, tuy nhiên nếu backend hỗ trợ thuộc tính này, nó phải được thiết lập phù hợp với định nghĩa nêu trên.

Thuộc tính vùng quét (Scan Area)

Thuộc tính này là thuộc tính quan trọng nhất trong các thuộc tính thông dụng. Vùng quét được định nghĩa bởi hai điểm (theo cặp tọa độ x/y). Một điểm là góc trên bên trái và điểm còn lại là góc dưới bên phải (xem hình 1.8). Chú ý rằng, gốc tọa độ là góc trên bên trái của bề mặt quét.

Tên Mô tả

t1 – x t1 – y br – x br – y

Tạo độ x góc trên trái Tạo độ y góc trên trái Tạo độ x góc dưới phải Tạo độ y góc dưới phải

Chƣơng 2. LẬP METADATA VÀ CHỈ MỤC NGƢỢC ĐỂ LƢU TRỮ VÀ TÌM KIẾM

2.1. Cơ sở tạo lập

Trong chương 1 chúng ta đã nghiên cứu về công nghệ scan văn bản, việc scan văn bản là bước đầu tiên trong quá trình số hóa văn bản. Để văn bản đã được scan có thể trở thành văn bản điện tử có tính pháp lý, có thể sử dụng như văn bản điện tử hành chính và thuận tiện trong quá trình tìm kiếm. Vấn đề đó sẽ được thể hiện trong quá trình tạo lập. Việc tạo lập thực hiện ở 2 quá trình riêng biệt:

(1): Metadata tạo lập (xác thực);

(2): Metadata tìm kiếm (theo chuẩn Dublin Core). Hai quá trình trên được thể hiện trong hình 2.1 [5].

Hình 2.1: Mô hình thực hiện một nghiệp vụ hành chính.

Hình 2.1 mô tả quá trình thực hiện nghiệp vụ hành chính tại cơ quan, tổ chức nói chung. Vấn đề đặt ra là tại sao ta chia vấn đề tạo lập thành metadata tạo lập và metadata tìm kiếm?

Thứ nhất: Cần phải có metadata tạo lập vì văn bản hành chính là văn bản được người, tổ chức có thẩm quyền tổ chức soạn thảo và ban hành. Văn bản hành chính ngoài nội dung thường được thể hiện trên giấy còn có các yếu tố hành chính như thông tin của người ban hành, thẩm quyền ban hành, thời hiệu… Con dấu và chữ ký chính là sự xác thực các nội dung văn bản của người, tổ chức ban hành.

Trong hệ thống tin học hành chính, khái niệm văn bản cần phải được chuyển đổi sao cho có đủ yếu tố hành chính như: Nội dung văn bản; người, tổ chức soạn thảo, ban hành, cần thiết một phương pháp xác thực những thông tin trên. Văn bản hành chính được chuyển đổi sang hệ thống tin học mang theo đầy đủ các yếu tố hành chính

Pháp nhân/CCVC Nghiệp vụ Văn bản Xử lý (1) Tạo lập Lưu trữ (2) Sử dụng Trao đổi Văn thư lưu trữ

là văn bản điện tử đặc biệt. Các văn bản điện tử đặc biệt này là văn bản điện tử hành chính, phân biệt với một văn bản điện tử thông thường như một tệp soạn thảo *.doc, một bảng số liệu nằm dưới khuôn dạng Microsoft Excel, một bản scan tờ giấy đánh máy có nội dung đang dang dở… Chính vì vậy ta cần tạo ra metadata tạo lập để bổ sung các yếu tố hành chính để văn bản scan trở thành văn bản điện tử hành chính. Nội dung này sẽ được trình bày trong mục 2.2.

Thứ hai: Cần có metadata tìm kiếm vì khi văn bản có tính pháp lý việc tìm kiếm và trao đổi là cần thiết, chính vì vậy ta cần metadata tìm kiếm. Nội dung này sẽ được

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu công nghệ số hóa và tạo lập chỉ số trong hệ quản trị nội dung 002 (Trang 29 - 41)

Tải bản đầy đủ (PDF)

(74 trang)