Tải bản đầy đủ (.pdf) (19 trang)

Xử Lý Ảnh Trích Xuất Thông Tin Từ Chứng Minh Thư.pdf

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 (4.5 MB, 19 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNGĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CƠ KHÍ </b>

<b>BỘ MƠN CƠ ĐIỆN TỬ ---*---</b>

<b> Giáo viên hướng dẫn: TS. Mạc Thị Thoa </b>

<b> TS. Phạm Đức An</b>

<b> Sinh viên thực hiện : Đặng Hoàng Long (20184513) Vũ Đức Tuyên (20141804) </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN </b>

Giáo viên hướng dẫn:

Sinh viên thực hiện :

Lớp :

1. Nội dung ………

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>LỜI NĨI ĐẦU</b>

“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 “<b>Trích xuất thông tin từ chứng minh thư </b>”.

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 tố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 tố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 tốn thực tế. Dù rất cố gắng trong việctì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 hồ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 hồn thành báo cáo mơn học này. Em xin chân thành cảm ơn

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>I.Đặt vấn đề</b>

- 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 số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

<b>nhờ giải pháp định danh khách hàng điện tử (eKYC). Và bài toán Trích xuất </b>

<b>thơng tin từ chứng minh thư chính là bài toán nhỏ trong ứng dụng định danh </b>

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

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>II.Tổng quan đề tài</b>

Hiện nay, máy tính đang phát triển mạnh mẽ, tốc độ xử lý khôngngừng được nâng lên. Cùng với nó là sự ra đời của các phần mềm thơngmỉ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 trongnhữ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ậndạ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ốngnhư 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áchồ 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 tốn, nhập liệu tự động,kiểm tra thơng tin trên passport...

<b>Hình 1.1 Thu nhận ảnh tài liệu</b>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Trang ảnh tài liệu được đề cập ở đây là các file ảnh số hoá thu được bằngcách quét các trang tài liệu dùng máy scanner, máy ảnh số, hay nhận từ mộtmá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 đacấ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 theosẽ tiến hành nhận dạng các vùng thông tin văn bản đã được xác định. Bướchậ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

<b>cấu trúc trang văn bản. </b>

<b>Hình 1.2 Quy trình chung của 1 hệ thống OCR</b>

1.Bài toán nhận diện chứng minh thư

Đây là một bài tố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 tố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

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Segmentation, Optical Character Recognition. Các bước cơ bản của bài tốn có thể giải quyết như sau đây:

<b>Hình 1.3 Sơ đồ hệ thống phân tích bố cục và cấu trúc tài liệu</b>

Tiền xử lý ảnh nhận đầu vào từ ảnh raw data. Crop vùng chứachứ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 tốn nhận diện chứng minh thư hồn chỉnh.

<b>2.Một số thuật toán tiền xử lý ảnh</b>

<i><b>2.1</b></i><b>Nhị phân ảnh</b>

Nhị phân ảnh (hay còn gọi là <i>phân ngưỡng</i>) 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.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>2.2 Crop vùng chứa CMND</b>

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 tố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 <i>nhị phân hóa bức ảnh</i>. 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

<i>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</i>

<b>Sử dụng contour trong opencv</b>

Opencv hỗ trợ cho chúng ta hàm để tìm contour của một bức ảnhmodifiedImage, contours, hierarchy = cv2.findContours(binaryImage, typeofContour, methodofContour)

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,

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

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

cv2.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.

<small>contourIndex Vị trí của contor, thông thường chúng ta để -1</small>

<small>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).</small>

<small>thickness : độ dày của đường contour cần vẽ, giá trị thickness càng lớn thì đường contor vẽ càng bự</small>

Sau đó lấy ra 4 góc của ảnh thơng qua thuật tốn tìm diện tích lớn nhất trong ảnh.

<b>Hình 1.3 </b>

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

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

bo 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.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<small>ρ = x.cosθ + y.sinθ (ρ đ c là ro, còn đ c θ là theta nhé)ọọ</small>

<small>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ànhvà đoạn thẳng ngắn nhất nối tới gốc tọa độ (đơn vị là radian).</small>

<small>Hình minh họa trong hệ tọa độ Đề Cát</small>

<small>Hình minh họa sử dụng trong OpenCV</small>

<small>Lưu ý: Hệ tọa độ trên máy tính có gốc tọa độ ở góc trên bên trái</small>

<small>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 tố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.</small>

MÔ TẢ CÁCH HOẠT ĐỘNG CỦA THUẬT TỐN

<small>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 tốn càng lâu, cịn mảng nhỏ thì nhanh hơn nhưng khơng chính xác bằng.</small>

<small>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 </small>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<small>trên đường thẳng đó, cứ mỗi pixel tìm thấy thì cộng thêm giá trị vào ô ứng với (ρ, θ).</small>

<small>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</small>

<small>Sau q trình tính tốn thì mỗi ơ sẽ có giá trị là số pixel nằm trên đường thẳng đó.</small>

