异步编码截图
This commit is contained in:
parent
dcd08ab559
commit
dbde9508cb
4 changed files with 11 additions and 17 deletions
|
@ -20,7 +20,7 @@ from mower.utils.device.simulator import restart_simulator
|
||||||
from mower.utils.device.simulator.MuMu12_external_renderer_ipc import (
|
from mower.utils.device.simulator.MuMu12_external_renderer_ipc import (
|
||||||
MuMu12ExternalRendererIPC,
|
MuMu12ExternalRendererIPC,
|
||||||
)
|
)
|
||||||
from mower.utils.image import bytes2img, img2bytes
|
from mower.utils.image import bytes2img
|
||||||
from mower.utils.log import logger, save_screenshot
|
from mower.utils.log import logger, save_screenshot
|
||||||
from mower.utils.network import get_new_port, is_port_in_use
|
from mower.utils.network import get_new_port, is_port_in_use
|
||||||
|
|
||||||
|
@ -291,9 +291,6 @@ class Device:
|
||||||
)
|
)
|
||||||
img = cv2.cvtColor(array, cv2.COLOR_RGBA2RGB)
|
img = cv2.cvtColor(array, cv2.COLOR_RGBA2RGB)
|
||||||
|
|
||||||
screencap = img2bytes(img)
|
|
||||||
save_screenshot(screencap)
|
|
||||||
|
|
||||||
stop_time = datetime.now()
|
stop_time = datetime.now()
|
||||||
config.screenshot_time = stop_time
|
config.screenshot_time = stop_time
|
||||||
interval = (stop_time - start_time).total_seconds() * 1000
|
interval = (stop_time - start_time).total_seconds() * 1000
|
||||||
|
@ -309,6 +306,7 @@ class Device:
|
||||||
else:
|
else:
|
||||||
config.screenshot_count += 1
|
config.screenshot_count += 1
|
||||||
|
|
||||||
|
save_screenshot(img)
|
||||||
return img
|
return img
|
||||||
|
|
||||||
def current_focus(self) -> str:
|
def current_focus(self) -> str:
|
||||||
|
|
|
@ -7,7 +7,7 @@ import numpy as np
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from mower.utils import typealias as tp
|
from mower.utils import typealias as tp
|
||||||
from mower.utils.log import logger, save_screenshot
|
from mower.utils.log import logger
|
||||||
from mower.utils.path import get_path
|
from mower.utils.path import get_path
|
||||||
|
|
||||||
|
|
||||||
|
@ -190,11 +190,6 @@ def cropimg(img: tp.Image, scope: tp.Scope) -> tp.Image:
|
||||||
return img[scope2slice(scope)]
|
return img[scope2slice(scope)]
|
||||||
|
|
||||||
|
|
||||||
def saveimg(img: tp.Image, folder):
|
|
||||||
del folder # 兼容2024.05旧版接口
|
|
||||||
save_screenshot(img2bytes(img))
|
|
||||||
|
|
||||||
|
|
||||||
def cmatch(
|
def cmatch(
|
||||||
img1: tp.Image, img2: tp.Image, thresh: int = 10, draw: bool = False
|
img1: tp.Image, img2: tp.Image, thresh: int = 10, draw: bool = False
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
|
|
@ -12,6 +12,7 @@ from threading import Thread
|
||||||
import colorlog
|
import colorlog
|
||||||
|
|
||||||
from mower.utils import config
|
from mower.utils import config
|
||||||
|
from mower.utils import typealias as tp
|
||||||
from mower.utils.path import get_path
|
from mower.utils.path import get_path
|
||||||
from mower.utils.traceback import log_debug, log_info
|
from mower.utils.traceback import log_debug, log_info
|
||||||
|
|
||||||
|
@ -112,6 +113,8 @@ def screenshot_cleanup():
|
||||||
|
|
||||||
|
|
||||||
def screenshot_worker():
|
def screenshot_worker():
|
||||||
|
from mower.utils.image import img2bytes
|
||||||
|
|
||||||
screenshot_cleanup()
|
screenshot_cleanup()
|
||||||
while True:
|
while True:
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
@ -119,13 +122,13 @@ def screenshot_worker():
|
||||||
screenshot_cleanup()
|
screenshot_cleanup()
|
||||||
img, filename = screenshot_queue.get()
|
img, filename = screenshot_queue.get()
|
||||||
with screenshot_folder.joinpath(filename).open("wb") as f:
|
with screenshot_folder.joinpath(filename).open("wb") as f:
|
||||||
f.write(img)
|
f.write(img2bytes(img))
|
||||||
|
|
||||||
|
|
||||||
Thread(target=screenshot_worker, daemon=True).start()
|
Thread(target=screenshot_worker, daemon=True).start()
|
||||||
|
|
||||||
|
|
||||||
def save_screenshot(img: bytes) -> None:
|
def save_screenshot(img: tp.Image) -> None:
|
||||||
filename = f"{time.time_ns()}.jpg"
|
filename = f"{time.time_ns()}.jpg"
|
||||||
logger.debug(filename)
|
logger.debug(filename)
|
||||||
screenshot_queue.put((img, filename))
|
screenshot_queue.put((img, filename))
|
||||||
|
|
|
@ -449,14 +449,12 @@ def test_custom_screenshot():
|
||||||
shell=True,
|
shell=True,
|
||||||
creationflags=subprocess.CREATE_NO_WINDOW if __system__ == "windows" else 0,
|
creationflags=subprocess.CREATE_NO_WINDOW if __system__ == "windows" else 0,
|
||||||
)
|
)
|
||||||
end = time.time()
|
|
||||||
elapsed = int((end - start) * 1000)
|
|
||||||
|
|
||||||
data = np.frombuffer(data, np.uint8)
|
data = np.frombuffer(data, np.uint8)
|
||||||
data = cv2.imdecode(data, cv2.IMREAD_COLOR)
|
data = cv2.imdecode(data, cv2.IMREAD_COLOR)
|
||||||
|
elapsed = int((time.time() - start) * 1000)
|
||||||
|
|
||||||
_, data = cv2.imencode(".jpg", data, [int(cv2.IMWRITE_JPEG_QUALITY), 75])
|
_, data = cv2.imencode(".jpg", data, [int(cv2.IMWRITE_JPEG_QUALITY), 75])
|
||||||
data = base64.b64encode(data)
|
data = base64.b64encode(data).decode("ascii")
|
||||||
data = data.decode("ascii")
|
|
||||||
|
|
||||||
return {"elapsed": elapsed, "screenshot": data}
|
return {"elapsed": elapsed, "screenshot": data}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue