51
` ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ĐỒ ÁN CƠ SỞ 5 ỨNG DỤNG XỬ LÝ HÌNH ẢNH VÀO GIẢI TOÁN SỐ HỌC Sinh viên thực hiện : Trần Lê Bảo Khanh 17IT3 : Trần Cao Thông 17CE Giảng Viên Hướng Dẫn : PGS.TS.Nguyễn Thanh Bình

MỤC LỤCdaotao.sict.udn.vn/.../2020/08/1596546422-baocaodoan.docx · Web viewCHƯƠNG III. LÀM QUEN VỚI NGÔN NGỮ PYTHON18 1.Giới Thiệu về ngôn ngữ Python.18 2.Ứng

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

`

ĐẠI HỌC ĐÀ NẴNG

KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

ĐỒ ÁN CƠ SỞ 5

ỨNG DỤNG XỬ LÝ HÌNH ẢNH VÀO GIẢI TOÁN SỐ HỌC

Sinh viên thực hiện: Trần Lê Bảo Khanh 17IT3

: Trần Cao Thông 17CE

Giảng Viên Hướng Dẫn : PGS.TS.Nguyễn Thanh Bình

Đà nẵng, tháng 8 năm 2020

15

LỜI MỞ ĐẦU

Em xin gửi lời cảm ơn đến với các thầy cô của khoa Công Nghệ Thông Tin và Truyền Thông đã tạo điều kiện cho chúng em thực hiện đồ án cơ sở 5. Và em cũng chân thành cảm ơn Thầy Nguyễn Thanh Bình đã nhiệt tình hướng dẫn em hoàn thành đồ án cơ sở .

Trong quá trình làm bài báo cáo đồ án khó tránh khỏi sai sót rất mong các thầy, cô bỏ qua. Đồng thời do trình độ lý luận cũng như kinh nghiệm còn hạn chế nên rất mong nhận được ý kiến đóng góp của thầy, cô để từ đó rút ra kinh nghiệm và hoàn thành tốt các đồ án tiếp theo.

Em xin chân thành cảm ơn!

Giáo Viên Hướng Dẫn Sinh viên thực hiện

Trần Lê Bảo Khanh: 17IT3

Trần Cao Thông : 17CE

MỤC LỤC

MỤC LỤC3MỤC LỤC HÌNH ẢNH6CHƯƠNG I. MỞ ĐẦU71.Lý do chọn đề tài.72.Mục đích của đề tài.73.Đối tượng và phạm vi nghiên cứu.83.1.Đối tượng:83.2.Phạm vi nghiên cứu:8CHƯƠNG II. TỔNG QUAN VỀ XỬ LÝ ẢNH91.Xử lý ảnh là gì ?92.Các bước cơ bản trong xử lý ảnh.92.1.Phần thu nhận ảnh (Image Acquisition) .102.2.Tiền xử lý (Image Processing).102.3.Phân đoạn (Segmentation) hay phân vùng ảnh.112.4.Biểu diễn ảnh (Image Representation).112.5.Nhận dạng và nội suy ảnh (Image Recognition and Interpretation).112.6.Cơ sở tri thức (Knowledge Base).122.7.Mô tả (biểu diễn ảnh).123.Vấn đề cơ bản trong xử lý ảnh.143.1.Điểm ảnh (Picture Element).143.2.Độ phân giải của ảnh (Image resolution).153.3.Mức xám của ảnh153.4.Nén ảnh163.5.Biến đổi ảnh (Image Transform)164. Các cách phân loại ảnh17CHƯƠNG III. LÀM QUEN VỚI NGÔN NGỮ PYTHON181.Giới Thiệu về ngôn ngữ Python.182.Ứng dụng của ngôn ngữ Python.183.Cài đặt và sử dụng Python193.1.Cài đặt193.2.Cách sử dụng22CHƯƠNG IV. LÀM QUEN VỚI THƯ VIỆN TESSERACT OCR251.Khái niệm về OCR.252.Cách thức hoạt động của OCR.253.Thư viện TESSERACT OCR là gì ?254.Cách cài đặt và sử dụng thư viện TESSERACT OCR.27CHƯƠNG V. XÂY DỰNG CHƯƠNG TRÌNH291.Dữ liệu đầu vào292.Hướng giải quyết bài toán293.Kết quả33CHƯƠNG VI. ƯU- NHƯỢC ĐIỂM VÀ HƯỚNG PHÁT TRIỂN351.Ưu điển352.Nhược điểm353.Hướng phát triển35KẾT LUẬN36

