1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

74 403 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 74
Dung lượng 2,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Giao diện người dùng TWAIN Khi một ứng dụng sử dụng TWAIN thu được dữ liệu, quá trình thu nhận dữ liệu có thể được hiển thị cho người dùng của ứng dụng trong ba lĩnh vực sau [7, 12]: H

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN THỊ HÕA

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

LUẬN VĂN THẠC SĨ

Hà Nội - 2013

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN THỊ HÕA

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

Ngành: Công nghệ thông tin

Chuyên ngành: Công nghệ phần mềm

Mã số: 60 48 10

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Trần Minh

Hà Nội - 2013

Trang 3

LỜI CẢM ƠN

Trước tiên tôi xin bày tỏ lòng biết ơn sâu sắc tới TS Trần Minh, Phó viện trưởng Viện công nghiệp phần mềm và nội dung số Việt Nam Trong thời gian làm luận văn tốt nghiệp, thầy đã dành nhiều thời gian quí báu và tận tình chỉ bảo, hướng dẫn tôi trong việc nghiên cứu, thực hiện luận văn

Tôi xin được cảm ơn các thầy giáo, cô giáo đã giảng dạy tôi trong quá trình học tập và làm luận văn Các thầy cô đã giúp tôi hiểu thấu đáo hơn lĩnh vực mà mình nghiên cứu để có thể vận dụng những kiến thức đó vào trong công tác của mình

Xin cảm ơn bạn bè, đồng nghiệp đã tạo mọi điều kiện tốt nhất, động viên, cổ vũ tôi trong suốt quá trình học tập và nghiên cứu để hoàn thành bản luận văn tốt nghiệp này

Hà Nội, tháng 12 năm 2013

Học viên thực hiện

Trang 4

LỜI CAM ĐOAN

Tôi xin cam đoan rằng, đây là kết quả nghiên cứu của tôi trong đó có sự giúp đỡ rất lớn của thầy hướng dẫn và các đồng nghiệp ở trường Đại học Hải Dương Các số liệu kết quả nêu trong luận văn là trung thực và chưa từng được ai công bố trong bất

kỳ công trình nghiên cứu nào khác

Trong luận văn, tôi có tham khảo đến một số tài liệu của một số tác giả đã được liệt kê tại phần tài liệu tham khảo ở cuối luận văn

Hà Nội, tháng 12 năm 2013 Học viên thực hiện

Trang 5

MỤC LỤC

DANH MỤC CÁC CHỮ VIẾT TẮT 5

DANH SÁCH BẢNG 6

DANH SÁCH HÌNH VẼ 7

MỞ ĐẦU 9

Chương 1 PHÂN TÍCH QUÁ TRÌNH SỐ HÓA 11

1.1 Công nghệ số hóa 11

1.1.1 Khái niệm 11

1.1.2 Tại sao phải số hóa dữ liệu 11

1.1.3 Ưu điểm và Hạn chế 11

1.1.4 Quá trình số hóa 12

1.2 Công nghệ mã nguồn mở trong sao chụp tài liệu 13

1.2.1 Giới thiệu TWAIN và thư viện Dynamic Net TWAIN 13

1.2.2 Giới thiệu thư viện SANE 17

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

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

2.2 Metadata tạo lập (xác thực) 36

2.3 Metadata tìm kiếm (Dublin Core) 36

2.3.1 Tạo lập metadata 37

2.3.2 Lựa chọn chuẩn dữ liệu đặc tả 37

2.4 Phương pháp lập chỉ mục ngược để tìm kiếm tài liệu 43

2.4.1 Đánh chỉ mục 44

2.4.2 Truy vấn theo nhóm từ 48

2.5 GreenStone trong tạo lập chỉ mục 49

2.5.1 Tổng quan về GreenStone 49

2.5.2 Quá trình xây dựng bộ sưu tập 55

Chương 3 ỨNG DỤNG THỬ NGHIỆM 56

3.1 Bài toán ứng dụng 56

3.1.1 Yêu cầu thực tế 56

3.1.2 Bài toán ứng dụng 56

3.2 Ứng dụng thử nghiệm 57

Trang 6

3.2.1 Ứng dụng scan văn bản 57

3.2.2 Tạo bộ văn bản lưu trữ với GLI (sau đây gọi chung là bộ sưu tập) 59

3.3.3 Một số giao diện trang lưu trữ và tìm kiếm văn bản 64

3.3 Đánh giá 66

KẾT LUẬN 67

TÀI LIỆU THAM KHẢO 68

PHỤ LỤC: Các xử lý trong chương trình Scan văn bản 69

Trang 7

DANH MỤC CÁC CHỮ VIẾT TẮT

Từ viết tắt Ý nghĩa Giải thích tiếng Việt

API Application Programming Interface Giao diện lập trình ứng dụng

CCVC Công chức viên chức

CNTT Công nghệ thông tin

GLI GreenStone Librarian Interface Giao diện thư viện

GreenStone GNU GNU's Not Unix

SANE Scanner Access Now Easy Truy cập máy quét dễ dàng

XML eXtensible Markup Language Ngôn ngữ đánh dấu mở rộng

Trang 8

DANH SÁCH BẢNG

Bảng 1.1: Mã trạng thái (Status Codes) 21

Bảng 1.6: Giá trị và ý nghĩa của SANE_ACTION 27

Bảng 2.1: Các thành tố đặc tả dữ liệu Dublin Core 39

Bảng 2.2: Bảng danh sách các Plugin 51

Bảng 2.3: Bảng các tên thành phần hiển thị trên trang web 55

Trang 9

DANH SÁCH HÌNH VẼ

Hình 1.1: Mô hình tổng quan hệ thống số hóa tài liệu 12

Hình 1.2: Các yếu tố của TWAIN 13

Hình 1.4: Quá trình thu thập dữ liệu 14

Hình 1.6: Dynamic Net TWAIN trong Microsoft Visual Studio Net 17

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

Hình 1.8: Thuộc tính vùng quét (Scan area options) 34

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

Hình 2.2: Sơ đồ chuyển đổi một văn bản gốc vào hệ thống tin học 36

Hình 2.3: Danh sách các posting cho từ Brutus, Caesar, Calpurnia 44

Hình 2.4: Quá trình xây dựng các token 45

Hình 2.5: Tạo các token từ Tài liệu 1, Tài liệu 2 45

