Trong số này, nhận dạng chữ là bài toán được quan tâm rất nhiều và cũngđã đạt được nhiều thành tựu rực rỡ.. Các ứng dụng có ý nghĩa thực tế lớn có thểkể đến như: nhận dạng chữ in dùng tr
GIỚI THIỆU
Giới thiệu đè tài
Mô hình Nhận dạng chữ viết tay là một công nghệ giúp người dùng nhận và giải thích dữ liệu chữ viết tay dễ hiểu từ các nguồn như tài liệu giấy, ảnh, màn hình cảm ứng và các thiết bị khác trên máy tính Nó ứng dụng hai công nghệ số tiêu biểu là trí tuệ nhân tạo (Artifical Intelligent) và học máy (Machine Learning)
Nhận dạng chữ viết tay được coi là một phiên bản nâng cấp hơn của công nghệ nhận dạng chữ quang học OCR Một công nghệ vốn được biết đến nhờ khả năng nhận dạng chữ in từ hình ảnh.
Ngày nay, công nghệ nhận dạng chữ viết tay ngày càng được ứng dụng phổ biến hơn Nó góp phần không nhỏ vào các công tác số hóa tài liệu, sổ đỏ, hộ khẩu,…
Lý do chọn đề tài
Nhận dạng chữ in: đã được giải quyết gần như trọn vẹn (sản phẩm
FineReader 9.0 của hãng ABBYY có thể nhận dạng chữ in theo 192 ngôn ngữ khác nhau, phần mềm nhận dạng chữ Việt in VnDOCR 4.0 của Viện Công nghệ Thông tin Hà Nội có thể nhận dạng được các tài liệu chứa hình ảnh, bảng và văn bản với độ chính xác trên 98%).
Nhận dạng chữ viết tay: vẫn còn là vấn đề thách thức lớn đối với các nhà nghiên cứu Bài toàn này chưa thể giải quyết trọn vẹn được vì nó hoàn toàn phụ thuộc vào người viết và sự biến đổi quá đa dạng trong cách viết và trạng thái sức khỏe, tinh thần của từng người viết.
Mục tiêu đề tài
Mục tiêu chính của đề tài này là sử dụng kỹ thuật Deep learning - KNN để xây dựng chương trình nhận dạng chữ số viết tay.
Công nghệ áp dụng
– Nhận dạng số viết tay
– Nhận dạng chữ cái viết tay: Nhận dạng một chữ cái viết tay riêng rẽ
– Nhận dạng chữ viết tay rời rạc: Nhận dạng văn bản viết tay rời (các chữ cái được viết cách nhau, không viết liền)
– Nhận dạng một từ viết tay viết viết liền: Nhận dạng một chữ viết tay viết liền (các chữ cái được viết liền nhau)
– Nhận dạng chữ viết tay viết liền: Nhận dạng chữ viết tay viết liền (nhiều chữ viết tay, các chữ cái được viết liền nhau)
– Phân hoạch chữ viết tay: Phân hoạch chữ viết tay, cho ra các vùng của các từ viết tay và giá trị nhận dạng của các từ viết tay đó
CƠ SỞ LÝ THUYẾT
Khái niệm
1.1 Tổng quan về mô hình nhận dạng chữ viết tay
Nhận dạng chữ là lĩnh vực được nhiều nhà nghiên cứu quan tâm và cho đến nay lĩnh vực này cũng đã đạt được nhiều thành tựu lớn lao cả về mặt lý thuyết lẫn ứng dụng thực tế Lĩnh vực nhận dạng chữ được chia làm hai loại: Nhận dạng chữ in và nhận dạng chữ viết tay Đến thời điểm này, nhận dạng chữ in đã được giải quyết gần như trọn vẹn Tuy nhiên, nhận dạng chữ viết tay vẫn đang là vấn đề thách thức lớn đối với các nhà nghiên cứu Nhận dạng chữ viết tay được phân ra làm hai loại: nhận dạng chữ viết tay on-line
(trực tuyến) và nhận dạng chữ viết tay off-line (ngoại tuyến)
Nhận dạng chữ viết tay on-line được thực hiện trên cơ sở lưu lại các thông tin về nét chữ như thứ tự nét viết, hướng và tốc độ của nét viết trong quá trình nó đang viết Đây chính là cơ sở để máy tính nhận diện được các chữ cái, do đó việc nhận dạng không gặp quá nhiều khó khăn Một trong những sản phẩm nhận dạng chữ viết tay trực tuyến tiêu biểu nhất là hệ thống nhận dạng chữ viết tay rời rạc trực tuyến trên một trạm làm việc của IBM do H.S.M.Beigi, C.C.Tapert, M.Ukeison và C.G.Wolf ở phòng thực hành Watson IBM cài đặt [6] Ngược lại, đối với nhận dạng chữ viết tay off-line, dữ liệu đầu vào là ảnh văn bản được quét vào nên việc nhận dạng có độ khó cao hơn nhiều so với nhận dạng chữ viết tay on-line Do dữ liệu đầu vào là ảnh văn bản nên nhận dạng chữ viết tay off-line và nhận dạng chữ in còn được gọi chung là nhận dạng chữ quang học (OCR - Optical Character Recognition)
Khó khăn lớn nhất khi nghiên cứu bài toán nhận dạng chữ viết tay là sự biến thiên quá đa dạng trong cách viết của từng người Cùng một người viết nhưng đôi khi cũng có nhiều sự khác biệt trong cách viết tuỳ thuộc vào từng ngữ cảnh, kiểu viết của một người cũng có thể thay đổi theo thời gian hoặc theo thói quen Điều này gây ra nhiều trở ngại trong việc trích chọn đặc trưng cũng như lựa chọn mô hình nhận dạng.
1.2 Ứng dụng thuật toán KNN
Phân loại là một vấn đề quan trọng trong khoa học dữ liệu và học máy KNN là một trong những thuật toán lâu đời nhất nhưng chính xác được sử dụng để phân loại mẫu và mô hình hồi quy.
Dưới đây là một số lĩnh vực mà thuật toán k-hàng xóm gần nhất có thể được sử dụng:
Thuật toán KNN giúp xác định xếp hạng tín dụng của một cá nhân bằng cách so sánh họ với những người có đặc điểm tương tự.
Tập dữ liệu có thể có nhiều giá trị bị thiếu Thuật toán KNN được sử dụng cho một quá trình được gọi là truyền dữ liệu bị thiếu để ước tính các giá trị bị thiếu.
Khả năng của thuật toán KNN để xác định các mẫu tạo ra một loạt các ứng dụng Ví dụ, nó giúp phát hiện các mô hình sử dụng thẻ tín dụng và phát hiện các mô hình bất thường Phát hiện mẫu cũng hữu ích trong việc xác định các mẫu trong hành vi mua hàng của khách hàng.
Thuật toán KNN được sử dụng để phân loại hình ảnh Vì nó có khả năng nhóm các điểm dữ liệu tương tự nhau, chẳng hạn như nhóm các con mèo lại với nhau và các con chó trong một lớp khác nhau, nó rất hữu ích trong một số ứng dụng thị giác máy tính
XÂY DỰNG MÔ HÌNH GIẢI THUẬT
Mô hình tổng quát về nhận dang chữ viết tay
Giai đoạn này góp phần làm tăng độ chính xác phân lớp của hệ thống nhận dạng, tuy nhiên nó cũng làm cho tốc độ nhận dạng của hệ thống chậm lại Vì vậy, tùy thuộc vào chất lượng ảnh quét vào của từng văn bản cụ thể để chọn một hoặc một vài chức năng trong khối này Nếu cần ưu tiên tốc độ xử lý và chất lượng của máy quét tốt thì có thể bỏ qua giai đoạn này Khối tiền xử lý bao gồm một số chức năng: Nhị phân hóa ảnh, lọc nhiễu, chuẩn hóa kích thước ảnh, làm trơn biên chữ, làm đầy chữ, làm mảnh chữ và xoay văn bản.
Hình 1 Sơ đồ tổng quá của một hệ thống nhận dạng chữ viết
Nhị phân hóa ảnh là một kỹ thuật chuyển ảnh đa cấp xám sang ảnh nhị phân Trong bất kỳ bài toán phân tích hoặc nâng cao chất lượng ảnh nào, nó cũng cần thiết để xác định các đối tượng quan trọng Nhị phân hóa ảnh phân chia ảnh thành 2 phần: phần nền và phần chữ Hầu hết các phương pháp nhị phân hóa ảnh hiện nay đều lựa chọn một ngưỡng thích hợp theo cường độ sáng của ảnh và sau đó chuyển tất cả các giá trị độ sáng lớn hơn ngưỡng đó thành một giá trị độ sáng (ví dụ “trắng”) và tất cả các giá trị bé hơn ngưỡng thành một giá trị độ sáng khác (“đen”).
Hình 2:Nhị phân hóa ảnh
Nhiễu là một tập các điểm sáng thừa trên ảnh Khử nhiễu là một vấn đề thường gặp trong nhận dạng, nhiễu có nhiều loại (nhiễu đốm, nhiễu vệt, nhiễu đứt nét ).
Hình 3.Nhiễu đốm và nhiễu vệt. Để khử các nhiễu đốm (các nhiễu với kích thước nhỏ), có thể sử dụng các phương pháp lọc (lọc trung bình, lọc trung vị ) Tuy nhiên, với các nhiễu vệt (hoặc các nhiễu có kích thước lớn) thì các phương pháp lọc tỏ ra kém hiệu quả, trong trường hợp này sử dụng phương pháp khử các vùng liên thông nhỏ tỏ ra có hiệu quả hơn.
1.4 Chuẩn hóa kích thước ảnh
Hình 4: Chuẩn hóa kích thước ảnh các ký tự “A” và “P”.
Việc chuẩn hóa kích thước ảnh dựa trên việc xác định trọng tâm ảnh, sau đó xác định khoảng cách lớn nhất từ tâm ảnh đến các cạnh trên, dưới, trái, phải của hình chữ nhật bao quanh ảnh Thông qua khoảng cách lớn nhất đó, có thể xác định được một tỷ lệ co, giãn của ảnh gốc so với kích thước đã xác định, từ đó hiệu chỉnh kích thước ảnh theo tỷ lệ co, giãn này Như vậy, thuật toán chuẩn hóa kích thước ảnh luôn luôn đảm bảo được tính cân bằng khi co giãn ảnh, ảnh sẽ không bị biến dạng hoặc bị lệch
1.5 Làm trơn biên chữ Đôi khi do chất lượng quét ảnh quá xấu, các đường biên của chữ không còn giữ được dáng điệu trơn tru ban đầu mà hình thành các đường răng cưa giả tạo Trong các trường hợp này, phải dùng các thuật toán làm trơn biên để khắc phục
Hình 5: (a) Ảnh gốc, (b) Ảnh sau khi được làm trơn biên.
Chức năng này được áp dụng với các ký tự bị đứt nét một cách ngẫu nhiên Ảnh đứt nét gây khó khăn cho việc tách chữ, dễ bị nhầm hai phần liên thông của ký tự thành hai ký tự riêng biệt, tạo nên sai lầm trong quá trình nhận dạng
1.7 Làm mảnh chữ Đây là một bước quan trọng nhằm phát hiện khung xương của ký tự bằng cách loại bỏ dần các điểm biên ngoài của các nét Tuy nhiên, quá trình làm mảnh chữ rất nhạy cảm với việc khử nhiễu Hiện nay có nhiều phương pháp làm mảnh chữ, các thuật toán tìm xương có thể tham khảo ở [28].
1.8 Điều chỉnh độ nghiêng của văn bản
Do trang tài liệu quét vào không cẩn thận hoặc do sự cố in ấn, các hàng chữ bị lệch so với lề chuẩn một góc α, điều này gây khó khăn cho công đoạn tách chữ, đôi khi không thể tách được Trong những trường hợp như vậy, phải tính lại tọa độ điểm ảnh của các chữ bị sai lệch
Có nhiều kỹ thuật để điều chỉnh độ nghiêng, kỹ thuật phổ biến nhất dựa trên cơ sở biểu đồ chiếu (projection profile) của ảnh tài liệu; một số kỹ thuật dựa trên cơ sở các phép biến đổi Hough và Fourier một số kỹ thuật hiệu chỉnh độ nghiêng khác có thể tìm thấy trong
Hình 7: Hiệu chỉnh độ nghiêng của văn bản.
Mô hình K-nearest neighbor
Với KNN, trong bài toán Classification, label của một điểm dữ liệu mới (hay kết quả của câu hỏi trong bài thi) được suy ra trực tiếp từ K điểm dữ liệu gần nhất trong training set Label của một test data có thể được quyết định bằng major voting (bầu chọn theo số phiếu) giữa các điểm gần nhất, hoặc nó có thể được suy ra bằng cách đánh trọng số khác nhau cho mỗi trong các điểm gần nhất đó rồi suy ra label Chi tiết sẽ được nêu trong phần tiếp theo.
Trong bài toán Regresssion, đầu ra của một điểm dữ liệu sẽ bằng chính đầu ra của điểm dữ liệu đã biết gần nhất (trong trường hợp K=1), hoặc là trung bình có trọng số của đầu ra của những điểm gần nhất, hoặc bằng một mối quan hệ dựa trên khoảng cách tới các điểm gần nhất đó.
Một cách ngắn gọn, KNN là thuật toán đi tìm đầu ra của một điểm dữ liệu mới bằng cách chỉ dựa trên thông tin của K điểm dữ liệu trong training set gần nó nhất (K-lân cận), không quan tâm đến việc có một vài điểm dữ liệu trong những điểm gần nhất này là nhiễu Hình dưới đây là một ví dụ về KNN trong classification với K = 1
Hình 8:Mô hình nhận dạng chữ viết tay Chuẩn hóa dữ liệu
Khi có một thuộc tính trong dữ liệu (hay phần tử trong vector) lớn hơn các thuộc tính khác rất nhiều (ví dụ thay vì đo bằng cm thì một kết quả lại tính bằng mm), khoảng cách giữa các điểm sẽ phụ thuộc vào thuộc tính này rất nhiều Để có được kết quả chính xác hơn, một kỹ thuật thường được dùng là Data Normalization (chuẩn hóa dữ liệu) để đưa các thuộc tính có đơn vị đo khác nhau về cùng một khoảng giá trị, thường là từ 0 đến 1, trước khi thực hiện KNN Có nhiều kỹ thuật chuẩn hóa khác nhau, các bạn sẽ được thấy khi tiếp tục theo dõi Blog này Các kỹ thuật chuẩn hóa được áp dụng với không chỉ KNN mà còn với hầu hết các thuật toán khác.
Sử dụng các phép đo khoảng cách khác nhau
Ngoài norm 1 và norm 2 tôi giới thiệu trong bài này, còn rất nhiều các khoảng cách khác nhau có thể được dùng Một ví dụ đơn giản là đếm số lượng thuộc tính khác nhau giữa hai điểm dữ liệu Số này càng nhỏ thì hai điểm càng gần nhau Đây chính là giả chuẩn 0 mà tôi đã giới thiệu trong Tab Math. Ưu điểm của KNN
Độ phức tạp tính toán của quá trình training là bằng 0.
Việc dự đoán kết quả của dữ liệu mới rất đơn giản.
Không cần giả sử gì về phân phối của các class.
KNN rất nhạy cảm với nhiễu khi K nhỏ.
Như đã nói, KNN là một thuật toán mà mọi tính toán đều nằm ở khâu test Trong đó việc tính khoảng cách tới từng điểm dữ liệu trong training set sẽ tốn rất nhiều thời gian, đặc biệt là với các cơ sở dữ liệu có số chiều lớn và có nhiều điểm dữ liệu. Với K càng lớn thì độ phức tạp cũng sẽ tăng lên Ngoài ra, việc lưu toàn bộ dữ liệu trong bộ nhớ cũng ảnh hưởng tới hiệu năng của KNN.
Sau khi đã khử nhiễu, ảnh được chuẩn hóa về kích thước chuẩn 16´16 Việc chuẩn hóa kích thước ảnh được thực hiện theo các bước sau:
Bước 1: Nhị phân hóa ảnh.
Bước 2: Tìm hình chữ nhật R bé nhất chứa các điểm đen trên ảnh.
Bước 3: Lấy vùng ảnh I nằm trong hình chữ nhật R.
Bước 4: Chuẩn hóa ảnh I về kích thước chuẩn 16´16.
Trong phần này, chúng tôi sẽ chọn phương pháp trích chọn đặc trưng đơn giản nhưng hiệu quả, có thể áp dụng cho các tập dữ liệu chữ viết tay Ảnh ký tự sau khi đã chuẩn hóa về kích thước chuẩn sẽ được chia thành N´N vùng (Hình 2.2) Tổng số điểm đen của mỗi vùng sẽ được chọn để tạo thành các vectơ đặc trưng.
Hình 9: Trích chọn đặc trưng trọng số vùng.
Trong thực nghiệm, với ảnh kích thước 16´16, chọn N=8, như vậy có 8´8 = 64 đặc trưng.
2.3 Lựa chọn thuật toán huấn luyện phân lớp
Trong phần cài đặt thực nghiệm, chúng tôi áp dụng thuật toán SMO để huấn luyện phân lớp SVM nhị phân, sử dụng và kế thừa một số chức năng của phần mềm mã nguồn mở LibSVM [86] để phát triển ứng dụng nhận dạng chữ viết tay
2.4 Thuật toán nhận dạng chữ viết tay.
//K : tập hợp có thứ tự theo dis
Find_kNN_Linear ( Input : S(n) , q,k; Output : K(k) )
//K : tập cần insert chứa dis và p, dis : khoảng cách, p : điểm insert – có thể sử dụng thuật thoán QuickSearch để chèn ngay vào vị trí cần chèn.
K[i+1] (dis,p)//insert to position i+1 return;
THỰC NGHIỆM
Đưa hình ảnh test vào và cho ra kết quả nhận dạng chữ
import csv import numpy npas import cv2 from matplotlib import pyplot pltas from numpy.core.fromnumeric import sort
"""ham tach du lieu thanh du lieu nho hon""" def laynphantumau(n):
"""n la so mau lay cho 1 ky tu""" withopen("A_Z.csv") f:as b=sum(1 for line f)in
"""kiem tra lai thay doi du lieu mau VD:lan dau lay 200 moi ky tu lan sau lay 500"""
(bif ==0 bor ==(26*n+1)): return data csv.DictReader(= open("A_Z.csv")) c csv.writer(= open("A_Z.csv",'w',newline='')) i=0 j=0 lable=[] lable.append("label") for tag in range(28 28* ): lable.append('pixel' +str(tag)) c.writerow(lable) for row data:in iif