Bảng image file list control 3ds max là gì năm 2024
Hello I was trying to make a simple multisubobject material , but whenever I go to each submaterial to add a different diffuse image, it loads a window and says select image file list contro l and sets to one and so even if I change file map for the other subobject materials it keeps using always the same image and this file, why ? and how can I get rid of it and use a different image for every single material? I remember I could do but may be I changed something and now isn't working to me? Show Trong thời điểm nhà nước đang thúc đẩy mạnh mẽ quá trình chuyển đổi số như hiện nay, Document Understanding nói chung cũng như Table Extraction nói riêng đang trở thành một trong những lĩnh vực được quan tâm phát triển và chú trọng hàng đầu. Vậy Table Extraction là gì? Document Understanding là cái chi? Hãy đọc tiếp các phần bên dưới để biết thêm thông tin chi tiết! Nói cao siêu vậy thôi, trong bài viết này, mình sẽ cùng các bạn điểm qua 1 vài điểm đáng chú ý trong 2 lĩnh vực này (thực chất là tập con - tập cha của nhau thôi) để các bạn có thể nắm được tổng quan. Sau đó, chúng ta sẽ đi sâu vào phần code trâu bò, mà cụ thể là code cho table extraction với opencv đã được mình nêu ở tiêu đề bài viết (phần được mong đợi nhất). Oke, hãy bắt đầu tìm hiểu nội dung bằng một cái Upvote nào 1. Table ExtractionTrước khi đi vào chủ đề chính của bài viết: Table Extraction, mình muốn trình bày sơ qua 1 chút về một bài toán bao quát hơn: Document Understanding để chúng ta có một cái nhìn toàn diện và rõ ràng hơn về mảng nghiên cứu này. 1.1 Document UnderstandingMột cách dễ hiểu, Document Understanding hướng đến việc trích xuất và thu thập dữ liệu từ các tài liệu khác nhau và đảm bảo xử lý tài liệu từ đầu đến cuối. Để thực hiện điều đó, các giải pháp cần đảm bảo hoạt động với nhiều loại tài liệu khác nhau (từ có cấu trúc đến phi cấu trúc), nhận dạng các đối tượng khác nhau như bảng biểu, chữ viết tay, chữ ký hoặc checkbox cũng như có thể xử lý các định dạng tệp khác nhau (docx, pdf, image, ...). Như gif minh họa dưới đây (source: NanoNet), một cách chung nhất, các giải pháp cho Document Understanding bao gồm 2 thành phần không thể thiếu: Robotic Process Automation (RPA) và Artificial Intelligence (AI) Robotic Process Automation (RPA) đề cập đến những công nghệ giúp tự động hóa các tác vụ quản trị thông qua các bot phần mềm và phần cứng. Các bot này tận dụng các giao diện người dùng để nắm bắt dữ liệu và thao tác các ứng dụng như con người vẫn làm, mà không cần đến sự can thiệp trực tiếp của con người. Trong đó, Optical Character Recognition (OCR) là một trong những tính năng quan trọng được tập trung phát triển trong RPA. Dưới đây là workflow của những công nghệ RPA nói chung. Các bạn có thể đọc 1 bài phân tích chi tiết hơn về RPA cũng như Document Understanding tại blog của NanoNet: A Comprehensive Guide to OCR with RPA and Document Understanding 1.2 Tổng quan Table Extraction
Table Extraction là 1 task con của Document Understanding, mà trong đó, tập trung chính vào nhiệm vụ tự động phát hiện, phân tích và bóc tách các thông tin trong các bảng biểu (nếu có) của tài liệu. Trong bài viết này, mình quan tâm đến các tài liệu scan, hay cụ thể hơn là tài liệu dạng ảnh.
2. Table Detection with opencv2.1 Phạm vi và vấn đề cần giải quyết
Trong phần này, mình sẽ tập trung vào 1 dạng bảng biểu. Cụ thể hơn, là các bảng biểu cần có đường phân cách. Đúng vậy, vì sử dụng opencv, các đặc trưng cạnh là những yếu tố quan trọng nhất quyết định tính chính xác của thuật toán. Do đó, dù bảng có là dạng, merge hàng, merge cột thậm chí là merge cell, miễn đảm bảo có đường phân cách rõ ràng là đủ
Mô tả đơn giản, chúng ta sẽ cố gắng xác định phương trình đường thẳng của các cạnh ngang và cạnh dọc, sau đó, tính toán tọa độ giao điểm của các đường thẳng này để tìm ra tọa độ 4 góc của bảng và cells. Sau khi xác định được các cell, công việc tiếp theo liên quan đến các bài toán text detection và text recognize với các kí tự trong từng cell. Để phần trình bày được rõ ràng hơn, mình sẽ lấy một ví dụ mẫu và trình bày lần lượt các bước của thuật toán áp dụng trên ví dụ này. Oke, phần nội dung chính giờ mới thực sự bắt đầu. 2.2 Tiếp cận dưới góc nhìn của opencv
Trước tiên, hãy bắt đầu với những thao tác đầu tiên: Tiền xử lí. Như mình đã trình bày các vấn đề về chất lượng ảnh trước đó, các ảnh đầu vào thường mờ và có độ tương phản thấp. Vì vậy, bước đầu tiên, hãy tăng độ tương phản và làm rõ nét ảnh.
Tiếp đó, đưa ảnh về dạng nhị phân để chuẩn bị cho các bước tiếp theo. Hãy nhớ: ảnh nhị phân (binary image) - không phải ảnh xám (gray image)
Tiếp theo, xác định các cạnh hàng ngang bằng một hàm đơn giản cv2.getStructuringElement. Bằng việc erode và dilate các đoạn thẳng này, chúng ta có được những đường cạnh hợp lí hơn.
Sau khi có những đoạn thẳng chắp vá tạo nên những cạnh hàng ngang, tiến hành nhóm những cạnh này lại thành các cạnh chính, chúng ta sẽ thu được những đường thẳng cạnh cần thiết
Tiếp đến là những thao tác tương tự đối với các cạnh hàng dọc. Khác biệt duy nhất ở đây chỉ là kernel được sử dụng ban đầu.
Thay vì sử dụng Contour, trong bài viết này, mình đề xuất một phương án đơn giản, và khả thi hơn bao giờ hết. Trước tiên, hãy bàn về tính đơn giản, tại sao mình lại bảo nó đơn giản? Thì ở đây, ý tưởng của mình base trên các bài toán giải hệ phương trình 2 ẩn cấp tiểu học. Mà cụ thể hơn là tiến hành xác định giao điểm của những cạnh dọc và cạnh ngang này để đưa ra vị trí (cụ thể là tọa độ 4 góc) của bảng và các cells. Tiếp theo, tại sao phương án này khả thi ? Bằng việc quan tâm các giá trị đầu cuối nhắm tìm phương trình đường thẳng, phương pháp này có thể tự động fill đầy những chỗ cạnh bị đứt đoạn hoặc quá mờ. Ngoài ra, các cells cũng có thể đảm bảo 99.99% sẽ được bắt đầy đủ, không bỏ sót và được tự động sắp xếp thứ tự từ trên xuống dưới, từ trái qua phải.
Sau khi đã tính được tất cả các giao điểm của các đường thẳng, chúng ta có 1 list các tọa độ của giao điểm này. Vấn đề tiếp theo là làm sao xác định được 4 điểm nào sẽ tạo thành 1 cell. Ở đây, mình tạm sử dụng 1 logic khá đơn giản : Loang Cụ thể hơn, với mỗi giao điểm trong list giao điểm, ở đây mình giả định là (x0,y0)(x_0, y_0)
3. What's Up3.1 Text Detection + Text Recognition
Sau khi đã có được vị trí cụ thể của bảng, của các cells, chúng ta sử dụng CRAFT để detect các kí tự trong lần lượt từng cell. Về lí thuyết mạng CRAFT, mình sẽ không đi sâu, ở đây mình lựa chọn do tính đơn giản cũng như pretrained được cũng cấp sẵn của nó (lười mà hehe). Đương nhiên, để đảm bảo tính hợp lí, chúng ta cũng cần hậu xử lí sau CRAFT mà cụ thể ở đây là nhóm các text box trên cùng một hàng thành một. Phần này mình sẽ lược code đi 1 chút do code để inference CRAFT quá dài. Các bạn có thể tìm đển repo chính của CRAFT để thử nghiệm thêm: https://github.com/clovaai/CRAFT-pytorch
Sau text detection, tác vụ không thể thiếu là text recognize. Ở đây, với tài liệu Tiếng Việt, VietOCR là sự lựa chọn ưu tiên hàng đầu, đương nhiên, sự ưu tiên này cũng đến từ pretrained được cung cấp của VietOCR. Với lí do tương tự như bên CRAFT, phần này mình sẽ lược code đi 1 chút do code để inference VietOCR quá dài. Các bạn có thể tìm đển repo chính của VietOCR để thử nghiệm thêm: https://github.com/pbcquoc/vietocr (ở đây, mình sử dụng pretrained weights của model seq2seq) Ngoài ra, bạn cũng có thể tham khảo 1 bài viết khác của tác giả Bùi Quang Mạnh về OCR Tiếng Việt: Nhận dạng tiếng Việt cùng với Transformer OCR
0 3.2 Cải tiến + Mở rộngDưới đây là một số cải tiến mà mình có thể improve kết quả hơn nữa, các bạn có thể thử áp dụng thêm và so sánh kết quả.
4. ConclusionTrong bài viết này, mình đã trình bày tổng quan về Document Understanding cũng như Table Extraction. Một phương pháp Table Extraction dựa trên opencv cũng được giới thiệu kèm theo code đầy đủ (dù vẫn chưa đầy đủ hoàn toàn), đồng thời nêu ra những hưởng mở rộng có thể tiếp tục thực hiện trong tương lai. Hi vọng các bạn có hứng thú với chú đề này. Nếu thấy hay, đừng quên Upvote + Clip + Share nhiệt tình để mình có động lực hoàn thành những bài viết chất lượng hơn nha. |