Hình 2.6: Sắp xếp theo từ chỉ mục 46

Hình 2.7: Dictionary và Postings 47

Hình 2.8: Kết quả truy vấn hai từ Brutus, Caesar 48

Hình 2.10: Tài liệu được liệt kê theo từng vùng alphabet 54

Hình 3.1: Chế độ quét 1-bit BW 58

Hình 3.2: Chế độ quét 8-bit Gray 58

Hình 3.3: Chế độ quét 24-bit RGB 59

Hình 3.4: Tạo mới bộ sưu tập 60

Hình 3.5: Chọn tài liệu cho bộ sưu tập 60

Hình 3.6: Biên mục tài liệu theo chuẩn Dublin Core 61

Hình 3.7: Lựa chọn Plugin cho tài liệu 61

Hình 3.8: Chỉ mục tìm kiếm 62

Hình 3.9: Thêm chỉ mục tìm kiếm mới 62

Hình 3.10: Tạo nút tìm kiếm mới 63

Hình 3.11: Xây dựng bộ sưu tập 63

Hình 3.12: Định dạng Email, ảnh hiển thị 63

Hình 3.13: Các thư mục chứa file tài liệu và file đặc tả tương ứng (XML) 64

Trang 10

Hình 3.14: Giao diện giới thiệu 64

Hình 3.15: Tìm kiếm theo các tùy chọn 65

Hình 3.16: Tìm kiếm theo tên tệp tin 65

Hình 3.17: Tìm kiếm theo thể loại 65

Hình 3.18: Tìm kiếm theo thời gian 66

Trang 11

MỞ ĐẦU

Lý do chọn đề tài

Hiện nay công tác quản lý nhà nước tại các cơ quan các cấp đang phát sinh một

số lượng lớn văn bản bằng giấy tờ hàng ngày cần được xử lý, chuyển giao và lưu trữ Ứng dụng tin học trong quản lý hành chính đã được triển khai, nhiều phần mềm ứng dụng đã phát huy hiệu quả tích cực, nâng cao hiệu suất làm việc cho cơ quan, tổ chức

và dần trở thành các công cụ không thể thiếu trong các nghiệp vụ hành chính của mỗi

cơ quan, tổ chức Phần mềm quản lý văn bản, điều hành tác nghiệp là một trong số những ứng dụng được triển khai rộng khắp các cơ quan, tổ chức hành chính, tuy nhiên khi triển khai đại trà các ứng dụng và kết nối, trao đổi dữ liệu giữa các cơ quan, đơn vị thì các phần mềm này bắt đầu xuất hiện không ít các bất cập Một kết quả khảo sát tại các đơn vị cấp huyện của tỉnh Hải Dương cho thấy, hầu hết các đơn vị đều được triển khai và đang sử dụng có hiệu quả hệ thống phần mềm phục vụ quản lý văn bản, tuy nhiên theo đa số các cán bộ được phỏng vấn đều có ý kiến các cơ quan, tổ chức đều khó trao đổi được với nhau bằng văn bản điện tử

Nói rộng ra, ngoài những ưu điểm không thể phủ nhận, còn hiện hữu một số trục trặc và bất cập trong hầu hết các hệ thống tin học phục vụ quản lý hành chính Các bất cập nêu trên xuất hiện như một đặc điểm chung trong các hệ thống tin học hiện nay đang triển khai ứng dụng tại các cơ quan, tổ chức hành chính Điểm lưu ý là các bất cập nêu trên lại không xảy ra với hệ thống hành chính truyền thống Câu hỏi đặt ra bản chất các bất cập nêu trên là gì, hệ thống tin học hiện nay thiết kế đã phù hợp với các yêu cầu của hệ thống hành chính chưa?

Có nhiều nguyên nhân giải thích các bất cập tại sao các phần mềm ứng dụng cho các cơ quan, tổ chức chưa phát huy hết hiệu quả tại các cơ quan hành chính, nhiều trường hợp phần mềm chưa đáp ứng được yêu cầu người sử dụng mà nhiều công trình nghiên cứu đã chỉ ra: Trình độ người sử dụng, sự quan tâm của người đứng đầu cơ quan, tài chính, mức độ thân thiện của phần mềm, thói quen người sử dụng… Các nguyên nhân này dường như không đề cập đến phân tích hệ thống thông tin được thiết

kế và triển khai cho các cơ quan, tổ chức nhà nước đã áp dụng yêu cầu của người sử dụng là các cán bộ hành chính hay chưa Nói cách khác, hệ thống thông tin đã là một công cụ làm việc hành chính hay chưa

Hệ thống thông tin/ cơ sở dữ liệu/ phần mềm phục vụ nghiệp vụ hành chính của một cơ quan (như quản lý, lưu trữ, xử lý, trao đổi văn bản…) về bản chất là những công cụ được xem là một phần của hoạt động nghiệp vụ hành chính Do đó phải tuân thủ và hoạt động như một thành phần của hệ thống hành chính, phải đáp ứng đầy đủ các qui định tại các văn bản pháp luật và các qui định do cơ quan có thẩm quyền ban hành

Để giải quyết các bất cập nêu trên tác giả đã nghiên cứu và nhận thấy rằng công

Trang 12

nghệ số hóa và tạo lập chỉ mục sẽ giúp cho các cơ quan tổ chức quản lý và trao đổi văn bản điện tử một cách dễ dàng hơn và đặc biệt tuân thủ các quy phạm pháp luật về hành chính

Qua thực tế tại trường Đại học Hải Dương tác giả sẽ đưa ra mô hình quản lý, lưu trữ và trao đổi văn bản của Nhà trường với kết quả đã nghiên cứu được

Đối tượng và phạm vi nghiên cứu

Đối tượng nghiên cứu: Công nghệ số hóa văn bản TWAIN, SANE (Scanner

Access Now Easy), ứng dụng Greenstone trong việc lưu trữ và tạo lập chỉ mục

Phạm vi nghiên cứu: Luận văn tập trung nghiên cứu cơ sở xử lý, lưu trữ và

chuyển giao văn bản tại trường Đại học Hải Dương bằng công nghệ số hóa văn bản

TWAIN, SANE và tạo lập chỉ mục sử dụng ứng dụng Greenstone

Kết cấu của luận văn

Phần còn lại của luận văn có cấu trúc như sau:

