ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA KHOA HỌC MÁY TÍNH ---------- ĐỒ ÁN: OCR ID CARD Thành viên: Trần Hoàng Sơn : 18521351 Nguyễn Trường Thịnh : 18521447 Nguyễn Văn Thịnh : 18521448 Phạm Ngọc Trường : 18521571 Lớp: CS406.KHCL GVHD: TS. Mai Tiến Dũng Mc lc I. Bảng phân công. GIỚI THIỆU VỀ ĐỀ TÀI.
Lý do chọn đề tài:. Tổng quan về bài toán. Đối tượng nghiên cứu:. Các thách thức:.
Các bước triển khai:. Các phương pháp tiền xử lý ảnh. Tổng quan các model được sử dng. Giải thuật AI.
Xây dựng mô hình. Tổng quan về pipeline. Tổng quan về pipeline. Nhận xét về core AI.
Các trường hợp ngoại lệ. Kết quả quá trình OCR. Phương hướng phát triển. Bảng phân công Thông tin thành viên Công việc Tên MSSV Xây dựng kiến trúc hệ thống 1852157 Phạm Ngọc Trường (Leader) Core AI 1 Flask API 1852135 Reactjs Trần Hoàng Sơn 1 Deep model 1852144 Corner detector Nguyễn Trường Thịnh 7 Một số phép xử lý ảnh 1852144 Reactjs Nguyễn Văn Thịnh 8 Một số phép xử lý ảnh II.
GIỚI THIỆU VỀ ĐỀ TÀI 1. Lý do chọn đề tài: 4 - Lý do khách quan: OCR (Optical Character Recognition): là quá trình nhận dạng ký tự quang học từ hình ảnh để chuyển các hình ảnh của chữ viết tay hoặc đánh máy thành văn bản tài liệu cho máy tính có thể đọc và hiểu được. Đây là tiền đề cho nhiều bài toán quan trọng trong việc ứng dụng NLP (Natural Language Processing – Xử lý ngôn ngữ tự nhiên) trong thực tế bên cạnh speed- to-text (chuyển đổi ngôn ngữ tiếng nói thành text) Trong khuôn khổ đồ án, nội dung đề tài tập chung chủ yếu vào việc trích xuất dữ liệu text từ các loại giấy tờ định danh người dùng như chứng minh nhân dân, căn cước công dân,… qua đó hỗ trợ quá trình làm thủ tục giấy tờ hành chính pháp lý được nhanh chóng. - Lý do chủ quan: Ứng dụng công nghệ xử lý ảnh vào bước tiền xử lý trước quá trình OCR, nhằm cải thiện hiệu suất cũng như chất lượng của mô hình.
Tìm hiểu cách triển khai phần mềm chạy trong thực tế với môi trường phát triển là web, thiết kế theo dạng là client – server, công nghệ sử dụng ở frontend là Reactjs, công nghệ sử dụng ở backend là Flask API. Tổng quan về bài toán - Các dự án OCR open source hiện này phải kể đến tesseractOCR, easyOCR, paddleOCR,. Về ưu nhược điểm thì mô hình nào cũng có, những mô hình training trên nhiều ngôn ngữ thì thường có một ngôn ngữ là core, là mục tiêu chính của mô hình. Điển hình như ở các loại chữ tượng hình như tiếng Trung, tiếng Hàn, tiếng Nhật, paddleOCR là mô hình có độ chính xác cao nhất.
Đối với các ngôn ngữ dựa trên ký tự aphalbet, không bao gồm dấu thanh thì easyOCR lại là mô hình mạnh 5 hơn cả. Riêng đối với tiếng việt, ngôn ngữ mà ông cha ta sáng tạo ra, những mô hình kể trên thường không đạt được độ chính xác cao. - Qua đó nhóm chung em đề xuất việc phối hợp nhiều mô hình khác nhau với core dựa trên detect của easyOCR và recognize của vietOCR (mô hình OCR trên tiếng việt mạnh nhất hiện nay). Ở phần sau nhóm chúng em sẽ trình bày rõ hơn về việc kết hợp này.
Đối tượng nghiên cứu: - Ảnh chụp chứng minh nhân dân, căn cước công dân 4. Các thách thức: - Đối với dataset: Đối tượng nghiên cứu của đề tài là dữ liệu nhạy cảm vì thế nhóm gặp khó khăn trong quá trình crawl data, lượng dữ liệu ít Đa phần các dữ liệu lấy được từ các nguồn trên internet đều là fake data được sinh ra dựa trên một kiến trúc GAN, hoặc các quá trình xử lý/ cắt ghép ảnh của photoshop - Đối với tài nguyên phục vụ quá trình nghiên cứu: Do bài toán thuộc nhiều lĩnh vực từ Computer Vision, Deep Learning, NLP và một phần AI. Các bài toán thuộc những lĩnh vực này yêu cầu cấu hình phần cứng cao để tăng tốc độ tính toán. Giảm thiểu thời gian chờ và sai sót do hiện tượng crash trong quá trình tính toán.
- Đối với quá trình triển khai thực tế Vì triển khai theo dạng client – server nên kết nối mạng là vấn đề tối quan trọng. Backend sử dụng nhiều model deep learning nên yêu cầu server có hỗ trợ GPU 5. Các bước triển khai: 6 1. Xây dựng pipeline xử lý 2.
Thử nghiệm các model deep 3. Xây dựng các module tiền xử lý ảnh 4. Xử lý logic cho AI 5. Apply model deep có tích hợp AI 6.
Xây dựng API qua Flask 7. Xử lý lỗi về HTTP protocol, cũng như các trường hợp exception trong logic 8. Xây dựng app React 9. Responsive và thiết kế animation cho app 10.
Connect Flask server với React 11. Thử nghiệm hàng loạt III. Các phương pháp tiền xử lý ảnh 1. Blur gaussian - Blur là quá trình làm mịn ảnh, khử nhiễu.
Nguyên tắc chung của quá trình này là nhân ma trận ảnh với một ma trận lọc (kernel) - Blur gaussian là bộ lọc đơn giản nhất - Đây là một kernel của gaussian - Kết quả ảnh sau khi trải qua quá trình blur gaussian: các pixel ảnh trong khu vực được khoanh vùng đỏ giảm hiện tượng bị rỗ một các rõ rệt, song phần viền cạnh lại bị làm mờ 8 1. Blur bilateral - Tương tự Blur gaussian: bilateral cũng sử dụng một ma trận lọc như gaussian. - So với gaussian, bilateral chỉ tính toán trên các điểm ảnh cùng mức năng lượng, qua đó đảm bảo được độ dốc của biên cạnh sau quá trình tính toán - Kết quả của blur bilateral: các điểm ảnh nhiễu được làm mờ song vùng biên cạnh vẫn được đảm bảo 9 1. Brightness - Brightness là quá trình xử lý độ sáng cho hình ảnh.
Tùy theo điều kiện ảnh đầu vào mà ta tăng hay giảm độ sáng cho phù hợp. Increase brightness : - Thực hiện khi ảnh đầu vào quá tối, chụp trong điều kiện thiếu sáng - Ví dụ về ảnh thiếu sáng : - Cách thực hiện: để tăng sáng cho ảnh mức xám, đơn giản ta chỉ cần cộng thêm một giá trị cho mọi pixel. với const > 0 - Đối với ảnh màu, ta thực hiện tương tự như ảnh mức xám nhưng trên từng kênh màu riêng biệt. - Ở đây nhóm chúng em đề xuất đến việc sửa dụng kênh màu HSV để bảo toàn sắc thái màu của ảnh đầu vào.
- Trong đó : H (hue) là vùng sắc thái màu S (saturation) là độ bão hòa màu V (value) là độ sáng - Thông thường với các kênh mau RGB, việc tăng sáng là quá trình công thêm một const cho lần lượt cả 3 kênh R, G, B. Song với việc thực hiện tăng sáng trên kênh HSV, ta chỉ việc tăng giá trị cho kênh V (value) để đạt được hiệu quả như mong muốn. - Kết quả thực nghiệm: tùy theo điều kiện ảnh đầu vào, mà ta điều chỉnh tham số cho phù hợp. Decrease brightness : - Thực hiện khi ảnh đầu vào bị chói sáng, nhiều nguồn sáng mạnh.
- Trong thực tế, ít khi ta thực hiện thao tác này. - Cách thực hiện: tương tự với Increase brightness với const < 0 11 - Kết quả thực nghiệm: tùy theo điều kiện ảnh đầu vào, mà ta điều chỉnh tham số cho phù hợp. Contrast - Contrast hay còn gọi là độ tương phản, nó thể hiện sự chênh lệch độ sáng giữa các vùng sáng tối khác nhau trong ảnh. - Cách thực hiện: với contrast là hệ số tương phản - Trong thực tế, việc tăng giảm giảm độ tương phản thường đi kèm với việc tăng giảm độ sáng để đạt được hiệu quả tốt nhất, lúc này, cách thực hiện sẽ là: - Với contrast và const có xu hướng ngược nhau : Khi contrast > 1 thì const < 0 Khi contrast < 1 thì const > 0 - Ví dụ khi ta có matrix : Mức độ tương phản hiện tại giữa 2 pixel liền kề là 90 – 50 = 40 - Với contrast = 2 và const = -50 Mức độ tương phản giữa 2 pixel liền kề lúc này là 130 – 50 = 80 - Kết quả thực nghiệm : Trường hợp contrast > 1 và const < 0 12 Trường hợp contrast < 1 và const > 0 1.
Histogram - Histogram là biểu đồ phân bố mật độ dữ liệu, cụ thể ở đây là cường độ của mỗi pixel ảnh (0 đến 255) - Dựa vào biểu đồ histogram ta có thể nhận định được thiên hướng của bức ảnh, các vùng sáng phân bổ như thế nào để điều chính mang lại sự hài hòa cho bức ảnh 13 - Cân bằng histogram là quá trình phân bổ lại cường độ của các pixel để tạo nên sự hài hòa trong bức ảnh - Ví dụ về một biểu đồ histogram có xu hướng tập trung vào 2 cụm giá trị: - Còn đây là bức ảnh tương ứng với biểu đồ histogram bên trên: các vùng ảnh bị phân chia rõ rệt, thiếu đi sự hài hòa. 14 - Biểu đồ histogram sau khi được cân bằng: cường độ của các pixel không còn tập trung như trước, mà được phân bổ rải đều khắp các giá trị - Kết quả bức ảnh sau khi được cân bằng histogram - Thực nghiệm thực tế cho thấy, histogram là giải pháp tốt để xử lý các trường hợp ảnh chụp bị chói sáng từ đèn flash của điện thoại - Ví dụ thực tế khi cân bằng histogram trên ảnh cmnd chụp từ điện thoại. Corner detector - Là quá trình dò tìm các góc tồn tại trong hình ảnh - Dựa vào vị trí 4 góc tìm được, mà ta tiến hành các phép biến đổi homography để thu được hình mới chỉ chứa CMND/CCCD. 6 - Các bước thực hiện: Bước 1: Edge detection.
Thông qua các đặc trưng về cạnh, ta tìm được tập hợp các điểm contour (đường viền) Bước 2: Rút gọn contour Ta chỉ giữ lại các góc của contour 17 Trong trường hợp có nhiều hơn 1 tập hợp contour. Ta chỉ xét đến contour có diện tích lớn nhất và có 4 đỉnh. Lý do ta chỉ xét đến các contour có 4 đỉnh là vì input của bài toán chỉ bao gồm ảnh CMND/CCCD, và các loại giấy tờ này thì có hình chữ nhật và có 4 đỉnh. Bước 3 : Sắp xếp lại danh sách đỉnh contour theo vị trí của hệ trục tọa độ Dựa vào danh sách đỉnh contour này, ta tiến hành bounding box và affine transform.
- Dưới đây là một số ví dụ khi chạy thực tế: 18 - Nhận xét: Phương pháp này hoạt động chưa thực sự hiệu quả. Thiếu khả năng nội suy khi một góc bị che khuất. Dễ bị nhiễu khi background phức tạp.