Ý tưởng sau màn mưa: tự động rà soát

Hà Nội sau trận mưa hôm qua thật sự đã giải nhiệt đi phần nào cái không khí khó cmn chịu mấy ngày qua. Mấy hôm lận ngước lên bầu trời cứ xầm xì xám xịt mà mãi không mưa nổi thiệt y như cái cảm xúc tưởng bug đã fix được mà lại không ra. Cay cú không để đâu cho hết. Vậy rồi 1 trận cuồng phong ập đến mang theo đống mưa to gió lớn ngập hết cả nửa cái Hà Nội (http://vtc.vn/pho-tay-ta-hien-ngap-nang-sau-mua-lon-xe-may-ngam-nuoc-la-liet-d330972.html).

Nhờ thế mà đầu óc thoải mái và bỗng nhiên nay trên đường đi về nhà thì mình chợt nảy ra 1 ý tưởng liên quan đến mấy cái dòng code Python mà lâu nay mình đã bỏ quên :3 Do đó bài viết này muốn chia sẻ cho anh em 1 ý tưởng khá là đơn giản nhưng có lẽ được ứng dụng khá nhiều ở các doanh nghiệp, trường học :v Đại loại thì nó như sau:

Như anh em cũng đã biết bây giờ là mùa thi đã đến rồi, các em học sinh đang lao đầu vào ôn luyện cho cái kì thi của nợ mang tên kì thi quốc gia bỏ mẹ gì ấy mà lâu nay mình ko chịu cập nhật. Các e vất vả 10 thì các thầy cô trông coi cũng vất vả 8 9 chứ cũng chả phải nhàn hạ gì cho cam. Đặc biệt là có cái công việc của mấy thầy cô đi coi thi, nào là đưa bài thi cho học sinh, sinh viên sau đó xin chữ kí xác nhận rồi sau đó sẽ có người kiểm lại để biết ai tham gia thi, ai nộp bài hay chưa… Phần này thì mình chả biết người trong cuộc người ta ngồi rà soát kiểu gì nữa chỉ biết thỉnh thoảng hay nhầm lẫn là đứa này thi nhưng ko có tên, đứa ko thi thì lại có điểm :v Thấy cái phần công việc này vất vả quá mà không biết đã có phần mềm nào ở xứ sở Đông Lào này làm ra chưa nên mình có nghĩ đến cái này và muốn chia sẻ lại cho anh em cùng tham gia thảo luận.

Ý tưởng của mình thì cũng đơn giản chứ chả phải cao siêu gì. Mình thì nghĩ như sau: đối với tờ giấy kí xác nhận thì bản chất được soạn ra từ Word hay Excel gì đó trên 1 table được căn chỉnh đẹp đẽ in ra mỗi trang sẽ có từ 20-30 dòng in tên thí sinh, mã số thí sinh đi chẳng hạn. Thì thường phần cuối sẽ là mục chữ kí cho các đồng dâm năm châu kí xác nhận vào đó. Với tình hình như vậy thì sao mình không có 1 tool quét cái ảnh đó hàng loạt rồi tool sẽ tự động trích xuất tên học sinh, mã số học sinh và chữ kí học sinh ra 1 file CSV, XML hay JSON gì gì đó. Khi trích xuất ra được thì sẽ kết nối với phần mềm quản lý để tự động kiểm tra thí sinh đó tham gia hay không :v Đấy ý tưởng đơn giản như vậy thôi :3

Tiếp đến thì mình sẽ nói sơ qua về cách cài đặt ý tưởng này với 1 số đoạn code Sample bằng Python và OpenCV để anh em lắm được.

Ví dụ như sau khi ảnh chụp trang A4 in danh sách thí sinh ra sẽ có độ phân giải là 1333*768 đi chẳng hạn. Trong đó sẽ có 20 dòng chứa tên thí sinh ngoài ra sẽ có header, footer, tên hầm bà lằng nhằng nữa đi. Vậy thì cứ coi như ước lượng đối với ảnh là bỏ đi đầu tầm 250px, đít là 150px thì chúng ta sẽ còn tầm 360px, chia ra cho 20 dòng thì sẽ tầm 18px.

Phía dưới là code python để crop ảnh, anh em xem qua để tự cắt ra là 20 dòng nhé :v

Vậy khi cắt được ra thành từng ảnh riêng lẻ, chúng ta làm sao có thể lấy ra phần thông tin như mã học sinh hay tên học sinh vì bản chất đây chỉ là ảnh. Để xử lý vấn đề này anh em có thể sử dụng thư viện nhận diện kí tự quang học OCR của Python mang tên Tessearact. Cách sử dụng anh em hãy tham khảo http://www.manejandodatos.es/2014/11/ocr-python-easy/.

Nếu anh em cảm thấy ngại cài đặt quá nhiều thì có thể sử dụng mấy API bên ngoài của các đồng chí lớn như Google hoặc Microsoft. Mấy thằng cha này thì khỏi nói rồi, API sử dụng có khi mình còn chả hiểu cần truyền cái gì ấy chứ :v Hiện tại thì mình đang sử dụng thằng https://ocr.space/

Screen Shot 2017-06-20 at 8.45.26 PM

Code mẫu để gọi thằng này thì siêu đơn giản luôn. Anh em liếc con mắt đưa tình nhìn qua như này này

Vậy là mình sẽ có 1 cái list chứa danh sách ảnh này. Rồi mình sẽ for từng cái ảnh 1 để add từng cái mà mình lấy ra được vào 1 cái list danh sách học sinh. Thông qua cái API kia mình sẽ đọc được ra mã sinh viên, tên sinh viên rồi đúng không anh em? Vậy là anh em chỉ còn cần đính kèm cái ảnh chữ kí vào cái list nữa là xong. Với cái List được tạo ra như vậy thì công việc kiểm tra học sinh sinh viên có tham gia kì thi hay không đơn giản chỉ là kiểm tra trong đối tượng đó thuộc tính chữ kí có hay không mà thôi :v

Đối với phần lấy ra ảnh chữ kí thì không khác gì lắm công việc cắt từng ảnh ra như bên trên. Ở đây chúng ta sẽ tính toán được vị trí của ô chữ kí rồi từ đó sẽ tự động cắt lấy ô đó ra là sẽ lấy được cái mẫu chữ kí đẹp đẽ ra thôi

Để lấy ra được chữ kí đẹp nhất, anh em ngồi ngâm đoạn code dưới đây nhé

Nếu anh em là biết qua bộ môn xử lý ảnh thì đoạn code trên có lẽ không có gì là quá khó nhằn cả nhưng với những người như mình thì… cũng thế =))