Chương 1: Phân tích quá trình số hóa Chương này trình bày về khái niệm số

hóa và tạo lập chỉ số, lý do tại sao cần số hóa, các ưu điểm, nhược điểm của việc số hóa dữ liệu, và đặc biệt là trình bày về công nghệ mã nguồn mở trong sao chụp tài liệu (thư viện Dynamic Net TWAIN, thư viện mã nguồn mở SANE)

Chương 2: Lập metadata và chỉ mục ngược để lưu trữ và tìm kiếm

Chương này trình bày hai giai đoạn tạo lập metadata, metadata tạo lập (mang tính xác thực văn bản), metadata mô tả nội dung (Dublin Core - phục vụ trong quá trình tìm kiếm văn bản), nghiên cứu phương pháp tạo lập chỉ mục ngược để lưu trữ và tìm kiếm

Chương 3: Ứng dụng thử nghiệm Chương này sẽ đưa ra ứng dụng scan văn

bản, ứng dụng Greenstone trong việc lưu trữ, tạo lập chỉ mục văn bản đã được số hóa tại trường Đại học Hải Dương minh họa cho các nghiên cứu ở chương 1 và chương 2

Trang 13

Chương 1 PHÂN TÍCH QUÁ TRÌNH SỐ HÓA 1.1 Công nghệ số hóa

1.1.1 Khái niệm

Thông thường, các dữ liệu dạng chữ, hình ảnh, âm thanh… [11] sử dụng trên máy tính và được máy tính nhận biết đúng định dạng, được gọi chung là dữ liệu số Quá trình chuyển các dạng dữ liệu truyền thống như các bản viết tay, bản in trên giấy, hình ảnh… sang chuẩn dữ liệu trên máy tính và được máy tính nhận biết được gọi là số hoá dữ liệu

Như vậy, số hoá dữ liệu [11] là hình thức chuyển đổi các dữ liệu truyền thống bên ngoài thành dạng dữ liệu số mà máy tính có thể hiểu được

1.1.2 Tại sao phải số hóa dữ liệu

Hãy tưởng tường rằng phải mất bao nhiêu giấy tờ và không gian để lưu trữ kho kiến thức khổng lồ của nhân loại ngày một nhiều, hơn nữa việc bảo quản và phạm vi

sử dụng bị hạn chế Do vậy bắt buộc chúng ta phải nghĩ đến giải pháp số hóa dữ liệu Việc số hóa dữ liệu sẽ giúp việc lưu trữ, truy xuất, chia sẻ, tìm kiếm thông tin một cách nhanh chóng và dễ dàng nhất [11]

1.1.3 Ưu điểm và Hạn chế

a Ưu điểm [11]:

Giúp việc lưu trữ, truy xuất, chia sẻ, tìm kiếm thông tin một cách dễ dàng Ưu điểm này bao gồm tổng hoà các thuận tiện trong công tác quản lý, bảo quản, bảo vệ, khai thác và sử dụng tài liệu lưu trữ với một ngân hàng dữ liệu số;

Linh hoạt trong việc chuyển đổi sang các loại dữ liệu số khác nhau Sự chuyển đổi phổ biến nhất là chuyển đổi định dạng các file tài liệu Ví dụ, ta đang có một file word, có thể chuyển sang định dạng PDF nhờ một chương trình ứng dụng để chuyển đổi nó Ứng dụng đó có thể là một chương trình độc lập, hoặc là một kỹ thuật nhúng tích hợp vào chương trình word, hoặc là một ứng dụng on line Dữ liệu sau khi chuyển đổi sẽ được sử dụng linh hoạt hơn;

Giảm chi phí tối đa cho việc quản lý tài liệu lưu trữ Chúng ta hiểu tiết kiệm không gian bảo quản tài liệu lưu trữ một cách tương đối, vì theo quy định của Luật lưu trữ, tài liệu lưu trữ đã được số hóa, vẫn phải bảo quản an toàn tài liệu bản gốc;

Có khả năng chỉnh sửa và tái sử dụng dữ liệu Ở thuận lợi này ta cần hiểu “khả năng chỉnh sửa” theo đúng nguyên tắc quản lý tài liệu lưu trữ là không được chỉnh sửa nội dung tài liệu, mà chỉ chỉnh sửa chất lượng mang tin, như tài liệu bị mờ, bị hư hỏng nặng cần chỉnh sửa

b Hạn chế [11]:

Khi bắt đầu xây dựng một đề án số hóa tài liệu lưu trữ, cần phải đầu tư ban đầu

Trang 14

về công nghệ, cơ sở hạ tầng công nghệ thông tin và các thiết bị khác, ví dụ, cần phải đầu tư mua sắm, hoặc thuê từng phần các thiết bị phần cứng như máy tính, máy in, máy quét ảnh và các chương trình phần mềm để quản lý và tra tìm tài liệu Khi đã có đầy đủ các thiết bị phần cứng, phần mềm, việc thực hiện số hóa tài liệu có thể thuê các

cơ quan chuyên môn thực hiện Ngoài ra, điều rất quan trọng là phải đầu tư cho yêu cầu đào tạo con người theo các mức độ khác nhau như đào tạo công chức làm quản lý, công chức, viên chức tác nghiệp và những cán bộ kỹ thuật, cán bộ chuyên tin

Dữ liệu số hóa dễ bị sao chép và sửa đổi trái phép Điều này có thể khắc phục giản đơn đối với những người chuyên làm công tác quản trị mạng, nhưng không giản đơn đối với toàn bộ công chức, viên chức của cả một cơ quan, tổ chức có sử dụng cơ

sở dữ liệu số hóa

Việc triển khai sử dụng gặp nhiều khó khăn do phải thực hiện training đồng bộ

và có hệ thống Ngoài ra việc bảo mật dữ liệu cũng là một thách thức lớn

1.1.4 Quá trình số hóa

Mô hình tổng quan của hệ thống số hóa tài liệu được mô tả ở hình 1.1

Hình 1.1: Mô hình tổng quan hệ thống số hóa tài liệu

Hình 1.1 thể hiện quá trình số hóa [11]: văn bản giấy được quét qua máy scan, kết quả là văn bản đó sẽ được lưu trữ dưới dạng một file ảnh Tuy nhiên đó là một thao tác bước đầu, để phục vụ trong quá trình lưu trữ, tìm kiếm và trao đổi văn bản đó thì ngoài file ảnh ta còn phải thiết lập một số thuộc tính đi kèm file ảnh để thể hiện rõ nội

