6. Tổng quan tài liệu nghiên cứu
2.3.6. Xây dựng dịch vụ trích xuất thông tin từ bảng điểm sinh viên
Nhận dạng bảng điểm là một tác vụ tốn nhiều thời gian, đặc biệt khi hệ thống phục vụ nhiều người dùng cùng một lúc và bảng điểm có nhiều sinh viên. Để tránh việc chờ đợi của người sử dụng, hệ thống sẽ chuyển việc nhận dạng bảng điểm thành một dịch vụ chạy trên máy chủ. Sau khi có kết quả nhận dạng, người sử dụng sẽ nhận được email thông báo kết quả.
Về cơ bản, mô hình hoạt động của dịch vụ nhận dạng bảng điểm như sau:
i) Đầu tiên, hệ thống tiếp nhận yêu cầu từ người dùng, lưu bảng điểm lên máy chủ.
ii) Hệ thống cập nhật thông tin bảng điểm vào CSDL
iii) Dịch vụ truy cập vào CSDL, đọc thông tin bảng điểm và thực hiện xử lý.
iv) Sau khi xử lý xong bảng điểm, dịch vụ đọc lại thông tin từ CSDL. Nếu có bảng điểm mới, dịch vụ tiếp tục xử lý. Ngược lại, dịch vụ sẽ quét CSDL sau mỗi năm giây.
v) Dữ liệu sau khi được dịch vụ xử lý, sẽ được cập nhật vào CSDL của hệ thống và thông báo cho người dùng bằng email để xác nhận thông tin.
2.4.XÂY DỰNG MÔ-ĐUN TƯƠNG TÁC VỚI HỆ THỐNG THÔNG TIN ĐÀO TẠO
2.4.1. Cấu trúc dữ liệu hệ thống thông tin đào tạo
Hình 2.13. Sơ đồ cơ sở dữ liệu hệ thống đào tạo
Qua khảo sát thực tế tại phòng Đào tạo, trường Đại học Sư phạm, đề tại thực hiện phân tích CSDL hệ thống thông tin đào tạo. Hiện nay, hệ thống thông tin đào tạo có nhiều mô-đun, nhiều bộ phận cùng vận hành, tuy nhiên trong phạm vi đề tài, tác giả tập trung nghiên cứu mô-đun quản lý điểm của sinh viên. Sơ đồ CSDL mô-đun quản lý điểm được mô tả bằng sơ đồ hình 2.13.
Theo sơ đồ hình 2.13, mỗi sinh viên khi học một ngành sẽ học các học phần theo quy định trong khung chương trình (bảng “KhungChuongTrinh”). Hằng năm, nhà trường tổ chức các lớp học phần (bằng “LopHocPhan”), sinh
viên khi học các lớp học phần (bảng “DiemSinhVien”) sẽ có các cột điểm: Bộ phận 1, bộ phận 2, bộ phận 3, điểm thi và điểm tổng kết học phần.
2.4.2. Các dịch vụ của hệ thống thông tin đào tạo
Hệ thống thông tin đào tạo cung cấp các dịch vụ dưới dạng Restful API [9]. Tất nhiên, để truy cập được hệ thống dịch vụ này cần phải được sự đồng ý của phòng Đào tạo và một số ràng buộc khác để truy cập.
Bảng mô tả các API của hệ thống thông tin đào tạo:
Bảng 2.1. Danh sách API của hệ thống thông tin đào tạo
TT Tên API Tham số Mô tả
1 GetStudent StudentID Lấy thông tin sinh viên theo mã sinh viên 2 GetMarkOfClass ClassID Lấy dữ liệu điểm của các sinh viên trong
học lớp phần
3 GetListSubjectOfStudent StudentID Lấy danh sách các học phần sinh viên được học (bao gồm học phần tự chọn và bắt buộc)
2.4.3. Xây dựng mô-đun tương tác với hệ thống thông tin đào tạo
Trong phần này, đề tài trình bày chi tiết cách thức kết nối và tương tác với hệ thống thông tin đào tạo bằng API.
Bước 1: Khởi tạo đối tượng kết nối bằng giao thức HTTP, đồng thời chuẩn bị đối tượng để nhận kết quả trả về
//Init HTTP Request
HttpClient client = new HttpClient(); //Init Uri
client.BaseAddress = new Uri(DAO_TAO_URL); //Response Data Type
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json")); //Response Message
HttpResponseMessage response = client.GetAsync(API_GET_STUDENT + "/" + id).Result;
Bước 2: Kiểm tra thuộc tính IsSuccessStatusCode của đối tượng response, nếu là đúng thì gửi yêu cầu thành công, ngược lại sẽ nhận được thông báo lỗi.
//IF Request Success
if (response.IsSuccessStatusCode){}
Bước 3: Nếu kết nối thành công, sử dụng phương thức ReadAsAsync<T>() để nhận giá trị trả về. Trong ví dụ này, hệ thống nhận dữ liệu trả về là lớp SinhVien
var sv = response.Content.ReadAsAsync<SinhVien>().Result;
Bước 4: Phân tích đối tượng “sv” thành đối tượng có thể hiển thị lên màn hình.
//serialize Result
DataTable dtSV = new DataTable(); dtSV.Columns.Add("MaSinhVien"); dtSV.Columns.Add("HoTen"); dtSV.Columns.Add("KhoaHoc"); dtSV.Columns.Add("NganhHoc"); DataRow dr = dtSV.NewRow(); dr["MaSinhVien"] = sv.MaSinhVien; dr["HoTen"] = sv.HoTen; dr["KhoaHoc"] = sv.KhoaHoc; dr["NganhHoc"] = sv.NganhHoc; dtSV.Rows.Add(dr);
Nếu dữ liệu trả về là mảng, chúng ta dùng IEnumerable để lưu kết quả. var dsHocPhan = response.Content.ReadAsAsync<IEnumerable<SinhVienHocPhan>>().Result;
Bước 5. Hiển thị kết quả lên giao diện hoặc sử dụng cho tra cứu, thống kê
Bước 6: Nếu có lỗi, thông báo lên màn hình như sau: MessageBox.Show("Error Code" + response.StatusCode +
" : Message - " + response.ReasonPhrase);
2.5.KẾT LUẬN CHƯƠNG 2
Trong chương 2, đề tài tập trung phân tích cách thức phân tích và nhận dạng bảng điểm dựa trên mẫu bảng điểm trường Đại học Sư phạm. Đề tài đã
đề xuất hai thuật toán xử lý dữ liệu đầu, đó là thuận toán đánh dấu các khối chữ nhật và thuật toán nhận dạng bảng điểm. Bên cạnh đó, đề tài tiến hành phân tích và thiết kế hệ thống, thiết kế CSDL. Ngoài ra, việc kết nối với hệ thống thông tin đào tạo thông qua Web API cũng được đề tài mô tả chi tiết.
CHƯƠNG 3
PHÁT TRIỂN ỨNG DỤNG
3.1.LỰA CHỌN CÔNG CỤ PHÁT TRIỂN
3.1.1. Ngôn ngữ lập trình
Thư viện VietOCR được phát triển để hỗ trợ các ngôn ngữ lập trình bậc cao như C#, Java làm việc với tesseract. Chính vì vậy, tác giả chọn ngôn ngữ C# để xây dựng ứng dụng phần mềm chạy trên nền Windows có hỗ trợ .NET Framework 4.5. Môi trường phát triển cụ thể như sau:
- Hệ điều hành: Windows 10;
- Công cụ phát triển: Visual Studio 2013 - Cơ sở dữ liệu: SQL Server 2005 trở lên; - Thư viện VietOCR 4.x;
- .NET Framework 4.5.
3.1.2. Cơ sở dữ liệu
Đề tài sử dụng hệ quản trị CSDL SQL Server để lưu trữ dữ liệu cho toàn bộ hệ thống. Với SQL Server, hệ thống có thể làm việc với hiệu năng cao, hỗ trợ đầy đủ các thư viện kết nối và thao tác cho ngôn ngữ lập trình C#.
3.2.XÂY DỰNG CƠ SỞ DỮ LIỆU LƯU TRỮ TỆP TIN ẢNH BẢNG
ĐIỂM
3.2.1. Thu thập và xử lý các nguồn dữ liệu
Hiện nay, bảng điểm tại trường Đại học Sư phạm có hai loại: Bảng điểm giữa kỳ: Ghi điểm bộ phận 1, bộ phận 2, điểm giữa kỳ. Bảng điểm này do giáo viên giảng dạy ghi điểm. Hình 3.1 là mẫu bảng điểm giữa kỳ hiện nay. Bảng điểm cuối kỳ: Ghi điểm cuối kỳ. Bảng điểm này do phòng Khảo thí và
kiểm định chất lượng ghi điểm. Hình 3.2 là mẫu bảng ghi điểm cuối kỳ hiện nay.
Hình 3.2. Bảng ghi điểm cuối kỳ
Các bảng điểm đều có các thông tin: Năm học, học kỳ, Mã lớp học phần, Tên học phần, Số tín chỉ, Nhóm học phần và danh sách sinh viên cùng với điểm số từng bộ phận.
Với cấu trúc bảng điểm hiện nay, việc trích xuất thông tin tự động là rất khó khăn. Vấn đề thứ nhất cần đặt ra đó là nhận dạng điểm số được viết bằng tay, đây cũng là vấn đề chung trong nhận dạng hiện nay. Bên cạnh đó, việc lấy thông tin từng sinh viên trong bảng điểm, tức là nhận dạng được cấu trúc bảng điểm theo hàng và cột sẽ là thách thức lớn trong xử lý của hệ thống nhận dạng.
Để khắc phục được các hạn chế đã nêu ở trên, đề tài đề xuất điều chỉnh cấu trúc bảng điểm bằng cách:
- Sử dụng các hình khối đặc biệt để đánh dấu các vị trí cần nhận dạng. - Tổ chức lại các thông tin trong bảng điểm, bổ sung cột mã sinh viên. Sau khi nghiên cứu và thử nghiệm các giải pháp khác nhau, tác giả đề xuất tạo bảng điểm có cấu trúc tương tự hình 3.3. Trong bảng điểm điểm xuất, đề tài sử dụng 2 khối chữ nhật màu đen, một khối ở góc trên cùng bên trái, một khối ở góc dưới cùng bên phải để cố định vùng nhận dạng. Các khối ở hàng trên cùng dùng để đánh dấu vị trí các vùng: Mã lớp học phần, Số tín chỉ, Nhóm học phần. Các khối ở hàng dưới cùng dùng để đánh dấu vị trí các cột: Mã sinh viên, điểm bộ phận 1, bộ phận 2, giữa kỳ và điểm cuối kỳ. Ngoài ra, các hàng trong bảng điểm cũng được đánh dấu tương tự. Việc phân tích và trích xuất thông tin từ bảng điểm được thuật hiện bởi các thuật toán đã trình bày ở mục 2.3.
3.2.2. Xây dựng dịch vụ truy xuất dữ liệu
Việc trích xuất dữ liệu từ bảng điểm được thực hiện theo các bước: Bước 1: Chuẩn bị thư mục để lưu các ảnh tạm
if (!Directory.Exists(StartupPath + "/tmp")) {
Directory.CreateDirectory(StartupPath + "/tmp"); }
string fullPathImageRevert = StartupPath + "/tmp/" +
Bước 2: Đảo ngược màu ảnh //Đảo ngược màu ảnh
RevertImage(image).Save(fullPathImageRevert);
Ảnh sau khi được đảo ngược sẽ có dạng như hình 2.8.
Bước 3: Nạp ảnh được đảo ngược vào bộ nhớ và chuyển sang dạng bitmap
Bitmap reverBitmap = (Bitmap)Bitmap.FromFile(fullPathImageRevert); Bước 4: Khóa ảnh để đưa vào xử lý
// lock image
BitmapData bitmapData = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, bitmap.PixelFormat); Bước 5: Lọc màu, khử nhiễu
ColorFiltering colorFilter = new ColorFiltering(); colorFilter.Red = new IntRange(0, 64);
colorFilter.Green = new IntRange(0, 64); colorFilter.Blue = new IntRange(0, 64); colorFilter.FillOutsideRange = false; colorFilter.ApplyInPlace(bitmapData); Bước 6: Định vị đối tượng
BlobCounter blobCounter = new BlobCounter(); blobCounter.FilterBlobs = true;
blobCounter.MinHeight = 5; blobCounter.MinWidth = 5;
blobCounter.ProcessImage(bitmapData);
Blob[] blobs = blobCounter.GetObjectsInformation(); bitmap.UnlockBits(bitmapData);
Bước 7: Khởi tạo đối tượng kiểm tra hình dạng các đối tượng đã được định vị
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
Bước 8: Lần lượt duyệt qua các đối tượng được định vị, lấy thông tin các góc và đường biên để kiểm tra
for (int i = 0, n = blobs.Length; i < n; i++) {
List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]); List<IntPoint> corners;
if (shapeChecker.IsQuadrilateral(edgePoints, out corners)) // 4 corners {
// get bounding rectangle of the points list IntPoint minXY, maxXY;
PointsCloud.GetBoundingRectangle(edgePoints, out minXY, out maxXY); //Kiểm tra có phải hình chữ nhật hay không?
if (!TestRectangle(corners, minXY, maxXY)) continue;
sb.AppendLine(string.Format("h: {0}", maxXY.Y - minXY.Y)); gradeImage.AddPoint(minXY, maxXY); }
}
Bước 9: Cắt các vùng ảnh từ ảnh gốc dựa vào các khối được định vị. Bước 10: Lần lượt duyệt qua các ảnh được tạo ra ở bước 9, đưa vào nhận dạng và lưu trữ.
OCRImageEntity entity = new OCRImageEntity(imageList, inputfilename, index, rect, curLangCode); OCR<Image> ocrEngine = new OCRImages();
ocrEngine.PageSegMode = selectedPSM; ocrEngine.Language = entity.Language; IList<Image> images = entity.ClonedImages; StringBuilder sb = new StringBuilder(); for (int i = 0; i < images.Count; i++) {
string result = ocrEngine.RecognizeText(
((List<Image>)images).GetRange(i, 1), entity.Inputfilename,
entity.Rect); sb.AppendLine(result);
}
Dữ liệu sau khi được xử lý sẽ được lưu vào CSDL của hệ thống như đã phân tích và thiết kế trong chương 2. Các tệp tin bảng điểm sẽ được lưu vào các thư mục được phân loại theo khoa quản lý, ngành học, khóa học, năm học và theo học kỳ (hình 3.4).
3.3.XÂY DỰNG WEBSITE TƯƠNG TÁC VỚI NGƯỜI DÙNG CUỐI
3.3.1. Xây dựng hệ thống
a.Sơ đồ usecase tổng quát
Hình 3.5. Biểu đồ usecase tổng quát website tương tác với người dùng cuối
Theo hình 3.5, website tương tác với người dùng cuối phục vụ các đối tượng gồm:
- Giáo vụ các khoa, phòng Khảo thí và kiểm định chất lượng: Thực hiện đăng tải bảng điểm, xem kết quả, thống kê bảng điểm, tìm kiếm bảng điểm, đối sánh với dữ liệu điểm đào tạo.
- Bộ phận đào tạo: Tra cứu bảng điểm gốc, đối sánh dữ liệu toàn trường, thống kê, báo cáo.
- Quản trị viên: Cấu hình hệ thống gồm các mô-đun nhận dạng điểm, mô-đun tương tác với hệ thống đào tạo, quản lý dữ liệu.
b. Đặc tả Usecase
Bảng 3.1 là danh sách các usecase của hệ thống website tương tác với người dùng cuối:
Bảng 3.1.Danh sách Usecase
Mã Tên Usecase UC_001 Đăng nhập
UC_002 Đăng tải bảng điểm UC_003 Tìm kiếm bảng điểm UC_004 Đối sánh dữ liệu UC_005 Thống kê bảng điểm UC_006 Nhận thông báo qua email UC_007 Xem kết quả nhận dạng UC_008 Nhận dạng bảng điểm UC_009 Cấu hình hệ thống
Bảng 3.2. Đặc tả Usecase Đăng nhập
Mã Usecase: UC_001 Tên Usecase: Đăng nhập
Tác nhân:
Giáo vụ khoa, phòng Khảo thí & ĐBCL, quản lý đào tạo, admin
Diễn giải:
Usecase được sử dụng khi tác nhân muốn truy cập sử dụng các chức năng của hệ thống
Điều kiện trước:
Không có điều kiện trước
Thành công:
Tùy vào vai trò của tác nhân, hệ thống sẽ chuyển về các trang tương ứng
Kịch bản:
1. Tác nhận chọn chức năng đăng nhập và nhập thông tin đăng nhập gồm tên đăng nhập, mật khẩu.
2. Hệ thống kiểm tra thông tin tác nhân cung cấp.
3. Nếu đăng nhập thành công, chuyển về trang cá nhân của tác nhân. 4. Nếu đăng nhập thất bại, thông báo đăng nhập lại.
Mở rộng:
Trong trường hợp đăng nhập thất bại quá 3 lần, yêu cầu khóa tài khoản trong 30 phút tiếp theo.
Bảng 3.3. Đặc tả Usecase đăng tải bảng điểm
Mã Usecase: UC_002 Tên Usecase: Đăng tải bảng điểm
Tác nhân:
Giáo vụ khoa, phòng Khảo thí & ĐBCL
Diễn giải:
Usecase được sử dụng khi tác nhân muốn đăng tải bảng điểm lên hệ thống.
Điều kiện trước:
Tác nhân đã đăng nhập thành công với vai trò là Giáo vụ khoa
Thành công:
Hệ thống tiếp nhận và lưu bảng điểm vào máy chủ, đồng thời kích hoạt chức năng nhận dạng bảng điểm
Kịch bản:
1. Tác nhân cung cấp thông tin bảng điểm gồm: Khóa, năm học, học kỳ, loại bảng điểm. 2. Tác nhân chọn tệp tin
3. Hệ thống lưu dữ liệu vào máy chủ
4. Hệ thống kích hoạt chức năng nhân dạng bảng điểm
Mở rộng:
Khi tệp tin không đúng định dạng hoặc quá lớn, thông báo người dùng tải lại tệp tin.
Bảng 3.4. Đặc tả Usecase Tìm kiếm bảng điểm
Mã Usecase: UC_003 Tên Usecase: Tìm kiếm bảng điểm
Tác nhân:
Giáo vụ khoa, phòng Khảo thí & ĐBCL, Quản lý đào tạo
Diễn giải:
Usecase được sử dụng khi tác nhân muốn tìm kiếm dữ liệu bảng điểm trên hệ thống
Điều kiện trước:
Tác nhân đã đăng nhập thành công với vai trò là Giáo vụ khoa, quản lý đào tạo
Thành công:
Hệ thống hiển thị danh sách bảng điểm theo điều kiện tìm kiếm của tác nhân
Kịch bản:
1. Tác nhân cung cấp thông tin tìm kiếm 2. Hệ thống tìm kiếm theo điều kiện
3. Hiện thị danh sách bảng điểm nếu tìm thấy, ngược lại thông báo không tìm thấy
Mở rộng:
Bảng 3.5. Đặc tả Usecase Đối sánh dữ liệu
Mã Usecase: UC_004 Tên Usecase: Đối sánh dữ liệu
Tác nhân:
Giáo vụ khoa, phòng Khảo thí & ĐBCL, Quản lý đào tạo, Hệ thống thông tin đào tạo
Diễn giải:
Usecase được sử dụng khi tác nhân muốn đối chiếu dữ liệu trên bảng điểm và dữ liệu được lưu tại hệ thống đào tạo
Điều kiện trước:
Tác nhân đã đăng nhập thành công với vai trò là Giáo vụ khoa, Quản lý đào tạo
Thành công:
Hệ thống hiện thị kết quả đối chiếu, bảng tổng hợp danh sách các nội dung sai khác giữa hai bên
Kịch bản:
1. Tác nhân chọn chức năng đối sánh dữ liệu
2. Hệ thống tiến hành lấy thông tin điểm được nhận dạng từ bảng điểm 3. Hệ thống kết nối với hệ thống thông tin đào tạo, gửi yêu cầu lấy điểm 4. Hệ thống phân tích kết quả hệ thống thông tin đào tạo trả về
5. Hệ thống tiến hành so sánh điểm 6. Hiển thị kết quả
Mở rộng:
Tác nhân có thể tiến hành nhận dạng lại bảng điểm.
Bảng 3.6. Đặc tả Usecase Thống kê bảng điểm
Mã Usecase: UC_005 Tên Usecase: Thống kê bảng điểm
Tác nhân:
Giáo vụ khoa, phòng Khảo thí & ĐBCL
Diễn giải:
Usecase được sử dụng khi tác nhân thực hiện thống kê bảng điểm theo khóa, theo ngành, theo năm học, hoặc theo từng sinh viên.
Điều kiện trước:
Tác nhân đã đăng nhập thành công với vai trò là Giáo vụ khoa
Thành công:
Hệ thống hiển thị thông tin thống kê bảng điểm theo các tiêu chí được tác nhân lựa chọn
Kịch bản:
1. Tác nhân chọn chức năng thống kê 2. Tác nhân chọn tiêu chí thống kê
3. Hệ thống tiến hành tìm kiếm và thống kê 4. Hệ thống hiển thị kết quả ra màn hình
Mở rộng:
Bảng 3.7. Đặc tả Usecase Nhận thông báo qua email
Mã Usecase: UC_006 Tên Usecase: Nhận thông báo qua email
Tác nhân:
Giáo vụ khoa, phòng Khảo thí & ĐBCL
Diễn giải:
Usecase được sử dụng khi tác nhân muốn nhận kết quả nhận dạng qua email