我试图在使用 mss 和 opencv 播放网站时记录屏幕,但我不希望程序使用当前屏幕。我想把它们放在第二个桌面上播放,比如下图中的桌面 2 macos 有 4 个桌面设置
所以我可以在桌面 1 中工作而不会受到任何干扰。
在centos 7上设置docker 1.12.使用带有以下命令行的systemd启动docker(根据systemctl status docker):
/usr/bin/dockerd -D --tls=false --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://10.10.2.1:2376
Run Code Online (Sandbox Code Playgroud)
然后我想检查本地机器,设置以下环境变量:
DOCKER_HOST=tcp://10.10.2.1:2376
DOCKER_TLS_VERIFY=0
DOCKER_MACHINE_NAME=default
Run Code Online (Sandbox Code Playgroud)
然后使用docker命令行工具进行检查:
docker --tls=false --tlsverify=false images
Run Code Online (Sandbox Code Playgroud)
结果是:
尝试连接时发生错误:获取https://10.10.2.1:2376/v1.24/images/json:http:服务器向HTTPS客户端发出HTTP响应
快速检查:
curl http://10.10.2.1:2376/images/json
Run Code Online (Sandbox Code Playgroud)
给出图像信息.
现在:我假设服务器确实响应了http(这是有意的),但是如何让客户端也与http对话?
我将 MSS 与 pytesseract 结合使用,尝试在屏幕上读取以确定正在监视的区域中的字符串。我的代码如下:
import Image
import pytesseract
import cv2
import os
import mss
import numpy as np
with mss.mss() as sct:
mon = {'top': 0, 'left': 0, 'width': 150, 'height': 150}
im = sct.grab(mon)
im = np.asarray(im)
im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
#im_gray = plt.imshow(im_gray, interpolation='nearest')
cv2.imwrite("test.png", im_gray)
#cur_dir = os.getcwd()
text = pytesseract.image_to_string(Image.open(im_gray))
print(text)
cv2.imshow("Image", im)
cv2.imshow("Output", im_gray)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
我返回以下错误: AttributeError: 'numpy.ndarray' object has no attribute 'read'
我还尝试使用 pyplot 将其转换回图像,如代码示例中的注释行所示。然而,这会打印回错误: TypeError: img is not a numpy array, isn't …
我想要一个python脚本,它可以在不立即将其直接保存到磁盘的情况下截取屏幕截图。基本上是否有一个带有函数的模块,该函数返回原始字节,然后我可以自己手动将其写入文件?
import some_screenshot_module
raw_data = some_screenshot_module.return_raw_screenshot_bytes()
f = open('screenshot.png','wb')
f.write(raw_data)
f.close()
Run Code Online (Sandbox Code Playgroud)
我已经检查了 mss、pyscreenshot 和 PIL,但我找不到我需要的东西。我找到了一个看起来像我要找的函数,叫做 frombytes。但是,在从 frombytes 函数检索字节并将其保存到文件中后,我无法将其视为 .BMP、.PNG、.JPG。是否有一个函数可以返回我可以自己保存到文件中的原始字节,或者可能是一个具有类似功能的模块?
为了解释我的问题,这是极简主义的main.cc:
#include "./main.h"
int main(int argc, char *argv[]) {
char *buffer = new char[12];
char *output = new char[12];
FILE *input = fopen("file.test", "r");
while ( read_stdin(buffer, 12, input, output) ) {
// Operations on output
// (...)
}
fclose(input);
delete[] output; output = 0;
delete[] buffer; buffer = 0;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和main.h:
#include <cstdio>
#include <cstring>
inline bool read_stdin(char *tmp_buffer, const size_t &len, FILE *input, char *&output) {
output = fgets(tmp_buffer, len, input);
if ( output != NULL …Run Code Online (Sandbox Code Playgroud)