Trang 15

dung văn bản như thế nào

Việc scan văn bản sẽ được nghiên cứu thông qua TWAIN, SANE - công nghệ

mã nguồn mở trong sao chụp tài liệu Vấn đề này sẽ được đề cập trong phần 1.2

Các thuộc tính đi kèm file ảnh quét văn bản được xây dựng theo quy chuẩn Việt

Nam về dữ liệu đặc tả cũng được dựa trên chuẩn Dublin Core (Công văn 839 ngày

29/9/2011 – Bộ thông tin và truyền thông) [1] Vấn đề này sẽ được trình bày rõ trong

chương này

Giải pháp số hóa tài liệu tổng thể là sự kết hợp thông minh giữa hệ thống máy quét, hệ thống lập chỉ mục, tách bộ (điển hình là phần mềm Kodak Capture Pro) và hệ thống quản lý khai thác tài liệu (mà hiện nay thông dụng là giải pháp quản lý tài liệu Docuflo)

1.2 Công nghệ mã nguồn mở trong sao chụp tài liệu

1.2.1 Giới thiệu TWAIN và thư viện Dynamic Net TWAIN

1.2.1.1 TWAIN

 Tổng quan về TWAIN

TWAIN [7, 12] định nghĩa một phần mềm giao thức chuẩn và giao diện lập trình ứng dụng (API) để giao tiếp giữa các ứng dụng phần mềm và các thiết bị thu nhận hình ảnh (nguồn dữ liệu)

Bốn yếu tố quan trọng trong TWAIN:

Hình 1.2: Các yếu tố của TWAIN

Hình 1.2 mô tả các yếu tố của TWAIN bao gồm:

Phần mềm ứng dụng: Một ứng dụng sử dụng giao thức TWAIN để thu được hình ảnh, fax,…

Chương trình quản lý nguồn: Phần mềm này quản lý sự tương tác giữa các ứng dụng và nguồn Mã này được cung cấp bởi tổ chức TWAIN

Nguồn dữ liệu: TWAIN điều khiển phần cứng phù hợp Phần mềm này thường được cài đặt khi trình điều khiển phần cứng được cài đặt

Các phần cứng: Máy Scan, Camera,

Trang 16

 Giao diện người dùng TWAIN

Khi một ứng dụng sử dụng TWAIN thu được dữ liệu, quá trình thu nhận dữ liệu

có thể được hiển thị cho người dùng của ứng dụng trong ba lĩnh vực sau [7, 12]:

Hình 1.4: Quá trình thu thập dữ liệu

Hình 1.4 thể hiện giao diện người dùng TWAIN, tương ứng với các yếu tố của TWAIN là các thành phần hiển thị cho người dùng, các thành phần đó bao gồm:

Các ứng dụng: Người sử dụng cần chọn thiết bị mà từ đó họ muốn thu thập các

dữ liệu TWAIN khuyến cáo mạnh mẽ các nhà phát triển ứng dụng thêm hai lựa chọn

để trình đơn File của họ Lựa chọn các chức năng tương ứng để thực hiện chương trình

Quản lý nguồn: Khi người dùng chọn tùy chọn Select Source, yêu cầu ứng dụng quản lý Source hiển thị hộp thoại Select Source của nó Danh sách này liệt kê tất cả các thiết bị có sẵn và cho phép người sử dụng chọn một thiết bị

Nguồn: Mọi TWAIN tuân thủ Source cung cấp một giao diện người dùng cụ thể cho thiết bị cụ thể của nó Khi người sử dụng ứng dụng chọn tùy chọn Thu thập, giao diện người dùng TWAIN của Source có thể được hiển thị

1.2.1.2 Thư viện Dynamic Net TWAIN

 Dynamic Net TWAIN là gì?

Dynamic Net TWAIN [8] là một thành phần Net cho phép bạn thu nhận hình ảnh từ bất kỳ thiết bị TWAIN tương thích Với thiết kế giao diện cẩn thận, và xây dựng trong chế độ tự động Dynamic Net TWAIN rất dễ sử dụng, bạn có thể thực hiện TWAIN trong một vài dòng mã Đồng thời Dynamic Net TWAIN rất mạnh, nó tương thích với TWAIN V2.1, và cung cấp ba chế độ truyền tải hình ảnh và nhiều tính năng

Trang 17

khác

 Trạng thái TWAIN trong Dynamic Net TWAIN

Dynamic Net TWAIN [8] làm giảm độ phức tạp của các trạng thái TWAIN chuẩn

Trạng thái 2 được di chuyển Gọi OpenSourceManager() chuyển tới trạng thái 3 Gọi OpenSource() chuyển tới trạng thái 4 Gọi EnableSource() hoặc AcquireImage() chuyển tới trạng thái 5 Trạng thái 6 và trạng thái 7 là ẩn, chỉ sự kiện OnPreAllTransfers, OnPreTransfer, OnPostTransfer, OnPostAllTransfers, OnTransferError hoặc OnTransferCancelled bị loại bỏ

Hơn nữa, Dynamic Net TWAIN được xây dựng trên chế độ Wizard Với chế

độ này, việc chuyển trạng thái được quản lý một cách thông minh Bạn có thể bỏ qua

sự tồn tại của các trạng thái Ví dụ, nếu bạn gọi EnableSource() trực tiếp mà không gọi OpenSource(), Dynamic Net TWAIN sẽ gọi tất cả hàm cần thiết để chuyển trạng thái TWAIN tới trạng thái 5 Bạn cũng có thể thoát khỏi ứng dụng TWAIN không gọi CloseSource() hoặc CloseSourceManager()

 Các phương thức và thuộc tính của Dynamic Net TWAIN trong ứng dụng

quét tài liệu

PixelType: Trả về hoặc thiết lập các kiểu pixcel của hình ảnh thu nhận Đây là một thuộc tính thời gian thực

BitDepth: Trả về hoặc thiết lập độ sâu bit cho giá trị hiện tại của thuộc tính PixelType Đây là thuộc tính thời gian thực

Resolution: Trả về hoặc thiết lập độ phân giải hiện tại cho hình ảnh thu nhận

Trang 18

Đây là thuộc tính thời gian thực