SỬ DỤNG HÀM HOUGHLINES TRONG OPENCV

<small>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.</small>

voidHoughLines(InputArray image,OutputArray lines,doublerho,

<small>image – ảnh input nhị phân (ảnh có thể bị thay đổi khi tính tốn)lines – Output là vector chứa các đường thẳng. Mỗi đường thẳng chứa 2 giá trị (ρ, θ)</small>

<small>rho – Khoảng cách của các đường thẳng tính bằng pixelstheta – Khoảng cách góc của các đường thẳng tính bằng radiansthreshold – Số lần được tìm thấy phải vượt qua ngưỡng mới lấysrn – Dùng cho multi-scale</small>

<small>stn – Cũng dùng cho multi-scale</small>

Hàm PROBABILISTIC HOUGH

Hàm HoughLines() phải tính tốn q nhiều để tìm đường thẳng, cịn Probabilistic Hough ít tính tố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ểmThuật tố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

<b>Phương pháp này có ưu điểm là khắc phục được nhược điểm của </b>

<b>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.</b>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>Ảnh gốc</small>

<small>Biến đổi ảnh bằng hàm Canny</small>

<small>Sau đó tìm đường thẳng và vẽ</small>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>III.Thuật tốn phân tích ảnh chứng minh nhân dân</b>

<b>Giấy chứng minh nhân dân </b>hay <b>chứng minh thư </b>(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 q trình tin họcƣ hố, đơ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ậndạ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 đề

Trong q 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.ƣ

<b>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 độ </b>ƣphân giải 300 dpi, tách lấy các tr ờng thông tin: ƣ <i>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à</i>

<i>Nơi cấp. </i>

<b>III.1Tiền xử lý ảnh</b>

<b>Hinh 3. 1 Tiền xử lý ảnh mặt trước CMTCrop vùng chứa ảnh CMND</b>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Sử dụng phương pháp HouglinesP Và WrapImage đề trải đều ảnh CMNDTrướ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

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<b>Phân vùng thơng tin</b>

<b>Tìm contours của chữ và sử dụng retangle để lấy đường bao vùng thông tin</b>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<b>Cuối cùng đưa các ảnh thông tin cắt được qua OCR để thu được thông tin và lưu trữ dưới dạng file TXT</b>

<b>IV.Thử nghiệm và đánh giá</b>

Trong chương này sẽ mô tả một cách chi tiết q trình cài đặt thử nghiệmthuật tốn, cũng như đánh giá các kết quả đạt được trên các bộ dữ liệu khác nhau.

Thuật toán thử nghiệm được cài đặt bằng ngơn ngữ lập trình C/C++ (Microsoft Visual Studio 2019), sử dụng thư viện xử lý ảnh Leptonica cho việc đọc/ghi ảnh và các thao tác xử lý ảnh cơ bản.

Thuật toán đưa ra tách được gần như 100% các trường thông tin yêu cầu. Một số trường hợp các có thể bị mất một phần thơng tin hoặc coi nhiễu như một phần thông tin của trường. Thuật toán chỉ thất bại trong trường hợp các trường thông tin bị mờ do thời gian, nhận diện thông tin chính xác 90%

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Tìm hiểu được một số thuật toán xử lý ảnh hay được dùng trong bước tiền xử lý của một hệ thống nhận dạng hồn chỉnh. Đó là các phương pháp nhị phân ảnh, căn chỉnh độ nghiêng của trang văn bản, các tốn tử hình thái. Trên cở sở hiểu biết đó có thể vận dụng được vào các bài tốn khác.

Tìm hiểu và tổng qt hố các ph ơng pháp phân tích ảnh tài liệu, ƣcũng nh nắm được các ưuƣ nhược điểm của từng phương pháp. Từ đó đưa ra được các giải pháp cho bài tốn đặt ra

Đã áp dụng thành cơng các kiến thức tìm hiểu được vào cài đặt thử nghiệm chương trình phân tích ảnh CMT. Kết quả của ch ơng trình đạt ƣđ ợc là tốt và có thể áp dụng vào thực tế. ƣ

Tuy nhiên, do thời gian làm bài tập lớn hạn chế, trong khi khối lượng cơng việc lớn nên cịn nhiều vấn đề tồn tại chưa được giải quyết:

Chương trình mới dừng lại ở bước thử nghiệm, chưa phải là một chương trình hồn chỉnh, đầy đủ các tính năng

Thuật tốn mới chỉ dừng lại ở việc phân tích ảnh CMT, chưa khái quá hoá cho các ảnh thẻ bất kỳ.

Hướng phát triển tiếp theo là, tiếp tục nghiên cứu hoàn thiện chương trìnhđể có thể áp dụng vào thực tế.

Mở rộng các tính năng của chương trình (như thêm phần nhận dạng, kiểm lỗi chính tả) để thành một chương trình hồn chỉnh. Khái qt hố thuật tốn để có thể xử lý được ảnh thẻ bất kỳ

</div>

×