1. Trang chủ
  2. » Luận Văn - Báo Cáo

(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

35 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề 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
Tác giả Nguyễn Nam Phong
Người hướng dẫn Đinh Khắc Dũng
Trường học Trường Đại Học Khoa Học Tự Nhiên
Chuyên ngành Khoa Học Dữ Liệu
Thể loại Báo cáo thực tập
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 35
Dung lượng 1,22 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • 1.1 Phát biểu bài toán (9)
  • 1.2 Công cụ được sử dụng (9)
    • 1.2.1 PyTorch và Tensorflow (9)
    • 1.2.2 Jupyter Notebook trên Anaconda (10)
    • 1.2.3 Kaggle (10)
    • 1.2.4 VietOCR (10)
    • 1.2.5 PyTesseract (10)
  • CHƯƠNG 2. SỬ DỤNG VIETOCR ĐỂ TRÍCH XUẤT THÔNG TIN 3 (0)
    • 2.1 OCR (11)
    • 2.2 Phương hướng (11)
      • 2.2.1 Tạo ảnh mẫu (11)
      • 2.2.2 Xoay ảnh (11)
      • 2.2.3 Trích xuất thông tin (12)
    • 2.3 Phương pháp (12)
      • 2.3.1 Chọn ảnh mẫu (12)
      • 2.3.2 Phát hiện các keypoint bằng SIFT (12)
      • 2.3.3 Ghép các keypoint bằng BFMatcher (13)
      • 2.3.4 Xoay ảnh (14)
      • 2.3.5 Xử lí vùng ảnh và đọc ảnh (15)
    • 2.4 Kết quả thực nghiệm (16)
    • 2.5 Nhận xét (16)
    • 3.1 Ý tưởng (17)
    • 3.2 Phương hướng sử dụng CNN (17)
      • 3.2.1 Cắt vùng ảnh chứa trường thông tin ID (17)
      • 3.2.2 Phân tách từng chữ số (17)
      • 3.2.3 Phân loại chữ số và đưa ra kết quả (17)
    • 3.3 Phương pháp sử dụng CNN (17)
      • 3.3.1 Cắt vùng ảnh chứa trường thông tin ID (17)
      • 3.3.2 Phân tách từng chữ số (18)
      • 3.3.3 Phân loại chữ số và đưa ra kết quả (18)
    • 3.4 CRNN (19)
      • 3.4.1 CNN (20)
      • 3.4.2 RNN (20)
      • 3.4.3 Transcription (21)
      • 3.4.4 Hàm mất mát (22)
    • 3.5 Phương hướng sử dụng CRNN (22)
      • 3.5.1 Sinh ảnh để huấn luyện mô hình (22)
      • 3.5.2 Xây dựng mô hình CRNN (22)
    • 3.6 Phương pháp sử dụng CRNN (22)
      • 3.6.1 Sinh ảnh để huấn luyện mô hình (22)
      • 3.6.2 Xây dựng mô hình CRNN (23)
    • 3.7 So sánh giữa Implement CNN và CRNN (23)
      • 3.7.1 Kết quả thực nghiệm (23)
      • 3.7.2 Nhận xét (24)
  • CHƯƠNG 4. XÁC THỰC KHUÔN MẶT BẰNG CĂN CƯỚC CÔNG DÂN 17 (25)
    • 4.1 MTCNN (25)
    • 4.2 FaceNet (27)
    • 4.3 Yêu cầu về ảnh (28)
    • 4.4 Phương hướng (28)
      • 4.4.1 Phát hiện khuôn mặt (28)
      • 4.4.2 Encoding ảnh khuôn mặt (28)
      • 4.4.3 So sánh 2 vector embedding khuôn mặt (29)
    • 4.5 Phương pháp (29)
      • 4.5.1 Phát hiện khuôn mặt bằng MTCNN (29)
      • 4.5.2 Nhận diện đeo khẩu trang (29)
      • 4.5.3 Nhận diện mặt quay sang bên (31)
      • 4.5.4 Encoding ảnh khuôn mặt bằng FaceNet (31)
      • 4.5.5 So sánh 2 vector embedding khuôn mặt (32)
    • 4.6 Kết quả thực nghiệm (32)
    • 4.7 Nhận xét (33)

Nội dung

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

Trong thời đại chuyển đổi số, việc tự động trích xuất thông tin từ giấy tờ tùy thân đang trở nên phổ biến trong nhiều lĩnh vực như viễn thông, ngân hàng và y tế Trước đây, người dùng phải đến trực tiếp để thực hiện các thủ tục đăng ký và xác minh thông tin, nhưng hiện nay, nhờ vào giải pháp định danh khách hàng điện tử eKYC, các thao tác này có thể được thực hiện dễ dàng qua điện thoại Quy trình eKYC thường bao gồm ba bước chính.

• 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, chúng tôi sẽ phát triển một mô hình dựa trên quy trình eKYC, sử dụng thẻ CCCD có gắn chip với 12 chữ số làm giấy tờ tùy thân.

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

PyTorch và Tensorflow

PyTorch và TensorFlow là hai framework phổ biến trong việc xây dựng và huấn luyện mạng nơ ron nhân tạo Cả hai đều có mã nguồn mở, cho phép cộng đồng tùy chỉnh, nâng cấp và sử dụng miễn phí.

TensorFlow, được phát triển bởi Google, nổi bật hơn PyTorch trong việc xây dựng và mở rộng mô hình cho các sản phẩm thực tế Hơn nữa, TensorFlow còn có một cộng đồng lớn mạnh, sẵn sàng hỗ trợ người dùng trong việc giải quyết các vấn đề phát sinh.

PyTorch, được phát triển bởi Facebook, là một framework tiên tiến hỗ trợ tối đa cho việc thử nghiệm và nghiên cứu các ý tưởng mới Với hiệu suất vượt trội hơn TensorFlow, PyTorch cũng sở hữu một cộng đồng phát triển năng động không kém phần so với 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.

Jupyter Notebook trên Anaconda

Jupyter Notebook là một nền tảng tính toá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 mã code ngay trong cùng một ô mà không cần phải phụ thuộc vào các phần khác Điều này giúp người dùng kiểm tra và đọc kết quả của từng ô một cách độc lập, mà không cần phải chạy toàn bộ mã như trong PyCharm.

Sử dụng Jupyter Notebook trên Anaconda giúp tận dụng tài nguyên máy tính, cho phép bạn sử dụng GPU và truy cập trực tiếp vào các file và thư mục Điều này mang lại sự ổn định và tiện lợi hơn so với các nền tảng như Kaggle hay Colab, đặc biệt khi thực hiện các tác vụ nhẹ và đơn giản.

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.

Kaggle cung cấp nguồn tài nguyên miễn phí, cho phép người dùng sử dụng GPU P100 và T4x2 trong một khoảng thời gian nhất định Việc này giúp tăng tốc độ huấn luyện mô hình, đặc biệt phù hợp cho các tác vụ nặng và tốn nhiều thời gian.

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 yêu cầu của bài toán.

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.

SỬ DỤNG VIETOCR ĐỂ TRÍCH XUẤT THÔNG TIN 3

OCR

Công nghệ OCR (Nhận dạng ký tự quang học) ngày càng trở nên phổ biến trong việc nhận diện văn bản từ hình ảnh, bao gồm cả ảnh chụp và tài liệu Bằng cách xử lý hình ảnh đầu vào, OCR có khả năng chuyển đổi chúng thành dữ liệu văn bản có thể chỉnh sửa và tìm kiếm.

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

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.

Để trích xuất các trường thông tin từ ảnh mẫu, cần xác định tọa độ của góc trên bên trái và góc dưới bên phải của vùng ảnh Việc này đảm bảo rằng khi áp dụng OCR vào các vùng ảnh đã chọn, kết quả thu được sẽ 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.

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 đó.

Phương pháp

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 toán SIFT.

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

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.

Hình 2.5 Ghép các keypoint của 2 ả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

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 đáp ứng một trong hai điều kiện đã nêu, kết quả sẽ trả về là rỗng Đối với trường thông tin ID, trước tiên cần thực hiện việc tiền xử lý ảnh.

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

Nếu kết quả đọc được không đúng định dạng (không có độ dài 12), chúng ta sẽ sử dụng PyTesseract để thực hiện việc đọc lại Phương pháp này xuất phát từ thực tế rằng trong một số trường hợp, khi hình ảnh có các chữ số 0 liên tiếp, VietOCR có thể bỏ sót một chữ số mặc dù khu vực hình ả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, để xử lý trường thông tin họ tên, chúng ta sẽ giảm bớt các bước thực hiện Quy trình tiền xử lý bao gồm việc chuyển đổi vùng ảnh sang định dạng grayscale và áp dụng VietOCR để nhận diện văn bản Để đạt được sự chuẩn hóa, chúng ta sẽ loại bỏ các yếu tố không cần thiết.

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

Kết quả thực nghiệm

Bài kiểm tra bao gồm 314 ảnh thẻ căn cước công dân, nhưng một số ảnh có thông tin không thể đọc được do bị che hoặc quá mờ Kết quả cuối cùng sẽ được tính sau khi loại bỏ những trường hợp ảnh kém chất lượng này.

• 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%.

Nhận xét

Phương pháp này sử dụng một ảnh thẻ CCCD mẫu để đối chiếu với các thẻ CCCD khác, từ đó xác định các trường thông tin cần trích xuất Kết quả thu được tương đối tốt và đáp ứng đầy đủ 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 có kích thước chữ lớn, nhưng do sử dụng các ký tự tiếng Việt, thường xảy ra tình trạng nhầm lẫn giữa các dấu như dấu sắc và dấu hỏi, hoặc giữa chữ â và chữ ă.

Ngày sinh thường được in với cỡ chữ nhỏ và chiếm diện tích hạn chế trên thẻ, gây ra tình trạng các vùng ảnh cắt ra trở nên mờ Điều này dẫn đến việc thông tin có thể không được đọc rõ ràng hoặc dễ bị hiểu sai.

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

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.

Ý 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 toá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.

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

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

Dựa trên kết quả từ chương 2, chúng ta đã xác định được tọa độ của trường thông tin ID Từ những tọa độ này, chúng ta sẽ tiến hành 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ả

Chúng ta sẽ phát triển một mô hình CNN nhằm phân loại các chữ số Sau khi thu thập hình ảnh chữ số, chúng sẽ được đưa vào mô hình để xử lý Cuối cùng, các dự đoán từ mô hình sẽ được kết hợp để tạo thành mã ID cần thiết.

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

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]:

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.

