Tải bản đầy đủ (.docx) (35 trang)

(Tiểu luận) báo cáo thực tập đề tài trích xuất thông tin và xác thực danh tính bằng căn cước công dân

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.38 MB, 35 trang )

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

ĐẠI HỌC QUỐC GIA HÀ NỘI

BÁO CÁO THỰC TẬP
Đề tài:

TRÍCH XUẤT THƠNG TIN VÀ XÁC THỰC DANH TÍNH
BẰNG CĂN CƯỚC CƠNG DÂN

Người hướng dẫn : ĐINH KHẮC DŨNG
Sinh viên thực hiện: NGUYỄN NAM PHONG
Lớp
: K65A5 KHOA HỌC DỮ LIỆU
Mã sinh viên
: 20002084

Hà Nội, ngày 21 tháng 8 năm 2023


LỜI CẢM ƠN
Lời đầu tiên em xin gửi lời cảm ơn tới Phòng Đào tạo Trường Đại học Khoa học Tự
nhiên đã quyết định thêm bộ môn Thực tập thực tế về Khoa học Dữ liệu vào chương trình
học của trường để em có cơ hội trải nghiệm mơi trường thực tế tại doanh nghiệp.

Tiếp đến em xin chân thành cảm ơn người hướng dẫn, anh Đinh Khắc Dũng đã
luôn đồng hành và giúp đỡ em trong thời gian thực tập, hướng dẫn và trang bị cho em
những kinh nghiệm và kiến thức mới. Cùng với đó là cơng ty ANLAB đã hỗ trợ em
những điều kiện cần thiết, cũng như tạo một mơi trường làm việc tích cực và thân thiện.

Do kiến thức còn hạn chế và thiếu kinh nghiệm trong việc tổng hợp thông tin


cũng như trong cả q trình thực tập nên bản báo cáo khó tránh khỏi những lỗi
sai, thiếu sót. Kính mong nhận được những ý kiến đóng góp bổ sung, những lời
nhận xét từ q thầy cơ để bài viết có thể được hồn thiện và chính xác hơn.

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


MỤC LỤC

DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT

i

DANH MỤC HÌNH VẼ

iii

CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI

1

1.1 Phát biểu bài toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

1.2 Công cụ được sử dụng . . . . . . . . . . . . . . . . . . . . . . . . . .

1

1.2.1


PyTorch và Tensorflow . . . . . . . . . . . . . . . . . . . . . .

1

1.2.2

Jupyter Notebook trên Anaconda . . . . . . . . . . . . . . . . .

2

1.2.3

Kaggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

1.2.4

VietOCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

1.2.5

PyTesseract . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

CHƯƠNG 2. SỬ DỤNG VIETOCR ĐỂ TRÍCH XUẤT THƠNG TIN


3

2.1 OCR....................................

3

2.2 Phương hướng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.2.1

Tạo ảnh mẫu . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.2.2

Xoay ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.2.3

Trích xuất thơng tin . . . . . . . . . . . . . . . . . . . . . . . .

4

2.3 Phương pháp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


4

2.3.1

Chọn ảnh mẫu . . . . . . . . . . . . . . . . . . . . . . . . . .

4

2.3.2

Phát hiện các keypoint bằng SIFT . . . . . . . . . . . . . . . .

4

2.3.3

Ghép các keypoint bằng BFMatcher . . . . . . . . . . . . . . .

5

2.3.4

Xoay ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

2.3.5

Xử lí vùng ảnh và đọc ảnh . . . . . . . . . . . . . . . . . . . .


7

2.4 Kết quả thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

2.5 Nhận xét . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

2


CHƯƠNG 3. XÂY DỰNG MƠ HÌNH TRÍCH XUẤT TRƯỜNG THƠNG
TIN ID

9

3.1

Ý tưởng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

3.2

Phương hướng sử dụng CNN . . . . . . . . . . . . . . . . . . . . . . .

9


3.2.1

Cắt vùng ảnh chứa trường thông tin ID . . . . . . . . . . . . . .

9

3.2.2

Phân tách từng chữ số . . . . . . . . . . . . . . . . . . . . . .

