Nghiên cứu một số thuật toán tiền xử lý ảnh: giới thiệu một số thuật toán tiền xử lý ảnh thường được áp dụng trong hệ thống phân tích và nhận dạng ảnh tài liệu như nhị phân ảnh, căn chỉn
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CƠ KHÍ
BỘ MÔN CƠ ĐIỆN TỬ
-* -XỬ LÝ ẢNH
Nhóm 1
Đề
tài : Trích xuất thông tin từ chứng minh thư
Giáo viên hướng dẫn: TS Mạc Thị Thoa
TS Phạm Đức An
Sinh viên thực hiện : Đặng Hoàng Long ( 20184513)
Vũ Đức Tuyên ( 20141804)
Trang 2BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Giáo viên hướng dẫn:
Sinh viên thực hiện :
Lớp :
1 Nội dung ………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
2 Nhận xét của giáo viên hướng dẫn ………
………
………
………
………
………
………
Hà Nội, ngày……….tháng………năm Giáo viên hướng dẫn ký tên
Trang 3LỜI NÓI ĐẦU
“Xử lý ảnh” là môn học quan trọng đối với sinh viên ngành Cơ Điện Tử Đây là môn học khó đối với hầu hết nhiều sinh viên do yêu cầu kiến thức về toán và xác suất Với mục tiêu có thêm kiến thức cơ bản trong lĩnh vực về xử lý ảnh,nhóm em chọn đề tài “Trích xuất thông tin từ chứng minh thư ”
Nghiên cứu một số thuật toán tiền xử lý ảnh: giới thiệu một số
thuật toán tiền xử lý ảnh thường được áp dụng trong hệ thống phân tích và nhận dạng ảnh tài liệu như nhị phân ảnh, căn chỉnh độ nghiêng, các toán tử hình thái Nghiên cứu phương pháp phân tích giấy chứng minh nhân dân: giới thiệu bài toán
và các vấn đề cần giải quyết, từ đó áp dụng các kỹ thuật xử lý ảnh và phân tích tài liệu để phân tích ảnh chứng minh nhân dân Tiến hành cài đặt thử nghiệm để đánh giá hiệu quả của giải pháp đưa ra trên tập ảnh chứng minh nhân dân
Qua bài tập lớn, em đã có thêm được cái nhìn chung về hệ thống nhận dạng ký tự Đồng thời em được củng cố thêm về tiền xử lý ảnh, có được hiểu biết tốt hơn về ứng dụng của kiến thức cơ bản trong các bài toán thực tế Dù rất cố gắng trong việc tìm hiểu tài liệu, nhưng do thiếu sót về kiến thức cơ bản, hạn chế tầm hiểu biết mà bài báo cáo còn rất nhiều thiếu khuyết Kính mong nhận được những ý kiến góp ý
để em hoàn thiện hơn
Nhân dịp này, em xin gửi lời cảm ơn chân thành tới TS Mạc Thị Thoa và TS Phạm Đức An đã giảng dạy vànhiệt tình hướng dẫn góp ý giúp em hoàn thành báo cáo môn học này Em xin chân thành cảm ơn
Trang 4I Đặt vấn đề
- Bên cạnh các giấy tờ lưu hành văn bản điện tử được vào sử dụng trong tương lai thì hiện nay các giấy tờ, các loại thẻ,… lưu trữ thông tin dưới dạng văn bản hoặc chữ viết vẫn đang được sử dụng rất phổ biến Tuy nhiên, việc lưu trữ các thông tin bằng giấy tờ thông dụng thường không có độ tin cậy (bảo quản, độ bền ) và rất khó để kiểm soát (tra cứu, sao chép…) so với lưu trữ bằng phần mềm dưới dạng văn bản điện tử Chính vì vậy nhóm em quan tâm đến việc chuyển văn bản viết tay thành văn bản điện tử một cách thuận tiện và nhanh chóng hơn thay vì đánh máy, soạn thảo thông thường hiện nay
- Chứng minh nhân dân cũng là một trong các thẻ lưu hành phổ biến có chứa các thông tin dưới dạng văn bản Để đọc được số lượng lớn thẻ chứng mình nhân dân với tốc độ và độ chính xác cao không thể bằng mắt thường mà phải dùng các thiết bị chuyên dụng (camera, hệ thống chiều sáng…) kết hợp với xử
lý ảnh bằng phần mềm (thuật toán, lưu trữ ảnh…)
-Nếu như trước đây, khách hàng muốn mở tài khoản ngân hàng, mở thẻ ATM
sẽ phải đến trực tiếp quầy giao dịch để thực hiện các thủ tục đăng kí, xác minh thông tin, thì giờ đây các thao tác này đều có thể thực hiện qua chiếc điện thoại
nhờ giải pháp định danh khách hàng điện tử (eKYC) Và bài toán Trích xuất
thông tin từ chứng minh thư chính là bài toán nhỏ trong ứng dụng định danh
điện từ này
- Mục tiêu của nhóm là nhận dạng các ký tự quang học (chuyển hình ảnh có chữ viết tay hoặc kí tự đánh máy thành tài liệu văn bản, viết tắt là OCR [1]) thông qua trình soạn thảo mã Visual Studio, thư viện mã nguồn mở OpenCV, thư viện Tesseract Công việc là dựa vào các kiến thức nền tảng về xử lý ảnh đã được học để vận dụng các thuật toán ứng dụng vào việc nhận diện thẻ chứng minh nhân dân
Trang 5II Tổng quan đề tài
Hiện nay, máy tính đang phát triển mạnh mẽ, tốc độ xử lý không
ngừng được nâng lên Cùng với nó là sự ra đời của các phần mềm thông mỉnh đã làm cho máy tính ngày một gần gũi với con người hơn Một trong những ứng dụng thành công của lĩnh vực nhận dạng mẫu là nhận dạng chữ
in (nhận dạng ký tự quang học OCR -Optical Character Recognition) Nhận dạng chữ là quá trình chuyển đổi từ dạng hình ảnh của một hay nhiều trang ảnh chứa các thông tin văn bản thành tệp văn bản thực sự có thể soạn thảo được trên máy tính.OCR có rất nhiều ứng dụng hữu ích trong cuộc sống như sắp xếp thư tín dựa vào việc nhận dạng mã bưu chính (Zipcode) hay địa chỉ gửi tới, tự động thu thập dữ liệu từ các mẫu đơn/báo biểu hay từ các
hồ sơ lao động, tự động kiểm tra, xác nhận chữ ký trong ngân hàng, tự động xử lý các hóa đơn hay các yêu cầu thanh toán, nhập liệu tự động, kiểm tra thông tin trên passport
Hình 1.1 Thu nhận ảnh tài liệu
Trang 6Trang ảnh tài liệu được đề cập ở đây là các file ảnh số hoá thu được bằng cách quét các trang tài liệu dùng máy scanner, máy ảnh số, hay nhận từ một máy fax, file ảnh này được lưu trữ trong máy tính (Hình 1 1) Ảnh tài liệu có nhiều loại: ảnh đen trắng, ảnh màu, ảnh đa cấp xám với các phần mở rộng như TIF, BMP, PCX và ảnh tài liệu được đưa ra trong luận văn này là ảnh đa cấp xám
Quy trình chung của một hệ thống nhận dạng văn bản được thể hiện cụ
thể trên Hình 1 2 Ảnh tài liệu cần nhận dạng trước tiên sẽ được tiền xử lý nhằm tăng cường chất lượng, căn chỉnh độ nghiêng, nắnchỉnh hình ảnh Sau
đó sẽ tiến hành phân tích nhằm xác định cấu trúc trang tài liệu đồng thời xác định được các vùng thông tin cần nhận dạng trên ảnh đầu vào Bước tiếp theo
sẽ tiến hành nhận dạng các vùng thông tin văn bản đã được xác định Bước hậu xử lý cuối cùng sẽ thực hiện các thao tác kiểm lỗi chính tả và định dạng lại
cấu trúc trang văn bản
Hình 1.2 Quy trình chung của 1 hệ thống OCR
1.Bài toán nhận diện chứng minh thư
Đây là một bài toán không mới và cũng được coi đây như một dự án
để thực hành kĩ năng xử lý với các mô hình Deep Learning Từ bài toán sẽ giúp chúng ta có điều kiện làm quen với nhiều loại mô hình khác nhau trong Deep Learning như Object Detection, Instance
Trang 7Segmentation, Optical Character Recognition Các bước cơ bản của bài toán có thể giải quyết như sau đây:
Hình 1.3 Sơ đồ hệ thống phân tích bố cục và cấu trúc tài liệu
Tiền xử lý ảnh nhận đầu vào từ ảnh raw data Crop vùng chứa chứng minh thư trong ảnh và xóa đi những vùng thông tin nhiễu
Detector được sử dụng để detect các thành phần trong ảnh như họ tên, ngày tháng năm sinh
Reader là một module OCR để đọc nội dung chữ viết từ các thành phần đã được crop
Cuối cùng tổng hợp và sắp xếp lại ta được một bài toán nhận diện chứng minh thư hoàn chỉnh
2 Một số thuật toán tiền xử lý ảnh
2.1Nhị phân ảnh
Nhị phân ảnh (hay còn gọi là phân ngưỡng) là thao tác chuyển từ ảnh mầu, ảnh đa cấp xám về ảnh nhị phân bằng cách tìm một ngưỡng: tổng quát hoặc cục bộ
Các bước nhị phân hóa ảnh
1 Biến đổi ảnh màu (color) sang ảnh xám (grayscale) hoặc đọc ảnh lên bằng
cờ ảnh xám
2 Thiết lập ngưỡng (threshold) để nhị phân hóa ảnh
3 Áp dụng ngưỡng vào ảnh xám để tạo ảnh nhị phân hoặc áp dụng giải thuật nhị phân hóa ảnh Các pixel có giá trị lớn hơn ngưỡng ta thiết lập bằng 255 (hoặc 1), nhỏ hơn ngưỡng ta thiết lập bằng 0
Trang 82.2 Crop vùng chứa CMND
Theo tìm hiểu nhóm có 2 cách để Crop vùng chứa chứng minh thư trong ảnh là sử dụng thuật toán HouglinesP và FindContours
-FindContours
Contour là gì
Có thể hiểu contour là “tập các điểm-liên-tục tạo thành một đường cong (curve) (boundary), và không có khoảng hở trong đường cong đó, đặc điểm chung trong một contour là các các điểm có cùng /gần xấu xỉ một giá trị màu, hoặc cùng mật
độ Contour là một công cụ hữu ích được dùng để phân tích hình dạng đối tượng, phát hiện đối tượng và nhận dạng đối tượng”
Để tìm contour chính xác, chúng ta cần phải nhị phân hóa bức ảnh Các kỹ thuật nhị phân hóa ảnh ở xử lý ảnh cơ bản có thể liệt kê đến là đặt ngưỡng, hoặc candy edge detection
Trong opencv, việc tìm một contour là việc tìm một đối tượng có màu trắng trên nền đen
Sử dụng contour trong opencv
Opencv hỗ trợ cho chúng ta hàm để tìm contour của một bức ảnh
modifiedImage, contours, hierarchy = cv2.findContours(binaryImage,
typeofContour, methodofContour)
Trong đó:
contours: Danh sách các contour có trong bức ảnh nhị phân Mỗi một contour được lưu trữ dưới dạng vector các điểm
hierarchy: Danh sách các vector, chứa mối quan hệ giữa các contour modifiedImage: Ảnh sau khi sử dụng contour, thường chúng ta không xài đối số này
binaryImage: Ảnh nhị phân gốc Một chú ý quan trọng ở đây là sau khi sử dụng hàm findContours thì giá trị của binaryImage cũng thay đổi theo, nên khi sử dụng bạn có thể áp dụng binaryImage.copy() để không làm thay đổi giá trị của binaryImage
typeofContour: có các dạng sau: RETR_EXTERNAL, RETR_LIST, RETR_CCOMP, RETR_TREE, RETR_FLOODFILL
methodofContour: Có các phương thức sau: CHAIN_APPROX_NONE, CHAIN_APPROX_SIMPLE, CHAIN_APPROX_TC89_L1,
CHAIN_APPROX_TC89_KCOS
Opencv hỗ trợ chúng ta hàm để vẽ contour lên bức ảnh, giúp chúng ta nhìn rõ ràng hơn
Trang 9cv2.drawContours(image, contours, contourIndex, colorCode, thickness)
Với:
imgage: ảnh, có thể là ảnh grayscale hoặc ảnh màu
contours: danh sách các contour, là vector, nếu bạn muốn vẽ một contour, thì bạn phải cho nó vào trong một list
contourIndex Vị trí của contor, thông thường chúng ta để -1
colorCode: Giá trị màu của contour chúng ta muốn vẽ, ở dạng BGR, nếu bạn
muốn vẽ contour màu xanh lá cây thì set là (0,255,0).
thickness : độ dày của đường contour cần vẽ, giá trị thickness càng lớn thì
đường contor vẽ càng bự
Sau đó lấy ra 4 góc của ảnh thông qua thuật toán tìm diện tích lớn nhất trong ảnh
Hình 1.3
Phương pháp này có ưu điểm là đơn giản, ít xảy ra lỗi, tốc độ xử lý nhanh, tuy nhiên với đa số các loại giấy tờ như CMND, BLX, thẻ HSSV,… thì đều có các góc
Trang 10bo tròn nên việc lấy 4 góc của ảnh sẽ lệch đi 1 chút làm cho bước trải ảnh, ảnh sẽ
bị cắt lẹm vào thẻ như trên hình 1.3 trên
Trang 11Công dụng là tìm đường thẳng trong ảnh mặc dù có thể bị đứt đoạn.
Trong hình học thì đường thẳng có phương trình:
y = m.x + c
hoặc là
ρ = x.cosθ + y.sinθ (ρ đ c là ro, còn đ c θ là theta nhé) ọ ọ
Với ρ là khoảng cách từ đường thẳng tới gốc tọa độ, còn θ là góc giữa trục hoành
và đoạn thẳng ngắn nhất nối tới gốc tọa độ (đơn vị là radian).
Hình minh họa trong hệ tọa độ Đề Cát
Hình minh họa sử dụng trong OpenCV
Lưu ý: Hệ tọa độ trên máy tính có gốc tọa độ ở góc trên bên trái
Có 2 cách để xác định 1 đường thẳng, người ta chọn cách thứ 2 vì chỉ cần 2 tham số (ρ, θ) tiện cho tính toán hơn Vì θ được tính bằng radian nên có giá trị trong khoảng [0;π] (hay là [0;3.14]) Khi θ bằng 0 hoặc bằng 3.14 thì đường thẳng dựng đứng, còn θ bằng 1.57 (π/2) là nằm ngang.
MÔ TẢ CÁCH HOẠT ĐỘNG CỦA THUẬT TOÁN
Vì mỗi đường thẳng được xác dịnh bởi 2 giá trị (ρ, θ) nên thuật toán tạo 1 mảng
2 chiều Dòng ứng với ρ và cột ứng với θ, kích thước của mảng phụ thuộc vào bạn chọn, và tất nhiên là mảng càng lớn thì càng chính xác và tính toán càng lâu, còn mảng nhỏ thì nhanh hơn nhưng không chính xác bằng.
Khi sử dụng người dùng sẽ truyền giá trị ρ và θ họ mong muốn Thuật toán sẽ vẽ
ρ x θ đường thẳng trên ảnh, với mỗi đường thẳng thuật toán đếm số pixel nằm
Trang 12trên đường thẳng đó, cứ mỗi pixel tìm thấy thì cộng thêm giá trị vào ô ứng với (ρ, θ).
Trong ảnh trên: bên trái là các điểm trong ảnh, bên phải là mảng 2 chiều
Sau quá trình tính toán thì mỗi ô sẽ có giá trị là số pixel nằm trên đường thẳng đó.
SỬ DỤNG HÀM HOUGHLINES TRONG OPENCV
Hàm houghlines() sử dụng ảnh nhị phân để xử lý, bạn cần phân ngưỡng trước khi gọi hàm.
voidHoughLines(InputArray image,OutputArray lines,doublerho,
image – ảnh input nhị phân (ảnh có thể bị thay đổi khi tính toán)
lines – Output là vector chứa các đường thẳng Mỗi đường thẳng chứa 2 giá trị (ρ, θ)
rho – Khoảng cách của các đường thẳng tính bằng pixels
theta – Khoảng cách góc của các đường thẳng tính bằng radians
threshold – Số lần được tìm thấy phải vượt qua ngưỡng mới lấy
srn – Dùng cho multi-scale
stn – Cũng dùng cho multi-scale
Hàm PROBABILISTIC HOUGH
Hàm HoughLines() phải tính toán quá nhiều để tìm đường thẳng, còn Probabilistic Hough ít tính toán hơn Nó không kiểm tra tất cả các pixel mà chỉ lấy 1 số cụm pixel vừa đủ để tìm ra đường thẳng
Nhược điểm thứ 2 là HoughLines() không xác định được điểm đầu và điểm cuối của đoạn thẳng Do đó chúng ta dùng HoughLinesP() để khắc phục nhược điểm Thuật toán này có thêm 2 tham số nữa:
minLineLength – Độ dài tối thiểu của đường thẳng
maxLineGap – Nếu 2 đường thẳng có khoảng đứt gãy ở giữa ngắn hơn maxLineGap thì được xem là 1 đường thẳng
Phương pháp này có ưu điểm là khắc phục được nhược điểm của
Findcontours, khi t có thể lấy được 4 góc của ảnh và trải ra mà không bị lẹm vào ảnh.
Trang 13Ảnh gốc
Biến đổi ảnh bằng hàm Canny
Sau đó tìm đường thẳng và vẽ
Trang 14III Thuật toán phân tích ảnh chứng minh nhân dân
Giấy chứng minh nhân dân hay chứng minh thư (CMT) là một loại giấy tờ tùy thân của công dân Việt Nam, đ ợc xác nhận bởi cơ quan nhà n ớc có thẩmƣ ƣ quyền về lý lịch của ng ời được cấp.ƣ CMT là yêu cầu bắt buộc trong rất nhiều các giao dịch cũng nh các thủ tục hành chính,… Ví dụ, khiƣ chúng ta muốn mở một tài khoản ở ngân hàng hay đăng ký một thuê bao điện thoại, chúng ta cần photo CMT, đến các địa điểm giao dịch và điền thông tin cá nhân của mình vào các biểu mẫu có sẵn Việc này mất rất nhiều thời gian và phiền phức cho những
ng ời đi làm thủ tục đó Cùng với quá trình tin họcƣ hoá, đơn giản các thủ tục hành chính, một yêu cầu đặt ra là: cần có một hệ thống tự động tách và nhận dạng các tr ờng thông tin trên CMT để điền vào các biểu mẫu có sẵn Nh ƣ ƣ vậy cần tách chính xác các tr ờng thông tin yêu cầu tr ớc khi chuyển cho ƣ ƣ phần nhận dạng, tuy nhiện việc này gặp một số vấn đề
khó khăn sau:
Vì các tr ờng thông tin đ ợc dập/in trên mẫu có sẵn nên có thể bị lệch so ƣ ƣ với dòng chuẩn hoặc chờm lên phần tiêu đề đã đ ợc in tr ớc.ƣ ƣ
Đối với tr ờng hợp CMT là chữ dập, nét chữ không đều nhau giữa các CMT, ƣ thậm chí là trong cùng một CMT Có tr ờng hợp nét chữ quá đậm, thậm chí là ƣ
bị nhoè, có tr ờng hợp nét chữa quáƣ mờ
Trong quá trình sửa dụng, CMT có thể bị ố, mốc, nhàu, nát,… nét chữ bị mờ, nhoè,…
Ở mặt tr ớc, trong một số tr ờng hợp hoa văn nền khá rõ nét trong khi nét ƣ ƣ chữ lại quá mờ, khó có
thể phân biệt đâu là nét chữ đâu là hoa văn nền
Ở mặt sau, trong khá nhiều tr ờng hợp dấu mầu đỏ đè cả lên phần Ngày cấp ƣ
và Nơi cấp, làm mờ đi một phần thông tin trên hai tr ờng này.ƣ
Yêu cầu của bài toán: Từ ảnh CMT mầu đ ợc quét bằng máy quét với độ ƣ phân giải 300 dpi, tách lấy các tr ờng thông tin: ƣ Số CMT, Họ tên, Ngày sinh, Nguyên quán, Nơi thường trú, Dân tộc, Ngày cấp và
Nơi cấp
III.1 Tiền xử lý ảnh
Hinh 3 1 Tiền xử lý ảnh mặt trước CMT
Crop vùng chứa ảnh CMND
Trang 15Sử dụng phương pháp HouglinesP Và WrapImage đề trải đều ảnh CMND Trước khi trải ảnh ta cần xắp xếp 4 góc ảnh lại theo đúng thứ tự để ảnh đầu ra không bị biến dạng bằng cách so sánh tổng giá trị tọa độ các điểm với nhau