MỤC LỤC HÌNH ẢNH

Hình 1: Quá trình xử lý ảnh10

Hình 2: Các bước trong xử lý ảnh10

Hình 3: Biểu diễn quá trình nâng cao chất lượng và khôi phục ảnh15

Hình 4: Hướng dẫn download python21

Hình 5:Hướng dẫn download python21

Hình 6:Hướng dẫn download python22

Hình 7:Hướng dẫn download python22

Hình 8: Cách sử dụng python23

Hình 9: Cách sử dụng python23

Hình 10: Cách sử dụng python24

Hình 11: Cách sử dụng python24

Hình 12: Hướng dẫn cài đặt tesseact28

Hình 13: Hướng dẫn cài đặt tesseact29

Hình 14: Ví dụ đầu vào 1 Hình 15: ví dụ đầu vào 230

Hình 16: Hướng dẫn lấy toán tử30

Hình 17: Hướng dẫn tách toán tử31

Hình 18: Hướng dẫn tách các số sử dụng toán tử *,/31

Hình 19: Hướng dẫn tác toán tử +,-32

Hình 20: Thực hiện *, /32

Hình 21: Hiển thị kết quả33

Hình 22: Hướng dẫn gán *, / vào mảng toán tử +, -33

Hình 23: Tiếp tục thực hiện +, -33

Hình 24: Bài toán ví dụ34

Hình 25: Hiển thị kết quả34

Hình 26: Lưu kết quả vào Excel34

Hình 27: Dạng toán và kết quả trong file Excel35

CHƯƠNG I. MỞ ĐẦU

1. Lý do chọn đề tài.

Với sự phát triển không ngừng của khoa học và công nghệ, đặc biệt là với những chiếc điện thoại thông minh và máy vi tính ngày càng hiện đại và được sử dụng phổ biến trong đời sống con người đã làm cho lượng thông tin thu được bằng hình ảnh ngày càng tăng. Theo đó, lĩnh vực xử lý ảnh cũng được chú trọng phát triển, ứng dụng rộng rãi trong đời sống xã hội hiện đại.

Nhờ vào sự phát triển mạnh mẽ của Machine Learning - một lĩnh vực lớn của Khoa Học Máy Tính, nó có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể, xử lý ảnh đã và đang được ứng dụng vào nhiều lĩnh vực trong cuộc sống: y tế (X Ray Imaging, PET scan,...), thị giác máy tính (giúp máy tính có thể hiểu, nhận biết đồ vật như con người), các cộng nghệ nhận dạng (vân tay, khuôn mặt,..) ,….

Một trong những lĩnh vực được nhiều người quan tâm nhất là toán học. Vậy xử lý ảnh sẽ có tác dụng gì đối với toán học?

Vì vậy trong báo cáo này, nhóm mình sẽ giới thiệu đến các bạn một chương trình nhận dạng hình ảnh để áp dụng vào toán học với mong muốn giúp cho mọi người biết thêm tác dụng của xử lý ảnh đối với toán học và tăng thêm kiến thức về xử lý ảnh cũng như Machine Learning.

2. Mục đích của đề tài.

· Xây dựng một phần mềm áp dụng xử lý ảnh vào trong toán học.

· Tìm hiểu về ngôn ngữ lập trình python

· Nghiên cứu và hiểu biết về thư viện OCR

· Tìm hiểu các phương pháp để nhận dạng hình ảnh

· Tìm hiểu về những dạng toán cơ bản để áp dụng vào phần mềm

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

· Các phương pháp, thuật toán dùng để nhận dạng hình ảnh chứa chữ số.

· Thư viện ORC và ngôn ngữ lập trình python.

· Dùng excel làm bộ CSDL.

3.2. Phạm vi nghiên cứu:

· Tập trung tìm hiểu chính về nhận dạng hình ảnh.

· Tìm hiểu về các công thức số học đơn giản.

CHƯƠNG II. TỔNG QUAN VỀ XỬ LÝ ẢNH1. Xử lý ảnh là gì ?

· Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất là nhanh , kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụng riêng cho nó.