9

3.2.3

Phân loại chữ số và đưa ra kết quả . . . . . . . . . . . . . . . .

9

3.3

3.4

3.5

3.6

3.7

Phương pháp sử dụng CNN . . . . . . . . . . . . . . . . . . . . . . . .


9

3.3.1

Cắt vùng ảnh chứa trường thông tin ID . . . . . . . . . . . . . .

9

3.3.2

Phân tách từng chữ số . . . . . . . . . . . . . . . . . . . . . .

10

3.3.3

Phân loại chữ số và đưa ra kết quả . . . . . . . . . . . . . . . .

10

CRNN...................................

11

3.4.1

CNN ...............................

12


3.4.2

RNN ...............................

12

3.4.3

Transcription . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.4.4

Hàm mất mát . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

Phương hướng sử dụng CRNN . . . . . . . . . . . . . . . . . . . . . .

14

3.5.1

Sinh ảnh để huấn luyện mơ hình . . . . . . . . . . . . . . . . .

14

3.5.2


Xây dựng mơ hình CRNN . . . . . . . . . . . . . . . . . . . .

14

Phương pháp sử dụng CRNN . . . . . . . . . . . . . . . . . . . . . . .

14

3.6.1

Sinh ảnh để huấn luyện mơ hình . . . . . . . . . . . . . . . . .

14

3.6.2

Xây dựng mơ hình CRNN . . . . . . . . . . . . . . . . . . . .

15

So sánh giữa Implement CNN và CRNN . . . . . . . . . . . . . . . . .

15

3.7.1

Kết quả thực nghiệm . . . . . . . . . . . . . . . . . . . . . . .

15


3.7.2

Nhận xét . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

CHƯƠNG 4. XÁC THỰC KHUÔN MẶT BẰNG CĂN CƯỚC CÔNG DÂN 17
4.1

MTCNN..................................

17

4.2

FaceNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.3

Yêu cầu về ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

3


4.4 Phương hướng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


20

4.4.1

Phát hiện khuôn mặt . . . . . . . . . . . . . . . . . . . . . . .

20

4.4.2

Encoding ảnh khuôn mặt . . . . . . . . . . . . . . . . . . . . .

20

4.4.3

So sánh 2 vector embedding khuôn mặt . . . . . . . . . . . . .

21

4.5 Phương pháp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

4.5.1

Phát hiện khuôn mặt bằng MTCNN . . . . . . . . . . . . . . .

21


4.5.2

Nhận diện đeo khẩu trang . . . . . . . . . . . . . . . . . . . .

21

4.5.3

Nhận diện mặt quay sang bên . . . . . . . . . . . . . . . . . .

23

4.5.4

Encoding ảnh khuôn mặt bằng FaceNet . . . . . . . . . . . . .

23

4.5.5

So sánh 2 vector embedding khuôn mặt . . . . . . . . . . . . .

24

4.6 Kết quả thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

4.7 Nhận xét . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


25

TÀI LIỆU THAM KHẢO

26

NHẬN XÉT THỰC TẬP

27


DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT
KÝ HIỆU VIẾT TẮT

DIỄN GIẢI ĐẦY ĐỦ

CCCD
OCR
GPU
SIFT
BFMatcher
CNN
RNN
CRNN
CTC
TRDG
LSTM
SGD


Căn cước công dân
Optical Character Recognition
Graphics Processing Unit
Scale-Invariant Feature Transform
Brute-Force Matcher
Convolutional Neural Network
Recurrent Neural Network
Convolutional Recurrent Neural Network
Connectionist Temporal Classification
Text Recognition Data Generator
Long-Short Term Memory
Stochastic Gradient Descent

MTCNN

Multi-task Cascaded Convolutional Networks

NMS

Non-Maximum Suppression

i


DANH MỤC HÌNH ẢNH

Hình 2.1

Luồng hoạt động của OCR . . . . . . . . . . . . . . . . . . . . . .


3

Hình 2.2

Ảnh CCCD mẫu đảm bảo đầy đủ các tiêu chí . . . . . . . . . . . . .

4

Hình 2.3

Phát hiện keypoint trên CCCD mẫu . . . . . . . . . . . . . . . . . .

4

Hình 2.4

Phát hiện keypoint trên CCCD cần xoay . . . . . . . . . . . . . . . .

5

Hình 2.5

Ghép các keypoint của 2 ảnh . . . . . . . . . . . . . . . . . . . . .

6

Hình 2.6

Kết quả xoay ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . .


6

Hình 2.7

Vùng ảnh ngày sinh được tiền xử lí . . . . . . . . . . . . . . . . . .

7

Hình 3.8

Ví dụ ảnh ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

Hình 3.9

Ảnh ID sau khi tiền xử lí, được resize về 333x75 và viền trắng . . . . .

10

Hình 3.10 Các chữ số trong ảnh được detect . . . . . . . . . . . . . . . . . . .

10

Hình 3.11 Ảnh từng chữ số được resize về 24x44 . . . . . . . . . . . . . . . . .

10

Hình 3.12 Mơ hình CNN được sử dụng . . . . . . . . . . . . . . . . . . . . . .


11

Hình 3.13 Trường hợp dự đoán đúng . . . . . . . . . . . . . . . . . . . . . . .

11

Hình 3.14 Luồng hoạt động của CRNN . . . . . . . . . . . . . . . . . . . . . .

12

Hình 3.15 Chữ cái nằm ở nhiều khung hình liên tiếp . . . . . . . . . . . . . . .

13

Hình 3.16 Ví dụ ảnh được sinh . . . . . . . . . . . . . . . . . . . . . . . . . .

15

Hình 3.17 Trường hợp dự đốn sai duy nhất khi nhầm chữ số 0 thành chữ số 8 . . .

16

Hình 4.18 Luồng hoạt động của MTCNN . . . . . . . . . . . . . . . . . . . .

17

Hình 4.19 Tầng 1: P-net . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18


Hình 4.20 Tầng 2: R-net . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

Hình 4.21 Tầng 3: O-net . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

Hình 4.22 Luồng hoạt động của FaceNet . . . . . . . . . . . . . . . . . . . . .

19

Hình 4.23 Các bước sử dụng MTCNN . . . . . . . . . . . . . . . . . . . . . .

20

Hình 4.24 Các bước sử dụng FaceNet . . . . . . . . . . . . . . . . . . . . . . .

20

Hình 4.25 Ảnh chụp đầy đủ và vùng ảnh chứa khn mặt sau khi đã được xử lí . .

21

Hình 4.26 Mơ hình CNN phân loại đeo khẩu trang . . . . . . . . . . . . . . . .

22

Hình 4.27 Phát hiện ảnh đeo khẩu trang . . . . . . . . . . . . . . . . . . . . .


22

ii


Hình 4.28 Ảnh được xác định đang quay sang phải . . . . . . . . . . . . . . . .

23

Hình 4.29 Kết quả xác thực một cặp ảnh . . . . . . . . . . . . . . . . . . . . .

24

iii


CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI
Chương này sẽ bao gồm giới thiệu các công việc đã được thực hiện và
các cơng cụ được sử dụng.

1.1 Phát biểu bài tốn
Trong thời kì chuyển đổi số, tự động trích xuất thơng tin từ giấy tờ tùy thân
đang được áp dụng rộng rãi trên nhiều lĩnh vực như viễn thông, ngân hàng, y
tế, ... Nếu như trước đây, ta cần phải đến tận nơi để thực hiện các thủ tục đăng
kí, xác minh thơng tin, thì hiện nay các thao tác này đã có thể được thực hiện
thơng qua chiếc điện thoại, nhờ giải pháp định danh khách hàng điện tử eKYC.

Quy trình eKYC thơng thường sẽ bao gồm 3 bước:

Bước 1: Xác minh tài liệu bằng cách chụp giấy tờ tùy thân.


Bước 2: Trích xuất tự động thơng tin giấy tờ tùy thân.