IfFeederEnabled: Trả về hoặc thiết lập hoặc ADF (Automatic Document Feeder) hiển thị Đây là thuộc tính thời gian thực

IfAutoFeed: Trả về hoặc thiết lập hoặc Source hiển thị tài liệu xử lý tự động Đây là thuộc tính thời gian thực

IfDuplexEnabled: Trả về hoặc thiết lập hoặc Source cung cấp quét 2 mặt Nếu đúng, máy scan sẽ quét cả 2 mặt của trang giấy, nếu không, máy scan sẽ chỉ quét một mặt Đây là thuộc tính thời gian thực

Duplex: Trả về hoặc nguồn cung cấp 2 mặt Nếu vậy, nó tiếp tục trả về mức của Source cung cấp 2 mặt (một hoặc hai đường qua 2 mặt) Đây là thuộc tính chỉ đọc, thời gian thực

CurrentImageIndexInBuffer: Trả về hoặc thiết lập chỉ số hiện tại của hình ảnh trong bộ đệm Đây là thuộc tính thời gian thực

Phương thức [8]:

OpenSourceManager(): Load và mở Data Source Manager

SourceNameItems: Mảng các tên nguồn

SelectSourceByIndex: Lựa chọn chỉ số nguồn trong thuộc tính SourceNameItems như nguồn hiện tại

OpenSource: Load Source xác định trong bộ nhớ chính và bắt đầu khởi tạo nó, đặt Dynamic Net TWAIN trong trạng thái Capability Negotiation Nếu nguồn không được xác định (no SelectSource() hoặc SelectSourceByIndex() được gọi), mở nguồn mặc định

SaveAsBMP: Lưu hình ảnh của một chỉ số xác định trọng bộ đệm như file BMP

SaveAsJPEG: Lưu hình ảnh của một chỉ số xác định trọng bộ đệm như file JPEG

SaveAsPNG: Lưu hình ảnh của một chỉ số xác định trọng bộ đệm như file PNG

SaveAsTIFF: Lưu hình ảnh của một chỉ số xác định trọng bộ đệm như file TIFF

SaveAsPDF: Lưu hình ảnh của một chỉ số xác định trọng bộ đệm như file PDF SaveAllAsMultiPageTIFF: Lưu tất cả các hình ảnh trong bộ đệm như một file TIFF

SaveAllAsPDF: Lưu tất cả các hình ảnh trong bộ đệm như một file PDF

Trang 19

 Sử dụng Dynamic Net TWAIN trong Microsoft Visual Studio Net

Trước khi mở ứng dụng mẫu viết trên C# và VB.Net hãy tích hợp Dynamic Net TWAIN vào trong Visual Studio Net đầu tiên

Dưới đây là các bước tích hợp Dynamic Net TWAIN vào trong Net

1 Khởi động Visual Studio Net

2 Từ menu Tool chọn Choose Toolbox Items

3 Trong hộp thoại Choose Toolbox Items, chọn Browse, sau đó tìm đến DynamicDotNetTWAIN.dll Chọn OK để đóng hộp thoại

4 Thành phần Dynamic Net TWAIN có thể sử dụng trong Net như các điều khiển khác

Hình 1.6: Dynamic Net TWAIN trong Microsoft Visual Studio Net 1.2.2 Giới thiệu thư viện SANE

Từ SANE [13] là viết tắt của "Scanner Access Now Easy" (Truy cập máy quét

dễ dàng) và là một giao diện lập trình ứng dụng (API) cung cấp các phương thức giao tiếp một cách chuẩn hóa tới hàng loạt các máy quét đa dạng khác nhau (máy quét phẳng, máy quét cầm tay, camera …) Giao diện lập trình ứng dụng SANE là một thư viện mã nguồn mở theo giấy phép GNU, mã nguồn hiện tại được viết cho UNIX (bao gồm cả GNU/Linux)

SANE là một giao diện máy quét vạn năng, có nghĩa là nó cho phép chỉ cần viết một trình điều khiển trên mỗi thiết bị thu nhận hình ảnh chứ không cần phải viết một trình điểu khiển cho mỗi một thiết bị + một ứng dụng Ví dụ, nếu chúng ta có 3 ứng

Trang 20

dụng và 4 thiết bị, theo cách truyền thống, chúng ta phải viết 12 chương trình khác nhau Nhưng với SANE, con số này sẽ giảm xuống còn 7 chương trình (3 ứng dụng +

4 trình điều khiển) Với số lượng lớn các thiết bị và ứng dụng, chúng ta thấy số lượng chương trình giảm được là rất đáng kể

Với SANE, không chỉ rút ngắn được thời gian phát triển mà số lượng code trùng lặp được giảm đáng kể Thêm vào đó, SANE được thiết kế để nó có khả năng triển khai các API trên mọi phần cứng ảo hoặc hệ điều hành

Một ứng dụng mà sử dụng giao diện SANE được gọi là SANE frontend Các trình điều khiển của giao diện SANE được gọi là SANE backend Meta backend quản

lý một hoặc nhiều các backend

1.2.2.1 Môi trường SANE

SANE được định nghĩa như là một giao diện thư viện C có thể gọi được [13] Việc truy cập các máy thiết bị quét thường bao gồm hai giai đoạn Giai đoạn thứ nhất

là thiết lập hoặc truy vấn các thông số của máy quét Giai đoạn hai là thu nhận một hoặc nhiều hình ảnh từ máy quét

Các thông số của thiết bị thường khác nhau với mỗi thiết bị, vì vậy SANE cung cấp một giao diện chung cho phép các frontend dễ dàng cung cấp cho người dùng khả năng truy cập tất cả các thông số mà không cần phải hiểu về mỗi hoặc tất cả các thông

số của thiết bị Nguyên lý thiết kế được sử dụng ở đây là ánh xạ mỗi thông số của thiết

bị vào một SANE option Một option là một một cặp tên/giá trị tự mô tả Ví dụ, thông

số độ sáng (brightness) của một camera có thể được đại diện bởi một option được gọi

là brightness có giá trị là một số nguyên trong phạm vi từ 0 đến 255

Với các option tự mô tả, một backend không cần phải quan tâm tới vấn đề biểu diễn: backend chỉ đơn giản là cung cấp một danh sách các option mô tả tất cả các thông số cho phép trong thiết bị Tương tự, với frontend, cũng không cần quan tâm tới

ý nghĩa của mỗi option mà chỉ đơn giản là cung cấp các cách thức để biểu diễn và thay đổi các option được định nghĩa bởi backend

1.2.2.2 Giao diện lập trình ứng dụng (API) SANE [13]

Các kiểu dữ liệu

Các kiểu dữ liệu cơ bản (Base Type)

Tiêu chuẩn SANE chỉ dựa trên 2 kiểu dữ liệu cơ bản là SANE_Byte và SANE_Word

typedef some-scalar-type SANE_Byte;

typedef some-scalar-type SANE_Word;

SANE_Byte có thể biểu diễn các giá trị trong khoảng từ 0 đến 255

SANE_Word có thể biểu diển các giá trị sau:

Trang 21

Các giá trị logic SANE_FALSE và SANE_TRUE

Các số nguyên có dấu trong khoảng từ −231 231 − 1

Các số thực dấu phẩy tĩnh trong khoảng từ −32768 32767.9999 với độ phân giải là 1/65536

Chứa 32 bits (cho một tập các bit)

Chú ý rằng, tiểu chuẩn SANE không định nghĩa kiểu dữ liệu C nào mà SANE_Byte và SANE_Word được ánh xạ tới Ví dụ, trên một số nền tảng, SANE_Word có thể được ánh xạ tới số nguyên dài (long int), trong khi đó trên nền tảng khác lại có thể được ánh xạ tới số nguyên (int)

Kiểu dữ liệu logic (Boolean Type)

SANE_Bool được sử dụng cho các biến có thể nhận một trong hai giá trị logic SANE_FALSE và SANE_TRUE Kiểu dữ liệu đầu được định nghĩa bằng 0, còn kiểu còn lại được định nghĩa bằng 1 Khai báo C cho kiểu dữ liệu này như sau:

typedef SANE_Word SANE_Bool;

Chú ý rằng SANE_Bool chỉ đơn giản là khai báo lại của kiểu SANE_Word Ví thế, luôn có thể sử dụng kiểu dữ liệu SANE_Word thay cho kiểu dữ liệu này

Kiểu dữ liệu số nguyên (Integer Type)

SANE_Int được dùng cho các biến có thể nhận các giá trị số nguyên trong khoảng từ −231 231 − 1 Khai báo C của nó như sau:

typedef SANE_Word SANE_Int;

Chú ý rằng SANE_Int chỉ đơn giản là khai báo lại của kiểu SANE_Word Vì thế, luôn có thể sử dụng kiểu dữ liệu SANE_Word thay cho kiểu dữ liệu này

Kiểu dữ liệu số thực dấu phẩy tĩnh (Fixed-point Type)

SANE_Fixed được dùng cho các biến có thể nhận các giá trị số thực dấu phẩy tĩnh trong khoảng từ −32768 tới 32767.9999 với độ phân giải là 1/65535 Khai báo C

cho kiểu dữ liệu này là:

#define SANE_FIXED_SCALE_SHIFT 16 typedef SANE_Word SANE_Fixed;

Macro SANE_FIXED_SCALE_SHIFT trả lại vị trí của dấu phẩy tĩnh nhị phân, giá trị này bằng 16 và cho ta độ phân giải 1/65536

Chú ý rằng SANE_Fixed chỉ đơn giản là khai báo lại của kiểu SANE_Word Ví thế, luôn có thể sử dụng kiểu dữ liệu SANE_Word thay cho kiểu dữ liệu này

Trang 22

Để cho thuận tiện, SANE cũng cung cấp 2 macro cho phép chuyển đổi các giá trị dấu phẩy tĩnh sang các giá trị thực dấu phẩy động của C (C double floating point)

SANE_FIX(d): Trả lại giá trị SANE fixed-point lớn nhất mà nhỏ hơn giá trị thực (double value) d Nếu giá trị của d vượt quá phạm vi, giá trị undefined sẽ được trả về

SANE_UNFIX(w): Trả lại số thực gần nhất liên quan tới giá trị fixed-point w

Kiểu dữ liệu văn bản (Text)

Kiểu dữ liệu ký tự - Character Type:

Kiểu dữ liệu SANE_Char biểu diễn một ký tự văn bản hoặc một biểu tượng Hiện tại, loại dữ liệu này được ánh xạ thẳng tới kiểu dữ liệu “char” của C (thường là một byte) Bảng mã cho các ký tự này hiện tại cũng được định nghĩa cố định là bảng

mã ISO LATIN-1 Các phiên bản tiếp theo của SANE có thể sẽ ánh xạ loại dữ liệu này tới các loại dữ liệu khác và sử dụng các bảng mã khác (nhiều hơn 1 byte) để có thể hỗ trợ tính quốc tế hóa (đa ngôn ngữ)

typedef char SANE_Char;

Kiểu dữ liệu xây ký tự - String Type:

Kiểu dữ liệu SANE_String biểu diễn một xâu văn bản như là một chuỗi các giá trị của kiểu dữ liệu “C char” Ký tự “\0” (NUL) được dùng để đánh dấu kết thúc chuỗi

typedef SANE_Char *SANE_String;

typedef const SANE_Char *SANE_String_Const;

Kiểu dữ liệu SANE_String_Const được cung cấp bởi SANE để cho phép khai báo các xâu ký tự có nội dung không thay đổi Chú ý rằng, trong ANSI C, khai báo:

const SANE_String str;

Được dùng để khai báo một con trỏ xâu là một hằng số (không phải là một con trỏ xâu trỏ tới một hằng số)

Kiểu dữ liệu Scanner Handle (Scanner Handle Type)

Việc truy cập tới một máy quét được cung cấp thông qua một kiểu dữ liệu được gọi là SANE_Handle Khai báo C cho lại dữ liệu này như sau:

typedef void *SANE_Handle;

Loại dữ liệu này được khai báo như là một con trỏ rỗng (void pointer) và SANE không yêu cầu giá trị của loại dữ liệu này phải là một giá trị con trỏ hợp lệ

Kiểu dữ liệu trạng thái (Status Type)

Hầu hết các hoạt động của SANE trả lại một giá trị có kiểu dữ liệu SANE_Status để xác định trạng thái hoàn thành của các hoạt động Nếu một hoạt động

Trang 23