Ý tưởng chính của đoạn code trên đó là

  • Chuyển đổi ảnh sang chế độ gray (kiểu đen trắng thôi ấy)
  • Sử dụng threshold để nhận biết ra vùng chứa chữ kí vì vùng có chữ kí
  • Tìm những điểm ảnh màu đen trong vùng có chữ kí (màu đen là phần chữ kí trên nền màu trắng)
  • Cắt 1 vùng ảnh bao quanh vùng ảnh chứa chữ kí
  • Tạo ra 1 vùng ảnh mới thế là xong :v

Phần cuối đó là anh em ghép tất cả các đoạn code kia làm 1 thì có thể tạo ra được 1 định dạng XML, JSON để chia sẻ với các ứng dụng khác sau khi làm xong rồi đó :v Nói qua thì chả có gì khó nhằn lắm phải không anh em :3 Mình là mình cũng cảm thấy thế đấy =))

Các phần code này mình đều đã làm từng phần nhưng chưa thực sự kết nối các module này với nhau vì hiện tại đang bận chết mẹ :(( Bao giờ làm xong thì mình sẽ chia sẻ nhé :v Chắc là sớm thôi tầm 3 4 tháng gì đó =)) Anh em nào ko đợi được thì chịu khó tự làm theo nhé :v Giờ để giải tỏa đầu óc sau bài viết nhiều chữ lần này thì anh em hãy dạo qua cái bài hát đang điên đảo thế giới ảo với hơn 2 tỷ view sau 5 tháng nhé :v

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s