Bước 3: Đối chiếu hình ảnh người sử dụng bằng cách so khớp video
hoặc hình ảnh chân dung với hình ảnh trong giấy tờ tùy thân.
Trong báo cáo này, ta sẽ xây dựng mơ hình dựa trên quy trình eKYC, với
giấy tờ tùy thân được sử dụng là thẻ CCCD có gắn chíp 12 chữ số.

1.2 Cơng cụ được sử dụng
1.2.1 PyTorch và Tensorflow
PyTorch và Tensorflow là hai framework nổi tiếng trong việc xây dựng và
huấn luyện các mạng nơ ron nhân tạo. Cả hai đều được phát triển với mã
nguồn mở, giúp cộng đồng có thể tùy biến, nâng cấp và sử dụng miễn phí.


Tensorflow được phát triển bởi Google, do đó được đánh giá là tốt hơn PyTorch

trên khía cạnh xây dựng và mở rộng mơ hình phục vụ cho sản phẩm thực tế. Cùng với
đó là một cộng đồng lớn hơn để hỗ trợ giải quyết các vấn đề.


PyTorch được phát triển bởi Facebook. Là framework được phát triển sau, nên

Py-Torch cung cấp một hệ sinh thái hỗ trợ tối đa việc thử nghiệm và nghiên cứu những
ý tưởng mới. Đặc biệt, hiệu suất của PyTorch cũng là tốt hơn so với Tensorflow, và
cộng đồng PyTorch cũng không quá thua kém Tensorflow.

Trong đề tài này, em sử dụng cả hai framework nhằm có thêm kinh nghiệm và
kĩ năng để có thể phù hợp với doanh nghiệp sau này.


1


1.2.2 Jupyter Notebook trên Anaconda
Jupyter Notebook là một nền tảng tính tốn khoa học mã nguồn mở, hỗ
trợ hơn 40 ngơn ngữ lập trình.

Jupyter cho phép người dùng xem kết quả của code inline mà không cần phụ
thuộc và các phần khác của code. Điều này cho phép em kiểm tra và đọc kết quả
các cell một cách độc lập, khơng cần chạy tồn bộ như PyCharm.


Tận dụng tài ngun máy. Em có thể sử dụng GPU của máy mình, cùng
với đó là tiếp xúc trực tiếp các file và thư mục của máy. Do đó, sử dụng Jupyter
Notebook trên Anaconda đảm bảo sự ổn định và tiện lợi hơn các nền tảng
Kaggle hay Colab khi thực hiện các tác vụ nhẹ và đơn giản.
1.2.3 Kaggle
Kaggle là nền tảng trực tuyến cho cộng đồng học máy và khoa học dữ liệu. [1]



Cho phép chia sẻ và tìm kiếm các bộ dữ liệu; tìm hiểu và xây dựng mơ hình.


Nguồn tài ngun miễn phí. Ta có thể sử dụng miễn phí GPU P100 và
T4x2 trên Kaggle trong khoảng thời gian nhất định, giúp tăng tốc độ huấn luyện
mơ hình, phù hợp với các tác vụ nặng và tốn nhiều thời gian.
1.2.4 VietOCR
VietOCR là một thư viện phục vụ việc OCR cho tiếng Việt. [2]


Kiến trúc mơ hình bao gồm CNN và Transformer, được huấn luyện trên
bộ dữ liệu 10 triệu ảnh. Do đó đạt độ chính xác rất cao.


Là thư viện OCR được xây dựng cho tiếng Việt, phù hợp với u cầu của bài tốn.

1.2.5 PyTesseract
Python-tesseract là cơng cụ OCR dành cho Python. [3]

Hỗ trợ đa ngơn ngữ.

Thư viện và cú pháp dễ sử dụng.

Có nhiều tham số phục vụ cho các mục đích khác nhau, do đó dễ dàng tối
ưu trong bài toán.

2


CHƯƠNG 2. TRÍCH XUẤT THƠNG TIN CĂN CƯỚC CƠNG
DÂN
Thẻ CCCD là một loại giấy tờ có tính riêng tư và bảo mật cao. Do đó, số lượng thẻ
thu thập được trong phạm vi báo cáo này là khá ít. Chương này sẽ giới thiệu một
phương pháp chỉ yêu cầu một thẻ CCCD làm mẫu, và vẫn có thể trích xuất thông tin trên
các thẻ CCCD khác. Các trường thông tin được trích xuất là Mã số ID, họ tên và ngày
sinh. Kĩ thuật được sử dụng để trích xuất là OCR - Optical Character Recognition.

2.1 OCR
OCR là công nghệ phổ biến để nhận dạng văn bản bên trong hình ảnh,
bao gồm ảnh chụp và tài liệu. Với đầu vào là một hình ảnh, OCR sẽ chuyển

đổi nó thành dạng dữ liệu văn bản.

Hình 2.1 Luồng hoạt động của OCR

2.2 Phương hướng
2.2.1 Tạo ảnh mẫu
Đầu tiên, ta sẽ sử dụng một thẻ căn cước công dân chụp đẹp, ánh sáng vừa
phải, khơng bị mờ, khơng bị mất góc, khơng có nền phía sau và coi đây là ảnh mẫu.

Từ ảnh mẫu, ta lấy tọa độ góc trên bên trái và góc dưới bên phải của
vùng ảnh có chứa các trường thơng tin cần trích xuất. Với ảnh mẫu, ta cần
đảm bảo khi đưa các vùng ảnh vào OCR đều cho ra kết quả chính xác.
2.2.2 Xoay ảnh
Đối với mỗi ảnh cần trích xuất thơng tin, ta sẽ thực hiện lần lượt:


Tìm ra các điểm đặc trưng - keypoint của ảnh mẫu và ảnh cần đọc.



Từ 2 tập hợp keypoint của 2 ảnh, ta ghép chúng với nhau để tìm ra ma trận xoay.


Nhân ảnh cần đọc với ma trận xoay để ra ảnh mới có cấu trúc tương
đương với ảnh mẫu.
3


2.2.3 Trích xuất thơng tin
Từ ảnh đã được xoay, ta sử dụng tọa độ ảnh mẫu để cắt các vùng ảnh

có chứa các trường thơng tin mà ta cần trích xuất.
Sau đó, ta đưa các vùng ảnh vào OCR để đọc các trường thơng tin đó.

2.3 Phương pháp
2.3.1 Chọn ảnh mẫu
Ta cần chọn ảnh mẫu phù hợp với các tiêu chí đề ra.

Hình 2.2 Ảnh CCCD mẫu đảm bảo đầy đủ các tiêu chí

2.3.2 Phát hiện các keypoint bằng SIFT
Ta sẽ tìm các keypoint trên ảnh bằng thuật tốn SIFT.

Hình 2.3 Phát hiện keypoint trên CCCD mẫu
4


Hình 2.4 Phát hiện keypoint trên CCCD cần xoay

2.3.3 Ghép các keypoint bằng BFMatcher
Sau khi có 2 tập keypoint từ 2 ảnh, ta sẽ ghép nối chúng với nhau bằng
thuật toán BFMatcher.

5


Hình 2.5 Ghép các keypoint của 2 ảnh

2.3.4 Xoay ảnh
Với tập các keypoint đã được ghép, ta xây dựng ma trận xoay ảnh từ ảnh
cần đọc sang ảnh mẫu.


Hình 2.6 Kết quả xoay ảnh
6


Sau khi xoay, ảnh đã có cấu trúc tương đương với ảnh mẫu, và có thể
trích xuất thơng tin dựa theo tọa độ.
2.3.5 Xử lí vùng ảnh và đọc ảnh
Đối với trường thông tin ngày sinh, ta cần tiền xử lí vùng ảnh:

Grayscale vùng ảnh và sử dụng VietOCR để đọc.

Nếu kết quả đọc ra khác với định dạng dd/mm/yyyy, ta sẽ điều chỉnh độ
tương phản và loại bỏ nhiễu trên vùng ảnh gốc.

Hình 2.7 Vùng ảnh ngày sinh được tiền xử lí

Kết quả đọc được từ ảnh sẽ đi qua bước chuẩn hóa:

Loại bỏ các kí tự khơng phải chữ số.

Nếu độ dài của kết quả bằng 8, ta đưa về định dạng dd/mm/yyyy.

Nếu ngày, tháng, năm hợp lí (lớn hơn 0, các ngày trong tháng 1 nhỏ hơn
31, ...) thì trả về kết quả.

Nếu khơng thỏa mãn 1 trong 2 điều kiện trên, kết quả trả về là rỗng.
Đối với trường thông tin ID, tương tự trước tiên ta sẽ cần tiền xử lí ảnh:



Grayscale vùng ảnh và sử dụng VietOCR để đọc.



Nếu kết quả đọc ra khác định dạng (có độ dài khác 12), ta sẽ sử dụng PyTesseract để

đọc lại. Cách làm này đến từ việc có một số trường hợp khi trong ảnh có các chữ số 0 liền
nhau, VietOCR đôi khi sẽ đọc thiếu một chữ số dù vùng ảnh đã rõ ràng.

Kết quả đọc được từ ảnh sẽ đi qua bước chuẩn hóa:




Loại bỏ các kí tự khơng phải chữ số.
Nếu độ dài của kết quả bằng 12, trả về kết quả.
Nếu không, trả về kết quả rỗng.
Cuối cùng, với trường thông tin họ tên, các bước xử lí sẽ ít hơn. Ta tiền xử lí bằng
cách grayscale vùng ảnh và sử dụng VietOCR để đọc. Để chuẩn hóa, ta sẽ loại bỏ các
7


kí tự khơng phải chữ cái tiếng Việt hoặc dấu cách, và đưa về đúng định dạng
"Họ Đệm Tên".

2.4 Kết quả thực nghiệm
Tập test bao gồm 314 ảnh thẻ căn cước cơng dân. Tuy nhiên trong số đó,
có các ảnh có các trường thơng tin khơng đọc được (bị che/q mờ), do đó,
kết quả sẽ được tính sau khi loại bỏ các trường hợp ảnh xấu đó:



Số thẻ CCCD đọc đúng (chính xác cả 3 trường thơng tin): 235/255 - 92.1%.





Số trường thơng tin ID đọc đúng: 262/262 - 100%.
Số trường thông tin họ tên đọc đúng: 290/310 - 93.5%.
Số trường thông tin ngày sinh đọc đúng: 289/295 - 98%.

2.5 Nhận xét
Phương pháp này chỉ yêu cầu một ảnh thẻ CCCD làm mẫu, và các thẻ CCCD
khác sẽ được đối chiếu với thẻ mẫu này để có thể định vị các trường thơng tin cần
trích xuất. Kết quả đạt được là tương đối tốt, thỏa mãn các yêu cầu đề ra.

Về các trường thơng tin, ta có thể đưa ra nhận xét:

Mã ID trên ảnh thẻ căn cước có cỡ chữ to hơn, được in đậm nên độ chính
xác rất cao.

Họ tên tuy cũng có cỡ chữ to, nhưng vì là các kí tự tiếng Việt nên xuất hiện
nhiều trường hợp nhầm dấu: dấu sắc thành dấu hỏi, chữ â thành chữ ă ...

Ngày sinh có cỡ chữ bé và vùng diện tích nhỏ nhất trên thẻ. Do đó, các vùng
ảnh cắt ra thường sẽ mờ, dẫn đến việc không đọc được hoặc đọc sai.

8



CHƯƠNG 3. XÂY DỰNG MƠ HÌNH TRÍCH XUẤT TRƯỜNG
THƠNG TIN ID
Trong chương này, ta sẽ hướng đến việc tự xây dựng kĩ thuật trích xuất thơng tin.

Trường thơng tin được áp dụng là mã số ID.

3.1 Ý tưởng
Với việc đầu vào là dữ liệu ảnh, ta sẽ nghĩ tới việc sử dụng CNN trong bài tốn này.

Có 2 phương hướng ta có thể lựa chọn: Sử dụng CNN và sử dụng CRNN.

3.2 Phương hướng sử dụng CNN
3.2.1 Cắt vùng ảnh chứa trường thông tin ID
Từ kết quả của chương 2, ta đã có thể xác định tọa độ vị trí của trường
thơng tin ID. Từ tọa độ đó, ta sẽ cắt vùng ảnh chứa trường thông tin ID.
3.2.2 Phân tách từng chữ số
Đối với mỗi ảnh chứa ID, ta sẽ thực hiện lần lượt:



Phân tách các chữ số
Cắt ảnh từng chữ số
3.2.3 Phân loại chữ số và đưa ra kết quả
Ta sẽ xây dựng một mơ hình CNN để phân loại chữ số. Sau đó, với mỗi
ảnh chữ số có được từ bước trước, ta đưa vào mơ hình. Cuối cùng, ta ghép
các kết quả dự đoán để thành mã ID cần đọc.

3.3 Phương pháp sử dụng CNN
3.3.1 Cắt vùng ảnh chứa trường thông tin ID
Từ 314 ảnh test, sau khi loại bỏ ảnh khơng rõ ID, ta sẽ có 262 ảnh ID.


Hình 3.8 Ví dụ ảnh ID

9


3.3.2 Phân tách từng chữ số
Để có thể phân tách từng chữ số, đầu tiên ta cần tiền xử lí ảnh về nhị phân, để chữ
số và nền tương phản nhất có thể, cùng với đó là các chữ số khơng dính vào nhau.

Hình 3.9 Ảnh ID sau khi tiền xử lí, được resize về 333x75 và viền trắng

Sau đó, ta tách từng chữ số dựa theo contour.

Hình 3.10 Các chữ số trong ảnh được detect

Cuối cùng, ta cắt ảnh từng chữ số.

Hình 3.11 Ảnh từng chữ số được resize về 24x44

3.3.3 Phân loại chữ số và đưa ra kết quả
Mơ hình CNN được xây dựng và sửa đổi dựa trên mơ hình của pragetiunna [4]:

10


Hình 3.12 Mơ hình CNN được sử dụng


4 lớp tích chập, lần lượt có kích thước 16x21x21, 32x15x15, 64x7x7,

64x3x3 với hàm hoạt động ReLU.

1 lớp MaxPooling với nhân 4x4.

1 lớp Dropout 0.4.

1 lớp Flatten.

2 lớp Fully Connected, lần lượt có 128 và 10 unit.
Mơ hình được huấn luyện trên tập ảnh chữ số, bao gồm 12790 ảnh train
và 3020 ảnh valid.
Sau khi có mơ hình, ta đưa từng ảnh chữ số vào và ghép kết quả dự
đốn để có ID cần đọc.

Hình 3.13 Trường hợp dự đốn đúng

3.4 CRNN
CRNN - Convolutional Recurrent Neural Network [6] là một kiến trúc được thiết
kế riêng biệt cho tác vụ Text Recognition trong bài toán OCR. Xuất phát từ ý tưởng
đơn giản: kết hợp giữa CNN và RNN, trong đó CNN sẽ trích xuất các đặc trưng của
ảnh đầu vào, và RNN sẽ dựa trên những đặc trưng đó để xử lí văn bản dạng chuỗi.

11


Hình 3.14 Luồng hoạt động của CRNN

Kiến trúc của CRNN chia thành 3 phần:
3.4.1 CNN
Ảnh đầu vào sẽ đi qua các lớp tích chập trong CNN. Đầu ra của phần này

sẽ là các feature map.
3.4.2 RNN
Từ các feature map có được ở đầu ra CNN, ta biến đổi nó thành các
feature vector bằng cách chia các feature map thành các cột. Feature vector
thứ i sẽ là ghép nối theo chiều dọc của tất cả cột thứ i của các feature map.
Chuỗi các feature vector được gọi là feature sequence.
RNN sẽ dự đốn phân phối nhãn y cho mỗi khung hình x trong feature sequence.

Ví dụ, ta có 5 khung hình, bao gồm các chữ cái a, b, c. Sau khi qua lớp
RNN, ta sẽ có tỉ lệ từng chữ cái ở từng khung hình.

12



×