· Xử lý ảnh là một phân ngành trong xử lý số tín hiệu với tín hiệu xử lý là ảnh. Xử lý ảnh gồm 4 lĩnh vực chính:  xử lý nâng cao chất lượng hình ảnh, nhận dạng ảnh, nén ảnh và truy vấn ảnh. Sự phát triển của xử lý ảnh đem lại rất nhiều lợi ích cho cuộc sống của con người.

· Ngày nay xử lý ảnh đã được áp dụng rất rộng rãi trong đời sống như: photoshop, nén ảnh, nén video, nhận dạng biển số xe, nhận dạng khuôn mặt, nhận dạng chữ viết, xử lý ảnh thiên văn, ảnh y tế,....

· Quá trình xử lý ảnh là quá trình thao tác ảnh đầu vào nhằm cho ra kết quả mong muốn. Kết quả đầu ra của quá trình xử lý ảnh có thể là một ảnh ‘‘tốt hơn’’  hoặc một kết luận.

Hình 1: Quá trình xử lý ảnh

2. Các bước cơ bản trong xử lý ảnh.

· Đầu tiên, ảnh tự nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. (Máy ảnh số hiện nay là một thí dụ gần gũi). Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh.

Hình 2: Các bước trong xử lý ảnh

Sơ đồ này bao gồm các thành phần sau:

2.1. Phần thu nhận ảnh (Image Acquisition) .

Ảnh có thể nhận qua camera màu hoặc đen trắng. Thường ảnh nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25 dòng), cũng có loại camera đã số hoá (như loại CCD – Change Coupled Device) là loại photodiot tạo cường độ sáng tại mỗi điểm ảnh. Camera thường dùng là loại quét dòng ; ảnh tạo ra có dạng hai chiều. Chất lượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, vào môi trường (ánh sáng, phong cảnh).

2.2. Tiền xử lý (Image Processing).

Sau bộ thu nhận, ảnh có thể nhiễu độ tương phản thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng. Chức năng chính của bộ tiền xử lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ hơn, nét hơn.

2.3. Phân đoạn (Segmentation) hay phân vùng ảnh.

Phân vùng ảnh là tách một ảnh đầu vào thành các vùng thành phần để biểu diễn phân tích, nhận dạng ảnh. Ví dụ: để nhận dạng chữ (hoặc mã vạch) trên phong bì thư cho mục đích phân loại bưu phẩm, cần chia các câu, chữ về địa chỉ hoặc tên người thành các từ, các chữ, các số (hoặc các vạch) riêng biệt để nhận dạng. Đây là phần phức tạp khó khăn nhất trong xử lý ảnh và cũng dễ gây lỗi, làm mất độ chính xác của ảnh. Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào công đoạn này.

2.4. Biểu diễn ảnh (Image Representation).

Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được. Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.

2.5. Nhận dạng và nội suy ảnh (Image Recognition and Interpretation).

Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng. Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản:

· Nhận dạng theo tham số.

· Nhận dạng theo cấu trúc.

Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người…

2.6. Cơ sở tri thức (Knowledge Base).

Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri thức được phát huy.

2.7. Mô tả (biểu diễn ảnh).

Từ các bước cơ bản trong xử lý ảnh, ảnh sau khi số hoá sẽ được lưu vào bộ nhớ, hoặc chuyển sang các khâu tiếp theo để phân tích. Nếu lưu trữ ảnh trực tiếp từ các ảnh thô, đòi hỏi dung lượng bộ nhớ cực lớn và không hiệu quả theo quan điểm ứng dụng và công nghệ. Thông thường, các ảnh thô đó được đặc tả (biểu diễn) lại (hay đơn giản là mã hoá) theo các đặc điểm của ảnh được gọi là các đặc trưng ảnh (Image Features) như: biên ảnh (Boundary), vùng ảnh (Region). Một số phương pháp biểu diễn thường dùng:

· Biểu diễn bằng mã chạy (Run-Length Code)

· Biểu diễn bằng mã xích (Chaine -Code)

· Biểu diễn bằng mã tứ phân (Quad-Tree Code)

Biểu diễn bằng mã chạy :

Phương pháp này thường biểu diễn cho vùng ảnh và áp dụng cho ảnh nhị phân. Một vùng ảnh R có thể mã hoá đơn giản nhờ một ma trận nhị phân:

· U(m, n) = 1 nếu (m, n) thuộc R