hoàn thành một cách thành công, SANE_STATUS_GOOD được trả lại Trong trường hợp có lỗi, một giá trị sẽ được trả về giúp xác định vấn đề Danh sách đầy đủ các giá trị của kiểu dữ liệu này được liệt kê trong bảng 1.1 Các giá trị này nên được dùng với hàm sane_strstatus() để chuyển sang dạng dễ đọc hơn

Bảng 1.1: Mã trạng thái (Status Codes)

Thiết bị đang bận - thử lại sau

Dữ liệu hoặc đối số không hợp lệ Không còn dữ liệu (end-of-file) Kẹt giấy tại bộ nạp

Hết giấy tại bộ nạp Nắp máy quét đang mở Lỗi trong quá trình xuất/nhập Hết bộ nhớ

Từ chối truy cập vào tài nguyên

Kiểu dữ liệu mô tả thiết bị (Device Descriptor Type)

Mỗi một thiết bị SANE được đại diện bởi một cấu trúc dữ liệu được gọi là SANE Device Khai báo C cho loại dữ liệu này như sau:

Trường “name” chứa tên (duy nhất) của máy quét Tên này sẽ được dùng làm

Trang 24

tham số khi hàm sane_open() được gọi Định dạng của tên này hoàn toàn phụ thuộc vào các backend Điều bắt buộc duy nhất là tên phải là duy nhất trong tất cả các thiết

bị được hỗ trợ bởi backend và tên này phải là một xâu ký tự SANE hợp lệ Để đơn giản việc trình bày tên duy nhất này, độ dài của chúng không nên quá mức mà nên có giữ độ dài của chúng dưới 32 ký tự

Các trường còn lại của cấu trúc dữ liệu này cung cấp thêm các thông tin khác của thiết bị như hãng sản xuất (vendor), model và loại thiết bị (type)

film scanner flatbed scanner frame grabber handheld scanner multi-function peripheral sheetfed scanner

still camera video camera virtual device

Chú ý rằng: giá trị “Noname” của trường vendor có thể được dùng cho các thiết

bị ảo (virtual devices)

Kiểu dữ liệu mô tả thuộc tính (Option Descriptor Type)

Các thuộc tính được dùng để điều khiển tất cả các hoạt động của thiết bị Sức mạnh của SANE_API bắt nguồn từ thực tế là hầu hết việc điều khiển thiết bị đều được

mô tả bởi các “mô tả thuộc tính” liên quan Vì thế, một frontend có thể điều khiển một máy quét một cách đơn giản thông qua các “mô tả thuộc tính” này

Mô tả C của kiểu dữ liệu mô tả thuộc tính như sau:

Trang 25

} SANE_Option_Descriptor;

Thuộc tính “Name”:

Thuộc tính tên (name) là một xâu ký tự xác định duy nhất cho một thuộc tính Tên này phải là duy nhất với mỗi thiết bị, tuy nhiên các tên của thuộc tính này không cần phải là duy nhất trong tất cả các backend hay thiết bị Tên thuộc tính chỉ được bao gồm các ký tự chữ thường (a-z), các chữ số (0-9) và dấu gạch nối (-) Ký tự đầu tiên phải là một ký tự chữ thường, không được là chữ số hoặc dấu gạch nối

Thuộc tính “Title”:

Thuộc tính tiêu đề (Title) là một xâu ký tự được dùng bởi các frontend như là một xâu tiêu đề và nên là một xâu ngắn (một hoặc hai từ) Tiêu đề được chọn dựa trên chức năng của thuộc tính đó

Thuộc tính “Description”:

Thuộc tính mô tả (desc) thường là một xâu ký tự dài được dùng như là một dạng trợ giúp để mô tả về thuộc tính

Trang 26

Thuộc tính “Value Type”:

Thuộc tính “type” chỉ rõ kiểu dữ liệu của giá trị thuộc tính

Thuộc tính “Value Unit”:

Thuộc tính “đơn vị” (unit) định nghĩa đơn vị vật lý của giá trị thuộc tính

Thuộc tính “Value Size”:

Thuộc tính kích thước (size) định nghĩa kích thước của giá trị thuộc tính theo byte

Thuộc tính “Capabilities”:

Thuộc tính “khả năng” (cap) mô tả các khả năng mà option có thể thực thi được hay không Đây là môt tập các bit được xác định bởi phép logic OR của các “khả năng” được mô tả trong bảng 1.4

Thuộc tính “Value Constraints”:

Sẽ rất hữu ích nếu giới hạn phạm vi của giá trị mà một thuộc tính có thể nhận

Ví dụ, việc giới hạn sẽ giúp frontend quyết định cách trình diễn các thuộc tính phù hợp Thuộc tính “giá trị giới hạn” sẽ định nghĩa rõ khoảng giá trị có thể nhận bởi thuộc tính Các giá trị hợp lệ cho kiểu dữ liệu này được mô tả trong bảng 1.5

1.2.2.3 Hoạt động

 sane_init

Hàm này phải được gọi trước bất kỳ hàm SANE nào khác Các hàm khác của backend sẽ không được định nghĩa nếu hàm này không được gọi đầu tiên hoặc giá trị trả về của hàm không phải là SANE_STATUS_GOOD

Mã phiên bản của backend được trả về qua con trỏ version_code, nếu con trỏ là NULL thì không có mã phiên bản được trả về Biến authorize cũng là một con trỏ trỏ tới một hàm xác thực mà sẽ được gọi khi backend yêu cầu xác thực hoặc có giá trị NULL nếu frontend không hỗ trợ việc xác thực

SANE_Status sane_init (SANE_Int * version_code,

Hàm xác thực được khai báo như sau:

#define SANE_MAX_USERNAME_LEN 128

Trang 27

Ba biến được truyền cho hàm xác thực bao gồm:

resource: là một xâu ký tự chỉ rõ tên của tài nguyên cần xác thực

username và password: là một con trỏ trỏ tới một mảng các ký tự có độ dài lần lượt là SANE_MAX_USERNAME_LEN và SANE_MAX_PASSWORD_LEN

 sane_exit

Hàm được gọi để kết thúc việc sử dụng backend, nó sẽ đóng tất cả các device handle mà vẫn có thể đang được mở ( tuy nhiên các device handle nên được đóng bằng cách gọi hàm sane_close() ) Sau khi hàm này được gọi, không hàm nào có thể gọi được nữa trừ hàm sane_init

void sane_exit (void);

 sane_get_devices

Hàm này được dùng để lấy danh sách các thiết bị khả dụng Nếu hàm được thực thi thành công, danh sách các thiết bị sẽ được chứa trong một mảng các con trỏ trỏ tới cấu trúc dữ liệu SANE_Device (mảng sẽ được kết thúc bằng NULL) và được trả về qua con trỏ device_list

Danh sách trả về sẽ không đổi đến khi hàm được gọi lại hoặc hàm sane_exit() được gọi Hàm có thể được gọi lặp lại để phát hiện thêm các thiết bị mới được gắn vào

SANE_Status sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only);

