Phát hiện văn bản c ++
Nhận diện văn bản tiếng Anh là OCR (Optical Character Recognition). Chuyên dùng để đọc các ký tự trong ảnh rồi chuyển thành văn bản để giảm sức đánh máy. Trong đó, biến phổ biến nhất là nhận diện văn bản bằng Tesseract Show Cũng giống như các ứng dụng Thị giác máy tính khác, nhận dạng là bước cuối cùng. Các bạn nên xử lý cấu hình rõ ràng, dễ đọc trước khi đưa vào nhận dạng Giới thiệuTesseract là thư viện OCR nổi tiếng có độ chính xác cao hơn hẳn các thư viện khác. Tesseract could run theđộc lập hoặc tích hợp với OpenCV đều được. Nếu chạy độc lập thì Tesseract sử dụng thư viện leptonica để đọc ảnh Github của Tesseract. https. //github. com/tesseract-ocr/tesseract Data training of Tesseract. https. //github. com/tesseract-ocr/tessdata. Có sẵn tiếng Việt, tiếng Anh, tiếng Đức cho nhu cầu thông thường Bên dưới là ảnh để kiểm tra và kết quả đọc được Tải xuốngỨng dụng bên dưới được viết bằng C++ sử dụng Tesseract, giao diện Console. Các bạn tải về giải nén, copy ảnh vào thư mục vừa giải nén, sau đó chạy file exe để nhận văn bản. Chương trình sẽ tải tất cả ảnh cùng thư mục chung rồi đọc văn bản và vào cửa sổ Console. Mình có để 1 ảnh để các bạn test Có một câu nói phổ biến, "Một bức tranh đáng giá ngàn lời nói". Trong bài đăng này, chúng tôi sẽ hiểu theo nghĩa đen và cố gắng tìm các từ trong một bức tranh. Trong một bài đăng trước về Nhận dạng văn bản, chúng ta đã thảo luận về cách thức hoạt động của Tesseract và cách sử dụng nó cùng với OpenCV để phát hiện cũng như nhận dạng văn bản. Lần này, chúng ta sẽ xem xét cách tiếp cận mạnh mẽ để Phát hiện văn bản bằng OpenCV, dựa trên một bài báo gần đây. PHÍA ĐÔNG. Trình phát hiện văn bản cảnh hiệu quả và chính xác
Cần lưu ý rằng phát hiện văn bản khác với nhận dạng văn bản. Trong phát hiện văn bản, chúng tôi chỉ phát hiện các hộp giới hạn xung quanh văn bản. Nhưng, trong nhận dạng văn bản, chúng tôi thực sự tìm thấy những gì được viết trong hộp. Ví dụ: trong hình ảnh được cung cấp bên dưới, tính năng phát hiện văn bản sẽ cung cấp cho bạn hộp giới hạn xung quanh từ và tính năng nhận dạng văn bản sẽ cho bạn biết hộp có chứa từ STOP Các công cụ Nhận dạng văn bản như Tesseract yêu cầu hộp giới hạn xung quanh văn bản để có hiệu suất tốt hơn. Do đó, bộ phát hiện này có thể được sử dụng để phát hiện các hộp giới hạn trước khi thực hiện Nhận dạng văn bản Việc triển khai lại tensorflow của bài báo đã báo cáo tốc độ sau trên hình ảnh 720p (độ phân giải 1280×720) (nguồn)
Mô hình tensorflow đã được chuyển sang sử dụng với OpenCV và họ cũng đã cung cấp mã mẫu. Chúng tôi sẽ thảo luận về cách nó hoạt động từng bước. Bạn sẽ cần OpenCV >= 3. 4. 3 để chạy mã. Hãy phát hiện một số văn bản trong hình ảnh ƯU ĐÃI ĐƯỢC CHỜ NHẤT TRONG NĂM DÀNH CHO CÁC AI ĐAM MÊ LÀ ĐÂY MUA NGAY Các bước liên quan như sau
Bước 1. Tải xuống Mô hình ĐÔNGCó thể tải xuống Mô hình EAST từ liên kết dropbox này. https. //www. dropbox. com/s/r2ingd0l3zt8hxs/frozen_east_text_detection. hắc ín. gz?dl=1 Khi tệp đã được tải xuống (~85 MB), hãy giải nén tệp đó bằng cách sử dụng tar -xvzf frozen_east_text_detection.tar.gz Bạn cũng có thể trích xuất nội dung bằng Trình xem tệp của HĐH Sau khi giải nén, copy. tệp mô hình pb vào thư mục làm việc Bước 2. tải mạngChúng tôi sẽ sử dụng cv. dnn. readnet hoặc cv2. dnn. Hàm ReadNet() để tải mạng vào bộ nhớ. Nó tự động phát hiện cấu hình và khung dựa trên tên tệp được chỉ định. Trong trường hợp của chúng tôi, đó là tệp pb và do đó, nó sẽ cho rằng Mạng Tensorflow sẽ được tải C++ Net net = readNet(model); con trăn net = cv.dnn.readNet(model) Bước 3. Chuẩn bị hình ảnh đầu vàoChúng ta cần tạo một đốm màu đầu vào 4-D để cung cấp hình ảnh cho mạng. Điều này được thực hiện bằng chức năng blobFromImage Tải xuống mã Để dễ dàng làm theo hướng dẫn này, vui lòng tải xuống mã bằng cách nhấp vào nút bên dưới. Nó miễn phí. Tải xuống mã C++ blobFromImage(frame, blob, 1.0, Size(inpWidth, inpHeight), Scalar(123.68, 116.78, 103.94), true, false); con trăn blob = cv.dnn.blobFromImage(frame, 1.0, (inpWidth, inpHeight), (123.68, 116.78, 103.94), True, False) Có một vài tham số chúng ta cần chỉ định cho chức năng này. Chúng như sau
Bước 4. Chuyển tiếp quaBây giờ chúng tôi đã chuẩn bị đầu vào, chúng tôi sẽ chuyển nó qua mạng. Có hai đầu ra của mạng. Một chỉ định hình học của Hộp văn bản và cái kia chỉ định điểm tin cậy của hộp được phát hiện. Chúng được đưa ra bởi các lớp
Điều này được chỉ định trong mã như sau C++ std::vector con trăn outputLayers = [] outputLayers.append("feature_fusion/Conv_7/Sigmoid") outputLayers.append("feature_fusion/concat_3") Tiếp theo, chúng tôi nhận được đầu ra bằng cách chuyển hình ảnh đầu vào qua mạng. Như đã thảo luận trước đó, đầu ra bao gồm hai phần. điểm số và hình học C++ std::vector con trăn ________số 8 Bước 5. Xử lý đầu raNhư đã thảo luận trước đó, chúng tôi sẽ sử dụng kết quả đầu ra từ cả hai lớp ( i. e. hình học và điểm số) và giải mã vị trí của các hộp văn bản cùng với hướng của chúng. Chúng tôi có thể nhận được nhiều ứng cử viên cho một hộp văn bản. Vì vậy, chúng ta cần lọc ra các hộp văn bản đẹp nhất từ rất nhiều. Điều này được thực hiện bằng cách sử dụng Non-Maximum Suppression giải mãC++ std::vector con trăn Net net = readNet(model);0 Ngăn chặn không tối đaChúng tôi sử dụng hàm OpenCV NMSBoxes ( C++ ) hoặc NMSBoxesRotated ( Python ) để lọc ra các kết quả dương tính giả và nhận dự đoán cuối cùng C++ Net net = readNet(model);1 con trăn Net net = readNet(model);2 Kết quảĐưa ra dưới đây là một vài kết quả Như bạn có thể thấy, nó có thể phát hiện các văn bản có Nền, Phông chữ, Hướng, Kích thước, Màu sắc khác nhau. Trong cái cuối cùng, nó hoạt động khá tốt ngay cả đối với Văn bản bị biến dạng. Tuy nhiên, có một số phát hiện sai nhưng có thể nói, nhìn chung nó hoạt động rất tốt Như các ví dụ gợi ý, nó có thể được sử dụng trong nhiều ứng dụng như Phát hiện biển số, Phát hiện biển báo giao thông, phát hiện văn bản trên Thẻ ID, v.v. |