· U( m, n) = 0 nếu (m, n) không thuộc R

Trong đó: U(m, n) là hàm mô tả mức xám ảnh tại tọa độ (m, n). Với cách biểu diễn trên, một vùng ảnh được mô tả bằng một tập các chuỗi số 0 hoặc 1. Giả sử chúng ta mô tả ảnh nhị phân của một vùng ảnh được thể hiện theo toạ độ (x, y) theo các chiều và đặc tả chỉ đối với giá trị “1” khi đó dạng mô tả có thể là: (x, y)r; trong đó (x, y) là toạ độ, r là số lượng các bit có giá trị “1” liên tục theo chiều ngang hoặc dọc.

Biểu diễn bằng mã xích:

Phương pháp này thường dùng để biểu diễn đường biên ảnh. Một đường bất kỳ được chia thành các đoạn nhỏ. Nối các điểm chia, ta có các đoạn thẳng kế tiếp được gán hướng cho đoạn thẳng đó tạo thành một dây xích gồm các đoạn. Các hướng có thể chọn 4, 8, 12, 24,… mỗi hướng được mã hoá theo số thập phân hoặc số nhị phân thành mã của hướng.

Biểu diễn bằng mã tứ phân:

Phương pháp mã tứ phân được dùng để mã hoá cho vùng ảnh. Vùng ảnh đầu tiên được chia làm bốn phần thường là bằng nhau. Nếu mỗi vùng đã đồng nhất (chứa toàn điểm đen (1) hay trắng (0)), thì gán cho vùng đó một mã và không chia tiếp. Các vùng không đồng nhất được chia tiếp làm bốn phần theo thủ tục trên cho đến khi tất cả các vùng đều đồng nhất.

