Báo cáo đồ án 1 của sinh viên Viện Điện tử viễn thông, trường Đại học Bách Khoa Hà Nội, đề tài Nhận dạng ký tự toán học từ file pdf dùng thư viện OpenCV. Phương pháp nhận dạng được áp dụng trong đề tài này là phương pháp véc tơ tựa (SVM - Support Vector Machines) được đánh giá là phương pháp học máy tiên tiến đang được áp dụng rộng rãi trong các lĩnh khai phá dữ liệu và thị giác máy tính.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - TRUYỀN THÔNG
BÁO CÁO ĐỒ ÁN 1
ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH TRONG NHẬN DẠNG KÝ
TỰ TOÁN HỌC BẰNG PHƯƠNG PHÁP SVM
Giảng viên hướng dẫn:
Sinh Viên Thực Hiện:
Hà Nội, 1/2017
Trang 2Mục lục
Mục lục 2
Lời nói đầu 4
1 XỬ LÝ ẢNH DÙNG THƯ VIỆN OPEN CV 5
1.1 Giới thiệu về thư viện Opencv 5
1.2 Các phép xử lý cơ bản trong OpenCV 5
1.2.1 Chuyển đổi giữa các không gian màu 5
1.2.2 Nhị phân hóa ngưỡng động 5
1.2.3 Phép dãn nở 6
2 TÁCH VÙNG CÔNG THỨC TỪ ẢNH 7
2.1 Ý tưởng 7
2.2 Triển khai và mô tả code 7
2.3 Kết quả thu được 9
2.4 Nhận xét 10
3 TÁCH KÝ TỰ TỪ VÙNG CÔNG THỨC 11
3.1 Tìm đường biên các ký tự 11
3.2 Đánh nhãn các ký tự 11
4 PHƯƠNG PHÁP NHẬN DẠNG SVM 13
4.1 Tổng quan về các phương pháp nhận dạng ký tự 13
4.1.1 Phương pháp tiếp cận cấu trúc 13
4.1.2 Phương pháp ngữ pháp (Grammatical Methods) 13
4.1.3 Phương pháp đồ thị (Graphical Methods) 13
4.1.4 Mô hình Markov ẩn (HMM – Hidden Markov Model) 13
4.1.5 Đối sánh mẫu 13
4.1.6 Mạng Neural (neural networks) 13
4.2 Máy vector hỗ trợ (SVM) 14
4.2.1 Khái niệm 14
4.2.2 Thuật toán SVM 14
4.2.3 Huấn luyện SVM 16
5 NHẬN DẠNG KÝ TỰ TOÁN HỌC BẰNG SVM 17
5.1 Ý tưởng 17
5.2 Tính toán đặc trưng trong ảnh 17
5.3 Tạo cơ sở dữ liệu 20
Trang 35.4 Huấn luyện 20
5.4.1 Kịch bản huấn luyện 20
5.4.2 Thông số huấn luyện 23
6 KẾT QUẢ 24
6.1 Kết quả nhận dạng từng ký tự 24
6.2 Kết quả tái tạo công thức hoàn chỉnh 25
6.3 Nhận xét 26
7 TÀI LIỆU THAM KHẢO 27
Trang 5Lời nói đầu
Xử lý ảnh và thị giác máy tính là lĩnh vực mà ngày nay được phát triển và ứng dụng rất rộng rãi trong nhiều lĩnh vực khác nhau nhờ vào sự phát triển ngày càng mạnh mẽ của các hệ thống máy tính, các thuật toán và công trình nghiên cứu khác nhau của nhiều nhà khoa học trên thế giới
Ở Việt Nam, các ứng dụng về xử lý ảnh đã bước đầu được triển khai trên một
số lĩnh vực như lắp đặt hệ thống nhận dạng biển số xe ở các bãi đỗ xe, hệ thống phục vụ nhận dạng vân tay chấm công ở các công sở, các hệ thống camera giao thông quan sát,…Tuy nhiên nhìn một cách khách quan thì số lượng các ứng dụng được triển khai trên thực tế là quá ít ỏi, lĩnh vực này sẽ còn phát triển mạnh mẽ trong tương lai nếu được quan tâm một cách nghiêm túc
Đề tài đồ án 1 của nhóm chúng em cũng là một phần nhỏ liên quan đến ứng dụng xử lý ảnh, mục tiêu của đề tài nhằm nhận biết được các ký tự toán học từ tài liệu định dạng PDF, từ đó chuyển các ký tự sang định dạng có thể chỉnh sửa
như doc, txt,…
Nhóm chúng em xin gửi lời cảm ơn chân thành đến PGS.TS Hoàng Mạnh Thắng, Giảng viên Viện điện tử truyền thông, Đại học Bách Khoa Hà Nội đã hướngdẫn nhóm em hoàn thành đề tài này Chúng em cũng xin cảm ơn anh Nguyễn Xuân
Sỹ và các thành viên trong SIPLAB đã trợ giúp chúng em trong quá trình làm đồ
án
Sinh viên
Trần Ngọc Tiến
Trang 61 XỬ LÝ ẢNH DÙNG THƯ VIỆN OPEN CV
1.1 Giới thiệu về thư viện Opencv
OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở về thịgiác máy tính với hơn 500 hàm và hơn 2500 các thuật toán đã được tối ưu về xử lý ảnh, và các vấn đề liên quan đến thị giác máy OpenCV được thiết kế một các tối
ưu, sử dụng tối đa sức mạnh của các dòng chip đa lõi…để thực hiện các phép tính toán trong thời gian thực, nghĩa là tốc độ đáp ứng của nó có thể đủ nhanh cho các ứng dụng thông thường OpenCV là thư viện được thiết kế để chạy trên nhiều nền tảng khác nhau, nghĩa là nó có thể chạy trên hệ điều hành Window, Linux, Mac,…
1.2 Các phép xử lý cơ bản trong OpenCV
1.2.1 Chuyển đổi giữa các không gian màu
Trong OpenCV, các không gian màu được được chuyển đổi qua lại nhờ hàm
cvtColor (convert color), nguyên mẫu hàm này như sau:
cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code)
Trong đó, src, dst là ảnh gốc và ảnh thu được sau khi chuyển đổi không gian màu, code là mã chuyển đổi không gian màu OpenCV định nghĩa khá nhiều
chuyển đổi giữa các không gian màu chẳng hạn như code = CV_BGR2GRAY sẽ chuyển ảnh ở không gian màu RGB sang ảnh xám, code = CV_HSV2BGR sẽ chuyển ảnh ở không gian màu HSV sang không gian màu RGB
1.2.2 Nhị phân hóa ngưỡng động
Trong thư viện OpenCV có hàm để chuyển từ ảnh xám sang ảnh nhị phân với
- maxValue là giá trị độ sáng lớn nhất trong ảnh (là 255 với ảnh xám).
- adaptiveMethod là cách tính ngưỡng động cho ảnh:
o ADAPTIVE_THRESH_MEAN_C: ngưỡng được tính bằng trung bình của khu lân cận
Trang 7o ADAPTIVE_THRESH_GAUSSIAN_C: ngưỡng được tính bằng tổng các giá trị lân cận trong cửa sổ Gaussian.
- thresholdType quyết định điểm ảnh sẽ mang màu đen (0) hay màu trắng
(255):
o THRESH_BINARY:
255 ( ( , ) ( , )( , )
0
if src x y T x y dst x y
255
if src x y T x y dst x y
Trong OpenCV, các phép toán hình thái học trong ảnh được cài đặt trong hàm
cv::morphologyEx, riêng phép giãn nở và phép co có thể gọi trực tiếp từ hàm cv::dilate và cv::erode:
morphologyEx(const Mat& src, Mat& dst, int op, const Mat&
element, Point anchor, int iterations, int borderType, const Scalar& borderValue)
Trong đó, src, dst là ảnh đầu vào và ảnh sau phép xử lý hình thái học, op là
kiểu lựa chọn phép hình thái học, chẳng hạn như phép giản nở là
MORPH_DILATE, phép đóng là MORPH_OPEN … element là cấu trúc phần tử
ảnh, có ba cấu trúc cơ bản là theo khối hình vuông, hình chữ thập và hình elip Để tạo ra các cấu trúc này ta có thể tự định nghĩa một ma trận với các hình khối tương
ứng hoặc sử dụng hàm getStructuringElement, hàm này có cấu trúc như sau: getStructuringElement(int shape, Size ksize, Point anchor), với shape là kiểu
hình khối (một trong 3 hình khối trên), ksize là kích thước của hình khối và là khíchthước của hai số nguyên lẻ, anchor là điểm neo và thông thường nhận giá trị là
((ksize.width – 1)/2, (ksize.height – 1)/2) Thông số tiếp theo anchor cũng có ý nghĩa tương tự iterations là số lần lặp lại của phép toán hình thái.
Trang 82 TÁCH VÙNG CÔNG THỨC TỪ ẢNH
2.1 Ý tưởng
- Giãn nở các ký tự có trong ảnh để chúng dính lại với nhau thì khi khoanh vùng thì ta sẽ được vùng văn bản được tách riêng biệt so với vùng công thức do khoảng cách dòng giữa
2 dòng văn bản nhỏ hơn khoảng cách dòng giữa văn bản vàcông thức
- Do các công thức được đánh số nên phần bên phải công thức sẽ có 1 vùng để đánh số cho công thức đó
- Dựa vào đó ta có thể xác định được có những vùng nào có thể là công thức
Các bước thực hiện:
- Bước 1: Tiền xử lý file ảnh đầu vào thành ảnh nhị phân
- Bước 2: Giãn nở các ký tự có trong ảnh
- Bước 3: Sắp xếp và tìm contour theo chiều từ trên xuống dưới
- Bước 4: Tiến hành lưu lại tọa độ các contour
- Bước 5: Xét 2 contour liên tiếp nhau, nếu thỏa mãn các điềukiện để contour (i+1) là vùng đánh số của contour (i) thì lưulại tọa độ của contour (i)
- Bước 6: Tách contour (i) ra từ ảnh gốc và lưu vào vector matrận ảnh để tiến hành tái tạo lại công thức
2.2 Triển khai và mô tả code
Trang 9cv::ADAPTIVE_THRESH_GAUSSIAN_C, //
cv::THRESH_BINARY_INV, //
11, //
2); //
- Bước 2: Giãn nở các ký tự trong ảnh
cv::Mat kernel = cv::getStructuringElement(MORPH_RECT, Size(25, 13));
cv::morphologyEx(imgThresh, imgThresh, MORPH_DILATE, kernel);
- Bước 3: Sắp xếp và khoanh contour từ trên xuống dưới
imgThreshCopy = imgThresh.clone(); // Tao ban copy cua imgThresh
- Bước 4: Lưu tọa độ các contour
for (int i = 0; i < ptContours.size(); i++){
cv::Rect boundingRect = cv::boundingRect(ptContours[i]);// xay dung duong bien hinh chu nhat bao quanh moi contour
a[i].x = boundingRect.x; //Luu lai toa do cua cac dinh cua hinh chu nhat
a[i].y = boundingRect.y; //bao quanh moi contour
a[i].w = boundingRect.width; //
a[i].h = boundingRect.height; //
}
- Bước 5: Xét 2 contour liên tiếp nhau, nếu thỏa mãn điều kiện contour (i+1)
là chỉ số của contour (i) (bằng cách dùng tọa độ của mỗi contour) thì giữ lại tọa độ của contour (i)
float consider[10][4];
int j = 0;
Trang 10for (size_t i = 0; i < ptContours.size(); ++i)
- Bước 6: Lưu lại ma trận ảnh chứa công thức để tiến hành tái tạo
Trang 11Hình 1: Ảnh cần tách công thức
- Ảnh sau khi đã giãn nở các ký tự
Hình 2: Ảnh sau khi giãn nở
- Ảnh thu được sau khi khoanh vùng công thức: Thu được 2 vùng công thức như hình dưới
Hình 3: Ảnh thu được
- Kết quả thu được với một ảnh đầu vào khác:
Trang 12Hình 4: Kết quả thu được với một ảnh đầu vào khác
2.4 Nhận xét
- Ý tưởng nhận biết vùng công thức dựa vào vùng đánh số của công thức nên những công thức nào không được đánh số sẽ không khoanh vùng được
- Chỉ đúng với trường hợp công thức ngắn, viết trên 1 dòng
3 TÁCH KÝ TỰ TỪ VÙNG CÔNG THỨC
3.1 Tìm đường biên các ký tự
Khái niệm biên: Biên là một đặc tính rất quan trọng của đối tượng trong ảnh, nhờ vào biên mà ta phân biệt được đối tượng này với đối tượng kia Một điểm ảnh được coi là điểm biên nếu ở đó có sự thay đổi đột ngột về mức xám Tập hợp các điểm này được gọi là đường biên hay đường bao ảnh
Dùng đường biên ta có thể tách được từng ký tự ra trong ảnh bằng cách tạo một hình chữ nhật bao quanh contour đó Sau đó ta có thể tách ký tự trong hình chữ nhật đó ra để xử lý
Rect boundingRect(InputArray points)
Trong đó boundingRect là hàm được viết sẵn trong OpenCV để tạo một hình chữ nhật bao quanh contour được trỏ bởi points
Kết quả thu được:
Trang 13Hình 5: Ký tự được tách ra từ ảnh đầu vào
3.2 Đánh nhãn các ký tự
Chia công thức thành các dòng, từ các dòng đó tìm được dòng chính của công thức, dựa vào liên hệ của dòng chính với các dòng còn lại (dòng nằm trên hoặc dưới) ta có thể tìm được mối liên hệ giữa các ký tự trong ảnh
Cách làm:
- Các contour được sắp xếp từ trái qua phải theo tọa độ x
- Xét ảnh từ trên xuống dưới theo tọa độ y tăng dần
- Nếu gặp 1 contour thì lưu lại tọa độ của contour đó đồng thời tìm trong cáccontour còn lại xem có thuộc cùng hàng với contour ban đầu hay không nếu thuộc hàng thì đánh dấu contour đó là đã xét
- Xét các contour còn lại chưa được đánh dấu thì làm tương tự cho đến khi không còn contour nào nữa
- Tìm trong các dòng đó dòng nào chứa contour có thứ tự là 0 từ trái sang phải thì dòng đó được chọn làm dòng chính
Kết quả chương trình:
Trang 14- Dòng 4 có 2 ký tự i với số thứ tự là 16 và 20 thuộc hàng chỉ số dưới.
- Dòng 5 có 3 ký tự là “i = 1” là chỉ số chạy của ký tự tổng
Tọa độ của các contour được lưu trong một mảng riêng, từ tọa độ này hoàn toàn có thể tách được các ký tự ra từ ảnh
4 PHƯƠNG PHÁP NHẬN DẠNG SVM
4.1 Tổng quan về các phương pháp nhận dạng ký tự
4.1.1 Phương pháp tiếp cận cấu trúc
Cách tiếp cận của phương pháp này dựa vào việc mô tả đối tượng nhờ một số khái niệm biểu diễn đối tượng cơ sở trong ngôn ngữ tự nhiên Để mô tả đối tượng
Trang 15người ta dùng một số dạng nguyên thuỷ như đoạn thẳng, cung,… Mỗi đối tượng được mô tả như một sự kết hợp của các dạng nguyên thuỷ.
4.1.2 Phương pháp ngữ pháp (Grammatical Methods)
Các phương pháp ngữ pháp khởi tạo một số luật sinh để hình thành các ký tự
từ một tập các công thức ngữ pháp nguyên thủy Các luật sinh này có thể kết nối bất
kỳ kiểu đặc trưng thống kê và đặc trưng hình thái nào dưới một số cú pháp hoặc cácluật ngữ nghĩa Giống như lý thuyết ngôn ngữ, các luật sinh cho phép mô tả các cấu trúc câu có thể chấp nhận được và trích chọn thông tin theo ngữ cảnh về chữ viết bằng cách sử dụng các kiểu ngữ pháp khác nhau
4.1.3 Phương pháp đồ thị (Graphical Methods)
Các đơn vị chữ viết được mô tả bởi các cây hoặc các đồ thị Các dạng nguyên thủy của ký tự (các nét) được lựa chọn bởi một hướng tiếp cận cấu trúc Đối với mỗilớp, một đồ thị hoặc cây được thành lập trong giai đoạn huấn luyện để mô tả các nét, các ký tự hoặc các từ Giai đoạn nhận dạng gán một đồ thị chưa biết vào một trong các lớp bằng cách sử dụng một độ đo để so sánh các đặc điểm giống nhau giữa các đồ thị
4.1.4 Mô hình Markov ẩn (HMM – Hidden Markov
Model)
Mô hình Markov ẩn (HMM) là một trong những mô hình máy học quan trọng nhất trong xử lý ngôn ngữ tự nhiên và nhận dạng Mô hình này là trường hợp mở rộng của máy hữu hạn trạng thái có hướng, có trọng số HMM thường được sử dụng
để xử lý những sự kiện không quan sát trực tiếp được (sự kiện ẩn) Do vậy, HMM được ứng dụng để giải quyết những bài toán có độ nhiễu lớn, chẳng hạn, dự báo, nhận dạng tiếng nói,…
4.1.5 Đối sánh mẫu
Kỹ thuật nhận dạng chữ đơn giản nhất dựa trên cơ sở đối sánh các nguyên mẫu(prototype) với nhau để nhận dạng ký tự hoặc từ Nói chung, toán tử đối sánh xác định mức độ giống nhau giữa hai véc tơ (nhóm các điểm, hình dạng, độ cong ) trong một không gian đặc trưng Các kỹ thuật đối sánh có thể nghiên cứu theo ba hướng sau:
- Đối sánh trực tiếp.
- Các mẫu biến dạng và đối sánh mềm.
- Đối sánh giảm nhẹ.
4.1.6 Mạng Neural (neural networks)
Mạng neural nhân tạo, Artificial Neural Network (ANN) gọi tắt là mạng neural,
neural network, là một mô hình xử lý thông tin phỏng theo cách thức xử lý thông tincủa các hệ neural sinh học Nó được tạo lên từ một số lượng lớn các phần tử (gọi là phần tử xử lý hay neural) kết nối với nhau thông qua các liên kết (gọi là trọng số liên kết) làm việc như một thể thống nhất để giải quyết một vấn đề cụ thể nào đó
Trang 16Một mạng neural nhân tạo được cấu hình cho một ứng dụng cụ thể (nhận dạngmẫu, phân loại dữ liệu, ) thông qua một quá trình học từ tập các mẫu huấn luyện
Về bản chất học chính là quá trình hiệu chỉnh trọng số liên kết giữa các neural
4.2 Máy vector hỗ trợ (SVM)
4.2.1 Khái niệm
Phương pháp máy véc tơ tựa (SVM - Support Vector Machines) được đánh giá
là phương pháp học máy tiên tiến đang được áp dụng rộng rãi trong các lĩnh khai phá dữ liệu và thị giác máy tính…Ý tưởng chính của thuật toán này là cho trước một tập huấn luyện được biểu diễn trong không gian vector trong đó mỗi tài liệu là một điểm, phương pháp này tìm ra một mặt phẳng h quyết định tốt nhất có thể chia các điểm trên không gian này thành hai lớp riêng biệt tương ứng lớp + và lớp - Chất lượng của siêu mặt phẳng này được quyết định bởi khoảng cách (gọi là biên) của điểm dữ liệu gần nhất của mỗi lớp đến mặt phẳng này Khoảng cách biên càng lớn thì mặt phẳng quyết định càng tốt đồng thời việc phân loại càng chính xác Mục đích thuật toán SVM tìm ra được khoảng cách biên lớn nhất để tạo kết quả phân lớptốt
Hình 7: Siêu phẳng h phân chia dữ liệu huấn luyện thành 2 lớp + và –
Trang 17Thực chất phương pháp này là một bài toán tối ưu, mục tiêu làtìm ra một không gian H và siêu mặt phẳng quyết định h trên H sao cho sai số phân lớp là thấp nhất.
Trong trường hợp này, tập phân lớp SVM là mặt siêu phẳng phân tách các mẫu dương khỏi các mẫu âm với độ chênh lệch cực
đại, trong đó độ chênh lệch – còn gọi là Lề (margin) xác định bằng
khoảng cách giữa các mẫu dương và các mẫu âm gần mặt siêu phẳng nhất Mặt siêu phẳng này được gọi là mặt siêu phẳng lề tối ưu
Hình 8: Thuật toán SVM với phân lớp 2 lớp
Các mặt siêu phẳng trong không gian đối tượng có phương trình là:
C + w1 x1 + w2 x2 + … + wn xn = 021Equation Section 1 313\* MERGEFORMAT (.)
Tương đương với công thức:
1
i n
i i i
414\*MERGEFORMAT (.)
Với w = w1 + w2 + …+ wn là bộ hệ số siêu phẳng hay là vectortrọng số, C là độ dịch, khi thay đổi w và C thì hướng và khoảng
cách từ gốc toạ độ đến mặt siêu phẳng thay đổi
Tập phân lớp SVM được định nghĩa như sau: