Ảnh chụp màn hình opencv python

Tôi đang thử nghiệm với python để đọc các từ và số từ ảnh chụp màn hình của MẪU, một thứ giống như bảng điểm có thể thay đổi nhiều lần trong một giây. Tôi nghĩ rằng dự án có thể được chia thành 2 phần lớn

  1. Chụp ảnh màn hình của các biểu mẫu nhiều lần trong một giây

Tôi đã có một số gợi ý sử dụng win32API để chụp màn hình nhanh hơn tại đây

  1. Đọc các từ và số từ ảnh chụp màn hình với tham chiếu của biểu mẫu trống

Đối với điều này, tôi đã có ý tưởng chung từ video youtube bên dưới https. //www. youtube. com/watch?v=cUOcY9ZpKxw điều tôi hiểu là áp dụng tesseract cho điểm/khu vực rất cụ thể trong biểu mẫu. Nhưng với phương pháp này trong phần thứ hai, tôi có linh cảm rằng thời gian thực hiện hơi chậm. [dựa trên những gì tôi thấy từ video]

Vì vậy, câu hỏi của tôi là, có cách nào nhanh chóng để đọc bảng điểm thay đổi nhiều lần trong một giây không?

Chỉnh sửa

Dưới đây là nỗ lực tốt nhất hiện tại của tôi với dự án. Tôi chỉ gửi phần thứ hai, đó là nút cổ chai hiện tại ở đây. Hình ảnh có thể được tìm thấy ở đây

Vấn đề ở đây là, thậm chí chỉ với một khung ảnh chụp màn hình, tesseract cần khoảng 3 giây để hoàn thành. Tôi đã thử sử dụng đa xử lý, nhưng có vẻ như mã của tôi không đủ sạch nên kết quả còn tệ hơn là không sử dụng

import cv2
import pytesseract
import time
import concurrent.futures
pytesseract.pytesseract.tesseract_cmd ="C:\\Program Files\\Tesseract-OCR\\tesseract.exe"

"the height of each field"
h=19

"the list of each field's area and name"
fields=[[[75,5],[130,h],"line 1"],
     [[75,5+h],[130,2*h],"line 2"],
     [[75,5+2*h],[130,3*h],"line 3"],
     [[75,5+3*h],[130,4*h],"line 4"],
     [[75,5+4*h],[130,5*h],"line 5"],
     [[75,5+5*h],[130,6*h],"line 6"],
     [[75,5+6*h],[130,7*h],"line 7"],
     [[75,5+7*h],[130,8*h],"line 8"],
     [[75,5+8*h],[130,9*h],"line 9"],
     [[75,5+9*h],[130,10*h],"line 10"]]

a = time.time[]

"loading filled forms"
img = cv2.imread["filled.jpg"] 

myData = []

"function to crop and OCR the image"
def read[field]:
    imgCrop = img[field[0][1]:field[1][1],field[0][0]:field[1][0]]
    data=pytesseract.image_to_string[imgCrop]
    return data

"use this for serial processing"
for field in fields:
    myData.append[read[field]] 
    
"use this for multi processing"
#if __name__ == '__main__':
#    with concurrent.futures.ProcessPoolExecutor[] as executor:
 #       results = executor.map[read, fields] 
    
    #for result in results:
     #   myData.append[result]

print [myData]
b = time.time[]
print[b-a]

CHỈNH SỬA 2

Có vẻ như tesseract theo mặc định, sử dụng đa xử lý và sử dụng đa xử lý theo cách thủ công sẽ chỉ cản trở tốc độ xử lý. Ngoài ra, có vẻ như OCR và nhận dạng hình ảnh, đặc biệt là về tốc độ và độ chính xác của nó vẫn đang được nghiên cứu tích cực ngay bây giờ. Vì vậy, có lẽ tôi cần đợi thêm một chút nữa. Cuối cùng, tôi sẽ cố gắng sử dụng Google Cloud Vision trong tương lai

OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính [thị giác máy tính], xử lý ảnh và máy học, và các tính năng tăng tốc GPU trong thời gian hoạt động.

OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại. Nó có giao diện C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để tính toán hiệu quả và với nhiều tập tin trung vào các ứng dụng thời gian thực. Được viết bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế của xử lý đa lõi. Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 người dùng và số lượng tải xuống vượt quá 6 triệu lần. Phạm vi sử dụng từ công nghệ tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc robot công nghệ

2. Các ứng dụng OpenCV

OpenCV đang được sử dụng rộng rãi trong các ứng dụng bao gồm

Hình ảnh chế độ xem phố Kiểm tra và giám sát Robot tự động và xe hơi tự lái Phân tích hình ảnh y tế Tìm kiếm và phục hồi hình ảnh/video Phim - cấu trúc 3D từ chuyển động Nghệ thuật sắp đặt tương tác

3. Chức năng OpenCV

Hình ảnh/video I/O, xử lý, hiển thị [core, imgproc, highgui] Phát hiện các vật thể [objdetect, features2d, nonfree] Thị giác máy tính bằng một mắt hoặc âm thanh nổi dựa trên hình học [calib3d, stitching, videotab] Chụp ảnh tính toán [ảnh

II. Thư viện và cài đặt

1. Cài đặt python

Hầu như các hệ điều hành đều hỗ trợ Python, bạn có thể cài đặt trực tuyến hoặc ngoại tuyến. Chúng ta sẽ thấy các cách biến phổ biến sau

Trên Debian [Ubuntu, Linux Mint,. ] chúng ta sử dụng

apt-get install python

Trên RedHat [CentOS, RedHat, Asianux,. ]

yum install python

Sau khi cài đặt xong, bạn cũng có thể sử dụng Python bằng cách nhập python vào cửa sổ dòng lệnh

2. Cài đặt thư viện

Chúng ta sẽ làm việc thông qua nhiều ví dụ Python ở đây. Bắt đầu với ràng buộc Python của OpenCV. Bạn sẽ cần hai thư viện chính, với một tùy chọn thứ ba. python-OpenCV, Numpy và Matplotlib. Chúng ta bắt đầu cài đặt trên Linux nhé

apt-get install python3-pip
sau đó chạy 
pip3 install numpy or apt-get install python3-numpy

Tiếp tục chạy theo lệnh

pip3 install matplotlib or apt-get install python3-matplotlib

and the end of the same as

apt-get install python-OpenCV

Có thể cài đặt theo cách này với Ubuntu 16. 4 nhé

sudo apt-get install python-matplotlib
sudo apt-get install python-opencv

Matplotlib là một tùy chọn được lựa chọn để hiển thị các khung hình từ video hoặc hình ảnh. Chúng tôi sẽ cho bạn thấy một vài ví dụ sử dụng nó ở đây. Numpy được sử dụng cho tất cả mọi thứ "số và Python. " Chúng tôi chủ yếu sử dụng chức năng mảng của Numpy. Cuối cùng, chúng ta đang sử dụng các ràng buộc mà python cụ thể có thể gọi OpenCV là python-OpenCV. Có một số hoạt động cho OpenCV mà bạn sẽ không thể làm được nếu không cài đặt đủ OpenCV [khoảng 3GB về kích thước], nhưng bạn thực sự có thể làm được một chút với cài đặt khá tối thiểu của python-OpenCV. Chúng tôi sẽ giải quyết bằng cách sử dụng cài đặt đầy đủ của OpenCV trong loạt bài này, bạn có thể cảm thấy tự làm nếu muốn, nhưng 3 mô-đun này sẽ giúp tôi bận rộn trong một thời gian. An ninh cài đặt của bạn đã thành công bằng cách chạy Python và thực thi

III. Cơ sở , thuật toán và hướng dẩn tải một bức ảnh

1. First step

Tạo 1 file với đuôi py nhé. nhập các thư viện cần thiết vào đi nào

import cv2
import matplotlib
import numpy

If you don't have any error, so they we are available to go next nhé. Đầu tiên, chúng ta nên hiểu một vài giả định cơ bản và mô hình khi nói đến phân tích hình ảnh và video. Với cách thức chỉ là về mọi máy quay video ghi lại ngày hôm nay, bản ghi thực sự là khung hình, hiển thị từng cái một, khác 30-60 lần một lần. Ở cốt lõi, tuy nhiên, chúng là khung tĩnh, giống như hình ảnh. Do đó, nhận dạng hình ảnh và phân tích video bằng cách sử dụng các phương pháp giống nhau cho hầu hết các phần. Một số điều, theo hướng sau, sẽ yêu cầu một loạt các hình ảnh [khung hình], nhưng một cái gì đó như phát hiện khuôn mặt, hoặc nhận dạng đối tượng có thể được thực hiện với gần như chính xác cùng mã. . Tiếp theo, rất nhiều phân tích hình ảnh và video đang sôi sục để đơn giản hóa các nguồn ngày càng tốt hơn. Điều này gần như luôn luôn bắt đầu với việc chuyển đổi sang màu xám, nhưng nó cũng có thể là một bộ lọc màu, độ dốc hoặc sự kết hợp của những điều này. Từ đây, chúng ta có thể thực hiện tất cả các loại phân tích và biến đổi nguồn. Nói chung, những gì xảy ra khi sự chuyển đổi được thực hiện, sau đó phân tích, thì bất kỳ lớp phủ nào mà chúng tôi muốn áp dụng đều được áp dụng trở lại nguồn ban đầu, đó là lý do tại sao bạn . Quý khi dữ liệu thực sự được xử lý ở dạng thô như thế này, tuy nhiên. Một số ví dụ về những gì chúng ta có thể làm ở mức cơ bản. Tất cả những điều này đều được thực hiện với một web cam cơ bản, không có gì đặc biệt

2. Trừ nền

Trong cảnh ứng dụng cảnh là camera tĩnh [camera tĩnh] quan sát vùng [Field of View] không thay đổi, thao tác trích xuất chuyển động [phát hiện chuyển động] từ video là thủ tục nền rất quan trọng trong nhiều ứng dụng phân tích . Mục tiêu của xử lý này là sao tách bạch được đâu là vùng chuyển động [chuyển động, tiền cảnh] đâu là nền [nền] trong vùng không gian camera đang theo dõi. Trong nhiều phép thuật thì Phép trừ nền là một nhóm các giải pháp có thể giúp giải quyết vấn đề đang được sử dụng phổ biến này. Ý tưởng chính của phép trừ nền trước tiên là xác định mô hình nền [một hình, một tệp tham số, hay một công thức có khả năng mô tả nền] qua từng khung hình [frame] trong chuỗi các khung hình tuần tự của nó. . Quá trình này có thể đơn giản được mô tả bằng hình minh họa bên dưới

3. lọc màu

Continue to allow filter color. Xem ví dụ nhé.

4. Phát hiện cạnh

Sử dụng thuật toán cho từ 1 bức ảnh.

to give out results

5. Tính năng đối sánh đối tượng để nhận định dạng đối tượng

Ảnh minh họa.

Trong trường hợp phát cạnh, màu đen tương ứng với các giá trị pixel của [0,0,0] và các đường trắng là [255,255,255]. Mỗi bức ảnh và khung hình từ video được chia nhỏ thành các điểm ảnh như thế này và chúng ta có thể suy luận, như trong trường hợp phát triển bên cạnh, ở đó các điểm ảnh màu trắng được dựa vào đó để so sánh với các điểm ảnh màu trắng. . Sau đó, nếu muốn xem hình ảnh ban đầu với các cạnh được đánh dấu, chúng ta sẽ lưu ý tất cả các vị trí tọa độ của các điểm ảnh có màu trắng, và sau đó chúng ta sẽ đánh dấu các vị trí này trên nguồn hình ảnh . Đến cuối hướng dẫn này, bạn sẽ có thể thực hiện tất cả những điều trên và có thể đào tạo máy tính của bạn để nhận ra bất kỳ đối tượng nào bạn muốn. Giống như tôi đã nói ban đầu mặc dù, bước đầu tiên thường là để chuyển đổi sang quy mô xám. Trước đó, chúng ta cần tải hình ảnh. Vì vậy, chúng ta hãy làm nó. Trong toàn bộ hướng dẫn này, tôi rất khuyến khích bạn sử dụng dữ liệu của riêng bạn để chơi với. Nếu bạn có một webcam, hãy chắc chắn sử dụng nó, nếu không tìm thấy một hình ảnh mà bạn nghĩ sẽ vui vẻ khi làm việc với nó. Nếu bạn gặp sự cố, đây là hình ảnh của đồng hồ.

Tiếp tục phần mã. Thêm đoạn mã sau nhé

________số 8

Đầu tiên, chúng tôi đang nhập một vài thứ, ba mô-đun tôi đã có tất cả những gì bạn cài đặt. Tiếp theo, chúng ta định nghĩa img là cv2. read [tep hinh, parms]. Mặc định sẽ là IMREAD_COLOR, màu không có kênh alpha. If you don't Quen thuộc, alpha is level of deuture [đối diện với mức độ trong suốt]. Nếu bạn muốn giữ lại kênh alpha, bạn cũng có thể sử dụng IMREAD_UNCHANGED. Nhiều lần, bạn sẽ được đọc trong phiên bản màu, và sau đó chuyển nó sang màu xám. Nếu bạn không có webcam, đây sẽ là phương pháp chính bạn sẽ sử dụng trong suốt hướng dẫn này, hãy tải xuống một hình ảnh. Thay vì sử dụng IMREAD_COLOR. , bạn cũng có thể sử dụng các con số đơn giản. Bạn nên làm quen với cả hai lựa chọn, vì vậy bạn hiểu người đó đang làm gì. Đối với các tham số thứ hai, bạn có thể sử dụng -1, 0 hoặc 1. Color is 1, grayscale is 0, and not change is -1. Vì vậy, đối với màu xám, người ta có thể làm img = cv2. imread ['xem. jpg', 0] Sau khi tải, chúng tôi sử dụng cv2. imshow[title, image] to display image. Từ đây, chúng ta sử dụng cv2. waitKey [0] để đợi cho đến khi bất kỳ phím nào được nhấn. Sau khi đã hoàn tất, chúng tôi sử dụng cv2. destroyAllWindows[] to close all. Như đã đề cập trước đây, bạn cũng có thể hiển thị hình ảnh bằng Matplotlib, đây là một số mã để bạn có thể làm điều đó

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread['watch.jpg',cv2.IMREAD_GRAYSCALE]

plt.imshow[img, cmap = 'gray', interpolation = 'bicubic']
plt.xticks[[]], plt.yticks[[]]  # to hide tick values on X and Y axis
plt.plot[[200,300,400],[100,200,300],'c', linewidth=5]
plt.show[]

Lưu ý rằng bạn có thể vẽ các đường thẳng, giống như bạn có thể hoặc có thể với bất kỳ đồ thị Matplotlib nào khác sử dụng vị trí pixel là tọa độ, tại đây. Tuy nhiên, nếu bạn muốn vẽ trên hình ảnh của mình, Matplotlib không cần thiết. OpenCV cung cấp các phương pháp tuyệt vời cho công việc này. Khi bạn đã hoàn tất việc sửa đổi, bạn có thể lưu lại, như sau

apt-get install python
0

Bắt ảnh vào OpenCV có vẻ đủ dễ dàng, làm thế nào để tải xuống các nguồn video dữ liệu?

IV. Tài liệu tham khảo

Những bài viết trong seri mình tìm hiểu và dịch ở những tài liệu này. Nên các bạn có thể tham khảo ý kiến ​​chính xác hơn ở link đính kèm bên dưới. Thank you many

Chủ Đề