Предлагаю ознакомиться с API ScreenGear.
" ScreenGear разработан исключительно для сверхбыстрой трансляции экрана, что означает, что он может захватывать кадры с вашего монитора в режиме реального времени, либо определяя область на экране компьютера, либо в полноэкранном режиме, за счет незначительной задержки. ScreenGear также легко поддерживает захват кадров с нескольких мониторов, а также поддерживает несколько серверных частей. "
Вот пример использования с сайта abhitronix.github.io/vidgear
main.py
# import required libraries
from vidgear.gears import ScreenGear
import cv2
# open video stream with default parameters
stream = ScreenGear().start()
# loop over
while True:
# read frames from stream
frame = stream.read()
# check for frame if Nonetype
if frame is None:
break
# {do something with the frame here}
# Show output window
cv2.imshow("Output Frame", frame)
# check for 'q' key if pressed
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
# close output window
cv2.destroyAllWindows()
# safely close video stream
stream.stop()