Các mã phân chia thành các vùng con tạo thành một cây phân chia các vùng đồng nhất. Trên đây là các thành phần cơ bản trong các khâu xử lý ảnh. Trong thực tế, các quá trình sử dụng ảnh số không nhất thiết phải qua hết các khâu đó tùy theo đặc điểm ứng dụng. Ảnh sau khi được số hóa được nén, lưu lai để truyền cho các hệ thống khác sử dụng hoặc để xử lý tiếp theo. Mặt khác, ảnh sau khi số hóa có thể bỏ qua công đoạn nâng cao chất lượng (khi ảnh đủ chất lượng theo một yêu cầu nào đó để chuyển tới khâu phân đoạn hoặc bỏ tiếp khâu phân đoạn chuyển trực tiếp tới khâu trích chọn đặc trưng. Hình dưới đây chia các nhánh song song như: nâng cao chất lượng ảnh có hai nhánh phân biệt: nâng cao chất lượng ảnh (tăng độ sáng, độ tương phản, lọc nhiễu) hoặc khôi phục ảnh (hồi phục lại ảnh thật khi ảnh nhận được bị méo) v.v…

Hình 3: Biểu diễn quá trình nâng cao chất lượng và khôi phục ảnh

3. Vấn đề cơ bản trong xử lý ảnh.3.1. Điểm ảnh (Picture Element).

Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng. Để xử lý bằng máy tính (số), ảnh cần phải được số hoá. Số hoá ảnh là sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng (mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture Element) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng với cặp tọa độ (x, y).

Định nghĩa:

Pixel là một điểm ảnh raster hay một khối màu nhỏ, còn được biết tới là một đơn vị cơ bản để tạo ra một bức ảnh hiển thị trên màn hình led. Điểm ảnh của một màn hình tương ứng với tọa độ ITS. Được sản xuất trong mạng lưới 2 chiều, nhưng điểm ảnh lại tương ứng với thời gian hay tỉ lệ quét tần số màn hình. Thông thường thì 1 điểm ảnh ( pixel ) không có một con số cụ thể.

3.2. Độ phân giải của ảnh (Image resolution).

Định nghĩa:

Độ phân giải (Resolution) của ảnh  chỉ lượng thông tin được chứa đựng trong một tập tin ảnh hiển thị trên màn hình. Hiểu một cách đơn giản đó chính là số lượng điểm ảnh chứa trên một màn hình hiển thị.Độ phân giải thường được đo bằng pixcel, megapixcel, trong đó một megapixcel bằng một triệu pixcel.

Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y trong không gian hai chiều.

Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh (320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA 17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn.

3.3. Mức xám của ảnh

Một điểm ảnh (pixel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh và độ xám của nó. Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ thường dùng trong xử lý ảnh.

Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán bằng giá trị số tại điểm đó.

Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256 là mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn mức xám: Mức xám dùng 1 byte biểu diễn: 28 =256 mức, tức là từ 0 đến 255).

Ảnh đen trắng: là ảnh có hai màu đen, trắng (không chứa màu khác) với mức xám ở các điểm ảnh có thể khác nhau.

Ảnh nhị phân: ảnh chỉ có 2 mức đen trắng phân biệt tức dùng 1 bit mô tả 21 mức khác nhau. Nói cách khác: mỗi điểm ảnh của ảnh nhị phân chỉ có thể là 0 hoặc 1.

Ảnh màu: trong khuôn khổ lý thuyết ba màu (Red, Blue, Green) để tạo nên thế giới màu, người ta thường dùng 3 byte để mô tả mức màu, khi đó các giá trị màu: 28*3=224≈ 16,7 triệu màu.

3.4. Nén ảnh

Ảnh dù ở dạng nào vẫn chiếm không gian nhớ rất lớn. Khi mô tả ảnh người ta đã đưa kỹ thuật nén ảnh vào. Các giai đoạn nén ảnh có thể chia ra thế hệ 1, thế hệ 2. Hiện nay, các chuẩn MPEG được dùng với ảnh đang phát huy hiệu quả.

3.5. Biến đổi ảnh (Image Transform)

Trong xử lý ảnh do số điểm ảnh lớn các tính toán nhiều (độ phức tạp tính toán cao) đòi hỏi dung lượng bộ nhớ lớn, thời gian tính toán lâu. Các phương pháp khoa học kinh điển áp dụng cho xử lý ảnh hầu hết khó khả thi. Người ta sử dụng các phép toán tương đương hoặc biến đổi sang miền xử lý khác để dễ tính toán. Sau khi xử lý dễ dàng hơn được thực hiện, dùng biến đổi ngược để đưa về miền xác định ban đầu, các biến đổi thường gặp trong xử lý ảnh gồm:

- Biến đổi Fourier, Cosin, Sin

- Biến đổi (mô tả) ảnh bằng tích chập, tích Kronecker

- Các biến đổi khác như KL (Karhumen Loeve), Hadamard.

4. Các cách phân loại ảnh

Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0 như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 bit. Ảnh xám: Giá trị xám nằm trong [0, 255] như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 byte.Ảnh màu:– Hệ màu RGB:Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị xám và được biểu biểu diễn bằng 1 byte. Khi đó ta có một ảnh 24 bits.P(x, y) = (R, G, B)– Hệ màu CMY: là phần bù của hệ màu RGB(C, M, Y) = (1, 1, 1) – (R, G, B)Hay C+R=M+G=Y+B==> Hệ màu này thường được dùng trong máy in.– Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min(C, M, Y)P(x, y) = (C-K, M-K, V-K, K).Ví dụ:Với (C1, M1, Y1) ta sẽ có K=min(C1, M1, Y1)vậy CMYK=(C1-K, M1-K, Y1-K, K)

CHƯƠNG III. LÀM QUEN VỚI NGÔN NGỮ PYTHON1. Giới Thiệu về ngôn ngữ Python.

Python là một ngôn ngữ lập trình thông dịch(interpreted), hướng đối tượng (object-oriented), và là một ngôn ngữ bậc cao (high-level)  ngữ nghĩa động (dynamic semantics). Python hỗ trợ các module và gói (packages), khuyến khích chương trình module hóa và tái sử dụng mã. Trình thông dịch Python và thư viện chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối tự do.

Đặc điểm của ngôn ngữ Python:

· Ngữ pháp đơn giản, dễ đọc.

· Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (object-oriented)

· Hỗ trợ module và hỗ trợ gói (package)

· Xử lý lỗi bằng ngoại lệ (Exception)

· Kiểu dữ liệu động ở mức cao.

· Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập trình.

· Có khả năng tương tác với các module khác viết trên C/C++ (Hoặc Java cho Jython, hoặc .Net cho IronPython).

· Có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scripting interface).

2. Ứng dụng của ngôn ngữ Python.

· Lập trình ứng dụng web: Bạn có thể tạo web app có khả năng mở rộng (scalable) được bằng cách sử dụng framework và CMS (Hệ thống quản trị nội dung) được tích hợp trong Python. Vài nền tảng phổ biến để tạo web app là: Django, Flask, Pyramid, Plone, Django CMS. Các trang như Mozilla, Reddit, Instagram và PBS đều được viết bằng Python.

· Khoa học và tính toán: Có nhiều thư viện trong Python cho khoa học và tính toán số liệu, như SciPy và NumPy, được sử dụng cho những mục đích chung chung trong tính toán. Và, có những thư viện cụ thể như: EarthPy cho khoa học trái đất, AstroPy cho Thiên văn học,... Ngoài ra, Python còn được sử dụng nhiều trong machine learning, khai thác dữ liệu và deep learning.

· Tạo nguyên mẫu phần mềm: Python chậm hơn khi so sánh với các ngôn ngữ được biên dịch như C++ và Java. Nó có thể không phải là lựa chọn tốt nếu nguồn lực bị giới hạn và yêu cầu về hiệu quả là bắt buộc. Tuy nhiên, Python là ngôn ngữ tuyệt vời để tạo những nguyên mẫu (bản chạy thử - prototype). Ví dụ, bạn có thể sử dụng Pygame (thư viện viết game) để tạo nguyên mẫu game trước. Nếu thích nguyên mẫu đó có thể dùng C++ để viết game thực sự.

· Ngôn ngữ tốt để dạy lập trình: Python được nhiều công ty, trường học sử dụng để dạy lập trình cho trẻ em và những người mới lần đầu học lập trình. Bên cạnh những tính năng và khả năng tuyệt vời thì cú pháp đơn giản và dễ sử dụng của nó là lý do chính cho việc này.

3. Cài đặt và sử dụng Python3.1. Cài đặt

Download Python tại: https://www.python.org/downloads/

Sau khi download thì sẽ có 1 file:

Hình 4: Hướng dẫn download python

Chạy file bạn download được để bắt đầu cài đặt. Chọn "Customize Installation" để bạn có thể tùy chọn ví trí Python sẽ được cài đặt ra.

Hình 5:Hướng dẫn download python

Hình 6:Hướng dẫn download python

Tiếp tục chọn vị trí python sẽ được cài đặt.

Hình 7:Hướng dẫn download python

3.2. Cách sử dụng

· Trên "Start Menu" của Windows bạn chạy IDLE (Python 3.6 64bit):

Hình 8: Cách sử dụng python

· Chương trình "Python Shell" đã được chạy, nó là một chương trình giúp bạn viết mã Python. Dưới đây là hình ảnh của nó:

Hình 9: Cách sử dụng python

· Nhập vào một đoạn code:  print("Hello Python") và nhấn Enter.

Hình 10: Cách sử dụng python

Hình 11: Cách sử dụng python

Python Shell là gì?

Sau khi bạn cài đặt xong Python, nó có thêm một công cụ Python Shell, đây là một IDE (Integrated Development Environment) giúp bạn viết mã Python. Nếu bạn không muốn sử dụng Python Shell bạn có thể sử dụng một IDE khác. Và chắc chắn là bạn sẽ sử dụng một IDE khác tốt hơn, vì Python Shell không phù hợp để bạn phát triển một ứng dụng lớn.

Một số IDE giúp bạn lập trình Python:

· PyCharm

· Eclipse (Cài đặt PyDev plugin cho Eclipse)

CHƯƠNG IV. LÀM QUEN VỚI THƯ VIỆN TESSERACT OCR

1. Khái niệm về OCR.

OCR là thuật ngữ được viết tắt bởi cụm từ Optical Character Recognition (dịch là: nhận dạng ký tự quang học). Đây là ứng dụng công nghệ chuyên dùng để đọc text ở file ảnh. Được biết đến là một công cụ scan kỹ thuật số chuyên nhận dạng các ký tự, chữ viết tay, hay chữ đánh máy, công nghệ này chuyên dùng để truyền tải, nhập liệu dữ liệu. Đặc biệt, ở OCR có khả năng kỹ thuật số nhiều dưới nhiều dạng tài liệu khác nhau: hóa đơn, hộ chiếu, danh thiếp, tài liệu…

Đến với OCR, những văn bản số hóa, tìm kiếm và chỉnh sửa sẽ được thực hiện điện tử. Đồng thời, chúng giúp tiết kiệm không gian lưu trữ tài liệu bằng việc hiển thị trên trực tiếp. 

Tính năng OCR có rất nhiều ứng dụng trong thực tế như: Ứng dụng OCR để nhận diện biển số trong trông giữ xe máy, ôtô. Hay tự động nhận diện tên trên Card Visit…

2. Cách thức hoạt động của OCR.

Với OCR khi 1 trang in hay viết tay được quét sẽ được lưu dưới định dạng tệp dưới dạng TIF. Bạn có thể dễ dàng đọc hình ảnh này dưới màn hình hiển thị. Tuy nhiên, tùy thuộc vào máy tính, nó sẽ tồn tại một loạt hình ảnh có chấm trắng hoặc chấm đen. Lúc này, công nghệ nhìn vào từng dòng của hình ảnh để xác định các dấu có khớp nhau hay không.

3. Thư viện TESSERACT OCR là gì ?

· Tesseract là một OCR (Optical Character Recognition) engine hàng đầu hiện nay. Công cụ này được phân phối với bản quyền mã nguồn mở Apache 2.0. Nó hỗ trợ nhận diện kí tự trên các tập tin hình ảnh và xuất ra dưới dạng kí tự thuần, html, pdf, tsv, invisible-text-only pdf. Người dùng có thể sử dụng trực tiếp hoặc lập trình viên có thể sử dụng các chức năng thông qua API.

· Tesseract được phát triển bởi Hewlett-Packard Laboratories Bristol tại Hewleett-Packard Co, Greeley Colorado từ 1985 đến 1994. Sau đó, nó được cập nhật một số thay đổi nhỏ và tạm ngưng phát triển từ sau 1998. Đến năm 2005, Tesseract được phân bố dưới dạng mã nguồn mở bởi HP và được phát triển bởi Google từ năm 2006.

· Hiện tại, Tesseract đã phát triển đến version 3.0x và có thể hoạt động trên 3 hệ điều hành phổ biến là Window, Mac và Linux. Công cụ này hỗ trợ nhận diện kí tự của hơn 100 ngôn ngữ khác nhau, bao gồm cả tiếng Việt. Không những thế, chúng ta có thể huấn luyện chương trình dùng Tesseract để có thể nhận diện một ngôn ngữ nào đó. 

· Đối với các lập trình viên, họ có thể sử dụng các API của Tesseract để xây dựng ứng dụng của mình. Thư viện đó gọi là labtesseract và được cung cấp cho ngôn ngữ C/C++. Trong trường hợp bạn sử dụng ngôn ngữ khác thì cần phải sử dụng các gói hỗ trợ tương ứng:

· .NET: charlesw/tesseract, http://code.google.com/p/tesseractdotnet/

· Python: tesserocr, pyocr, …

· Java: tess4j

4. Cách cài đặt và sử dụng thư viện TESSERACT OCR.

Download file cài đặt tại https://github.com/UB-Mannheim/tesseract/wiki .

Hình 12: Hướng dẫn cài đặt tesseact

Sau khi cài đặt xong, các bạn có thể kiểm tra công cuộc cài đặt xem đã thành công chưa bằng cách gõ lệnh: tesseract -v

Nếu như màn hình hiện ra thông tin phiên bản như ảnh dưới thì là bạn đã cài thành công.

Hình 13: Hướng dẫn cài đặt tesseact

Còn nếu như báo lỗi dạng “command not found” hoặc “is not recognize” thì restart lại máy hoặc đặt PATH cho phù hợp,

CHƯƠNG V. XÂY DỰNG CHƯƠNG TRÌNH

1. Dữ liệu đầu vào

Hình ảnh đầu vào là một công thức số học được cho sẵn.

Dưới đây là một vài ví dụ đơn giản :

Hình 14: Ví dụ đầu vào 1Hình 15: ví dụ đầu vào 2

2. Hướng giải quyết bài toán

Đầu tiên chúng ta lấy toán tử :

Hình 16: Hướng dẫn lấy toán tử

Tiếp đó tách toán tử

Hình 17: Hướng dẫn tách toán tử

Tách các số sử dụng toán tử nhân và chia :

Hình 18: Hướng dẫn tách các số sử dụng toán tử *,/

Tách các số sử dụng toán tử cộng và trừ :

Hình 19: Hướng dẫn tác toán tử +,-

Sau khi tách thì thực hiện phép nhân và chia :

Hình 20: Thực hiện *, /

Nếu bài toán chỉ thực hiện một phép tính nhân hoặc chia thì hiển thị luôn kết quả :

Hình 21: Hiển thị kết quả

Nếu thực hiện nhiều phép tính thì ta gán kết quả nhân và chia vào mảng các số sử dụng toán tử cộng và trừ :

Hình 22: Hướng dẫn gán *, / vào mảng toán tử +, -

Tiếp tục thực hiện phép cộng và trừ :

Hình 23: Tiếp tục thực hiện +, -

3. Kết quả

Đây là bài toán ví dụ để thực hiện tính toán :

Hình 24: Bài toán ví dụ

Và ta có kết quả là :

Hình 25: Hiển thị kết quả

Phần mềm sẽ hiển thị dạng văn bản và đưa ra kết quả chính xác.

Sau khi đưa ra kết quả thì phần mềm sẽ lưu bài toán vào Excel :

Hình 26: Lưu kết quả vào Excel

Đây là file excel :

Hình 27: Dạng toán và kết quả trong file Excel

CHƯƠNG VI. ƯU- NHƯỢC ĐIỂM VÀ HƯỚNG PHÁT TRIỂN1. Ưu điển

· Ứng dụng đơn giản, dễ sử dụng : với những người chưa hoặc ít sử dụng vẫn có thể dễ dàng nắm bắt.

· Xử lý ký tự nhanh và kết quả có tính chính xác cao.

· Giảm bớt khá nhiều thời gian tính toán.

2. Nhược điểm

· Hệ thống chưa ổn định, các chức năng còn hạn chết

· Độ chính xác khi nhận dạng chưa cao, có thể lỗi trong quá trình xử lý

· Khả năng tính toán nhanh nhưng chỉ giới hạn ở những phép toán đơn giản.

3. Hướng phát triển

Đây là một đề tài tương đối phức tạp, mặc dù chúng em đã cố gắng xây dựng một hệ thống có khả năng giải toán sau khi xử lý hình ảnh. Nhưng với những hạn chế về mặt trình độ cũng như thời gian thực hiện, chúng em kết thúc đề tài với nghiên cứu về một mảng nhỏ trong lĩnh vực khoa học máy tính, và kết quả dừng lại với việc nhận dạng ký tự trong hình ảnh và giải những bài toán số học ở mức đơn giản. Dưới đây là một số ý tưởng để tiếp tục phát triển hệ thống :

· Tích cực hoàn thiện hệ thống, thêm vào một số chức năng như nhận dạng được ký tự viết tay,…

· Hoàn thiện độ chính xác khi nhận dạng hình ảnh.

· Đưa vào những dạng toán ở mức độ cao hơn

KẾT LUẬN

Nhờ vào sự phát triển mạnh mẽ của Machine Learning - một lĩnh vực lớn của Khoa Học Máy Tính, nó có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể, xử lý ảnh đã và đang được ứng dụng vào nhiều lĩnh vực trong cuộc sống: y tế (X Ray Imaging, PET scan,...), thị giác máy tính (giúp máy tính có thể hiểu, nhận biết đồ vật như con người), các cộng nghệ nhận dạng (vân tay, khuôn mặt,..) ,….

Trong đó, toán học cũng là một lĩnh vực được nhiều người quan tâm. Vì vậy qua quá trình tìm hiểu thì chúng em đã chọn và xây dựng ứng dụng xử lý hình ảnh vào giải toán số học . Mục đích làm tăng khả năng xử lý các bài toán.

Với kiến thức nền tảng cộng thêm sự giảng dạy nhiệt tình của thầy Nguyễn Thanh Bình thì chúng em đã hoàn thành và phần nào hiểu rõ hơn về quy trình và cách xử lý ký tự trong hình ảnh. Chúng em đã hiểu rõ hơn về ngôn Python và biết thêm một số thư viện như Tesseract…

Mặc dù ứng dụng đã hoàn thành nhưng vẫn còn nhiều thiếu sót và hạn chế như nhận dạng có thể chưa chính xác, giao diện sơ sài và chưa thực sự hoàn thiện... Nhưng một lần nữa mong muốn nhận được sự đóng góp của thầy để trong thời gian tới cố gắng khắc phục những mặt chưa tốt và bổ sung thêm những chức năng mới cho hệ thống.