Hàm có thể trả về giá trị thất bại SANE_STATUS_NO_MEM nếu bộ nhớ không đủ

SANE_Status sane_open (SANE_String_Const name, SANE_Handle * h);

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

Trang 28

SANE_STATUS_DEVICE_BUSY: Thiết bị đang bận (đang được dùng bởi người khác/frontend khác)

SANE_STATUS_INVAL: Tên thiết bị 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 đến thiết bị bị từ chối vì không xác thực được hoặc xác thực không hợp lệ

 sane_close

Hàm này kết thúc sự ràng buộc giữa handle thiết bị được truyền trong đối số h

và thiết bị mà nó đại diện Nếu thiết bị hiện đang ở trạng thái hoạt động, hàm sane_cancel() sẽ được thực hiện trước Sau khi hàm kết thúc, handle h sẽ không sử dụng được nữa

void sane_close (SANE_Handle h);

const SANE_Option_Descriptor *

sane_get_option_descriptor (SANE_Handle h, SANE_Int n);

 sane_control_option

Hàm này được dùng để thiết lập hoặc truy xuất giá trị hiện tại của thuộc tính số

n của thiết bị đại diện bởi handle h Tham số a quyết định cách thuộc tính được thiết lập hay truy xuất Các giá trị của tham số này được trình bày chi tiết trong bảng 1.6

Giá trị của thuộc tính được truyền qua đối số v Nó là một con trỏ trỏ tới vùng nhớ chứa giá trị của thuộc tính Vùng nhà được trở tới bởi v phải đủ lớn để chứa toàn

bộ giá trị thuộc tính (quyết định bởi kích thước được định nghĩa trong mô tả thuộc tính)

Có một ngoại lệ với quy tắc trên, đó là khi thiết lập giá trị cho một thuộc tính có kiểu xâu ký tự Xâu ký tự được trỏ tới bởi đối số v có thể ngắn hơn, khi đó backend sẽ dừng đọc giá trị của thuộc tính khi gặp dấu hiệu kết thúc NULL đầu tiên

Nếu đối số i không phải là NULL thì giá trị của *i sẽ được thiết lập để cung cấp các chi tiết về độ chính xác của yêu cầu Ý nghĩa của đối số này sẽ được mổ tả chi tiết

Trang 29

hơn dưới đây

SANE_Status sane_control_option (SANE_Handle h, SANE_Int n,

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);

Các thông số quét được trả về dưới dạng một cấu trúc dữ liệu gọi là

Trang 30

SANE_Parameter Mô tả C cho cấu trúc như sau:

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()

Trang 31

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ị

Trang 32

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);

Hàm này chỉ được gọi sau khi hàm sane_start được thực thi và giá trị

Trang 33

file-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,

Trang 34

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

Trang 35

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 của 4 thuộc tính được dùng để định nghĩa vùng quét như sau:

Trang 36

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

Hình 1.8: Thuộc tính vùng quét (Scan area options)

Trang 37

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

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ữ

Ngày đăng: 30/11/2015, 13:17

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Mô hình tổng quan hệ thống số hóa tài liệu - 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
Hình 1.1 Mô hình tổng quan hệ thống số hóa tài liệu (Trang 14)
Hình 1.4: Quá trình thu thập dữ liệu - 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
Hình 1.4 Quá trình thu thập dữ liệu (Trang 16)
Hình 1.6: Dynamic .Net TWAIN trong Microsoft Visual Studio .Net  1.2.2. Giới thiệu thư viện SANE - 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
Hình 1.6 Dynamic .Net TWAIN trong Microsoft Visual Studio .Net 1.2.2. Giới thiệu thư viện SANE (Trang 19)
Hình 1.7: Khung chương trình - 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
Hình 1.7 Khung chương trình (Trang 34)
Hình 2.1: Mô hình thực hiện một nghiệp vụ hành chính. - 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
Hình 2.1 Mô hình thực hiện một nghiệp vụ hành chính (Trang 37)
Hình 2.3: Danh sách các posting cho từ Brutus, Caesar, Calpurnia  2.4.1. Đánh chỉ mục - 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
Hình 2.3 Danh sách các posting cho từ Brutus, Caesar, Calpurnia 2.4.1. Đánh chỉ mục (Trang 46)
Hình 2.4: Quá trình xây dựng các token  Dãy các token: Dãy các cặp (token đã được chỉnh sửa, DocID) - 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
Hình 2.4 Quá trình xây dựng các token Dãy các token: Dãy các cặp (token đã được chỉnh sửa, DocID) (Trang 47)
Hình 2.6: Sắp xếp theo từ chỉ mục  Dictionary và Postings: - 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
Hình 2.6 Sắp xếp theo từ chỉ mục Dictionary và Postings: (Trang 48)
Hình 2.7: Dictionary và Postings - 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
Hình 2.7 Dictionary và Postings (Trang 49)
Hình 2.10: Tài liệu được liệt kê theo từng vùng alphabet - 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
Hình 2.10 Tài liệu được liệt kê theo từng vùng alphabet (Trang 56)
Hình 3.1: Chế độ quét 1-bit BW - 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
Hình 3.1 Chế độ quét 1-bit BW (Trang 60)
Hình 3.5: Chọn tài liệu cho bộ sưu tập - 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
Hình 3.5 Chọn tài liệu cho bộ sưu tập (Trang 62)
Hình 3.6: Biên mục tài liệu theo chuẩn Dublin Core - 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
Hình 3.6 Biên mục tài liệu theo chuẩn Dublin Core (Trang 63)
Hình 3.8: Chỉ mục tìm kiếm - 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
Hình 3.8 Chỉ mục tìm kiếm (Trang 64)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w