• 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ự đoán để có ID cần đọc.

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

CRNN

CRNN (Convolutional Recurrent Neural Network) là kiến trúc đặc biệt cho nhận diện văn bản trong OCR, kết hợp giữa CNN và RNN CNN có nhiệm vụ trích xuất đặc trưng từ ảnh đầu vào, trong khi RNN xử lý văn bản theo dạng chuỗi dựa trên các đặc trưng đó.

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.

From the feature maps obtained at the output of the CNN, we transform them into feature vectors by dividing the feature maps into columns The i-th feature vector is formed by vertically concatenating all the i-th columns of the feature maps The sequence of feature vectors is referred to as the feature sequence.

RNN sẽ dự đoá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ớpRNN, ta sẽ có tỉ lệ từng chữ cái ở từng khung hình.

Bảng 3.1 Ví dụ về feature sequence y1 y2 y3 y4 a 0.90 0.2 0.03 0.26 b 0.05 0.01 0.02 0.74 c 0.05 0.79 0.00 0.00

Trong quá trình chuyển đổi các dự đoán tại mỗi khung hình của RNN thành chuỗi văn bản, chúng ta cần chọn chuỗi có xác suất cao nhất Tuy nhiên, có thể xảy ra trường hợp một chữ cái xuất hiện ở hai khung hình liên tiếp, ví dụ như khi đọc từ "hey", kết quả có thể là "hheyy" Để khắc phục, chúng ta có thể gộp các chữ cái trùng nhau lại Tuy nhiên, điều này có thể dẫn đến sai sót khi gặp các từ có ký tự trùng nhau như "hello".

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

Trong bài viết này, chúng ta sẽ khám phá CTC - Connectionist Temporal Classification để giải quyết các vấn đề liên quan CTC thêm ký tự blank, ký hiệu là -, vào giữa các ký tự trùng nhau và gộp chúng lại Cuối cùng, CTC loại bỏ các ký tự blank để tạo ra chuỗi văn bản cuối cùng Để xác định chuỗi kết quả, CTC tính toán tỉ lệ của tất cả các chuỗi văn bản dựa trên phân phối đầu ra của RNN, sau khi đã gộp ký tự trùng và loại bỏ blank, và chọn chuỗi có xác suất cao nhất Xác suất của một chuỗi văn bản X là tổng xác suất của tất cả các align, trong đó align là chuỗi văn bản sau khi CTC xử lý trở thành chuỗi X Ví dụ, các align của chuỗi "abc" với 5 khung hình có thể là –abc, aa-bc, a-b-c, v.v.

"abc" sẽ là tổng xác suất của tất cả các align đó Ví dụ xác suất của aa-bc sẽ là 0.9 * 0.2

Chúng ta sẽ áp dụng hàm CTC loss, được tính bằng cách lấy log âm của xác suất chuỗi kết quả chính xác dựa trên phân phối nhãn y Công thức tính Loss được biểu diễn như sau: Loss = - log P(ground truth|y).

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

3.5.1 Sinh ảnh để huấn luyện mô hình

CRNN, giống như các mô hình học sâu khác, cần một lượng lớn dữ liệu hình ảnh để hoạt động hiệu quả Tuy nhiên, hiện tại chưa có bộ dữ liệu hình ảnh nào đáp ứng yêu cầu cho bài toán CCCD với 12 chữ số Do đó, chúng ta sẽ tạo ra một tập hợp hình ảnh tương tự với tập hình ảnh kiểm tra để phục vụ cho việc huấn luyện mô hình CRNN.

3.5.2 Xây dựng mô hình CRNN

Ta sẽ xây dựng mô hình CRNN, với chủ yếu là việc lựa chọn mô hình cho phần CNN và RNN.

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

3.6.1 Sinh ảnh để huấn luyện mô hình

Ta sẽ sử dụng thư viện TRDG - Text Recognition Data Generator [5] cho việc sinh ảnh này.

Dựa trên ảnh thực tế, dữ liệu sinh ra sẽ có định dạng:

• Tỉ lệ chữ số 0 xuất hiện cao hơn so với các chữ số khác: khoảng 26%, thống kê trên tập ảnh test.

• Nền ảnh được cắt từ thẻ CCCD.

Với mục đích tạo sự đa dạng cho tập ảnh, các điều kiện sau được thêm vào:

• Làm mờ ảnh ở nhiều mức độ.

• Khoảng cách giữa các chữ số từ 0 đến 4 pixel.

• Nền ảnh có thêm lựa chọn: Gaussian noise, Plain white, Quasicrytal.

• Chuyển dịch ảnh theo chiều dọc và chiều ngang.

• Zoom ảnh với tỉ lệ 0.1.

Tất cả các hình ảnh được chuyển đổi sang định dạng Grayscale, với tổng cộng 30.000 ảnh được tạo ra qua nhiều lần thử nghiệm Trong số đó, 24.000 ảnh được sử dụng cho quá trình huấn luyện (train) và 6.000 ảnh cho quá trình xác thực (valid), mang lại hiệu quả tối ưu về độ chính xác và thời gian huấn luyện mô hình.

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

3.6.2 Xây dựng mô hình CRNN

Sau nhiều lần thử nghiệm, mô hình có kết quả tốt nhất bao gồm:

• Resnet 101 cộng thêm 1 lớp tích chập 256x3x3 ở phần CNN.

• 2 lớp LSTM bidirectional ở phần RNN.

• Hàm mất mát CTC loss.

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

Tập test sẽ bao gồm 262 ảnh ID.

Thời gian chạy mỗi ảnh (s) Độ chính xác (detect chữ số) Độ chính xác (test)

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

Việc áp dụng CNN cho phép đạt được kết quả ấn tượng, với chỉ 1 ảnh dự đoán sai trong tổng số 262 ảnh, tương đương với việc sai 1 chữ số trong 12 chữ số Quy trình xây dựng theo từng bước giúp dễ dàng hơn trong việc xác định và khắc phục lỗi, đồng thời cải thiện kết quả Hơn nữa, khi huấn luyện mô hình CNN, chỉ cần sử dụng dữ liệu là ảnh chữ số, loại dữ liệu này rất phong phú trên mạng và dễ dàng tạo ra.

Cách làm này có một hạn chế lớn là các chữ số trong ảnh cần phải tách biệt, không được dính vào nhau Nếu gặp phải ảnh có nhiễu khiến hai chữ số dính liền, thì cả hai sẽ không thể nhận diện chính xác.

Hai chữ số không được phân tách sẽ dẫn đến dự đoán sai cho cả hình ảnh Do đó, phương pháp này không thể áp dụng cho các bài toán chữ viết tay Bên cạnh đó, thời gian dự đoán của CNN lâu hơn nhiều so với CRNN.

Mặc dù kết quả từ việc sử dụng CRNN không đạt được hiệu suất cao như khi triển khai bằng CRNN, nhưng vẫn đạt mức độ cao Đặc biệt, CRNN có khả năng giải quyết vấn đề chữ số dính nhau và tốc độ xử lý nhanh hơn nhiều so với việc sử dụng CNN, do đó rất phù hợp cho nhiều bài toán trong tương lai.

Mặc dù là một mô hình end-to-end, việc sửa lỗi và cải thiện kết quả gặp nhiều khó khăn hơn Mô hình này yêu cầu một lượng dữ liệu ảnh lớn, dẫn đến thời gian huấn luyện kéo dài Đặc biệt, dữ liệu ảnh của CRNN phức tạp hơn so với việc triển khai bằng CNN, vì cần sinh ra 12 chữ số thay vì chỉ 1 chữ số.

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

MTCNN

MTCNN - Multi-task Cascaded Convolutional Networks [9] được sử dụng nhằm xác định vị trí khuôn mặt trong bức ảnh.

MTCNN là một mô hình phát hiện khuôn mặt bao gồm ba mạng CNN hoạt động đồng thời, mỗi mạng có cấu trúc và vai trò riêng Đầu ra của MTCNN là một vector đặc trưng, thể hiện vị trí khuôn mặt trong ảnh, bao gồm các điểm quan trọng như mắt, mũi và miệng.

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

MTCNN tạo ra một image pyramid, tức là nhiều bản sao với kích thước khác nhau để đầu vào cho ba tầng chồng nhau, giúp phát hiện khuôn mặt ở nhiều kích thước khác nhau Tại tầng 1, mạng đề xuất (P-net) được sử dụng để xác định các cửa sổ tiềm năng và vector hồi quy tương ứng Sau đó, các cửa sổ chứa khuôn mặt được hiệu chuẩn dựa trên các vector hồi quy, và cuối cùng, NMS (Non-maximum suppression) được áp dụng để loại bỏ các cửa sổ không cần thiết.

Tất cả các cửa sổ chứa khuôn mặt ở tầng 1 sẽ được sàng lọc qua mạng lọc R-net để loại bỏ các cửa sổ không chứa khuôn mặt Sau đó, như ở tầng 1, chúng ta thực hiện hiệu chuẩn và NMS Tại tầng 2, MTCNN sẽ thêm các pixel zero vào những phần thiếu của bounding box nếu nó vượt quá biên của ảnh, từ đó tạo ra tọa độ mới cho các bounding box còn lại.

Tầng 3 cũng tương tự như tầng 2, sử dụng CNN chi tiết nhất được gọi là mạng đầu ra (O-net) để lọc kết quả một lần nữa Kết quả đầu ra của mạng sẽ bao gồm 4 tọa độ của bounding box, tọa độ của 5 vị trí chính trên khuôn mặt: 2 mắt, mũi,

2 bên cánh môi, và điểm tự tin của mỗi box.

FaceNet

FaceNet là một mạng nơ-ron học sâu chuyên trích xuất đặc trưng từ ảnh khuôn mặt con người Nó nhận đầu vào là ảnh mặt và trả về một vector cố định, thể hiện các đặc trưng quan trọng nhất của khuôn mặt, được gọi là embedding Từ vector này, chúng ta có thể tính toán khoảng cách giữa khuôn mặt của người đã biết và người chưa biết; nếu khoảng cách đủ gần, chúng ta có thể kết luận đó là cùng một người.

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

FaceNet bắt đầu quá trình huấn luyện bằng cách tạo ra các vector ngẫu nhiên cho tất cả các bức ảnh Sau đó, mô hình này được huấn luyện dựa trên phương pháp Triplet Loss để cải thiện độ chính xác trong việc nhận diện khuôn mặt.

• Lựa chọn ngẫu nhiên một ảnh làm mốc - Anchor.

• Lựa chọn ngẫu nhiên một ảnh cùng lớp với ảnh mốc - Positive example.

• Lựa chọn ngẫu nhiên một ảnh khác lớp với ảnh mốc - Negative example.

Để tối ưu hóa FaceNet, cần điều chỉnh các tham số nhằm giảm thiểu khoảng cách giữa ảnh mốc và ảnh cùng lớp, đồng thời tối đa hóa khoảng cách giữa ảnh mốc và ảnh khác lớp.

• Lặp lại quá trình trên.

Yêu cầu về ảnh

Để mô hình hoạt động một cách tốt nhất, ta sẽ cần đặt ra một số yêu cầu đối với ảnh chân dung:

• Ảnh chỉ chứa một khuôn mặt.

• Khuôn mặt cần được đặt chính diện: không cúi/ngẩng, không xoay sang 2 bên.

• Người được chụp không được đeo khẩu trang.

Phương hướng

Ta sẽ sử dụng MTCNN để xác định vị trí và cắt vùng ảnh chứa khuôn mặt ra.

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

Với mỗi ảnh khuôn mặt, ta thực hiện encoding thành vector embedding bằng FaceNet để có vector có độ dài cố định.

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

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

Chúng ta sẽ so sánh vector embedding của khuôn mặt từ ảnh thẻ CCCD với vector embedding của khuôn mặt từ ảnh chụp bình thường Nếu khoảng cách giữa hai vector nhỏ hơn một ngưỡng đã định, ảnh chụp này sẽ được chấp nhận; ngược lại, sẽ không được chấp nhận.

Phương pháp

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

Chúng tôi sử dụng MTCNN từ thư viện facenet_pytorch để phát hiện khuôn mặt, tiến hành resize ảnh về kích thước 170x170 và chuẩn hóa bằng cách chia cho 255 Kết quả sẽ bao gồm vùng ảnh chứa khuôn mặt cùng với tọa độ của 5 điểm chính trên khuôn mặt.

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

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

Chúng tôi đã phát triển một mô hình CNN để phân loại ảnh đeo khẩu trang, sử dụng kiến trúc VGG16 Mô hình bao gồm một lớp Fully Connected với 256 đơn vị, một lớp Dropout 0.5 để giảm thiểu hiện tượng overfitting, và một lớp Fully Connected với 1 đơn vị sử dụng hàm kích hoạt sigmoid.

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

Sử dụng MTCNN để phát hiện khuôn mặt, chúng ta tiếp tục áp dụng mô hình CNN nhằm xác định xem người trong ảnh có đeo khẩu trang hay không Nếu người đó có đeo khẩu trang, mô hình sẽ từ chối ảnh đó.

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

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

Từ 5 điểm chính trên khuôn mặt, ta xác định một tam giác với các đỉnh là mũi và 2 mắt Nếu góc ở mắt trái lớn hơn nhiều so với góc ở mắt phải, người trong ảnh có thể đang nghiêng về bên trái, và ngược lại Thực nghiệm cho thấy, để mô hình đạt hiệu quả tốt nhất, cần đặt ngưỡng chênh lệch giữa 2 góc nhỏ hơn 23 độ.

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

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

Chúng tôi sẽ áp dụng mô hình InceptionResnetV1, sử dụng trọng số đã được huấn luyện trên tập dữ liệu VGGFace2, bao gồm 3,31 triệu hình ảnh của 9.131 cá nhân khác nhau, nhằm trích xuất đặc trưng khuôn mặt Kết quả là một vector embedding dài 512 cho mỗi khuôn mặt.

4.5.5 So sánh 2 vector embedding khuôn mặt Đối với mỗi cặp vector, bao gồm 1 vector của khuôn mặt từ thẻ CCCD và

1 vector của khuôn mặt từ ảnh chụp, ta sẽ tính khoảng cách Euclid Nếu khoảng cách này nhỏ hơn 0.888, ta có thể chấp nhận 2 ảnh của cùng 1 người.

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

Kết quả thực nghiệm

Chúng tôi đã tiến hành kiểm tra hai trường hợp xác thực danh tính: một là khi người A muốn xác thực là chính mình và hai là khi người B muốn xác thực là A Số lượng đối tượng tham gia thử nghiệm là 6 người, với tổng số ảnh chụp được (không bao gồm thẻ CCCD) là 52 bức.

Để giải quyết vấn đề sử dụng sim rác, cần thực hiện việc đối chiếu khuôn mặt của chủ số điện thoại với thẻ CCCD Mục tiêu là hạn chế tình huống chấp nhận sai (False Acceptance), tức là không để người B bị nhận diện nhầm thành người A.

Trong quá trình phân loại hình ảnh, không có trường hợp nào bị phân loại sai đối với 4 ảnh có đeo khẩu trang, trong khi đó có 2 trong số 48 ảnh không đeo khẩu trang bị phân loại sai, bao gồm 1 ảnh đang cúi và 1 ảnh nghiêng sang trái 90 độ.

• Số trường hợp không nghiêng mặt: 186

• Số trường hợp nghiêng mặt: 126

• Số trường hợp False Rejection - không chấp nhận A là A: 3/31, trong đó có 1 ảnh đang ngẩng đầu.

• Số trường hợp False Acceptance - chấp nhận B là A: 0/155

• Tốc độ trung bình mỗi lần thử: 3.375s

Nhận xét

Kết quả hiện tại đáp ứng yêu cầu đề ra, không có trường hợp nào chấp nhận sai người Độ chính xác trong việc xác thực A là A đạt khoảng 90.3%, mặc dù số lượng phép thử cho trường hợp này vẫn còn hạn chế.

Mô hình hiện tại vẫn gặp một số vấn đề, đặc biệt là tốc độ kiểm tra chậm Để phân loại ảnh có đeo khẩu trang, mỗi bức ảnh cần trải qua ba lần xác định vị trí khuôn mặt.

• Xác định khuôn mặt và không xử lí vùng ảnh khuôn mặt để phân loại đeo khẩu trang.

• Xác định các điểm chính trên khuôn mặt để xác định góc nghiêng mặt.

• Xác định khuôn mặt và xử lí vùng ảnh khuôn mặt để xác thực khuôn mặt.

Thuật toán hiện tại còn thiếu sót trong việc xác định khuôn mặt đang cúi hoặc ngẩng, điều này ảnh hưởng đến độ chính xác Hơn nữa, tính thực tiễn của mô hình cũng gặp phải vấn đề, vì kết quả đạt được chủ yếu dựa vào việc so sánh với ảnh chụp, cho phép người dùng có thể sử dụng ảnh có sẵn để vượt qua mô hình này.

[2] Phạm Bá Cường Quốc Github pbcquoc/vietocr 2022.

[3] pytesseract - PyPI pypi.org/project/pytesseract.

[4] Pragatiunna Github pragatiunna/License-Plate-Number-Detection 2021.

[6] Baoguang Shi, Xiang Bai and Cong Yao An End-to-End Trainable Neural Net-work for Image-based Sequence Recognition and Its Application to Scene Text Recog-nition 2015.

[7] Alex Graves, Santiago Fernández, Faustino Gomez and Jurgen Schmidhuber Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Re-current Neural Networks 2006.

[8] Dan Sporici PyTorch CRNN: Seq2Seq Digits Recognition w/ CTC codingvi-sion.net 2020.

[9] Kaipeng Zhang, Zhanpeng Zhang and Zhifeng Li Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks IEEE 2016.

[10] Luka Dulcic Face Recognition with FaceNet and MTCNN arsfutura.com. 2019.

[11] Florian Schroff, Dmitry Kalenichenko and Javes Philbin FaceNet: A Unified Embedding for Face Recognition and Clustering IEEE 2015.

Ngày đăng: 28/09/2023, 20:28

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[3] pytesseract - PyPI. pypi.org/project/pytesseract Sách, tạp chí
Tiêu đề: pytesseract - PyPI
[2] Phạm Bá Cường Quốc. Github pbcquoc/vietocr. 2022 Khác
[4] Pragatiunna. Github pragatiunna/License-Plate-Number-Detection. 2021 Khác
[5] Belval. Github Belval/TextRecognitionDataGenerator. 2022 Khác
[6] Baoguang Shi, Xiang Bai and Cong Yao. An End-to-End Trainable Neural Net-work for Image-based Sequence Recognition and Its Application to Scene Text Recog-nition. 2015 Khác
[7] Alex Graves, Santiago Fernández, Faustino Gomez and Jurgen Schmidhuber. Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Re-current Neural Networks. 2006 Khác
[8] Dan Sporici. PyTorch CRNN: Seq2Seq Digits Recognition w/ CTC. codingvi-sion.net. 2020 Khác
[9] Kaipeng Zhang, Zhanpeng Zhang and Zhifeng Li. Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks. IEEE. 2016 Khác
[10] Luka Dulcic. Face Recognition with FaceNet and MTCNN. arsfutura.com.2019 Khác
[11] Florian Schroff, Dmitry Kalenichenko and Javes Philbin. FaceNet: A Unified Embedding for Face Recognition and Clustering. IEEE. 2015 Khác

HÌNH ẢNH LIÊN QUAN

Hình 2.3  Phát hiện keypoint trên CCCD mẫu - (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
Hình 2.3 Phát hiện keypoint trên CCCD mẫu (Trang 12)
Hình 2.2  Ảnh CCCD mẫu đảm bảo đầy đủ các tiêu chí - (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
Hình 2.2 Ảnh CCCD mẫu đảm bảo đầy đủ các tiêu chí (Trang 12)
Hình 2.4  Phát hiện keypoint trên CCCD cần xoay - (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
Hình 2.4 Phát hiện keypoint trên CCCD cần xoay (Trang 13)
Hình 2.5  Ghép các keypoint của 2 ảnh - (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
Hình 2.5 Ghép các keypoint của 2 ảnh (Trang 14)
Hình 2.6  Kết quả xoay ảnh - (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
Hình 2.6 Kết quả xoay ảnh (Trang 14)
Hình 3.14  Luồng hoạt động của CRNN - (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
Hình 3.14 Luồng hoạt động của CRNN (Trang 20)
Hình 3.17  Trường hợp dự đoán sai duy nhất khi nhầm chữ số 0 thành chữ số 8 - (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
Hình 3.17 Trường hợp dự đoán sai duy nhất khi nhầm chữ số 0 thành chữ số 8 (Trang 24)
Hình 4.18  Luồng hoạt động của MTCNN - (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
Hình 4.18 Luồng hoạt động của MTCNN (Trang 25)
Hình 4.20  Tầng 2: R-net - (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
Hình 4.20 Tầng 2: R-net (Trang 26)
Hình 4.22  Luồng hoạt động của FaceNet - (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
Hình 4.22 Luồng hoạt động của FaceNet (Trang 27)
Hình 4.24  Các bước sử dụng FaceNet - (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
Hình 4.24 Các bước sử dụng FaceNet (Trang 28)
Hình 4.25  Ảnh chụp đầy đủ và vùng ảnh chứa khuôn mặt sau khi đã được xử lí - (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
Hình 4.25 Ảnh chụp đầy đủ và vùng ảnh chứa khuôn mặt sau khi đã được xử lí (Trang 29)
Hình 4.26  Mô hình CNN phân loại đeo khẩu 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
Hình 4.26 Mô hình CNN phân loại đeo khẩu trang (Trang 30)
Hình 4.27  Phát hiện ảnh đeo khẩu 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
Hình 4.27 Phát hiện ảnh đeo khẩu trang (Trang 30)
Hình 4.28  Ảnh được xác định đang quay sang phải - (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
Hình 4.28 Ảnh được xác định đang quay sang phải (Trang 31)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w